しかしながら、平均画素法は、他のアルゴリズムに比べて高画質である一方で、一般的に処理速度が遅く、特に、最小公倍数を用いる上記手法によって平均画素法を実行した場合には、縮小率の値によっては最小公倍数(元画像が拡大される画像サイズ)が大きくなりすぎて、処理不能に陥ることがあるという問題点があった。
また、元画像の画像サイズを拡大することなく、縮小画像に対応する元画像部分に対する画素値の平均値を得るという手法によって平均画素法を実行した場合(上記した図13のフローチャートに対応する処理)には、元画像の画像サイズを拡大する場合に比べて処理速度は向上するものの、ニアレストレイバー法やバイリニア法などの他のアルゴリズムを用いた縮小時の処理速度と比べると遅く、さらなる処理速度の向上が望まれる。
その原因としては、図13におけるS1305において、浮動小数演算が行われるためであると考えられる。図12に示した例を用いて具体的に説明すると、画像Q’0に対応する画素P’1部分を、画素全体を(1−t):tの比で分けた(1−t)に相当する部分であるとすると、図13におけるS1305では、{1×P’0+(1−t)×P’1}/{1+(1−t)}という演算が行われて、画素Q’0の画素値(平均画素値)が計算される。ここで(1−t)は小数であるので、浮動小数演算が行われ、その結果として、演算処理の速度向上に限界が生じると考えられる。
本発明は、上述した問題点を解決するためになされたものであり、高画質な縮小画像を得られる平均画素法を、従来に比べて高速な処理速度で実行可能な画像処理プログラム及び画像処理装置を提供することを目的としている。
この目的を達成するために、態様1の画像処理プログラムは、画素数(ix×iy)からなる略矩形の元画像を所定の縮小率で縮小し、画素数(ox×oy)からなる略矩形の出力画像を得るために演算装置に実行させるプログラムであって、前記縮小率を取得する縮小率取得ステップと、前記元画像を構成する各画素を(nDev×nDev)(nDevは2以上の整数)個の分割ブロックに分割するための分割数nDevを取得する分割数取得ステップと、前記出力画像の各画素毎に、該出力画像の1画素に対応する整数個の前記分割ブロックの数を、前記縮小率取得ステップにより取得された縮小率に基づいて計算する処理ブロック数演算ステップと、前記出力画像の各画素毎に、前記処理ブロック数演算ステップにより求められた数の分割ブロックに対応する前記元画像の領域の平均画素値を計算する平均画素値演算ステップとを備えている。
態様2の画像処理プログラムは、態様1の画像処理プログラムにおいて、前記処理ブロック数演算ステップは、前記縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の前記分割ブロック数として取り扱う。
態様3の画像処理プログラムは、態様1又は2の画像処理プログラムにおいて、前記処理ブロック数演算ステップは、前記出力画像における1の画素に対応する前記分割ブロックの数を計算する際に、前記平均画素値演算ステップにおいて既に使用された前記分割ブロックに隣接する前記分割ブロックを始点として、前記出力画像の1画素に対応する前記分割ブロックの数を計算する。
態様4の画像処理プログラムは、態様1から3のいずれかの画像処理プログラムにおいて、前記平均画素値演算ステップの実行前に、前記出力画像の各画素毎に、その主走査方向を、(1a)前記元画像において未処理部分を残す画素における該未処理部分に相当するx1個(x1は、0以上かつnDev未満の整数)の前記分割ブロックからなる領域と、(1b)前記元画像において、前記領域(1a)に隣接し、完全な画素をN個(Nは1以上の整数)並べてなる領域と、(1c)前記元画像において、前記領域(1b)に隣接し、1画素に満たないx2個(x2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分する主走査方向区分ステップを備え、前記平均画素値演算ステップは、前記主走査方向区分ステップにより区分された各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算ステップにより求められた出力画像の1画素に対応する前記分割ブロックの数で割ることによって求める。
態様5の画像処理プログラムは、態様4の画像処理プログラムにおいて、前記領域(1a)を含む画素の主走査方向における画素位置を計算する主走査方向画素位置計算ステップを備えている。
態様6の画像処理プログラムは、態様1から5のいずれかの画像処理プログラムにおいて、前記平均画素値演算ステップの実行前に、前記出力画像の各画素毎に、その副走査方向を、(2a)前記元画像において未処理部分を残す画素における該未処理部分に相当するy1個(y1は、0以上かつnDev未満の整数)の前記分割ブロックからなる領域と、(2b)前記元画像において、前記領域(2a)に隣接し、完全な画素をM個(Mは1以上の整数)並べてなる領域と、(2c)前記元画像において、前記領域(2b)に隣接し、1画素に満たないy2個(y2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分する副走査方向区分ステップを備え、
前記平均画素値演算ステップは、前記副走査方向区分ステップにより区分された各領域毎、又は、前記副走査方向区分ステップと前記主走査方向区分ステップとによる区分の結果として生じる各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算ステップにより求められた出力画像の1画素に対応する前記分割ブロックの数で割ることによって求める。
態様7の画像処理プログラムは、態様6の画像処理プログラムにおいて、前記領域(2a)を含む画素の副走査方向における画素位置を計算する副走査方向画素位置計算ステップを備えている。
態様8の画像処理プログラムは、態様1から7のいずれかの画像処理プログラムにおいて、前記入力画素の画素数(ix×iy)の値を取得する入力画像サイズ取得ステップと、前記出力画像の画素数(ox×oy)の値を入力する出力画像サイズ入力ステップとを備え、前記縮小率取得ステップは、前記入力画像サイズ取得ステップにより取得された前記入力画像の画素数(ix×iy)の値と、出力画像サイズ入力ステップにより入力された前記出力画像の画素数(ox×oy)の値とから、縮小率を取得する。
態様9の画像処理プログラムは、態様1から8のいずれかの画像処理プログラムにおいて、前記入力画素の画素数(ix×iy)から画素数(ox×oy)の前記出力画像を得るための縮小率を入力する縮小率入力ステップを備え、前記縮小率取得ステップは、前記縮小率入力ステップにより入力された縮小率を取得する。
態様10の画像処理装置は、画素数(ix×iy)からなる略矩形の元画像を入力する入力手段と、その入力手段から入力された元画像を所定の縮小率で縮小し、画素数(ox×oy)からなる略矩形の出力画像を得る縮小手段を備えたものであって、前記縮小手段は、前記縮小率を取得する縮小率取得手段と、前記元画像を構成する各画素を(nDev×nDev)(nDevは2以上の整数)個の分割ブロックに分割するための分割数nDevを取得する分割数取得手段と、前記出力画像の各画素毎に、該出力画像の1画素に対応する整数個の前記分割ブロックの数を、前記縮小率取得手段より取得された縮小率に基づいて計算する処理ブロック数演算手段と、前記出力画像の各画素毎に、前記処理ブロック数演算手段より求められた数の分割ブロックに対応する前記元画像の領域の平均画素値を計算する平均画素値演算手段とを含む。
態様11の画像処理装置は、態様10の画像処理装置において、前記処理ブロック数演算手段は、前記縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の前記分割ブロック数として取り扱う。
態様12の画像処理装置は、態様10又は11の画像処理装置において、前記処理ブロック数演算手段は、前記出力画像における1の画素に対応する前記分割ブロックの数を計算する際に、前記平均画素値演算手段において既に使用された前記分割ブロックに隣接する前記分割ブロックを始点として、前記出力画像の1画素に対応する前記分割ブロックの数を計算する。
態様13の画像処理装置は、態様10から12のいずれかの画像処理装置において、前記平均画素値演算手段の前に、前記出力画像の各画素毎に、その主走査方向を、(1a)前記元画像において未処理部分を残す画素における該未処理部分に相当するx1個(x1は、0以上かつnDev未満の整数)の前記分割ブロックからなる領域と、(1b)前記元画像において、前記領域(1a)に隣接し、完全な画素をN個(Nは1以上の整数)並べてなる領域と、(1c)前記元画像において、前記領域(1b)に隣接し、1画素に満たないx2個(x2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分する主走査方向区分手段を備え、前記平均画素値演算手段は、前記主走査方向区分手段により区分された各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算手段により求められた出力画像の1画素に対応する前記分割ブロックの数で割ることによって求める。
態様14の画像処理装置は、態様10から13のいずれかの画像処理装置において、前記平均画素値演算手段の前に、前記出力画像の各画素毎に、その副走査方向を、(2a)前記元画像において未処理部分を残す画素における該未処理部分に相当するy1個(y1は、0以上かつnDev未満の整数)の前記分割ブロックからなる領域と、(2b)前記元画像において、前記領域(2a)に隣接し、完全な画素をN個(Nは1以上の整数)並べてなる領域と、(2c)前記元画像において、前記領域(2b)に隣接し、1画素に満たないy2個(y2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分する副走査方向区分手段を備え、前記平均画素値演算手段は、前記副走査方向区分手段により区分された各領域毎、又は、前記副走査方向区分手段と前記主走査方向区分手段とによる区分の結果として生じる各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算手段により求められた出力画像の1画素に対応する前記分割ブロックの数で割ることによって求める。
態様15の画像処理装置は、態様10から14のいずれかの画像処理装置において、前記入力手段から入力された入力画素の画素数(ix×iy)の値を取得する入力画像サイズ取得手段と、前記出力画像の画素数(ox×oy)の値を入力する出力画像サイズ入力手段とを備え、前記縮小率取得手段は、前記入力画像サイズ取得手段により取得された前記入力画像の画素数(ix×iy)の値と、出力画像サイズ入力手段により入力された前記出力画像の画素数(ox×oy)の値とから、縮小率を取得する。
態様16の画像処理装置は、態様10から15のいずれかの画像処理装置において、前記入力画素の画素数(ix×iy)から画素数(ox×oy)の前記出力画像を得るための縮小率を入力する縮小率入力手段を備え、前記縮小率取得手段は、前記縮小率入力手段により入力された縮小率を取得する。
態様1の画像処理プログラムによれば、画素数(ix×iy)からなる略矩形の元画像を画素数(ox×oy)からなる略矩形の出力画像とするための縮小率が、縮小率取得ステップを演算装置に実行させることによって取得され、その一方で、分割数取得ステップを演算装置に実行させることにより、元画像を構成する各画素を(nDev×nDev)(nDevは2以上の整数)個の分割ブロックに分割するための分割数nDevが取得される。
次いで、処理ブロック数演算ステップを演算装置に実行させることによって、出力画像の1画素に対応する整数個の分割ブロックの数が、縮小率取得ステップの実行結果として取得された縮小率に基づいて、該出力画像の各画素毎に計算される。
次に、平均画素値演算ステップを演算装置に実行させることによって、処理ブロック数演算ステップの実行結果として求められた数の分割ブロックに対応する元画像領域の平均画素値が、出力画像の各画素毎に計算される。
よって、元画像をnDev個に分割することによって生じた分割ブロックを単位として、縮小画像(出力画像)の1画素における平均画素値を算出するので、縮小率に応じて生じる小数を浮動小数演算によって演算するのではなく、整数演算によって平均画素値を得ることができる。その結果、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。また、整数演算によって平均画素値を算出できるので、組み込み系への実装に適しているという効果がある。
また、元画像の画像サイズを、縮小画像の画像サイズとの最小公倍数のサイズに拡大することなく、縮小画像を得ることができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
態様2の画像処理プログラムによれば、態様1の画像処理プログラムの奏する効果に加えて、処理ブロック数演算ステップでは、縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の分割ブロック数として取り扱う。
よって、小数点以下が切り捨てられることにより1個の分割ブロックを単位として平均画素値の演算が行われる。その結果として、平均画素値を整数演算によって算出することができるので、結果として、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
態様3の画像処理プログラムによれば、態様1又は2の画像処理プログラムの奏する効果に加えて、処理ブロック数演算ステップでは、出力画像における1の画素に対応する分割ブロックの数を計算する際に、平均画素値演算ステップの実行によって既に使用された分割ブロックに隣接する分割ブロックを始点として、出力画像の1画素に対応する分割ブロックの数の計算を行う。
よって、元画像に含まれる全ての画素情報が縮小画像(出力画像)を得るために用いられることになる。従って、縮小に伴う画質劣化を抑制でき、高画質な出力画像が得られるという効果がある。
態様4の画像処理プログラムによれば、態様1から3のいずれかの画像処理プログラムの奏する効果に加えて、平均画素値演算ステップの実行前に、主走査方向区分ステップを演算装置に実行させることによって、出力画像の各画素毎に、その各画素の主走査方向が、(1a)元画像において未処理部分を残す画素における該未処理部分に相当するx1個(x1は、0以上かつnDev未満の整数)の分割ブロックからなる領域と、(1b)元画像において、領域(1a)に隣接し、完全な画素をN個(Nは1以上の整数)並べてなる領域と、(1c)元画像において、領域(1b)に隣接し、1画素に満たないx2個(x2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分される。
平均画素値演算ステップでは、主走査方向区分ステップの実行結果として区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算ステップの実行結果として求められた出力画像の1画素に対応する分割ブロックの数で割る。
よって、出力画像の1画素における主走査方向を、N個の完全な元画像の画素から構成される領域(1b)と、その両側に隣接する1画素に満たない元画像の領域(1a,1c)とを区分することによって、1画素に満たない元画像の領域(1a,1c)に含まれる分割ブロック数を容易に算出でき、結果として、平均画素値を容易に算出できるという効果がある。
態様5の画像処理プログラムによれば、態様4の画像処理プログラムの奏する効果に加えて、主走査方向画素位置計算ステップを演算装置に実行させることによって、領域(1a)を含む画素の主走査方向における画素位置が計算される。
よって、領域(1a)を含む画素の主走査方向における画素位置が計算された結果として、その領域(1a)を含む画素の主走査方向に隣接する領域(1b)の最初の画素の画素位置と、領域(1b)に含まれる画素数から領域(1c)を含む画素の主走査方向における画素位置とを容易に求めることができる。その結果として、出力画像の1画素が、1画素に満たない元画像の領域(1a)及び領域(1c)を含む場合においても、平均画素値を容易に算出できるという効果がある。
態様6の画像処理プログラムによれば、態様1から5のいずれかの画像処理プログラムの奏する効果に加えて、平均画素値演算ステップの実行前に、副走査方向区分ステップを演算装置に実行させることによって、出力画像の各画素毎に、その各画素の副走査方向が、(2a)元画像において未処理部分を残す画素における該未処理部分に相当するy1個(y1は、0以上かつnDev未満の整数)の分割ブロックからなる領域と、(2b)元画像において、領域(2a)に隣接し、完全な画素をM個(Mは1以上の整数)並べてなる領域と、(2c)元画像において、領域(2b)に隣接し、1画素に満たないy2個(y2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分される。
平均画素値演算ステップでは、副走査方向区分ステップの実行結果として区分された各領域毎、又は、副走査方向区分ステップ及び主走査方向区分ステップの実行結果として区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算ステップの実行結果として求められた出力画像の1画素に対応する分割ブロックの数で割る。
よって、出力画像の1画素における副走査方向を、M個の完全な元画像の画素から構成される領域(2b)と、その両側に隣接する1画素に満たない元画像の領域(2a,2c)とを区分することによって、画素に満たない元画像の領域(2a,2c)に含まれる分割ブロック数を容易に算出でき、結果として、平均画素値を容易に算出できるという効果がある。
態様7の画像処理プログラムによれば、態様6の画像処理プログラムの奏する効果に加えて、副走査方向画素位置計算ステップを演算装置に実行させることによって、領域(2a)を含む画素の副走査方向における画素位置が計算される。
よって、領域(2a)を含む画素の副走査方向における画素位置が計算された結果として、その領域(2a)を含む画素の副走査方向に隣接する領域(2b)の最初の画素の画素位置と、領域(2b)に含まれる画素数から領域(2c)を含む画素の副走査方向における画素位置とを容易に求めることができる。その結果として、出力画像の1画素が、1画素に満たない元画像の領域(2a)及び領域(2c)を含む場合においても、平均画素値を容易に算出できるという効果がある。
態様8の画像処理プログラムによれば、態様1から7のいずれかの画像処理プログラムの奏する効果に加えて、縮小率取得ステップでは、入力画像サイズ取得ステップの実行結果として取得された入力画像の画素数(ix×iy)の値と、出力画像サイズ入力ステップの実行結果として入力された出力画像の画素数(ox×oy)の値とから、縮小率を取得する。
よって、入力された出力画像サイズ(出力画像の画素数)に応じた縮小率で入力画像を縮小することができるという効果がある。なお、「縮小画像サイズ入力ステップによって入力される出力画像の画素数」は、ユーザによって指定された出力画像サイズ(出力画像の画素数)であってもよいし、条件(印刷媒体の大きさなど)に応じて自動的に決定された出力画像サイズであってもよい。
態様9の画像処理プログラムによれば、態様1から8のいずれかの画像処理プログラムの奏する効果に加えて、縮小率取得ステップでは、縮小率入力ステップの実行結果として入力された縮小率を取得する。なお、「縮小率入力ステップの実行結果として入力される縮小率」とは、画素数(ix×iy)の入力画像から画素数(ox×oy)の出力画像を得るための縮小率、即ち、ox/ix及び/又はoy/iyの値である。
よって、入力された縮小率で入力画像を縮小することができるという効果がある。なお、「縮小率入力ステップによって入力される縮小率」は、ユーザによって指定された所望の縮小率であってもよいし、条件(印刷媒体の大きさなど)に応じて自動的に決定された縮小率であってもよい。
態様10の画像処理装置によれば、入力手段から入力された画素数(ix×iy)からなる略矩形の元画像が、縮小手段により、所定の縮小率で縮小されて画素数(ox×oy)からなる略矩形の出力画像とされる。
ここで、該縮小手段では、画素数(ix×iy)からなる元画像を画素数(ox×oy)からなる出力画像とするための縮小率が縮小率取得手段により取得され、その一方で、分割数取得手段により、元画像を構成する各画素を(nDev×nDev)(nDevは2以上の整数)個の分割ブロックに分割するための分割数nDevが取得される。
また、該縮小手段では、縮小率取得手段及び分割数取得手段の後、処理ブロック数演算手段により、出力画像の1画素に対応する整数個の分割ブロックの数が、縮小率取得手段により得られた縮小率に基づいて、該出力画像の各画素毎に計算され、さらに、平均画素値演算手段により、処理ブロック数演算手段により求められた数の分割ブロックに対応する元画像領域の平均画素値が、出力画像の各画素毎に計算される。
よって、元画像をnDev個に分割することによって生じた分割ブロックを単位として、縮小画像(出力画像)の1画素における平均画素値を算出するので、縮小率に応じて生じる小数を浮動小数演算によって演算するのではなく、整数演算によって平均画素値を得ることができる。その結果、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。また、整数演算によって平均画素値を算出できるので、組み込み系への実装に適しているという効果がある。
また、元画像の画像サイズを、縮小画像の画像サイズとの最小公倍数のサイズに拡大することなく、縮小画像を得ることができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
態様11の画像処理装置によれば、態様10の画像処理装置の奏する効果に加えて、処理ブロック数演算手段では、縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の分割ブロック数として取り扱う。
よって、小数点以下が切り捨てられることにより1個の分割ブロックを単位として平均画素値の演算が行われる。その結果として、平均画素値を整数演算によって算出することができるので、結果として、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
態様12の画像処理装置によれば、態様10又は11の画像処理装置の奏する効果に加えて、処理ブロック数演算手段では、出力画像における1の画素に対応する分割ブロックの数を計算する際に、平均画素値演算手段によって既に使用された分割ブロックに隣接する分割ブロックを始点として、出力画像の1画素に対応する分割ブロックの数の計算を行う。
よって、元画像に含まれる全ての画素情報が縮小画像(出力画像)を得るために用いられることになる。従って、縮小に伴う画質劣化を抑制でき、高画質な出力画像が得られるという効果がある。
態様13の画像処理装置によれば、態様10から12のいずれかの画像処理装置の奏する効果に加えて、平均画素値演算手段の前に、主走査方向区分手段によって、出力画像の各画素毎に、その各画素の主走査方向が、(1a)元画像において未処理部分を残す画素における該未処理部分に相当するx1個(x1は、0以上かつnDev未満の整数)の分割ブロックからなる領域と、(1b)元画像において、領域(1a)に隣接し、完全な画素をN個(Nは1以上の整数)並べてなる領域と、(1c)元画像において、領域(1b)に隣接し、1画素に満たないx2個(x2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分される。
平均画素値演算手段では、主走査方向区分手段により区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算手段により求められた出力画像の1画素に対応する分割ブロックの数で割る。
よって、出力画像の1画素における主走査方向を、N個の完全な元画像の画素から構成される領域(1b)と、その両側に隣接する1画素に満たない元画像の領域(1a,1c)とを区分することによって、領域(1c)に含まれる分割ブロックの数に基づいて、出力画像において次に処理される画素における領域(1a)含まれる分割ブロックの数を容易に求めることができるという効果がある。
態様14の画像処理装置によれば、態様10から13のいずれかの画像処理装置の奏する効果に加えて、平均画素値演算手段の前に、副走査方向区分手段によって、出力画像の各画素毎に、その各画素の副走査方向が、(2a)元画像において未処理部分を残す画素における該未処理部分に相当するy1個(y1は、0以上かつnDev未満の整数)の分割ブロックからなる領域と、(2b)元画像において、領域(2a)に隣接し、完全な画素をM個(Mは1以上の整数)並べてなる領域と、(2c)元画像において、領域(2b)に隣接し、1画素に満たないy2個(y2は、0以上かつnDev未満の整数)の残余部分からなる領域とに区分される。
平均画素値演算手段では、副走査方向区分手段により区分された各領域毎、又は、副走査方向区分手段及び主走査方向区分手段により区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算手段により求められた出力画像の1画素に対応する分割ブロックの数で割る。
よって、出力画像の1画素における副走査方向を、M個の完全な元画像の画素から構成される領域(2b)と、その両側に隣接する1画素に満たない元画像の領域(2a,2c)とを区分することによって、領域(2c)に含まれる分割ブロックの数に基づいて、出力画像において次に処理される画素における領域(2a)含まれる分割ブロックの数を容易に求めることができるという効果がある。
態様15の画像処理装置によれば、態様10から14のいずれかの画像処理装置の奏する効果に加えて、入力画像サイズ取得手段により取得された入力画像の画素数(ix×iy)の値と、出力画像サイズ入力手段により入力された出力画像の画素数(ox×oy)の値とから、縮小率取得手段によって縮小率が取得される。
よって、入力された出力画像サイズ(出力画像の画素数)に応じた縮小率で入力画像を縮小することができるという効果がある。なお、「縮小画像サイズ入力手段により入力される出力画像の画素数」は、ユーザによって指定された出力画像サイズ(出力画像の画素数)であってもよいし、条件(印刷媒体の大きさなど)に応じて自動的に決定された出力画像サイズであってもよい。
態様16の画像処理装置によれば、態様10から15のいずれかの画像処理装置の奏する効果に加えて、縮小率入力手段により入力された縮小率が、縮小率取得手段によって取得される。なお、「縮小率入力手段により入力される縮小率」とは、画素数(ix×iy)の入力画像から画素数(ox×oy)の出力画像を得るための縮小率、即ち、ox/ix及び/又はoy/iyの値である。
よって、入力された縮小率で入力画像を縮小することができるという効果がある。なお、「縮小率入力手段により入力される縮小率」は、ユーザによって指定された所望の縮小率であってもよいし、条件(印刷媒体の大きさなど)に応じて自動的に決定された縮小率であってもよい。
以下、本発明の好ましい実施例について、添付図面を参照して説明する。図1は、本発明の一実施形態におけるプリンタ1の電気的な構成を示したブロック図である。
このプリンタ1は、パーソナルコンピュータ(以下「PC」と称する)2や、デジタルカメラ21や、外部メディア20から入力された画像データを所定の縮小率で縮小して出力することができるように構成されている。
プリンタ1は、CPU11と、ROM12と、RAM13と、印刷ヘッドなどから構成され、印刷媒体(例えば、紙媒体など)への印刷(出力)を行う印刷部15と、出力画像サイズなどの入力値をユーザが入力可能なユーザ操作部(例えば、テンキーなど)を有する操作パネル16とを備えている。
また、プリンタ1は、ケーブル5を介してPC2と接続可能なインターフェイス(以下「I/F」と称する)17と、ケーブル6を介してデジタルカメラ21と接続可能なI/F18と、外部メディア20(例えば、SDメモリカード、メモリスティックなど)と着脱自在に装着可能な外部メディアスロット19とを備えている。
よって、プリンタ1は、PC20に記憶されている画像データをケーブル5及びI/F17を介して入力することが可能であると共に、デジタルカメラ21によって撮影された画像データをケーブル6及びI/F18を介して入力することが可能である。さらに、外部メディアスロット19に装着された外部メディア20から、その外部メディア21に記憶されている画像データを入力することが可能である。
CPU11は、プリンタ1全体を制御する演算処理装置(演算装置)であり、ROM12には、このCPU11により実行される各種の制御プログラムや、その実行の際に参照される固定値データが格納されている。なお、ROM12は、後述する図6から図10に示すフローチャートを実行して画像の縮小を行う画像縮小プログラム12aを記憶する領域を備えている。
また、RAM13は、CPU11で実行される制御プログラムに必要な各種レジスタ群などが設定されたワーキングエリアや、処理中のデータを一時的に格納するテンポラリエリア等を有しランダムにアクセスできる書き換え可能なメモリである。
このRAM13は、元画像メモリ13aと、出力画像メモリ13bと、出力サイズメモリ13cと、縮小率メモリ13dとを備えている。元画像メモリ13aは、PC2、デジタルカメラ21、及び外部メディア20から、それぞれ、I/F17、I/F18、及び外部メディアスロット19を介してプリンタ1へ入力された画像データであって、縮小元となる元画像(以下、便宜上「元画像P」と記載する)の画像データ(以下、元画像Pの画像データを「元画像データ」と称する)を記憶するものである。
出力画像メモリ13bは、画像縮小プログラム12a(後述する図6から図10に示すフローチャートを実行するプログラム)に従い、元画像メモリ13aに記憶されている元画像データを縮小することによって生成された出力画像(以下、便宜上「出力画像Q」と記載する)の画像データ(以下、出力画像Qの画像データを「出力画像データ」と称する)を記憶するものである。なお、本実施形態では、元画像データ及び出力画像データはいずれも、RGBから構成されている。
出力サイズメモリ13cは、ユーザによる操作パネル16の操作によって入力された出力画像Qのサイズ(即ち、出力画像サイズ)を記憶するものであり、縮小率メモリ13dは、元画像メモリ13aに記憶されている元画像Pのサイズと出力サイズメモリ13cに記憶されている出力画像サイズとから算出される縮小率を記憶するものである。
ここで、後述するように、画像縮小プログラム12aは、元画像メモリ13aに記憶されている元画像データを、縮小率メモリ13dに記憶されている縮小率で縮小することによって、出力画像データに生成する。よって、上記した出力画像メモリ13bには、画像縮小プログラム12aに従う縮小によって生成された出力画像データが記憶されている。
次に、図2を参照して、上記のように構成されたプリンタ1による縮小機能を説明する。図2は、プリンタ1による縮小機能を示す機能ブロック図である。図2に示すように、プリンタ1は、入力手段(非図示)から入力された画像サイズ(ix.iy)の元画像データを、同じく入力手段(非図示)から入力された出力画像サイズ(ox.oy)に縮小し、出力手段(非図示)から、出力画像サイズ(ox.oy)の出力画像データとして出力する部分である縮小部100を備えている。
より詳細には、縮小部100は、画像サイズ比較部101と、縮小率算出部102と、処理ブロック数算出部103と、処理ブロック縮小部104と、分割数決定部105とから構成されている。
画像サイズ比較部101は、入力手段(非図示)から入力された元画像データの画像サイズ(ix.iy)と出力画像サイズ(ox,oy)との比較を行う部分であり、その比較結果を縮小率算出部102へ出力する。
縮小率算出部102は、画像サイズ比較部101から入力された比較結果から縮小率を算出する部分であり、算出された縮小率を処理ブロック数算出部へ出力する。なお、元画像Pの画像サイズが(ix,iy)であり、出力画像サイズが(ox,oy)である場合、その縮小率は、主走査方向に(ox/ix)であり、副走査方向に(oy/iy)である。
分割数決定部105は、入力手段(非図示)から入力された元画像データと出力画像サイズとプリンタ1の処理能力を示す値と1画素が取り得る色データ(パレット)の数とに基づいて、元画像Pにおける1画素に対する分割数nDevを算出する部分であり、算出された分割数nDevを処理ブロック数算出部103へ出力する。
ここで、分割数nDevは、元画像Pの各画素の主走査方向(x方向)と副走査方向(y方向)とをそれぞれいくつに分割したかを表す数であり、元画像Pの各画素を分割数nDevで分割した結果として、各画素はそれぞれ(nDev×nDev)個の断片(以下、このように1画素を分割数nDevに分割した結果として得られた個々の断片を「分割ブロック」と称する)に分割される。なお、分割数nDevは、2以上の整数であるので、1画素は、整数個((nDev×nDev)個)の分割ブロックに分割されることになる。
ただし、この分割数nDevの値は、演算処理装置であるCPU11によって処理可能な範囲内の数値でなければならないので、分割数決定部105では、分割数nDevの値を、演算処理装置であるCPU11によって処理可能な範囲内の数値に決定する。分割数決定部105において、分割数nDevの値を、演算処理装置であるCPU11によって処理可能な範囲内の数値に決定するための構成については、図3を参照しつつ後述する。
処理ブロック数算出部103は、縮小率算出部102から入力された縮小率と、分割数決定部105から入力された分割数nDevとから、出力画像Qの1画素に相当する分割ブロックの数を算出する部分であり、算出された分割ブロックの数を平均画素値算出部104へ出力する。
平均画素値算出部104は、処理ブロック数算出部103から入力された分割ブロックの数に対応する元画像データ領域の平均画素値を算出する部分である。なお、詳細は図3及び図4を参照しつつ後述するが、この平均画素値算出部104において平均画素値を算出する際には、出力画像Qの1画素に含まれる分割ブロックを細区分した上で平均画素値を算出する。
ここで、処理ブロック数算出部103による分割ブロック数の算出と、平均画素値算出部104による平均画素値の算出は、出力画像Qの画素数分だけ繰り返される。そして、出力画像Qにおける全ての画素に対して、平均画素値算出部104による平均画素値の算出が行われると、入力手段(非図示)から入力された元画像データが、入力手段(非図示)から入力された出力画像サイズに縮小された出力画像データが出力手段(非図示)から出力される。
次に、図3を参照して、分割数決定部105に対するより詳細な構成について説明する。図3は、分割数決定部105の機能を示す機能ブロック図である。図3に示すように、分割数決定部105は、最大ブロック数算出部105aと、分割数計算部105bとから構成されている。
最大ブロック数算出部105aは、出力画像Qの1画素が取り得る分割ブロックの数の最大値を算出する部分である。
元画像Pの画像サイズ(画素数)を(ix×iy)とし、出力画像Qの画像サイズ(画素数)を(ox×oy)とした場合、出力画像Qにおける座標(iout,jout)の画素に含まれる分割ブロックについて、主走査方向及び副走査方向にそれぞれ取り得る最大値(nBlock_x)max及び(nBlock_y)maxは、下記式(1a)および(1b)で表される値となる。
ここで、nBlock_x(0)及びnBlock_y(0)は、それぞれ、出力画像Qにおける先頭座標(0,0)の画素に含まれる画素に含まれる主走査方向及び副走査方向の分割ブロックの数である。また、演算記号[]はガウス記号であり、その数を超えない最大の整数を表す記号である。
最大ブロック数算出部105aは、上記した式(1a)および(1b)の計算を行い、その算出結果を分割数計算部105bへ出力する。
分割数計算部105bは、最大ブロック数算出部105aから入力された最大ブロック数の最大値を用いて、分割数nDevの値を、演算処理装置であるCPU11によって処理可能な範囲内の数値として算出する。
ここで、本実施形態における高速平均画素処理(図6におけるS602の処理)がプリンタ1の演算処理装置であるCPU11で実行可能であるためには、CPU11による処理能力を示す値の最大値をValueMaxとし、1画素が取り得る色データ(パレット)の最大値をPalletMaxとした場合に、下記不等式(2)が満たされなければならない。
なお、1画素が取り得る色データ(パレット)の最大値であるPalletMaxは、1画素を構成するビット数(例えば、8ビットや16ビット)の最大値とされる。即ち、例えば、1画素を構成するビット数が8ビットである場合には、PalletMaxの値は256となる。
ここで、ix/oxの余りをrxとし、iy/oyの余りをryとすると共に、(ix−rx)/oxをDxと表し、(iy−ry)/oyをDyと表すと、上記式(2)を満たすnDevは、nDevは2以上の整数であることを考慮すると、下記不等式(3)を満たす整数となる。
この不等式(3)を満たす分割数nDevであれば、縮小時におけるCPU11のオーバーフローが確実に防止される。
ここで、ValueMax及びPalletMaxの値は、CPU11によって決まる値であるので、分割数計算部105bでは、これらのValueMax及びPalletMaxと、最大ブロック数算出部105aから入力された最大ブロック数の最大値とから、上記不等式(3)を満たす分割数nDevを算出し、算出された分割数nDevの値を処理ブロック数算出部103へ出力する。
以上のように、分割数nDevの値は、CPU11(演算処理装置)の処理能力を示す値の最大値ValueMaxに対し、縮小率(即ち、ix/ox及びiy/oy)を考慮して決定される。よって、元画像Pを種々の出力画像サイズに縮小する場合においても、上記不等式(3)を満たすのであれば、分割数nDevの値を縮小率に応じて適宜使い分けることが可能となる。
特に、分割数nDevの値が大きい程、個々の分割ブロックの大きさが細かくなる(即ち、分解能が高くなる)ので、分割ブロック単位を利用することによって生じ得る誤差が小さく、出力画像Qの画質は向上する。よって、縮小率に応じて上記式(3)を満たす最大の分割数nDevを使用することにより、どのような縮小率に対しても可能な限りで最高の画質を有する出力画像Qを得ることができるのである。
また、分割数nDevの値は、CPU11(演算処理装置)の処理能力を示す値の最大値ValueMaxに対し、1画素が取り得る色データ(パレット)の最大値(PalletMax)を考慮して決定されるので、種々のビットカラーに応じて、分割数nDevの値を適宜使い分けることが可能となる。
上記構成を有するプリンタ1で実行される画像縮小処理(図6参照)について説明する前に、図4及び図5を参照して、画像縮小処理の一部である高速平均画素処理(図6におけるS602の処理)において使用される変数について説明する。図4及び図5は、いずれも、本実施形態の高速平均画素処理(図6におけるS602の処理)において使用される変数を説明するための模式図である。
まず、本発明の理解を容易にする目的で、図4では、副走査方向(y方向)の縮小は考慮せず、主走査方向(x方向)を後述する高速平均画素処理(図6におけるS602の処理)に供する場合に必要とされる変数について説明する。図4に示すように、元画像Pは、主走査方向に並ぶP0〜P4の5画素から構成される画像であり、出力画像Qは、元画像Pを後述する画像縮小処理(図6参照)の結果として得られる画像である。
後述する画像縮小処理(図6参照)、特に、高速平均画素処理(図6におけるS602の処理)では、1画素を整数個に分割した分割ブロックの単位で取り扱うことを特徴とする。ここで、「nDev」は、分割数決定部105(図2参照)を説明する際に述べたように、元画像Pの1画素に対する分割数、即ち、元画像Pにおける各画素をそれぞれいくつに分割したかを表す変数である。図4に示す例では、元画像Pの各画素が4つに分割されているので、分割数nDevの値は4である(図4における細点線参照)。
なお、この分割数nDevの値は、演算処理装置であるCPU11によって処理可能な範囲内の数値でなければならない。また、分割数nDevの値が大きいほど、個々の分割ブロックの大きさが細かくなり(即ち、分解能が高くなり)、その結果として、分割ブロック単位を利用することによって生じ得る誤差が小さくなることから、出力画像Qの画質向上という点において好ましい。よって、分割数nDevの値は、CPU11によって処理可能な数値のうちの最大値であることが最も好ましい。
図4に示すように、出力画像Qは、縮小の結果としてQ0〜Q2の3画素の出力画像サイズに縮小されている。図4に示すように、画素Q0は、画素P0と、画素P1における画素P0に隣接する2個の分割ブロックとを縮小して得られる画素である。また、画素Q1は、画素P1における画素Q0の縮小のために使用されなかった残りの2個の分割ブロックと、画素P1に隣接する画素P2と、画素P3における画素P2に隣接する1個の分割ブロックとを縮小して得られる画素である。画素Q2は、画素P3における画素Q1の縮小のために使用されなかった残りの3個の分割ブロックと、画素P3に隣接する画素P4とを縮小して得られる画素である。
本実施形態では、分割ブロックの単位で、出力画像Qの画素に対応する元画像Pの領域を取得するので、縮小率に応じた実際の元画像Pの領域に対して誤差を生じる。例えば、図4において、縮小率に応じた実際の画素Q1に対応する元画像Pの領域の始点s’の位置は、分割ブロックの単位で得られた元画像の領域の始点sの位置とは異なる。しかし、分割数nDevの値が大きいほど、個々の分割ブロックの大きさが細かくなる(即ち、分解能が高くなる)ため、上記のような始点s'の位置と始点sの位置との誤差は小さくなる。その結果、分割ブロック単位を利用することに伴って生じる誤差(始点sと始点s’との誤差)に起因する画質の劣化を抑制することができる。従って、上記したように、分割数nDevの値は大きい値であるほど好ましく、CPU11によって処理可能な数値のうちの最大値であることが最も好ましい。
元画像P及び出力画像Qの始点の画素をそれぞれ画素P0及び画素Q0とした場合、後述する高速平均画素処理(図6におけるS602の処理)では、画素Q0→画素Q2の順で高速平均画素処理が順次実行される。なお、図4では、画素Q1を得るための処理が行われている場合を例示している。
ここで、「nBlock_x」は、出力画像の1画素に対応する元画像Pの領域に含まれる分割ブロック数であって、主走査方向の分割ブロックの数を表す変数である。上記したように、画素Q1は、画素P1における画素Q0の縮小のために使用されなかった残りの2個の分割ブロックと、画素P1に隣接する画素P2と、画素P3における画素P2に隣接する1個の分割ブロックとを縮小して得られる画素であるので、図4示す例における変数nBlock_xの値は、7(=2+4+1)である。
なお、後述する高速平均画素処理(図6におけるS602の処理)では、主走査方向において縮小がなされる(nBlock_x)個の分割ブロックは3区分に分けて処理される。具体的には、処理中の分割ブロックは、前回の高速平均画素処理において未処理のまま残された1画素に満たない元画像の領域(以下、この領域を「前方残余領域」と称する)に含まれる分割ブロックと、この前方残余領域に隣接し、完全な1画素をN個(Nは1以上の整数)並べてなる元画像の領域(以下、この領域を「中央領域」と称する)に含まれる分割ブロックと、この中央領域に隣接し、変数nBlock_xで表される数の分割ブロックのうち、前方残余領域にも中央領域にも含まれずに残された1画素に満たない元画像の領域(以下、この領域を「後方残余領域」と称する)に含まれる分割ブロックとに分けて処理される。
ここで、「nResidue_x0」は、主走査方向における前方残余領域に含まれる分割ブロックの数を表す変数であり、「nMain_x」は、主走査方向における中央領域に含まれる画素数を表す変数であり、「nResidue_x1」は、主走査方向における後方残余領域に含まれる分割ブロックの数を表す変数である。
図4に示す例では、変数nResidue_x0の値は、画素P1における画素Q0の縮小のために使用されなかった残り部分に対する主走査方向の分割ブロックの数である2であり、変数nMain_xの値は、中央領域に相当するのは画素P2だけであるので1である。さらに、変数nResidue_x1の値は、画素P3における画素P2に隣接する1画素未満となる主走査方向の分割ブロックの数である1である。
また、「nPosRes_x0」は、元画像における、前方残余領域を含む画素に対する主走査方向の座標を表す変数であり、「nPosMain_x0」は、元画像における、中央領域に含まれるN個の画素のうち、最初の画素(前方残余領域に隣接する画素)に対する主走査方向の座標を表す変数であり、「nPosRes_x1」は、元画像における、後方残余領域を含む画素に対する主走査方向の座標を表す変数である。
ここで、図4に示す例では、変数nPosRes_x0の値は、前方残余領域を含む画素P1に対する主走査方向の座標であり、変数nMainRes_x0の値は、中央領域に含まれる唯一の画素である画素P2に対する主走査方向の座標であり、変数nPosRes_x1の値は、後方残余領域を含む画素P3に対する主走査方向の座標である。
一方で、「nReadBlock_x」は、前回までの高速平均画素処理(図6におけるS602の処理)において処理済み(使用済み)である主走査方向の分割ブロック数を表す変数である。図4に示す例では、画像Q1に対応する分割ブロックが既に処理済みであるので、変数nReadBlock_xの値は、画像Q1に対応する元画像Pの領域に含まれる主走査方向の分割ブロック数、即ち、6(=4+2)である。
以上、理解を容易にするために、主走査方向(x方向)のみの縮小を考え、その縮小の際に必要とされる変数について説明したが、実際には副走査方向(y方向)にも縮小されるので、副走査方向(y方向)の縮小を考慮すると図5に示すようになる。この図5では、元画像Pの画素と出力画像Qの画素とが重ねて表されており、これらの画素の区別を容易にするために、出力画像Qの画素として、処理中の1画素のみを図示し、元画像Pの画素の1つを斜線によってハッチングした。
また、図5では、図5に示すように、元画像Pは主走査方向及び副走査方向共に分割数4(=nDev)で分割されているので、元画像Pの各画素はそれぞれ16(=nDev×nDev)個の分割ブロックに分割されている(図5における細点線参照)。
ここで、副走査方向の縮小に必要とされる変数である「nBlock_y」は、上記した主走査方向の縮小に必要とされる変数「nBlock_x」に対応する変数であり、出力画像の1画素に対応する元画像Pの領域に含まれる分割ブロック数であって、副走査方向の分割ブロックの数を表す変数である。
変数「nReadBlock_y」は、上記した主走査方向の縮小に必要とされる変数「nReadBlock_x」に対応する変数であり、前回までの高速平均画素処理において既に処理済みである副走査方向の分割ブロック数を表す変数である。
また、副走査方向についても、後述する高速平均画素処理(図6におけるS602の処理)では、上記した主走査方向と同様に、縮小がなされる(nBlock_y)個の分割ブロックを、前方残余領域と中央領域と後方残余領域との3区分に分けて処理する。
変数「nResidue_y0」は、上記した主走査方向の縮小に必要とされる変数「nResidue_x0」に対応する変数であり、副走査方向における前方残余領域に含まれる分割ブロックの数を表す変数である。また、変数「nMain_y」は、上記した主走査方向の縮小に必要とされる変数「nMain_x」に対応する変数であり、副走査方向における中央領域に含まれる画素数を表す変数である。また、変数「nResidue_y1」は、上記した主走査方向の縮小に必要とされる変数「nResidue_x1」に対応する変数であり、副走査方向における後方残余領域に含まれる分割ブロックの数を表す変数である。
図5に示すように、(nBlock_x)×(nBlock_y)個からなる分割ブロックは、主走査方向に3区分(nResidue_x0,nMain_x,nResidue_x1)に分けると共に、副走査方向に3区分(nResidue_y0,nMain_y,nResidue_y1)に分けた結果として、A1〜A9までの9個の領域に分割される。
なお、変数「nPosRes_y0」は、上記した主走査方向の縮小に必要とされる変数「nPosRes_x0」に対応する変数であり、元画像における、前方残余領域を含む画素に対する副走査方向の座標を表す変数である。また、変数「nPosMain_y0」は、上記した主走査方向の縮小に必要とされる変数「nPosMain_x0」に対応する変数であり、元画像における、中央領域に含まれるM個(Mは1以上の整数)の画素のうち、最初の画素(前方残余領域に隣接する画素)に対する副走査方向の座標を表す変数である。また、変数「nPosRes_y1」は、上記した主走査方向の縮小に必要とされる変数「nPosRes_x1」に対応する変数であり、元画像における、後方残余領域を含む画素に対する副走査方向の座標を表す変数である。
また、領域A1に含まれる分割ブロック数は、(nResidue_x0×nResidue_y0)個であり、領域A2に含まれる分割ブロック数は、(nMain_x×nDev×nResidue_y0)個であり、領域A3に含まれる分割ブロック数は、(nResidue_x1×nResidue_y0)個である。
同様に、領域A4に含まれる分割ブロック数は、(nResidue_x0×nMain_y×nDev)個であり、領域A5に含まれる分割ブロック数は、(nMain_x×nMain_y×nDev2)個であり、領域A6に含まれる分割ブロック数は、(nResidue_x1×nMain_y×nDev)個である。
さらに、領域A7に含まれる分割ブロック数は、(nResidue_x0×nResidue_y1)個であり、領域A8に含まれる分割ブロック数は、(nMain_x×nDev×nResidue_y1)個であり、領域A9に含まれる分割ブロック数は、(nResidue_x1×nResidue_y1)個である。
詳細は後述するが、本実施形態における高速平均画素処理(図6におけるS602の処理)では、このように、元画像Pの各画素をnDev個の分割ブロックに分割し、分割ブロックの単位で処理することによって、最小公倍数に拡大することなく、また、演算の際に浮動小数点を使用することなく、出力画像Qの1画素の画素値を得ることができるので、平均画素法による縮小を高速化することができるのである。
次に、図6のフローチャートを参照して、上記構成を有するプリンタ1で実行される画像縮小処理について説明する。図6は、プリンタ1で実行される画像縮小処理を示すフローチャートである。この画像縮小処理は、(ix×iy)の画像サイズ(画素数)を有する略矩形の元画像P(元画像データ)がプリンタ1に入力されると(例えば、ケーブル6及びI/F18を介してデジタルカメラ21から元画像Pが入力されると)、起動する処理である。
図6に示すように、この画像縮小処理では、まず、プリンタ1に入力された元画像データを元画像メモリ13aに記憶して(S601)、元画像メモリ13aに記憶された元画像データを、高速化された平均画素法を用いて、ユーザによって入力された出力画像サイズ(ox×oy)に縮小し、(ox×oy)の画像サイズ(画素数)を有する略矩形の出力画像データ(出力画像Q)を生成する高速平均画素処理を実行する(S602)。なお、この高速平均画素処理(S602)における詳細な処理については図7を参照して後述する。
高速平均画素処理(S602)の実行後、得られた出力画像データに対し、エッジの先鋭化処理を行う(S603)。S603で行われるエッジの先鋭化処理については、本発明の要旨ではないと共に公知の技術であるので、具体的な説明は省略するが、例えば、3×3のマトリクスで構成される先鋭化フィルタ(例えば、ラプラシアンフィルタ)を用い、出力画像データの各画素値をフィルタ処理することが挙げられる。
S603の処理後、高速平均画素処理(S602)の結果として出力画像メモリ13bに記憶されている出力画像データを回転しながら印刷部15へ出力し(S604)、この画像縮小処理を終了する。S604の結果として、元画像Pがユーザ指定された出力画像サイズに縮小された出力画像Qが印刷部15において印刷媒体に印刷される。
次に、図7のフローチャートを参照して、上記した画像縮小処理(図6参照)で実行される高速平均画素処理(S602)について説明する。図7は、高速平均画素処理(S602)を示すフローチャートである。
図7に示すように、高速平均画素処理(S602)では、まず、元画像メモリ13aに記憶されている元画像Pの画像サイズ(ix×iy)と、出力サイズメモリ13cに記憶されている出力画像サイズとから、縮小率を算出し、算出された縮小率を縮小率メモリに記憶する(S701)。なお、出力サイズメモリ13cに記憶されている出力画像サイズ(ox×oy)は、ユーザによって操作パネル16から別途入力されている値である。
S701の処理後、分割数nDevの値を算出する(S702)。本実施形態では、S702において、出力画像Qの画質を可能な限り最高にする分割数nDevを算出するものとする。即ち、本実施形態では、S702では、分割数nDevを下記式(4)によって得る。
ここで、Dxは、(ix−rx)/oxであり、rxは、ix/oxの余りであり、Dyは、(iy−ry)/oyであり、ryはiy/oyの余りであり、ValueMaxは、前記演算装置の処理能力を示す値の最大値であり、PalletMaxは、1画素が取り得る色データ(パレット)の最大値である。
上記式(4)によって得られる分割数nDevは、上記した不等式(3)を満たす最大の分割数nDevであるので、縮小時におけるCPU11のオーバーフローが確実に防止される値であると共に、CPU11によって出力し得る最高の画質の縮小画像ということになる。
S702の処理後、変数nReadBlock_x、nResidue_x0、nPosRes_x0、nReadBlock_y、nResidue_y0、及びnPosRes_y0の値をいずれも0に設定し(S703)、出力画像Qにおける画素の主走査方向の座標iout及び副走査方向の座標joutを、先頭座標である(0,0)に設定する(S704)。
S704の処理後、副走査方向ブロック処理を実行する(S705)。詳細は図8(a)を参照しつつ後述するが、副走査方向ブロック処理(S705)の実行によって、座標出力画像Qにおける座標(iout,jout)の画素に対応する元画像Pに対し、副走査方向の変数であるnBlock_y、nMain_y、nResidue_y1、nPosMain_y0、及びnPosRes_y1の値がいずれも整数値として得られる。
副走査方向ブロック処理(S705)の実行後、主走査方向ブロック処理を実行する(S706)。詳細は図8(b)を参照しつつ後述するが、主走査方向ブロック処理(S706)の実行によって、座標出力画像Qにおける座標(iout,jout)の画素に対応する元画像Pに対し、主走査方向の変数であるnBlock_x、nMain_x、nResidue_x1、nPosMain_x0、及びnPosRes_x1の値がいずれも整数値として得られる。
主走査方向ブロック処理(S706)の実行後、変数Planeの値を0に設定する。なお、本実施形態では、画像データがRGBから構成されているので、変数Pleneの値は0から2までの3つの値を取り得、この変数Planeの値によって、赤(R)プレーン(Plane=0)、緑(G)プレーン(Plane=1)、及び青(B)プレーン(Plane=2)のいずれかのカラープレーンが指定される。
S707の処理後、S707又は後述するS712により設定されたPlane値に対応するカラープレーンの画素値を取得する縮小画像出力処理(S708)を実行する。なお、詳細は図9を参照しつつ後述するが、この縮小画像出力処理(S708)では、出力画像Qにおける座標(iout,jout)の画素に対応する元画像Pの領域におけるPlane値によって指定されたカラープレーンの平均画素値の計算を行う。
縮小画像出力処理(S708)の実行後、変数Planeの値が2であるかを確認し(S709)、変数Planeの値が0又は1であれば(S709:No)、変数Planeの値に1加算し(S712)、縮小画像出力処理(S708)へ移行する。即ち、次のPlane値に対応するカラープレーンに対し、縮小画像出力処理(S708)を実行する。
一方で、S709の処理により確認した結果、変数Planeの値が2であれば(S709:Yes)、出力画像Qにおける座標(iout,jout)の画素の画素値が、全てのカラープレーン(RGB)に対して得られたことを示すので、次に、iout=oxであるか、即ち、出力画像Qにおける座標(iout,jout)の画素が主走査方向の終端の画素であるかを確認する(S710)。
S710の処理により確認した結果、iout=oxでなければ(S710:No)、ioutの値に1加算して、出力画像Qの画素を主走査方向に1進め(S713)、主走査方向次回初期値取得処理を実行する(S714)。なお、詳細は図10(a)を参照しつつ後述するが、この主走査方向次回初期値取得処理(S714)では、変数nReadBlock_x、nResidue_x0、nPosRes_x0の値の更新を図る。
主走査方向次回初期値取得処理(S714)の実行後、主走査方向ブロック処理(S706)へ移行し、S713において主走査方向に1進められた出力画像Qの画素に対応する変数nBlock_x、nMain_x、nResidue_x1、nPosMain_x0、及びnPosRes_x1の値が得られる。
一方で、S710の処理により確認した結果、iout=oxであれば(S710:Yes)、同じ副走査方向の座標joutに位置する全ての画素に対し、縮小画像出力処理(S708)が実行されて画素値が得られたことを示すので、次に、jout=oyであるか、即ち、出力画像Qにおける座標(iout,jout)の画素が副走査方向の終端の画素であるかを確認する(S711)。
S711の処理により確認した結果、jout=oyでなければ(S711:No)、joutの値に1加算すると共に(S715)、ioutの値を0に設定する(S716)。S715及びS716の処理の結果として、出力画像Qを構成する画素の中から選択される画素の位置が、副走査方向に1進められると共に、主走査方向の先頭座標に戻される。
S716の処理後、副走査方向次回初期値取得処理を実行する(S717)。なお、詳細は図10(b)を参照しつつ後述するが、副走査方向次回初期値取得処理(S717)では、変数nReadBlock_y、nResidue_y0、nPosRes_y0の値の更新を図る。
副走査方向次回初期値取得処理(S717)の実行後、主走査方向次回初期値取得処理を実行する(S718)。この主走査方向次回初期値取得処理(S718)もまた、主走査方向次回初期値取得処理(S714)と同様に、変数nReadBlock_x、nResidue_x0、nPosRes_x0の値を得る処理である。なお、詳細は図10(a)を参照しつつ後述するが、主走査方向次回初期値取得処理(S718)は、出力画像Qの主走査方向先頭座標に対する処理であるので、変数nReadBlock_x、nResidue_x0、nPosRes_xの値はいずれも0に設定される。
主走査方向次回初期値取得処理(S718)の実行後、副走査方向ブロック処理(S705)へ移行し、S715において副走査方向に1進められた出力画像Qの画素に対応する変数nBlock_y、nMain_y、nResidue_y1、nPosMain_y0、及びnPosRes_y1の値が得られる。
一方で、jout=oyであれば(S711:Yes)、出力画像Qにおける全て((ox×oy)個)の画素に対し、縮小画像出力処理(S708)が実行されて画素値が得られたことを示すので、この高速平均画素処理(S602)を終了する。この高速平均画素処理(S602)によって、元画像サイズ(ix×iy)の元画像Pを縮小して得られた出力画像サイズ(ox×oy)の出力画像Qに対する出力画像データが、出力画像メモリ13bに記憶されることになる。
次に、図8のフローチャートを参照して、上記した高速平均画素処理(図7参照)で実行される副走査方向ブロック処理(S705)及び主走査方向ブロック処理(S706)について説明する。図8(a)は、副走査方向ブロック処理(S705)を示すフローチャートであり、図8(b)は、主走査方向ブロック処理(S706)を示すフローチャートである。
図8(a)に示すように、副走査方向ブロック処理(S705)では、まず、変数nBlock_yの値を、式nBlock_y=jout×[(iy/oy)×nDev]−nReadBlock_yから求める(S801)。
このS801の結果として、出力画像Qの1画素における副走査方向の分割ブロックの数(nBlock_y)は、高速平均画素処理(S602)において既に処理済みである副走査方向の分割ブロックに隣接する分割ブロックを始点として抽出されることになる。
また、出力画像Qの1画素における副走査方向の分割ブロックの終点を、副走査方向の縮小率(oy/iy)の値に依らず、ガウス記号によって小数点以下を切り捨てることによって求めるので、結果として、変数nBlock_yを、分割ブロックの数、即ち、整数で表すことができる。
S801の処理後、S801において求めた変数nBlock_yの値を用いて、変数nMain_yの値を、式nMain_y=[(nBlock_y−nResidue_y0)/nDev]から求める(S802)。
S802の処理後、S802において求めた変数nMain_yの値を用いて、変数nResidue_y1を、式nResidue_y1=nBlock_y−nResidue_y0−(nMain_y×nDev)から求める(S803)。
次に、変数nPosMain_y0の値を、式=nPosRes_y0+1から求め(S804)、求めた変数nPosMain_y0の値を用いて、変数nPosRes_y1の値を、式nPosRes_y1=nPosMain_y0×+nMain_y+1から求め(S805)、この副走査方向ブロック処理(S705)を終了する。
図8(b)に示すように、主走査方向ブロック処理(S706)では、まず、変数nBlock_xの値を、式nBlock_x=jout×[(ix/ox)×nDev]−nReadBlock_xから求める(S811)。
このS811の結果として、出力画像Qの1画素における主走査方向の分割ブロックの数(nBlock_x)は、高速平均画素処理(S602)において既に処理済みである主走査方向の分割ブロックに隣接する分割ブロックを始点として抽出されることになる。
また、出力画像Qの1画素における主走査方向の分割ブロックの終点を、主走査方向の縮小率(ox/ix)の値に依らず、ガウス記号によって小数点以下を切り捨てることによって求めるので、結果として、変数nBlock_xを、分割ブロックの数、即ち、整数で表すことができる。
S811の処理後、S811において求めた変数nBlock_xの値を用いて、変数nMain_xの値を、式nMain_x=[(nBlock_x−nResidue_x0)/nDev]から求める(S812)。
S812の処理後、S812において求めた変数nMain_xの値を用いて、変数nResidue_x1を、式nResidue_x1=nBlock_x−nResidue_x0−(nMain_x×nDev)から求める(S813)。
次に、変数nPosMain_x0の値を、式=nPosRes_x0+1から求め(S814)、求めた変数nPosMain_x0の値を用いて、変数nPosRes_x1の値を、式nPosRes_x1=nPosMain_x0×+nMain_x+1から求め(S815)、この主走査方向ブロック処理(S706)を終了する。
これら副走査方向ブロック処理(S705)及び主走査方向ブロック処理(S706)の結果として、出力画像Qにおける座標(iout,jout)の画素は、A1〜A9の領域(図5参照)に区分されることになる。
このように、出力画像Qにおける座標(iout,jout)の画素は、完全な元画像Pの画素から構成される領域(A5)と、元画像Pの1画素に満たない領域(A1〜A4,A6〜A9)とに区分されているので、1画素に満たない領域(A1〜A4,A6〜A9)の分割ブロック数も、その領域における(主走査方向の分割ブロック数×副走査方向の分割ブロック数)の計算によって容易に算出することができる。その結果として、次に図9を参照しつつ説明する縮小画素出力処理(S708)における各領域の部分画素値の算出(S901参照)や、最終的な平均画素値の算出(S903)を容易に行い得るのである。
また、S801及びS811における演算式において小数点以下の切り捨てが行われるので、主走査方向の縮小率(ox/ix)及び副走査方向の縮小率(oy/iy)に依ることなく、変数nBlock_x及び変数nBlock_yの値を整数で表すことができる。その結果として、次に図9を参照しつつ説明する縮小画素出力処理(S708)による平均画素値の算出が整数演算によって行われるので、処理速度の向上(処理時間の短縮)を図ることができることになる。
また、S801及びS811の結果として、出力画像Qの1画素における主走査方向の分割ブロックの数(nBlock_x)及び副走査方向の分割ブロックの数(nBlock_y)は、いずれも、高速平均画素処理(S602)において既に処理済みである分割ブロックに隣接する分割ブロックを始点として抽出されることになる。その結果、次に図9を参照しつつ説明する縮小画素出力処理(S708)による平均画素値の算出では、元画像Pに含まれる画像情報を漏れなく全て使用することになるので、縮小に伴う画質劣化を抑制できることになる。
次に、図9のフローチャートを参照して、上記した高速平均画素処理(図7参照)で実行される縮小画素出力処理(S708)について説明する。図9は、縮小画素出力処理(S708)を示すフローチャートである。
図9に示すように、この縮小画像出力処理(S708)では、まず、主走査方向ブロック処理(S706)及び副走査方向ブロック処理(S705)の結果として区分された各領域毎に、Plane値に対応するカラープレーンの部分画素値を計算する(S901)。なお、本実施形態における「部分画素値」とは、各領域における(Plane値に対応するカラープレーンの画素値×その画素に含まれる分割ブロック数)の総和によって得られる値を意味するものとする。
S901において、例えば、領域A1の部分画素値は、(領域A1におけるPlane値に対応するカラープレーンの画素値×領域A1に含まれる分割ブロック数)、即ち、(元画像Pの座標(nResidue_x0,nResidue_y0)の画素におけるPlane値に対応するカラープレーンの画素値×nResidue_x0×nResidue_y0)から得ることができる。なお、このとき、nResidue_x0の値が0である場合には、領域A1の部分画素値は0と計算される。
S901の処理後、各領域毎に計算された部分画素値を合計し(S902)、得られた合計値を、処理中の画素に含まれる総分割ブロック数(nBlock_x×nBlock_y)で除して平均画素値を算出する(S903)。
S903の処理後、算出した平均画素値を、出力画像Qにおける座標(iout,jout)の画素の画素値として出力画像メモリ13bに記憶し(S904)、この縮小画素出力処理(S708)を終了する。
即ち、この縮小画素出力処理(S708)が1回実行される毎に、出力画像Qにおける座標(iout,jout)の1画素の画素値が出力画像メモリ13bに記憶されることになる。このとき、出力画像メモリ13bに記憶される出力画像Qの1画素の画素値は、その画素に対応する元画像Pの領域の平均画素値である。
次に、図10のフローチャートを参照して、上記した高速平均画素処理(図7参照)で実行される主走査方向次回初期値取得処理(S714,S717)及び副走査方向次回初期値取得処理(S718)について説明する。図10(a)は、主走査方向次回初期値取得処理(S714,S717)を示すフローチャートであり、図10(b)は、副走査方向次回初期値取得処理(S718)を示すフローチャートである。
図10(a)に示すように、主走査方向次回初期値取得処理(S714,S717)では、まず、iout=0かを確認し(S1001)、iout=0であれば(S1001:Yes)、変数nReadBlock_x、nResidue_x0、及びnPosRes_x0の値をいずれも0に設定し(S1002)、この主走査方向次回初期値取得処理(S714,S717)を終了する。
一方で、S1001の処理により確認した結果、ioutの値が0でなければ(S1001:No)、変数nResidue_x0の値を、式nResidue_x0=nDev−nResidue_x1から求める(S1003)。
S1003の処理後、変数nPosRes_x0の値を、式nPosRes_x0=nPosRes_x1から求め(S1004)、変数nReadBlock_xの値を、式nReadBlock_x=nReadBlock_x+nBlock_xから求め(S1005)、この主走査方向次回初期値取得処理(S714,S717)を終了する。
図10(b)に示すように、副走査方向次回初期値取得処理(S718)では、まず、変数nResidue_y0の値を、式nResidue_y0=nDev−nResidue_y1から求める(S1011)。
S1003の処理後、変数nPosRes_y0の値を、式nPosRes_y0=nPosRes_y1から求め(S1012)、変数nReadBlock_yの値を、式nReadBlock_y=nReadBlock_y+nBlock_yから求め(S1013)、この副走査方向次回初期値取得処理(S718)を終了する。
これらの主走査方向次回初期値取得処理(S714,S717)及び副走査方向次回初期値取得処理(S718)の結果として、次回、主走査方向ブロック処理(S706)及び副走査方向ブロック処理(S705)を実行する上で必要となる変数nReadBlock_x、nResidue_x0、nPosRes_x0、nReadBlock_y、nResidue_y0、及びnPosRes_y0の値が得られる。
特に、変数nPosRes_x0及び変数nPosRes_y0の値が求められることによって、次回処理する出力画像Qの画素において領域A1〜A9に対応する元画像Pの画素位置(画素の座標)を容易に特定することができる。その結果、1画素に満たない領域(A1〜A4,A6〜A9)を含む元画像Pの領域に対しても、上記した縮小画素出力処理(S708,図9参照)による平均画素の算出を容易に行い得る。
次に、図11を参照して、上記した高速平均画素処理(S502)を含む本実施形態の画像縮小処理(図5)を用いた場合の優位性を実証する。なお、以下では、高速平均画素処理(S502)を含む本実施形態の画像縮小処理による縮小手法を「高速平均画素法」称する。図11は、本実施形態の高速平均画素法を用いた場合の処理時間と、その他の縮小手法を用いた場合の処理時間との比較図である。
図11には、本実施形態の高速平均画素法などの各種縮小手法を用いて、800万画素(2448×3264)の元画像P(自然画)を、種々の画像サイズの出力画像Qに縮小する場合の処理時間の結果が列挙されている。
なお、これらの縮小処理(本実施形態の画像縮小処理(図5)を含む)を行う際に用いたスペックは、CPU(本実施形態のCPU11に相当)として、Pentium4 3.4GH(なお、Pentiumは登録商標である)を使用し、メモリとして2GBのサイズのRAM(本実施形態のRAM13に相当)を使用した。
また、図11に示すように、出力画素Qの画像サイズは、200万画素(1200×1600)、300万画素(1536×2048)、400万画素(1728×2304)、500万画素(1920×2560)、600万画素(2112×2816)、及び700万画素(2304×3072)とした。
図11に示すように、本実施形態の高速平均画素法(分割数nDev=128)を用いた場合には、200万画素、300万画素、400万画素、500万画素、600万画素、及び700万画素の出力画像Qを得るための処理時間は、それぞれ、1391ms、1719ms、1938ms、2156ms、2375ms、及び2672msであった。
一方で、従来の平均画素法であって、最小公倍数を用いる手法(図11における「従来の平均画素法(最小公倍数)」)を用いた場合には、図11に示すように、200万画素の出力画像Qは処理時間1046msで得ることができたものの、300万画素〜700万画素の出力画像Qは処理が終わらない(処理不能)という結果が得られた。
なお、従来の平均画素法(最小公倍数)における、200万画素の出力画像Qを得るための処理時間は、本実施形態の高速平均画素法による処理時間に比べて短くなっているが、これは、出力画像Qの画像サイズ(1224×1632)が元画像Pの画像サイズ(2448×3264)の丁度1/2であり、最小公倍数の値が元画像Pの画像サイズそのものとなるためである。
このように、従来の平均画素法(最小公倍数)を用いたとしても、最小公倍数の値が比較的小さく決まる場合には、本実施形態の高速平均画素法よりも速く処理できることもある。しかし、多くの場合は、最小公倍数の値は相当に大きくなるので、処理不能に陥るか、処理不能に陥らなかったとしても処理速度は相当に遅い。
従って、図11に示す結果は、本実施形態の高速平均画素法は、従来の平均画素法(最小公倍数)の問題点であった処理速度の遅さを解決し、高画質な縮小画像を高速で得ることができることを示している。
さらに一方で、図13を参照しつつ説明した従来の平均画素法「従来の平均画素法(浮動小数)」)を用いた場合には、200万画素、300万画素、400万画素、500万画素、600万画素、及び700万画素の出力画像Qを得るための処理時間は、それぞれ、1422ms、1765ms、2031ms、2390ms、2641ms、及び2922msであった。
ここで、図11からも明らかなように、この従来の平均画素法(浮動小数)及び上記した本実施形態の高速平均画素法を用いた場合の処理時間(処理速度)は、ニアレストレイバー法やバイリニア法に比べて遅い。しかし、平均画素法によって得た出力画像Q(縮小画像)が、ニアレストレイバー法やバイリニア法では得ることのできない高画質な画像である点を考慮すれば、本実施形態の高速平均画素法や従来の平均画素法(浮動小数)による処理時間は、ニアレストレイバー法やバイリニア法による処理時間と遜色ない値であるといえる。
図11に示すように、従来の平均画素法(浮動小数)による処理時間の値は、いずれの画像サイズの出力画像Qを得る場合に対しても、本実施形態の高速平均画素法による処理時間の値よりも大きかった。この結果は、本実施形態の高速平均画素法の使用によって「従来の平均画素法(浮動小数)」を用いた場合よりも処理速度が向上したことを示す。
このような処理速度の向上は、出力画像Qの画像サイズが大きいほどその向上度合いが大きく、200万画素及び300万画素の出力画像Qを得る場合には、2〜3%程度、処理速度が向上し、400万画素の出力画像を得る場合には、5%程度、処理速度が向上し、500万画素、600万画素、及び700万画素の出力画像Qを得る場合には、10%程度、処理速度が向上した。
従って、図11に示す結果は、本実施形態の高速平均画素法による縮小は、従来の平均画素法(浮動小数)による縮小に比べて、有意に速い処理速度で実行されることを示している。
また、分割数nDevの値を128から256に増加させて本実施形態の高速平均画素法を用いた場合についても処理時間の計測を行った。200万画素及び400万画素の出力画像Qを得る場合についてのみ計測を行ったが、得られた結果は分割数nDev=128の場合に比べ、1〜2%程度であるが減少した。
上記したように、分割数nDevの値が大きいほど高画質な出力画像Qが得られるので、この結果は、本実施形態の高速平均画素法は、分割数nDevの値を128から256にすることによって、より高画質な出力画像Qをより速い処理速度で得られることを示している。
なお、本実施形態では、CPUをPentium4 3.4GHとし、メモリを2GBのサイズのRAMとするマシンスペックで処理時間の計測を行ったが、RAMのメモリサイズが同じであっても、キャッシュサイズの異なるCPUを用いることによって処理時間(処理速度)が変わる。
以上、説明したように、本実施形態のプリンタ1は、画像縮小プログラム12aを実行することによって、元画像PをnDev個に分割することによって生じた分割ブロックを単位として、出力画像Q(縮小画像)の1画素における平均画素値を算出するので、整数演算によって平均画素値を得ることができる。即ち、縮小率に応じて生じる小数に対して行われる浮動小数演算を省くことができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるのである。
また、本実施形態のプリンタ1で実行される画像縮小プログラム12aは、上記のように整数演算によって平均画素値を算出するので、組み込み系への実装に適している。
また、本実施形態のプリンタ1は、画像縮小プログラム12aを実行することによって、元画像Pの画像サイズを、出力画像サイズとの最小公倍数のサイズに拡大することなく、出力画像Qを得ることができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるのである。
さらに、本実施形態のプリンタ1で実行される画像縮小プログラム12aは、分割数nDevの値を、演算処理装置であるCPU11によって処理可能な範囲内の数値に決定するので、縮小時におけるCPU11のオーバーフローを確実に防止できる。
また、本実施形態のプリンタ1で実行される画像縮小プログラム12aは、分割数nDevの値を、CPU11によって処理可能な範囲内の数値のうちの最大値に決定するので、元画像Pを分割数nDevに分割することによって生じた分割ブロックの大きさは、演算処理装置によって処理可能な範囲において最も細かい大きさとなる。即ち、かかる場合において、個々の分割ブロックの大きさの分解能が最も高くなるので、分割ブロック単位を利用することによって生じ得る誤差が確実に小さくなる。その結果、CPU11によって処理可能な範囲内において最高画質の縮小画像(出力画像)を得ることができるのである。
なお、縮小率取得ステップとしては、S701の処理が該当し、分割数取得ステップとしては、S702の処理が該当し、処理ブロック数演算ステップとしては、S801,S811の処理が該当し、平均画素値演算ステップとしては、S708の処理が該当する。
また、x方向区分ステップとしては、S703における変数nResidue_x0の値の設定と、S1002における変数nResidue_x0の値の設定と、S812,S813,S1003の処理とが該当する。
また、x方向画素位置計算ステップとしては、S703における変数nPosRes_x0の値の設定と、S1002におけるnPosRes_x0の値の設定と、S1004の処理とが該当する。
また、y方向区分ステップとしては、S703における変数nResidue_y0の値の設定と、S802,S803,S1011の処理とが該当する。
また、y方向画素位置計算ステップとしては、S703における変数nPosRes_y0の値の設定とS1012の処理とが該当する。
また、入力画像サイズ取得ステップとしては、S701において元画像メモリ13aに記憶されている元画像Pの画像サイズ(ix,iy)の値を取得することが該当し、出力画像サイズ入力ステップとしては、出力画像サイズ(ox,oy)が、ユーザによる操作パネル16の操作によって入力された場合に、その値を読み、出力サイズメモリ13cに出力(記憶)することが該当する。
また、縮小手段としては、画像縮小処理(図6)が該当し、縮小率取得手段としては、S701の処理が該当し、分割数取得手段としては、S702の処理が該当し、処理ブロック数演算手段としては、S801,S811の処理が該当し、平均画素値演算手段としては、S708の処理が該当する。
また、x方向区分手段としては、S703における変数nResidue_x0の値の設定と、S1002における変数nResidue_x0の値の設定と、S812,S813,S1003の処理とが該当する。
また、y方向区分手段としては、S703における変数nResidue_y0の値の設定と、S802,S803,S1011の処理とが該当する。
また、入力画像サイズ取得手段としては、S701において元画像メモリ13aに記憶されている元画像Pの画像サイズ(ix,iy)の値を取得することが該当し、出力画像サイズ入力手段としては、出力画像サイズ(ox,oy)が、ユーザによる操作パネル16の操作によって入力された場合に、その値を読み、出力サイズメモリ13cに出力(記憶)することが該当する。
以上、実施例に基づき本発明を説明したが、本発明は上述した実施例に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
例えば、上記実施形態では、画像縮小プログラム12aをプリンタ1に搭載し、プリンタ1に入力された元画像Pを縮小して出力画像Qを得る構成としたが、画像縮小プログラム12aをPC2に搭載し、PC2のCPUで画像縮小プログラム12aを実行させて、元画像Pの縮小画像である出力画像Qを得る構成であってもよい。
また、上記実施形態では、画像縮小プログラム12aを用いてソフト的に縮小を実行する構成としたが、画像縮小プログラム12aによって行われる各処理をプリンタ1又はPC2のハード構成によって演算させるように構成してもよい。
また、上記実施形態では、元画像Pのサイズとユーザによって入力された出力画像サイズとから縮小率を得る構成としたが、ユーザによって入力される値を出力画像サイズではなく縮小率とする構成であってもよい。
また、上記実施形態では、ユーザによって入力された出力画像サイズから縮小率を得る構成としたが、プリンタ1によって自動的に設定される値であってもよい。例えば、プリンタ1に装填された印刷媒体の大きさに応じて適宜縮小率が設定される構成であってもよい。
また、上記実施形態では、出力画像Qの1画素における主走査方向及び副走査方向の分割ブロックの各終点を、ガウス記号によって小数点以下を切り捨てることによって求めるように構成したが、切り上げによって求める構成であってもよい。