(57)【要約】【課題】高画質な縮小画像を得られる平均画素法を、従来に比べて高速な処理速度で実行可能な画像処理プログラム及び画像処理装置を提供すること。【解決手段】本発明の画像処理プログラム及び画像処理装置によれば、元画像をｎＤｅｖ個に分割することによって生じた分割ブロックを単位として、縮小画像の１画素における平均画素値を算出するので、縮小率に応じて生じる小数を浮動小数演算によって演算するのではなく、整数演算によって平均画素値を得ることができる。その結果、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができる。【選択図】図３
2007156585.tif 000002
【特許請求の範囲】
【請求項１】
画素数（ｉｘ×ｉｙ）からなる略矩形の元画像を所定の縮小率で縮小し、画素数（ｏｘ×ｏｙ）からなる略矩形の出力画像を得るために演算装置に実行させる画像処理プログラムにおいて、
前記縮小率を取得する縮小率取得ステップと、
前記元画像を構成する各画素を（ｎＤｅｖ×ｎＤｅｖ）（ｎＤｅｖは２以上の整数）個の分割ブロックに分割するための分割数ｎＤｅｖを取得する分割数取得ステップと、
前記出力画像の各画素毎に、該出力画像の１画素に対応する整数個の前記分割ブロックの数を、前記縮小率取得ステップにより取得された縮小率に基づいて計算する処理ブロック数演算ステップと、
前記出力画像の各画素毎に、前記処理ブロック数演算ステップにより求められた数の分割ブロックに対応する前記元画像の領域の平均画素値を計算する平均画素値演算ステップとを備えていることを特徴とする画像処理プログラム。
【請求項２】
前記処理ブロック数演算ステップは、前記縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の前記分割ブロック数として取り扱うことを特徴とする請求項１記載の画像処理プログラム。
【請求項３】
前記処理ブロック数演算ステップは、前記出力画像における１の画素に対応する前記分割ブロックの数を計算する際に、前記平均画素値演算ステップにおいて既に使用された前記分割ブロックに隣接する前記分割ブロックを始点として、前記出力画像の１画素に対応する前記分割ブロックの数を計算することを特徴とする請求項１又は２に記載の画像処理プログラム。
【請求項４】
前記平均画素値演算ステップの実行前に、前記出力画像の各画素毎に、その主走査方向を、（１ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｘ１個（ｘ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（１ｂ）前記元画像において、前記領域（１ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（１ｃ）前記元画像において、前記領域（１ｂ）に隣接し、１画素に満たないｘ２個（ｘ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する主走査方向区分ステップを備え、
前記平均画素値演算ステップは、前記主走査方向区分ステップにより区分された各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算ステップにより求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求めることを特徴とする請求項１から３のいずれかに記載の画像処理プログラム。
【請求項５】
前記領域（１ａ）を含む画素の主走査方向における画素位置を計算する主走査方向画素位置計算ステップを備えていることを特徴とする請求項４記載の画像処理プログラム。
【請求項６】
前記平均画素値演算ステップの実行前に、前記出力画像の各画素毎に、その副走査方向を、（２ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｙ１個（ｙ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（２ｂ）前記元画像において、前記領域（２ａ）に隣接し、完全な画素をＭ個（Ｍは１以上の整数）並べてなる領域と、（２ｃ）前記元画像において、前記領域（２ｂ）に隣接し、１画素に満たないｙ２個（ｙ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する副走査方向区分ステップを備え、
前記平均画素値演算ステップは、前記副走査方向区分ステップにより区分された各領域毎、又は、前記副走査方向区分ステップと前記主走査方向区分ステップとによる区分の結果として生じる各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算ステップにより求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求めることを特徴とする請求項１から５のいずれかに記載の画像処理プログラム。
【請求項７】
前記領域（２ａ）を含む画素の副走査方向における画素位置を計算する副走査方向画素位置計算ステップを備えていることを特徴とする請求項６記載の画像処理プログラム。
【請求項８】
前記入力画素の画素数（ｉｘ×ｉｙ）の値を取得する入力画像サイズ取得ステップと、
前記出力画像の画素数（ｏｘ×ｏｙ）の値を入力する出力画像サイズ入力ステップとを備え、
前記縮小率取得ステップは、前記入力画像サイズ取得ステップにより取得された前記入力画像の画素数（ｉｘ×ｉｙ）の値と、出力画像サイズ入力ステップにより入力された前記出力画像の画素数（ｏｘ×ｏｙ）の値とから、縮小率を取得することを特徴とする請求項１から７のいずれかに記載の画像処理プログラム。
【請求項９】
前記入力画素の画素数（ｉｘ×ｉｙ）から画素数（ｏｘ×ｏｙ）の前記出力画像を得るための縮小率を入力する縮小率入力ステップを備え、
前記縮小率取得ステップは、前記縮小率入力ステップにより入力された縮小率を取得することを特徴とする請求項１から８のいずれかに記載の画像処理プログラム。
【請求項１０】
画素数（ｉｘ×ｉｙ）からなる略矩形の元画像を入力する入力手段と、その入力手段から入力された元画像を所定の縮小率で縮小し、画素数（ｏｘ×ｏｙ）からなる略矩形の出力画像を得る縮小手段を備えた画像処理装置において、
前記縮小手段は、
前記縮小率を取得する縮小率取得手段と、
前記元画像を構成する各画素を（ｎＤｅｖ×ｎＤｅｖ）（ｎＤｅｖは２以上の整数）個の分割ブロックに分割するための分割数ｎＤｅｖを取得する分割数取得手段と、
前記出力画像の各画素毎に、該出力画像の１画素に対応する整数個の前記分割ブロックの数を、前記縮小率取得手段より取得された縮小率に基づいて計算する処理ブロック数演算手段と、
前記出力画像の各画素毎に、前記処理ブロック数演算手段より求められた数の分割ブロックに対応する前記元画像の領域の平均画素値を計算する平均画素値演算手段とを含むことを特徴とする画像処理装置。
【請求項１１】
前記処理ブロック数演算手段は、前記縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の前記分割ブロック数として取り扱うことを特徴とする請求項１０記載の画像処理装置。
【請求項１２】
前記処理ブロック数演算手段は、前記出力画像における１の画素に対応する前記分割ブロックの数を計算する際に、前記平均画素値演算手段において既に使用された前記分割ブロックに隣接する前記分割ブロックを始点として、前記出力画像の１画素に対応する前記分割ブロックの数を計算することを特徴とする請求項１０又は１１に記載の画像処理装置。
【請求項１３】
前記平均画素値演算手段の前に、前記出力画像の各画素毎に、その主走査方向を、（１ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｘ１個（ｘ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（１ｂ）前記元画像において、前記領域（１ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（１ｃ）前記元画像において、前記領域（１ｂ）に隣接し、１画素に満たないｘ２個（ｘ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する主走査方向区分手段を備え、
前記平均画素値演算手段は、前記主走査方向区分手段により区分された各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算手段により求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求めることを特徴とする請求項１０から１２のいずれかに記載の画像処理装置。
【請求項１４】
前記平均画素値演算手段の前に、前記出力画像の各画素毎に、その副走査方向を、（２ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｙ１個（ｙ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（２ｂ）前記元画像において、前記領域（２ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（２ｃ）前記元画像において、前記領域（２ｂ）に隣接し、１画素に満たないｙ２個（ｙ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する副走査方向区分手段を備え、
前記平均画素値演算手段は、前記副走査方向区分手段により区分された各領域毎、又は、前記副走査方向区分手段と前記主走査方向区分手段とによる区分の結果として生じる各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算手段により求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求めることを特徴とする請求項１０から１３のいずれかに記載の画像処理装置。
【請求項１５】
前記入力手段から入力された入力画素の画素数（ｉｘ×ｉｙ）の値を取得する入力画像サイズ取得手段と、
前記出力画像の画素数（ｏｘ×ｏｙ）の値を入力する出力画像サイズ入力手段とを備え、
前記縮小率取得手段は、前記入力画像サイズ取得手段により取得された前記入力画像の画素数（ｉｘ×ｉｙ）の値と、出力画像サイズ入力手段により入力された前記出力画像の画素数（ｏｘ×ｏｙ）の値とから、縮小率を取得することを特徴とする請求項１０から１４のいずれかに記載の画像処理装置。
【請求項１６】
前記入力画素の画素数（ｉｘ×ｉｙ）から画素数（ｏｘ×ｏｙ）の前記出力画像を得るための縮小率を入力する縮小率入力手段を備え、
前記縮小率取得手段は、前記縮小率入力手段により入力された縮小率を取得することを特徴とする請求項１０から１５のいずれかに記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像を縮小するための画像処理プログラム及び画像処理装置に関し、特に、高画質と処理速度の速さとを兼ね備えた画像処理プログラム及び画像処理装置に関する。
【背景技術】
【０００２】
従来より、入力画像と異なるサイズの出力画像を得るためのアルゴリズムとして、ニアレストレイバー法（最近傍法）、バイリニア法（線形補完法）、バイキュービック法（３次補完法）、平均画素法などのアルゴリズムが存在する。
【０００３】
ここで、平均画素法は、縮小画像（出力画像）における元画像の占める面積を考慮して画素値を平均することによって縮小を行う縮小専用のアルゴリズムである。多くの場合、この平均画素法を用いて得た縮小画像の方が、他のアルゴリズムを用いて得た縮小画像に比べて高画質である。
【０００４】
平均画素法を行う１つの手法としては、元画像の画像サイズを、一旦、縮小画像の画像サイズとの最小公倍数のサイズに拡大してから、画素値の平均値を得るという手法がある（例えば、特開２００３−２５６８２７号公報（特許文献１）参照）。
【０００５】
平均画素法の別の手法としては、元画像の画像サイズを拡大することなく、縮小画像に対応する元画像部分に対する画素値の平均値を得るという手法がある。図１２は、このように、縮小画像に対応する元画像部分に対する画素値の平均値を得る手法を説明するための模式図である。なお、図１２では、理解を容易にする目的で、副走査方向（ｙ方向）の縮小は考慮せず、主走査方向（ｘ方向）のみが縮小される場合を図示する。
【０００６】
図１２には、は、主走査方向に並ぶＰ’０〜Ｐ’４の５画素から構成される画像である元画像Ｐ’と、その元画像Ｐ’を縮小することによって得られたＱ’０〜Ｑ’２の３画素から構成される画像である縮小画像Ｑ’とが図示されている。この図１２に示した例のように、縮小画像Ｑ’の１画素に対応する元画像Ｐ’の画素数は整数でない場合がある。例えば、図１２に示すように、縮小画像Ｑ’における画素Ｑ’０は、元画像Ｐ’の画素Ｐ’０と画素Ｐ’１の一部とに対応する。
【０００７】
元画像の画像サイズを拡大することなく、縮小画像に対応する元画像部分に対する画素値の平均値を得る手法をとる場合には、図１３に示す処理によって平均画素法による縮小処理が行われる。図１３は、縮小画像に対応する元画像部分に対する画素値の平均値を得る手法を用いた場合に中央演算装置によって実行される従来の平均画素処理を示すフローチャートである。
【０００８】
図１３に示すように、この従来の平均画素処理は、まず、元画像Ｐ’の画像サイズ（ｉｘ’×ｉｙ’）と、ユーザによって指定された縮小画像Ｑ’の画像サイズ（ｏｘ’×ｏｙ’）とから、縮小率を算出し（Ｓ１３０１）、算出された縮小率に応じて、縮小画像Ｑ’の１画素に対応する元画像Ｐ’の範囲を決定する（Ｓ１３０２）。
【０００９】
次いで、縮小画像Ｑ’における画素の主走査方向（ｘ方向）の座標ｉ’ｏｕｔ及び副走査方向（ｙ方向）の座標ｊ’ｏｕｔを、先頭座標である（０，０）に設定し（Ｓ１３０３）、変数Ｐｌａｎｅの値を０に設定する（Ｓ１３０４）。なお、この変数Ｐｌａｎｅは、カラープレーンを指定するための変数である。ここで、画像データがＲＧＢから構成されている場合には、変数Ｐｌｅｎｅの値は０から２までの３つの値を取り得ることになる。この変数Ｐｌａｎｅの値によって、赤（Ｒ）プレーン（Ｐｌａｎｅ＝０）、緑（Ｇ）プレーン（Ｐｌａｎｅ＝１）、及び青（Ｂ）プレーン（Ｐｌａｎｅ＝２）のいずれかのカラープレーンを指定することができる。この図１３に示す例では、画像データがＲＧＢから構成されているものとして説明する。
【００１０】
Ｓ１３０４の処理後、縮小画像Ｑ’における座標（ｉ’ｏｕｔ，ｊ’ｏｕｔ）の画素に対応する元画像Ｐ’の領域における、Ｐｌａｎｅ値によって指定されたカラープレーンの画素値の平均値（平均画素値）を算出し（Ｓ１３０５）、算出した平均画素値をバッファに出力する（Ｓ１３０６）。
【００１１】
Ｓ１３０６の処理後、変数Ｐｌａｎｅの値が２であるかを確認し（Ｓ１３０７）、変数Ｐｌａｎｅの値が０又は１であれば（Ｓ１３０７：Ｎｏ）、変数Ｐｌａｎｅの値に１加算し（Ｓ１３１０）、Ｓ１３０５へ移行する。即ち、次のＰｌａｎｅ値に対応するカラープレーンに対し、Ｓ１３０５〜Ｓ１３０６の処理を実行する。
【００１２】
一方で、Ｓ１３０７の処理により確認した結果、変数Ｐｌａｎｅの値が２であれば（Ｓ１３０７：Ｙｅｓ）、縮小画像Ｑ’における座標（ｉ’ｏｕｔ，ｊ’ｏｕｔ）の画素の画素値が、全てのカラープレーン（ＲＧＢ）に対して得られたことを示すので、次に、ｉ’ｏｕｔ＝ｏｘ’であるか、即ち、出力画像Ｑにおける座標（ｉ’ｏｕｔ，ｊ’ｏｕｔ）の画素が主走査方向の終端の画素であるかを確認する（Ｓ１３０８）。
【００１３】
Ｓ１３０８の処理により確認した結果、ｉ’ｏｕｔ＝ｏｘ’でなければ（Ｓ１３０８：Ｎｏ）、ｉ’ｏｕｔの値に１加算して、縮小画像Ｑ’の画素を主走査方向に１進め（Ｓ１３１１）、Ｓ１３０４へ移行し、Ｓ１３１１において主走査方向に１進められた出力画像Ｑ’の画素に対し、Ｓ１３０４〜Ｓ１３０７，Ｓ１３１０の処理を実行する。
【００１４】
一方で、Ｓ１３０８の処理により確認した結果、ｉ’ｏｕｔ＝ｏｘ’であれば（Ｓ１３０８：Ｙｅｓ）、同じ副走査方向の座標ｊ’ｏｕｔに位置する全ての画素に対して平均画素値の算出が行われたことを示すので、次に、ｊ’ｏｕｔ＝ｏｙ’であるか、即ち、縮小画像Ｑ’における座標（ｉ’ｏｕｔ，ｊ’ｏｕｔ）の画素が副走査方向の終端の画素であるかを確認する（Ｓ１３０９）。
【００１５】
Ｓ１３０９の処理により確認した結果、ｊ’ｏｕｔ＝ｏｙ’でなければ（Ｓ１３０９：Ｎｏ）、ｊ’ｏｕｔの値に１加算すると共に（Ｓ１３１２）、ｉ’ｏｕｔの値を０に設定する（Ｓ１３１３）。Ｓ１３１２及びＳ１３１３の処理の結果として、縮小画像Ｑ’を構成する画素の中から選択される画素の位置が、副走査方向に１進められると共に、主走査方向の先頭座標に戻される。Ｓ１３１３の処理後、Ｓ１３０４へ移行し、Ｓ１３１３において副走査方向に１進められた出力画像Ｑ’の画素に対し、Ｓ１３０４〜Ｓ１３０７，Ｓ１３１０の処理を実行する。
【００１６】
一方で、Ｓ１３０９の処理により確認した結果、ｊ’ｏｕｔ＝ｏｙであれば（Ｓ１３０９：Ｙｅｓ）、縮小画像Ｑ’における全て（（ｏｘ’×ｏｙ’）個）の画素に対して平均画素値の算出が行われたことを示すので、この従来の平均画素処理を終了する。この従来の平均画素処理の実行結果として、元画像サイズ（ｉｘ’×ｉｙ’）の元画像Ｐ’から平均画素法によって縮小された出力画像サイズ（ｏｘ’×ｏｙ’）の縮小画像Ｑ’が得られる。
【００１７】
【特許文献１】特開２００３−２５６８２７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、平均画素法は、他のアルゴリズムに比べて高画質である一方で、一般的に処理速度が遅く、特に、最小公倍数を用いる上記手法によって平均画素法を実行した場合には、縮小率の値によっては最小公倍数（元画像が拡大される画像サイズ）が大きくなりすぎて、処理不能に陥ることがあるという問題点があった。
【００１９】
また、元画像の画像サイズを拡大することなく、縮小画像に対応する元画像部分に対する画素値の平均値を得るという手法によって平均画素法を実行した場合（上記した図１３のフローチャートに対応する処理）には、元画像の画像サイズを拡大する場合に比べて処理速度は向上するものの、ニアレストレイバー法やバイリニア法などの他のアルゴリズムを用いた縮小時の処理速度と比べると遅く、さらなる処理速度の向上が望まれる。
【００２０】
その原因としては、図１３におけるＳ１３０５において、浮動小数演算が行われるためであると考えられる。図１２に示した例を用いて具体的に説明すると、画像Ｑ’０に対応する画素Ｐ’１部分を、画素全体を（１−ｔ）：ｔの比で分けた（１−ｔ）に相当する部分であるとすると、図１３におけるＳ１３０５では、｛１×Ｐ’０＋（１−ｔ）×Ｐ’１｝／｛１＋（１−ｔ）｝という演算が行われて、画素Ｑ’０の画素値（平均画素値）が計算される。ここで（１−ｔ）は小数であるので、浮動小数演算が行われ、その結果として、演算処理の速度向上に限界が生じると考えられる。
【００２１】
本発明は、上述した問題点を解決するためになされたものであり、高画質な縮小画像を得られる平均画素法を、従来に比べて高速な処理速度で実行可能な画像処理プログラム及び画像処理装置を提供することを目的としている。
【課題を解決するための手段】
【００２２】
この目的を達成するために、請求項１記載の画像処理プログラムは、画素数（ｉｘ×ｉｙ）からなる略矩形の元画像を所定の縮小率で縮小し、画素数（ｏｘ×ｏｙ）からなる略矩形の出力画像を得るために演算装置に実行させるプログラムであって、前記縮小率を取得する縮小率取得ステップと、前記元画像を構成する各画素を（ｎＤｅｖ×ｎＤｅｖ）（ｎＤｅｖは２以上の整数）個の分割ブロックに分割するための分割数ｎＤｅｖを取得する分割数取得ステップと、前記出力画像の各画素毎に、該出力画像の１画素に対応する整数個の前記分割ブロックの数を、前記縮小率取得ステップにより取得された縮小率に基づいて計算する処理ブロック数演算ステップと、前記出力画像の各画素毎に、前記処理ブロック数演算ステップにより求められた数の分割ブロックに対応する前記元画像の領域の平均画素値を計算する平均画素値演算ステップとを備えている。
【００２３】
請求項２記載の画像処理プログラムは、請求項１記載の画像処理プログラムにおいて、前記処理ブロック数演算ステップは、前記縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の前記分割ブロック数として取り扱う。
【００２４】
請求項３記載の画像処理プログラムは、請求項１又は２に記載の画像処理プログラムにおいて、前記処理ブロック数演算ステップは、前記出力画像における１の画素に対応する前記分割ブロックの数を計算する際に、前記平均画素値演算ステップにおいて既に使用された前記分割ブロックに隣接する前記分割ブロックを始点として、前記出力画像の１画素に対応する前記分割ブロックの数を計算する。
【００２５】
請求項４記載の画像処理プログラムは、請求項１から３のいずれかに記載の画像処理プログラムにおいて、前記平均画素値演算ステップの実行前に、前記出力画像の各画素毎に、その主走査方向を、（１ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｘ１個（ｘ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（１ｂ）前記元画像において、前記領域（１ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（１ｃ）前記元画像において、前記領域（１ｂ）に隣接し、１画素に満たないｘ２個（ｘ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する主走査方向区分ステップを備え、前記平均画素値演算ステップは、前記主走査方向区分ステップにより区分された各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算ステップにより求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求める。
【００２６】
請求項５記載の画像処理プログラムは、請求項４記載の画像処理プログラムにおいて、前記領域（１ａ）を含む画素の主走査方向における画素位置を計算する主走査方向画素位置計算ステップを備えている。
【００２７】
請求項６記載の画像処理プログラムは、請求項１から５のいずれかに記載の画像処理プログラムにおいて、前記平均画素値演算ステップの実行前に、前記出力画像の各画素毎に、その副走査方向を、（２ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｙ１個（ｙ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（２ｂ）前記元画像において、前記領域（２ａ）に隣接し、完全な画素をＭ個（Ｍは１以上の整数）並べてなる領域と、（２ｃ）前記元画像において、前記領域（２ｂ）に隣接し、１画素に満たないｙ２個（ｙ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する副走査方向区分ステップを備え、
前記平均画素値演算ステップは、前記副走査方向区分ステップにより区分された各領域毎、又は、前記副走査方向区分ステップと前記主走査方向区分ステップとによる区分の結果として生じる各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算ステップにより求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求める。
【００２８】
請求項７記載の画像処理プログラムは、請求項６記載の画像処理プログラムにおいて、前記領域（２ａ）を含む画素の副走査方向における画素位置を計算する副走査方向画素位置計算ステップを備えている。
【００２９】
請求項８記載の画像処理プログラムは、請求項１から７のいずれかに記載の画像処理プログラムにおいて、前記入力画素の画素数（ｉｘ×ｉｙ）の値を取得する入力画像サイズ取得ステップと、前記出力画像の画素数（ｏｘ×ｏｙ）の値を入力する出力画像サイズ入力ステップとを備え、前記縮小率取得ステップは、前記入力画像サイズ取得ステップにより取得された前記入力画像の画素数（ｉｘ×ｉｙ）の値と、出力画像サイズ入力ステップにより入力された前記出力画像の画素数（ｏｘ×ｏｙ）の値とから、縮小率を取得する。
【００３０】
請求項９記載の画像処理プログラムは、請求項１から８のいずれかに記載の画像処理プログラムにおいて、前記入力画素の画素数（ｉｘ×ｉｙ）から画素数（ｏｘ×ｏｙ）の前記出力画像を得るための縮小率を入力する縮小率入力ステップを備え、前記縮小率取得ステップは、前記縮小率入力ステップにより入力された縮小率を取得する。
【００３１】
請求項１０記載の画像処理装置は、画素数（ｉｘ×ｉｙ）からなる略矩形の元画像を入力する入力手段と、その入力手段から入力された元画像を所定の縮小率で縮小し、画素数（ｏｘ×ｏｙ）からなる略矩形の出力画像を得る縮小手段を備えたものであって、前記縮小手段は、前記縮小率を取得する縮小率取得手段と、前記元画像を構成する各画素を（ｎＤｅｖ×ｎＤｅｖ）（ｎＤｅｖは２以上の整数）個の分割ブロックに分割するための分割数ｎＤｅｖを取得する分割数取得手段と、前記出力画像の各画素毎に、該出力画像の１画素に対応する整数個の前記分割ブロックの数を、前記縮小率取得手段より取得された縮小率に基づいて計算する処理ブロック数演算手段と、前記出力画像の各画素毎に、前記処理ブロック数演算手段より求められた数の分割ブロックに対応する前記元画像の領域の平均画素値を計算する平均画素値演算手段とを含む。
【００３２】
請求項１１記載の画像処理装置は、請求項１０記載の画像処理装置において、前記処理ブロック数演算手段は、前記縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の前記分割ブロック数として取り扱う。
【００３３】
請求項１２記載の画像処理装置は、請求項１０又は１１に記載の画像処理装置において、前記処理ブロック数演算手段は、前記出力画像における１の画素に対応する前記分割ブロックの数を計算する際に、前記平均画素値演算手段において既に使用された前記分割ブロックに隣接する前記分割ブロックを始点として、前記出力画像の１画素に対応する前記分割ブロックの数を計算する。
【００３４】
請求項１３記載の画像処理装置は、請求項１０から１２のいずれかに記載の画像処理装置において、前記平均画素値演算手段の前に、前記出力画像の各画素毎に、その主走査方向を、（１ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｘ１個（ｘ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（１ｂ）前記元画像において、前記領域（１ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（１ｃ）前記元画像において、前記領域（１ｂ）に隣接し、１画素に満たないｘ２個（ｘ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する主走査方向区分手段を備え、前記平均画素値演算手段は、前記主走査方向区分手段により区分された各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算手段により求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求める。
【００３５】
請求項１４記載の画像処理装置は、請求項１０から１３のいずれかに記載の画像処理装置において、前記平均画素値演算手段の前に、前記出力画像の各画素毎に、その副走査方向を、（２ａ）前記元画像において未処理部分を残す画素における該未処理部分に相当するｙ１個（ｙ１は、０以上かつｎＤｅｖ未満の整数）の前記分割ブロックからなる領域と、（２ｂ）前記元画像において、前記領域（２ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（２ｃ）前記元画像において、前記領域（２ｂ）に隣接し、１画素に満たないｙ２個（ｙ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分する副走査方向区分手段を備え、前記平均画素値演算手段は、前記副走査方向区分手段により区分された各領域毎、又は、前記副走査方向区分手段と前記主走査方向区分手段とによる区分の結果として生じる各領域毎に、画素値の総和を求め、その画素値の総和を、前記処理ブロック数演算手段により求められた出力画像の１画素に対応する前記分割ブロックの数で割ることによって求める。
【００３６】
請求項１５記載の画像処理装置は、請求項１０から１４のいずれかに記載の画像処理装置において、前記入力手段から入力された入力画素の画素数（ｉｘ×ｉｙ）の値を取得する入力画像サイズ取得手段と、前記出力画像の画素数（ｏｘ×ｏｙ）の値を入力する出力画像サイズ入力手段とを備え、前記縮小率取得手段は、前記入力画像サイズ取得手段により取得された前記入力画像の画素数（ｉｘ×ｉｙ）の値と、出力画像サイズ入力手段により入力された前記出力画像の画素数（ｏｘ×ｏｙ）の値とから、縮小率を取得する。
【００３７】
請求項１６記載の画像処理装置は、請求項１０から１５のいずれかに記載の画像処理装置において、前記入力画素の画素数（ｉｘ×ｉｙ）から画素数（ｏｘ×ｏｙ）の前記出力画像を得るための縮小率を入力する縮小率入力手段を備え、前記縮小率取得手段は、前記縮小率入力手段により入力された縮小率を取得することを特徴とする請求項１０から１５のいずれかに記載の画像処理装置。
【発明の効果】
【００３８】
請求項１記載の画像処理プログラムによれば、画素数（ｉｘ×ｉｙ）からなる略矩形の元画像を画素数（ｏｘ×ｏｙ）からなる略矩形の出力画像とするための縮小率が、縮小率取得ステップを演算装置に実行させることによって取得され、その一方で、分割数取得ステップを演算装置に実行させることにより、元画像を構成する各画素を（ｎＤｅｖ×ｎＤｅｖ）（ｎＤｅｖは２以上の整数）個の分割ブロックに分割するための分割数ｎＤｅｖが取得される。
【００３９】
次いで、処理ブロック数演算ステップを演算装置に実行させることによって、出力画像の１画素に対応する整数個の分割ブロックの数が、縮小率取得ステップの実行結果として取得された縮小率に基づいて、該出力画像の各画素毎に計算される。
【００４０】
次に、平均画素値演算ステップを演算装置に実行させることによって、処理ブロック数演算ステップの実行結果として求められた数の分割ブロックに対応する元画像領域の平均画素値が、出力画像の各画素毎に計算される。
【００４１】
よって、元画像をｎＤｅｖ個に分割することによって生じた分割ブロックを単位として、縮小画像（出力画像）の１画素における平均画素値を算出するので、縮小率に応じて生じる小数を浮動小数演算によって演算するのではなく、整数演算によって平均画素値を得ることができる。その結果、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。また、整数演算によって平均画素値を算出できるので、組み込み系への実装に適しているという効果がある。
【００４２】
また、元画像の画像サイズを、縮小画像の画像サイズとの最小公倍数のサイズに拡大することなく、縮小画像を得ることができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
【００４３】
請求項２記載の画像処理プログラムによれば、請求項１記載の画像処理プログラムの奏する効果に加えて、処理ブロック数演算ステップでは、縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の分割ブロック数として取り扱う。
【００４４】
よって、小数点以下が切り捨てられることにより１個の分割ブロックを単位として平均画素値の演算が行われる。その結果として、平均画素値を整数演算によって算出することができるので、結果として、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
【００４５】
請求項３記載の画像処理プログラムによれば、請求項１又は２に記載の画像処理プログラムの奏する効果に加えて、処理ブロック数演算ステップでは、出力画像における１の画素に対応する分割ブロックの数を計算する際に、平均画素値演算ステップの実行によって既に使用された分割ブロックに隣接する分割ブロックを始点として、出力画像の１画素に対応する分割ブロックの数の計算を行う。
【００４６】
よって、元画像に含まれる全ての画素情報が縮小画像（出力画像）を得るために用いられることになる。従って、縮小に伴う画質劣化を抑制でき、高画質な出力画像が得られるという効果がある。
【００４７】
請求項４記載の画像処理プログラムによれば、請求項１から３のいずれかに記載の画像処理プログラムの奏する効果に加えて、平均画素値演算ステップの実行前に、主走査方向区分ステップを演算装置に実行させることによって、出力画像の各画素毎に、その各画素の主走査方向が、（１ａ）元画像において未処理部分を残す画素における該未処理部分に相当するｘ１個（ｘ１は、０以上かつｎＤｅｖ未満の整数）の分割ブロックからなる領域と、（１ｂ）元画像において、領域（１ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（１ｃ）元画像において、領域（１ｂ）に隣接し、１画素に満たないｘ２個（ｘ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分される。
【００４８】
平均画素値演算ステップでは、主走査方向区分ステップの実行結果として区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算ステップの実行結果として求められた出力画像の１画素に対応する分割ブロックの数で割る。
【００４９】
よって、出力画像の１画素における主走査方向を、Ｎ個の完全な元画像の画素から構成される領域（１ｂ）と、その両側に隣接する１画素に満たない元画像の領域（１ａ，１ｃ）とを区分することによって、１画素に満たない元画像の領域（１ａ，１ｃ）に含まれる分割ブロック数を容易に算出でき、結果として、平均画素値を容易に算出できるという効果がある。
【００５０】
請求項５記載の画像処理プログラムによれば、請求項４記載の画像処理プログラムの奏する効果に加えて、主走査方向画素位置計算ステップを演算装置に実行させることによって、領域（１ａ）を含む画素の主走査方向における画素位置が計算される。
【００５１】
よって、領域（１ａ）を含む画素の主走査方向における画素位置が計算された結果として、その領域（１ａ）を含む画素の主走査方向に隣接する領域（１ｂ）の最初の画素の画素位置と、領域（１ｂ）に含まれる画素数から領域（１ｃ）を含む画素の主走査方向における画素位置とを容易に求めることができる。その結果として、出力画像の１画素が、１画素に満たない元画像の領域（１ａ）及び領域（１ｃ）を含む場合においても、平均画素値を容易に算出できるという効果がある。
【００５２】
請求項６記載の画像処理プログラムによれば、請求項１から５のいずれかに記載の画像処理プログラムの奏する効果に加えて、平均画素値演算ステップの実行前に、副走査方向区分ステップを演算装置に実行させることによって、出力画像の各画素毎に、その各画素の副走査方向が、（２ａ）元画像において未処理部分を残す画素における該未処理部分に相当するｙ１個（ｙ１は、０以上かつｎＤｅｖ未満の整数）の分割ブロックからなる領域と、（２ｂ）元画像において、領域（２ａ）に隣接し、完全な画素をＭ個（Ｍは１以上の整数）並べてなる領域と、（２ｃ）元画像において、領域（２ｂ）に隣接し、１画素に満たないｙ２個（ｙ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分される。
【００５３】
平均画素値演算ステップでは、副走査方向区分ステップの実行結果として区分された各領域毎、又は、副走査方向区分ステップ及び主走査方向区分ステップの実行結果として区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算ステップの実行結果として求められた出力画像の１画素に対応する分割ブロックの数で割る。
【００５４】
よって、出力画像の１画素における副走査方向を、Ｍ個の完全な元画像の画素から構成される領域（２ｂ）と、その両側に隣接する１画素に満たない元画像の領域（２ａ，２ｃ）とを区分することによって、画素に満たない元画像の領域（２ａ，２ｃ）に含まれる分割ブロック数を容易に算出でき、結果として、平均画素値を容易に算出できるという効果がある。
【００５５】
請求項７記載の画像処理プログラムによれば、請求項６記載の画像処理プログラムの奏する効果に加えて、副走査方向画素位置計算ステップを演算装置に実行させることによって、領域（２ａ）を含む画素の副走査方向における画素位置が計算される。
【００５６】
よって、領域（２ａ）を含む画素の副走査方向における画素位置が計算された結果として、その領域（２ａ）を含む画素の副走査方向に隣接する領域（２ｂ）の最初の画素の画素位置と、領域（２ｂ）に含まれる画素数から領域（２ｃ）を含む画素の副走査方向における画素位置とを容易に求めることができる。その結果として、出力画像の１画素が、１画素に満たない元画像の領域（２ａ）及び領域（２ｃ）を含む場合においても、平均画素値を容易に算出できるという効果がある。
【００５７】
請求項８記載の画像処理プログラムによれば、請求項１から７のいずれかに記載の画像処理プログラムの奏する効果に加えて、縮小率取得ステップでは、入力画像サイズ取得ステップの実行結果として取得された入力画像の画素数（ｉｘ×ｉｙ）の値と、出力画像サイズ入力ステップの実行結果として入力された出力画像の画素数（ｏｘ×ｏｙ）の値とから、縮小率を取得する。
【００５８】
よって、入力された出力画像サイズ（出力画像の画素数）に応じた縮小率で入力画像を縮小することができるという効果がある。なお、「縮小画像サイズ入力ステップによって入力される出力画像の画素数」は、ユーザによって指定された出力画像サイズ（出力画像の画素数）であってもよいし、条件（印刷媒体の大きさなど）に応じて自動的に決定された出力画像サイズであってもよい。
【００５９】
請求項９記載の画像処理プログラムによれば、請求項１から８のいずれかに記載の画像処理プログラムの奏する効果に加えて、縮小率取得ステップでは、縮小率入力ステップの実行結果として入力された縮小率を取得する。なお、「縮小率入力ステップの実行結果として入力される縮小率」とは、画素数（ｉｘ×ｉｙ）の入力画像から画素数（ｏｘ×ｏｙ）の出力画像を得るための縮小率、即ち、ｏｘ／ｉｘ及び／又はｏｙ／ｉｙの値である。
【００６０】
よって、入力された縮小率で入力画像を縮小することができるという効果がある。なお、「縮小率入力ステップによって入力される縮小率」は、ユーザによって指定された所望の縮小率であってもよいし、条件（印刷媒体の大きさなど）に応じて自動的に決定された縮小率であってもよい。
【００６１】
請求項１０記載の画像処理装置によれば、入力手段から入力された画素数（ｉｘ×ｉｙ）からなる略矩形の元画像が、縮小手段により、所定の縮小率で縮小されて画素数（ｏｘ×ｏｙ）からなる略矩形の出力画像とされる。
【００６２】
ここで、該縮小手段では、画素数（ｉｘ×ｉｙ）からなる元画像を画素数（ｏｘ×ｏｙ）からなる出力画像とするための縮小率が縮小率取得手段により取得され、その一方で、分割数取得手段により、元画像を構成する各画素を（ｎＤｅｖ×ｎＤｅｖ）（ｎＤｅｖは２以上の整数）個の分割ブロックに分割するための分割数ｎＤｅｖが取得される。
【００６３】
また、該縮小手段では、縮小率取得手段及び分割数取得手段の後、処理ブロック数演算手段により、出力画像の１画素に対応する整数個の分割ブロックの数が、縮小率取得手段により得られた縮小率に基づいて、該出力画像の各画素毎に計算され、さらに、平均画素値演算手段により、処理ブロック数演算手段により求められた数の分割ブロックに対応する元画像領域の平均画素値が、出力画像の各画素毎に計算される。
【００６４】
よって、元画像をｎＤｅｖ個に分割することによって生じた分割ブロックを単位として、縮小画像（出力画像）の１画素における平均画素値を算出するので、縮小率に応じて生じる小数を浮動小数演算によって演算するのではなく、整数演算によって平均画素値を得ることができる。その結果、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。また、整数演算によって平均画素値を算出できるので、組み込み系への実装に適しているという効果がある。
【００６５】
また、元画像の画像サイズを、縮小画像の画像サイズとの最小公倍数のサイズに拡大することなく、縮小画像を得ることができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
【００６６】
請求項１１記載の画像処理装置によれば、請求項１０記載の画像処理装置の奏する効果に加えて、処理ブロック数演算手段では、縮小率に基づく主走査方向又は副走査方向の分割ブロック数が小数で表された場合に、小数点以下を切り捨てることによって整数個の分割ブロック数として取り扱う。
【００６７】
よって、小数点以下が切り捨てられることにより１個の分割ブロックを単位として平均画素値の演算が行われる。その結果として、平均画素値を整数演算によって算出することができるので、結果として、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるという効果がある。
【００６８】
請求項１２記載の画像処理装置によれば、請求項１０又は１１に記載の画像処理装置の奏する効果に加えて、処理ブロック数演算手段では、出力画像における１の画素に対応する分割ブロックの数を計算する際に、平均画素値演算手段によって既に使用された分割ブロックに隣接する分割ブロックを始点として、出力画像の１画素に対応する分割ブロックの数の計算を行う。
【００６９】
よって、元画像に含まれる全ての画素情報が縮小画像（出力画像）を得るために用いられることになる。従って、縮小に伴う画質劣化を抑制でき、高画質な出力画像が得られるという効果がある。
【００７０】
請求項１３記載の画像処理装置によれば、請求項１０から１２のいずれかに記載の画像処理装置の奏する効果に加えて、平均画素値演算手段の前に、主走査方向区分手段によって、出力画像の各画素毎に、その各画素の主走査方向が、（１ａ）元画像において未処理部分を残す画素における該未処理部分に相当するｘ１個（ｘ１は、０以上かつｎＤｅｖ未満の整数）の分割ブロックからなる領域と、（１ｂ）元画像において、領域（１ａ）に隣接し、完全な画素をＮ個（Ｎは１以上の整数）並べてなる領域と、（１ｃ）元画像において、領域（１ｂ）に隣接し、１画素に満たないｘ２個（ｘ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分される。
【００７１】
平均画素値演算手段では、主走査方向区分手段により区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算手段により求められた出力画像の１画素に対応する分割ブロックの数で割る。
【００７２】
よって、出力画像の１画素における主走査方向を、Ｎ個の完全な元画像の画素から構成される領域（１ｂ）と、その両側に隣接する１画素に満たない元画像の領域（１ａ，１ｃ）とを区分することによって、領域（１ｃ）に含まれる分割ブロックの数に基づいて、出力画像において次に処理される画素における領域（１ａ）含まれる分割ブロックの数を容易に求めることができるという効果がある。
【００７３】
請求項１４記載の画像処理装置によれば、請求項１０から１３のいずれかに記載の画像処理装置の奏する効果に加えて、平均画素値演算手段の前に、副走査方向区分手段によって、出力画像の各画素毎に、その各画素の副走査方向が、（２ａ）元画像において未処理部分を残す画素における該未処理部分に相当するｙ１個（ｙ１は、０以上かつｎＤｅｖ未満の整数）の分割ブロックからなる領域と、（２ｂ）元画像において、領域（２ａ）に隣接し、完全な画素をＭ個（Ｍは１以上の整数）並べてなる領域と、（２ｃ）元画像において、領域（２ｂ）に隣接し、１画素に満たないｙ２個（ｙ２は、０以上かつｎＤｅｖ未満の整数）の残余部分からなる領域とに区分される。
【００７４】
平均画素値演算手段では、副走査方向区分手段により区分された各領域毎、又は、副走査方向区分手段及び主走査方向区分手段により区分された各領域毎に、画素値の総和を求めた上で、その画素値の総和を、処理ブロック数演算手段により求められた出力画像の１画素に対応する分割ブロックの数で割る。
【００７５】
よって、出力画像の１画素における副走査方向を、Ｍ個の完全な元画像の画素から構成される領域（２ｂ）と、その両側に隣接する１画素に満たない元画像の領域（２ａ，２ｃ）とを区分することによって、領域（２ｃ）に含まれる分割ブロックの数に基づいて、出力画像において次に処理される画素における領域（２ａ）含まれる分割ブロックの数を容易に求めることができるという効果がある。
【００７６】
請求項１５記載の画像処理装置によれば、請求項１０から１４のいずれかに記載の画像処理装置の奏する効果に加えて、入力画像サイズ取得手段により取得された入力画像の画素数（ｉｘ×ｉｙ）の値と、出力画像サイズ入力手段により入力された出力画像の画素数（ｏｘ×ｏｙ）の値とから、縮小率取得手段によって縮小率が取得される。
【００７７】
よって、入力された出力画像サイズ（出力画像の画素数）に応じた縮小率で入力画像を縮小することができるという効果がある。なお、「縮小画像サイズ入力手段により入力される出力画像の画素数」は、ユーザによって指定された出力画像サイズ（出力画像の画素数）であってもよいし、条件（印刷媒体の大きさなど）に応じて自動的に決定された出力画像サイズであってもよい。
【００７８】
請求項１６記載の画像処理装置によれば、請求項１０から１５のいずれかに記載の画像処理装置の奏する効果に加えて、縮小率入力手段により入力された縮小率が、縮小率取得手段によって取得される。なお、「縮小率入力手段により入力される縮小率」とは、画素数（ｉｘ×ｉｙ）の入力画像から画素数（ｏｘ×ｏｙ）の出力画像を得るための縮小率、即ち、ｏｘ／ｉｘ及び／又はｏｙ／ｉｙの値である。
【００７９】
よって、入力された縮小率で入力画像を縮小することができるという効果がある。なお、「縮小率入力手段により入力される縮小率」は、ユーザによって指定された所望の縮小率であってもよいし、条件（印刷媒体の大きさなど）に応じて自動的に決定された縮小率であってもよい。
【発明を実施するための最良の形態】
【００８０】
以下、本発明の好ましい実施例について、添付図面を参照して説明する。図１は、本発明の一実施形態におけるプリンタ１の電気的な構成を示したブロック図である。
【００８１】
このプリンタ１は、パーソナルコンピュータ（以下「ＰＣ」と称する）２や、デジタルカメラ２１や、外部メディア２０から入力された画像データを所定の縮小率で縮小して出力することができるように構成されている。
【００８２】
プリンタ１は、ＣＰＵ１１と、ＲＯＭ１２と、ＲＡＭ１３と、印刷ヘッドなどから構成され、印刷媒体（例えば、紙媒体など）への印刷（出力）を行う印刷部１５と、出力画像サイズなどの入力値をユーザが入力可能なユーザ操作部（例えば、テンキーなど）を有する操作パネル１６とを備えている。
【００８３】
また、プリンタ１は、ケーブル５を介してＰＣ２と接続可能なインターフェイス（以下「Ｉ／Ｆ」と称する）１７と、ケーブル６を介してデジタルカメラ２１と接続可能なＩ／Ｆ１８と、外部メディア２０（例えば、ＳＤメモリカード、メモリスティックなど）と着脱自在に装着可能な外部メディアスロット１９とを備えている。
【００８４】
よって、プリンタ１は、ＰＣ２０に記憶されている画像データをケーブル５及びＩ／Ｆ１７を介して入力することが可能であると共に、デジタルカメラ２１によって撮影された画像データをケーブル６及びＩ／Ｆ１８を介して入力することが可能である。さらに、外部メディアスロット１９に装着された外部メディア２０から、その外部メディア２１に記憶されている画像データを入力することが可能である。
【００８５】
ＣＰＵ１１は、プリンタ１全体を制御する演算処理装置（演算装置）であり、ＲＯＭ１２には、このＣＰＵ１１により実行される各種の制御プログラムや、その実行の際に参照される固定値データが格納されている。なお、ＲＯＭ１２は、後述する図６から図１０に示すフローチャートを実行して画像の縮小を行う画像縮小プログラム１２ａを記憶する領域を備えている。
【００８６】
また、ＲＡＭ１３は、ＣＰＵ１１で実行される制御プログラムに必要な各種レジスタ群などが設定されたワーキングエリアや、処理中のデータを一時的に格納するテンポラリエリア等を有しランダムにアクセスできる書き換え可能なメモリである。
【００８７】
このＲＡＭ１３は、元画像メモリ１３ａと、出力画像メモリ１３ｂと、出力サイズメモリ１３ｃと、縮小率メモリ１３ｄとを備えている。元画像メモリ１３ａは、ＰＣ２、デジタルカメラ２１、及び外部メディア２０から、それぞれ、Ｉ／Ｆ１７、Ｉ／Ｆ１８、及び外部メディアスロット１９を介してプリンタ１へ入力された画像データであって、縮小元となる元画像（以下、便宜上「元画像Ｐ」と記載する）の画像データ（以下、元画像Ｐの画像データを「元画像データ」と称する）を記憶するものである。
【００８８】
出力画像メモリ１３ｂは、画像縮小プログラム１２ａ（後述する図６から図１０に示すフローチャートを実行するプログラム）に従い、元画像メモリ１３ａに記憶されている元画像データを縮小することによって生成された出力画像（以下、便宜上「出力画像Ｑ」と記載する）の画像データ（以下、出力画像Ｑの画像データを「出力画像データ」と称する）を記憶するものである。なお、本実施形態では、元画像データ及び出力画像データはいずれも、ＲＧＢから構成されている。
【００８９】
出力サイズメモリ１３ｃは、ユーザによる操作パネル１６の操作によって入力された出力画像Ｑのサイズ（即ち、出力画像サイズ）を記憶するものであり、縮小率メモリ１３ｄは、元画像メモリ１３ａに記憶されている元画像Ｐのサイズと出力サイズメモリ１３ｃに記憶されている出力画像サイズとから算出される縮小率を記憶するものである。
【００９０】
ここで、後述するように、画像縮小プログラム１２ａは、元画像メモリ１３ａに記憶されている元画像データを、縮小率メモリ１３ｄに記憶されている縮小率で縮小することによって、出力画像データに生成する。よって、上記した出力画像メモリ１３ｂには、画像縮小プログラム１２ａに従う縮小によって生成された出力画像データが記憶されている。
【００９１】
次に、図２を参照して、上記のように構成されたプリンタ１による縮小機能を説明する。図２は、プリンタ１による縮小機能を示す機能ブロック図である。図２に示すように、プリンタ１は、入力手段（非図示）から入力された画像サイズ（ｉｘ．ｉｙ）の元画像データを、同じく入力手段（非図示）から入力された出力画像サイズ（ｏｘ．ｏｙ）に縮小し、出力手段（非図示）から、出力画像サイズ（ｏｘ．ｏｙ）の出力画像データとして出力する部分である縮小部１００を備えている。
【００９２】
より詳細には、縮小部１００は、画像サイズ比較部１０１と、縮小率算出部１０２と、処理ブロック数算出部１０３と、処理ブロック縮小部１０４と、分割数決定部１０５とから構成されている。
【００９３】
画像サイズ比較部１０１は、入力手段（非図示）から入力された元画像データの画像サイズ（ｉｘ．ｉｙ）と出力画像サイズ（ｏｘ，ｏｙ）との比較を行う部分であり、その比較結果を縮小率算出部１０２へ出力する。
【００９４】
縮小率算出部１０２は、画像サイズ比較部１０１から入力された比較結果から縮小率を算出する部分であり、算出された縮小率を処理ブロック数算出部へ出力する。なお、元画像Ｐの画像サイズが（ｉｘ，ｉｙ）であり、出力画像サイズが（ｏｘ，ｏｙ）である場合、その縮小率は、主走査方向に（ｏｘ／ｉｘ）であり、副走査方向に（ｏｙ／ｉｙ）である。
【００９５】
分割数決定部１０５は、入力手段（非図示）から入力された元画像データと出力画像サイズとプリンタ１の処理能力を示す値と１画素が取り得る色データ（パレット）の数とに基づいて、元画像Ｐにおける１画素に対する分割数ｎＤｅｖを算出する部分であり、算出された分割数ｎＤｅｖを処理ブロック数算出部１０３へ出力する。
【００９６】
ここで、分割数ｎＤｅｖは、元画像Ｐの各画素の主走査方向（ｘ方向）と副走査方向（ｙ方向）とをそれぞれいくつに分割したかを表す数であり、元画像Ｐの各画素を分割数ｎＤｅｖで分割した結果として、各画素はそれぞれ（ｎＤｅｖ×ｎＤｅｖ）個の断片（以下、このように１画素を分割数ｎＤｅｖに分割した結果として得られた個々の断片を「分割ブロック」と称する）に分割される。なお、分割数ｎＤｅｖは、２以上の整数であるので、１画素は、整数個（（ｎＤｅｖ×ｎＤｅｖ）個）の分割ブロックに分割されることになる。
【００９７】
ただし、この分割数ｎＤｅｖの値は、演算処理装置であるＣＰＵ１１によって処理可能な範囲内の数値でなければならないので、分割数決定部１０５では、分割数ｎＤｅｖの値を、演算処理装置であるＣＰＵ１１によって処理可能な範囲内の数値に決定する。分割数決定部１０５において、分割数ｎＤｅｖの値を、演算処理装置であるＣＰＵ１１によって処理可能な範囲内の数値に決定するための構成については、図３を参照しつつ後述する。
【００９８】
処理ブロック数算出部１０３は、縮小率算出部１０２から入力された縮小率と、分割数決定部１０５から入力された分割数ｎＤｅｖとから、出力画像Ｑの１画素に相当する分割ブロックの数を算出する部分であり、算出された分割ブロックの数を平均画素値算出部１０４へ出力する。
【００９９】
平均画素値算出部１０４は、処理ブロック数算出部１０３から入力された分割ブロックの数に対応する元画像データ領域の平均画素値を算出する部分である。なお、詳細は図３及び図４を参照しつつ後述するが、この平均画素値算出部１０４において平均画素値を算出する際には、出力画像Ｑの１画素に含まれる分割ブロックを細区分した上で平均画素値を算出する。
【０１００】
ここで、処理ブロック数算出部１０３による分割ブロック数の算出と、平均画素値算出部１０４による平均画素値の算出は、出力画像Ｑの画素数分だけ繰り返される。そして、出力画像Ｑにおける全ての画素に対して、平均画素値算出部１０４による平均画素値の算出が行われると、入力手段（非図示）から入力された元画像データが、入力手段（非図示）から入力された出力画像サイズに縮小された出力画像データが出力手段（非図示）から出力される。
【０１０１】
次に、図３を参照して、分割数決定部１０５に対するより詳細な構成について説明する。図３は、分割数決定部１０５の機能を示す機能ブロック図である。図３に示すように、分割数決定部１０５は、最大ブロック数算出部１０５ａと、分割数計算部１０５ｂとから構成されている。
【０１０２】
最大ブロック数算出部１０５ａは、出力画像Ｑの１画素が取り得る分割ブロックの数の最大値を算出する部分である。
【０１０３】
元画像Ｐの画像サイズ（画素数）を（ｉｘ×ｉｙ）とし、出力画像Ｑの画像サイズ（画素数）を（ｏｘ×ｏｙ）とした場合、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素に含まれる分割ブロックについて、主走査方向及び副走査方向にそれぞれ取り得る最大値（ｎＢｌｏｃｋ＿ｘ）ｍａｘ及び（ｎＢｌｏｃｋ＿ｙ）ｍａｘは、下記式（１ａ）および（１ｂ）で表される値となる。
【０１０４】
【数１】
2007156585.tif 000003
【０１０５】
ここで、ｎＢｌｏｃｋ＿ｘ（０）及びｎＢｌｏｃｋ＿ｙ（０）は、それぞれ、出力画像Ｑにおける先頭座標（０，０）の画素に含まれる画素に含まれる主走査方向及び副走査方向の分割ブロックの数である。また、演算記号［］はガウス記号であり、その数を超えない最大の整数を表す記号である。
【０１０６】
最大ブロック数算出部１０５ａは、上記した式（１ａ）および（１ｂ）の計算を行い、その算出結果を分割数計算部１０５ｂへ出力する。
【０１０７】
分割数計算部１０５ｂは、最大ブロック数算出部１０５ａから入力された最大ブロック数の最大値を用いて、分割数ｎＤｅｖの値を、演算処理装置であるＣＰＵ１１によって処理可能な範囲内の数値として算出する。
【０１０８】
ここで、本実施形態における高速平均画素処理（図６におけるＳ６０２の処理）がプリンタ１の演算処理装置であるＣＰＵ１１で実行可能であるためには、ＣＰＵ１１による処理能力を示す値の最大値をＶａｌｕｅＭａｘとし、１画素が取り得る色データ（パレット）の最大値をＰａｌｌｅｔＭａｘとした場合に、下記不等式（２）が満たされなければならない。
【０１０９】
【数２】
2007156585.tif 000004
【０１１０】
なお、１画素が取り得る色データ（パレット）の最大値であるＰａｌｌｅｔＭａｘは、１画素を構成するビット数（例えば、８ビットや１６ビット）の最大値とされる。即ち、例えば、１画素を構成するビット数が８ビットである場合には、ＰａｌｌｅｔＭａｘの値は２５６となる。
【０１１１】
ここで、ｉｘ／ｏｘの余りをｒｘとし、ｉｙ／ｏｙの余りをｒｙとすると共に、（ｉｘ−ｒｘ）／ｏｘをＤｘと表し、（ｉｙ−ｒｙ）／ｏｙをＤｙと表すと、上記式（２）を満たすｎＤｅｖは、ｎＤｅｖは２以上の整数であることを考慮すると、下記不等式（３）を満たす整数となる。
【０１１２】
【数３】
2007156585.tif 000005
【０１１３】
この不等式（３）を満たす分割数ｎＤｅｖであれば、縮小時におけるＣＰＵ１１のオーバーフローが確実に防止される。
【０１１４】
ここで、ＶａｌｕｅＭａｘ及びＰａｌｌｅｔＭａｘの値は、ＣＰＵ１１によって決まる値であるので、分割数計算部１０５ｂでは、これらのＶａｌｕｅＭａｘ及びＰａｌｌｅｔＭａｘと、最大ブロック数算出部１０５ａから入力された最大ブロック数の最大値とから、上記不等式（３）を満たす分割数ｎＤｅｖを算出し、算出された分割数ｎＤｅｖの値を処理ブロック数算出部１０３へ出力する。
【０１１５】
以上のように、分割数ｎＤｅｖの値は、ＣＰＵ１１（演算処理装置）の処理能力を示す値の最大値ＶａｌｕｅＭａｘに対し、縮小率（即ち、ｉｘ／ｏｘ及びｉｙ／ｏｙ）を考慮して決定される。よって、元画像Ｐを種々の出力画像サイズに縮小する場合においても、上記不等式（３）を満たすのであれば、分割数ｎＤｅｖの値を縮小率に応じて適宜使い分けることが可能となる。
【０１１６】
特に、分割数ｎＤｅｖの値が大きい程、個々の分割ブロックの大きさが細かくなる（即ち、分解能が高くなる）ので、分割ブロック単位を利用することによって生じ得る誤差が小さく、出力画像Ｑの画質は向上する。よって、縮小率に応じて上記式（３）を満たす最大の分割数ｎＤｅｖを使用することにより、どのような縮小率に対しても可能な限りで最高の画質を有する出力画像Ｑを得ることができるのである。
【０１１７】
また、分割数ｎＤｅｖの値は、ＣＰＵ１１（演算処理装置）の処理能力を示す値の最大値ＶａｌｕｅＭａｘに対し、１画素が取り得る色データ（パレット）の最大値（ＰａｌｌｅｔＭａｘ）を考慮して決定されるので、種々のビットカラーに応じて、分割数ｎＤｅｖの値を適宜使い分けることが可能となる。
【０１１８】
上記構成を有するプリンタ１で実行される画像縮小処理（図６参照）について説明する前に、図４及び図５を参照して、画像縮小処理の一部である高速平均画素処理（図６におけるＳ６０２の処理）において使用される変数について説明する。図４及び図５は、いずれも、本実施形態の高速平均画素処理（図６におけるＳ６０２の処理）において使用される変数を説明するための模式図である。
【０１１９】
まず、本発明の理解を容易にする目的で、図４では、副走査方向（ｙ方向）の縮小は考慮せず、主走査方向（ｘ方向）を後述する高速平均画素処理（図６におけるＳ６０２の処理）に供する場合に必要とされる変数について説明する。図４に示すように、元画像Ｐは、主走査方向に並ぶＰ０〜Ｐ４の５画素から構成される画像であり、出力画像Ｑは、元画像Ｐを後述する画像縮小処理（図６参照）の結果として得られる画像である。
【０１２０】
後述する画像縮小処理（図６参照）、特に、高速平均画素処理（図６におけるＳ６０２の処理）では、１画素を整数個に分割した分割ブロックの単位で取り扱うことを特徴とする。ここで、「ｎＤｅｖ」は、分割数決定部１０５（図２参照）を説明する際に述べたように、元画像Ｐの１画素に対する分割数、即ち、元画像Ｐにおける各画素をそれぞれいくつに分割したかを表す変数である。図４に示す例では、元画像Ｐの各画素が４つに分割されているので、分割数ｎＤｅｖの値は４である（図４における細点線参照）。
【０１２１】
なお、この分割数ｎＤｅｖの値は、演算処理装置であるＣＰＵ１１によって処理可能な範囲内の数値でなければならない。また、分割数ｎＤｅｖの値が大きいほど、個々の分割ブロックの大きさが細かくなり（即ち、分解能が高くなり）、その結果として、分割ブロック単位を利用することによって生じ得る誤差が小さくなることから、出力画像Ｑの画質向上という点において好ましい。よって、分割数ｎＤｅｖの値は、ＣＰＵ１１によって処理可能な数値のうちの最大値であることが最も好ましい。
【０１２２】
図４に示すように、出力画像Ｑは、縮小の結果としてＱ０〜Ｑ２の３画素の出力画像サイズに縮小されている。図４に示すように、画素Ｑ０は、画素Ｐ０と、画素Ｐ１における画素Ｐ０に隣接する２個の分割ブロックとを縮小して得られる画素である。また、画素Ｑ１は、画素Ｐ１における画素Ｑ０の縮小のために使用されなかった残りの２個の分割ブロックと、画素Ｐ１に隣接する画素Ｐ２と、画素Ｐ３における画素Ｐ２に隣接する１個の分割ブロックとを縮小して得られる画素である。画素Ｑ２は、画素Ｐ３における画素Ｑ１の縮小のために使用されなかった残りの３個の分割ブロックと、画素Ｐ３に隣接する画素Ｐ４とを縮小して得られる画素である。
【０１２３】
本実施形態では、分割ブロックの単位で、出力画像Ｑの画素に対応する元画像Ｐの領域を取得するので、縮小率に応じた実際の元画像Ｐの領域に対して誤差を生じる。例えば、図４において、縮小率に応じた実際の画素Ｑ１に対応する元画像Ｐの領域の始点ｓ’の位置は、分割ブロックの単位で得られた元画像の領域の始点ｓの位置とは異なる。しかし、分割数ｎＤｅｖの値が大きいほど、個々の分割ブロックの大きさが細かくなる（即ち、分解能が高くなる）ため、上記のような始点ｓ'の位置と始点ｓの位置との誤差は小さくなる。その結果、分割ブロック単位を利用することに伴って生じる誤差（始点ｓと始点ｓ’との誤差）に起因する画質の劣化を抑制することができる。従って、上記したように、分割数ｎＤｅｖの値は大きい値であるほど好ましく、ＣＰＵ１１によって処理可能な数値のうちの最大値であることが最も好ましい。
【０１２４】
元画像Ｐ及び出力画像Ｑの始点の画素をそれぞれ画素Ｐ０及び画素Ｑ０とした場合、後述する高速平均画素処理（図６におけるＳ６０２の処理）では、画素Ｑ０→画素Ｑ２の順で高速平均画素処理が順次実行される。なお、図４では、画素Ｑ１を得るための処理が行われている場合を例示している。
【０１２５】
ここで、「ｎＢｌｏｃｋ＿ｘ」は、出力画像の１画素に対応する元画像Ｐの領域に含まれる分割ブロック数であって、主走査方向の分割ブロックの数を表す変数である。上記したように、画素Ｑ１は、画素Ｐ１における画素Ｑ０の縮小のために使用されなかった残りの２個の分割ブロックと、画素Ｐ１に隣接する画素Ｐ２と、画素Ｐ３における画素Ｐ２に隣接する１個の分割ブロックとを縮小して得られる画素であるので、図４示す例における変数ｎＢｌｏｃｋ＿ｘの値は、７（＝２＋４＋１）である。
【０１２６】
なお、後述する高速平均画素処理（図６におけるＳ６０２の処理）では、主走査方向において縮小がなされる（ｎＢｌｏｃｋ＿ｘ）個の分割ブロックは３区分に分けて処理される。具体的には、処理中の分割ブロックは、前回の高速平均画素処理において未処理のまま残された１画素に満たない元画像の領域（以下、この領域を「前方残余領域」と称する）に含まれる分割ブロックと、この前方残余領域に隣接し、完全な１画素をＮ個（Ｎは１以上の整数）並べてなる元画像の領域（以下、この領域を「中央領域」と称する）に含まれる分割ブロックと、この中央領域に隣接し、変数ｎＢｌｏｃｋ＿ｘで表される数の分割ブロックのうち、前方残余領域にも中央領域にも含まれずに残された１画素に満たない元画像の領域（以下、この領域を「後方残余領域」と称する）に含まれる分割ブロックとに分けて処理される。
【０１２７】
ここで、「ｎＲｅｓｉｄｕｅ＿ｘ０」は、主走査方向における前方残余領域に含まれる分割ブロックの数を表す変数であり、「ｎＭａｉｎ＿ｘ」は、主走査方向における中央領域に含まれる画素数を表す変数であり、「ｎＲｅｓｉｄｕｅ＿ｘ１」は、主走査方向における後方残余領域に含まれる分割ブロックの数を表す変数である。
【０１２８】
図４に示す例では、変数ｎＲｅｓｉｄｕｅ＿ｘ０の値は、画素Ｐ１における画素Ｑ０の縮小のために使用されなかった残り部分に対する主走査方向の分割ブロックの数である２であり、変数ｎＭａｉｎ＿ｘの値は、中央領域に相当するのは画素Ｐ２だけであるので１である。さらに、変数ｎＲｅｓｉｄｕｅ＿ｘ１の値は、画素Ｐ３における画素Ｐ２に隣接する１画素未満となる主走査方向の分割ブロックの数である１である。
【０１２９】
また、「ｎＰｏｓＲｅｓ＿ｘ０」は、元画像における、前方残余領域を含む画素に対する主走査方向の座標を表す変数であり、「ｎＰｏｓＭａｉｎ＿ｘ０」は、元画像における、中央領域に含まれるＮ個の画素のうち、最初の画素（前方残余領域に隣接する画素）に対する主走査方向の座標を表す変数であり、「ｎＰｏｓＲｅｓ＿ｘ１」は、元画像における、後方残余領域を含む画素に対する主走査方向の座標を表す変数である。
【０１３０】
ここで、図４に示す例では、変数ｎＰｏｓＲｅｓ＿ｘ０の値は、前方残余領域を含む画素Ｐ１に対する主走査方向の座標であり、変数ｎＭａｉｎＲｅｓ＿ｘ０の値は、中央領域に含まれる唯一の画素である画素Ｐ２に対する主走査方向の座標であり、変数ｎＰｏｓＲｅｓ＿ｘ１の値は、後方残余領域を含む画素Ｐ３に対する主走査方向の座標である。
【０１３１】
一方で、「ｎＲｅａｄＢｌｏｃｋ＿ｘ」は、前回までの高速平均画素処理（図６におけるＳ６０２の処理）において処理済み（使用済み）である主走査方向の分割ブロック数を表す変数である。図４に示す例では、画像Ｑ１に対応する分割ブロックが既に処理済みであるので、変数ｎＲｅａｄＢｌｏｃｋ＿ｘの値は、画像Ｑ１に対応する元画像Ｐの領域に含まれる主走査方向の分割ブロック数、即ち、６（＝４＋２）である。
【０１３２】
以上、理解を容易にするために、主走査方向（ｘ方向）のみの縮小を考え、その縮小の際に必要とされる変数について説明したが、実際には副走査方向（ｙ方向）にも縮小されるので、副走査方向（ｙ方向）の縮小を考慮すると図５に示すようになる。この図５では、元画像Ｐの画素と出力画像Ｑの画素とが重ねて表されており、これらの画素の区別を容易にするために、出力画像Ｑの画素として、処理中の１画素のみを図示し、元画像Ｐの画素の１つを斜線によってハッチングした。
【０１３３】
また、図５では、図５に示すように、元画像Ｐは主走査方向及び副走査方向共に分割数４（＝ｎＤｅｖ）で分割されているので、元画像Ｐの各画素はそれぞれ１６（＝ｎＤｅｖ×ｎＤｅｖ）個の分割ブロックに分割されている（図５における細点線参照）。
【０１３４】
ここで、副走査方向の縮小に必要とされる変数である「ｎＢｌｏｃｋ＿ｙ」は、上記した主走査方向の縮小に必要とされる変数「ｎＢｌｏｃｋ＿ｘ」に対応する変数であり、出力画像の１画素に対応する元画像Ｐの領域に含まれる分割ブロック数であって、副走査方向の分割ブロックの数を表す変数である。
【０１３５】
変数「ｎＲｅａｄＢｌｏｃｋ＿ｙ」は、上記した主走査方向の縮小に必要とされる変数「ｎＲｅａｄＢｌｏｃｋ＿ｘ」に対応する変数であり、前回までの高速平均画素処理において既に処理済みである副走査方向の分割ブロック数を表す変数である。
【０１３６】
また、副走査方向についても、後述する高速平均画素処理（図６におけるＳ６０２の処理）では、上記した主走査方向と同様に、縮小がなされる（ｎＢｌｏｃｋ＿ｙ）個の分割ブロックを、前方残余領域と中央領域と後方残余領域との３区分に分けて処理する。
【０１３７】
変数「ｎＲｅｓｉｄｕｅ＿ｙ０」は、上記した主走査方向の縮小に必要とされる変数「ｎＲｅｓｉｄｕｅ＿ｘ０」に対応する変数であり、副走査方向における前方残余領域に含まれる分割ブロックの数を表す変数である。また、変数「ｎＭａｉｎ＿ｙ」は、上記した主走査方向の縮小に必要とされる変数「ｎＭａｉｎ＿ｘ」に対応する変数であり、副走査方向における中央領域に含まれる画素数を表す変数である。また、変数「ｎＲｅｓｉｄｕｅ＿ｙ１」は、上記した主走査方向の縮小に必要とされる変数「ｎＲｅｓｉｄｕｅ＿ｘ１」に対応する変数であり、副走査方向における後方残余領域に含まれる分割ブロックの数を表す変数である。
【０１３８】
図５に示すように、（ｎＢｌｏｃｋ＿ｘ）×（ｎＢｌｏｃｋ＿ｙ）個からなる分割ブロックは、主走査方向に３区分（ｎＲｅｓｉｄｕｅ＿ｘ０，ｎＭａｉｎ＿ｘ，ｎＲｅｓｉｄｕｅ＿ｘ１）に分けると共に、副走査方向に３区分（ｎＲｅｓｉｄｕｅ＿ｙ０，ｎＭａｉｎ＿ｙ，ｎＲｅｓｉｄｕｅ＿ｙ１）に分けた結果として、Ａ１〜Ａ９までの９個の領域に分割される。
【０１３９】
なお、変数「ｎＰｏｓＲｅｓ＿ｙ０」は、上記した主走査方向の縮小に必要とされる変数「ｎＰｏｓＲｅｓ＿ｘ０」に対応する変数であり、元画像における、前方残余領域を含む画素に対する副走査方向の座標を表す変数である。また、変数「ｎＰｏｓＭａｉｎ＿ｙ０」は、上記した主走査方向の縮小に必要とされる変数「ｎＰｏｓＭａｉｎ＿ｘ０」に対応する変数であり、元画像における、中央領域に含まれるＭ個（Ｍは１以上の整数）の画素のうち、最初の画素（前方残余領域に隣接する画素）に対する副走査方向の座標を表す変数である。また、変数「ｎＰｏｓＲｅｓ＿ｙ１」は、上記した主走査方向の縮小に必要とされる変数「ｎＰｏｓＲｅｓ＿ｘ１」に対応する変数であり、元画像における、後方残余領域を含む画素に対する副走査方向の座標を表す変数である。
【０１４０】
また、領域Ａ１に含まれる分割ブロック数は、（ｎＲｅｓｉｄｕｅ＿ｘ０×ｎＲｅｓｉｄｕｅ＿ｙ０）個であり、領域Ａ２に含まれる分割ブロック数は、（ｎＭａｉｎ＿ｘ×ｎＤｅｖ×ｎＲｅｓｉｄｕｅ＿ｙ０）個であり、領域Ａ３に含まれる分割ブロック数は、（ｎＲｅｓｉｄｕｅ＿ｘ１×ｎＲｅｓｉｄｕｅ＿ｙ０）個である。
【０１４１】
同様に、領域Ａ４に含まれる分割ブロック数は、（ｎＲｅｓｉｄｕｅ＿ｘ０×ｎＭａｉｎ＿ｙ×ｎＤｅｖ）個であり、領域Ａ５に含まれる分割ブロック数は、（ｎＭａｉｎ＿ｘ×ｎＭａｉｎ＿ｙ×ｎＤｅｖ２）個であり、領域Ａ６に含まれる分割ブロック数は、（ｎＲｅｓｉｄｕｅ＿ｘ１×ｎＭａｉｎ＿ｙ×ｎＤｅｖ）個である。
【０１４２】
さらに、領域Ａ７に含まれる分割ブロック数は、（ｎＲｅｓｉｄｕｅ＿ｘ０×ｎＲｅｓｉｄｕｅ＿ｙ１）個であり、領域Ａ８に含まれる分割ブロック数は、（ｎＭａｉｎ＿ｘ×ｎＤｅｖ×ｎＲｅｓｉｄｕｅ＿ｙ１）個であり、領域Ａ９に含まれる分割ブロック数は、（ｎＲｅｓｉｄｕｅ＿ｘ１×ｎＲｅｓｉｄｕｅ＿ｙ１）個である。
【０１４３】
詳細は後述するが、本実施形態における高速平均画素処理（図６におけるＳ６０２の処理）では、このように、元画像Ｐの各画素をｎＤｅｖ個の分割ブロックに分割し、分割ブロックの単位で処理することによって、最小公倍数に拡大することなく、また、演算の際に浮動小数点を使用することなく、出力画像Ｑの１画素の画素値を得ることができるので、平均画素法による縮小を高速化することができるのである。
【０１４４】
次に、図６のフローチャートを参照して、上記構成を有するプリンタ１で実行される画像縮小処理について説明する。図６は、プリンタ１で実行される画像縮小処理を示すフローチャートである。この画像縮小処理は、（ｉｘ×ｉｙ）の画像サイズ（画素数）を有する略矩形の元画像Ｐ（元画像データ）がプリンタ１に入力されると（例えば、ケーブル６及びＩ／Ｆ１８を介してデジタルカメラ２１から元画像Ｐが入力されると）、起動する処理である。
【０１４５】
図６に示すように、この画像縮小処理では、まず、プリンタ１に入力された元画像データを元画像メモリ１３ａに記憶して（Ｓ６０１）、元画像メモリ１３ａに記憶された元画像データを、高速化された平均画素法を用いて、ユーザによって入力された出力画像サイズ（ｏｘ×ｏｙ）に縮小し、（ｏｘ×ｏｙ）の画像サイズ（画素数）を有する略矩形の出力画像データ（出力画像Ｑ）を生成する高速平均画素処理を実行する（Ｓ６０２）。なお、この高速平均画素処理（Ｓ６０２）における詳細な処理については図７を参照して後述する。
【０１４６】
高速平均画素処理（Ｓ６０２）の実行後、得られた出力画像データに対し、エッジの先鋭化処理を行う（Ｓ６０３）。Ｓ６０３で行われるエッジの先鋭化処理については、本発明の要旨ではないと共に公知の技術であるので、具体的な説明は省略するが、例えば、３×３のマトリクスで構成される先鋭化フィルタ（例えば、ラプラシアンフィルタ）を用い、出力画像データの各画素値をフィルタ処理することが挙げられる。
【０１４７】
Ｓ６０３の処理後、高速平均画素処理（Ｓ６０２）の結果として出力画像メモリ１３ｂに記憶されている出力画像データを回転しながら印刷部１５へ出力し（Ｓ６０４）、この画像縮小処理を終了する。Ｓ６０４の結果として、元画像Ｐがユーザ指定された出力画像サイズに縮小された出力画像Ｑが印刷部１５において印刷媒体に印刷される。
【０１４８】
次に、図７のフローチャートを参照して、上記した画像縮小処理（図６参照）で実行される高速平均画素処理（Ｓ６０２）について説明する。図７は、高速平均画素処理（Ｓ６０２）を示すフローチャートである。
【０１４９】
図７に示すように、高速平均画素処理（Ｓ６０２）では、まず、元画像メモリ１３ａに記憶されている元画像Ｐの画像サイズ（ｉｘ×ｉｙ）と、出力サイズメモリ１３ｃに記憶されている出力画像サイズとから、縮小率を算出し、算出された縮小率を縮小率メモリに記憶する（Ｓ７０１）。なお、出力サイズメモリ１３ｃに記憶されている出力画像サイズ（ｏｘ×ｏｙ）は、ユーザによって操作パネル１６から別途入力されている値である。
【０１５０】
Ｓ７０１の処理後、分割数ｎＤｅｖの値を算出する（Ｓ７０２）。本実施形態では、Ｓ７０２において、出力画像Ｑの画質を可能な限り最高にする分割数ｎＤｅｖを算出するものとする。即ち、本実施形態では、Ｓ７０２では、分割数ｎＤｅｖを下記式（４）によって得る。
【０１５１】
【数４】
2007156585.tif 000006
【０１５２】
ここで、Ｄｘは、（ｉｘ−ｒｘ）／ｏｘであり、ｒｘは、ｉｘ／ｏｘの余りであり、Ｄｙは、（ｉｙ−ｒｙ）／ｏｙであり、ｒｙはｉｙ／ｏｙの余りであり、ＶａｌｕｅＭａｘは、前記演算装置の処理能力を示す値の最大値であり、ＰａｌｌｅｔＭａｘは、１画素が取り得る色データ（パレット）の最大値である。
【０１５３】
上記式（４）によって得られる分割数ｎＤｅｖは、上記した不等式（３）を満たす最大の分割数ｎＤｅｖであるので、縮小時におけるＣＰＵ１１のオーバーフローが確実に防止される値であると共に、ＣＰＵ１１によって出力し得る最高の画質の縮小画像ということになる。
【０１５４】
Ｓ７０２の処理後、変数ｎＲｅａｄＢｌｏｃｋ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ０、ｎＰｏｓＲｅｓ＿ｘ０、ｎＲｅａｄＢｌｏｃｋ＿ｙ、ｎＲｅｓｉｄｕｅ＿ｙ０、及びｎＰｏｓＲｅｓ＿ｙ０の値をいずれも０に設定し（Ｓ７０３）、出力画像Ｑにおける画素の主走査方向の座標ｉｏｕｔ及び副走査方向の座標ｊｏｕｔを、先頭座標である（０，０）に設定する（Ｓ７０４）。
【０１５５】
Ｓ７０４の処理後、副走査方向ブロック処理を実行する（Ｓ７０５）。詳細は図８（ａ）を参照しつつ後述するが、副走査方向ブロック処理（Ｓ７０５）の実行によって、座標出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素に対応する元画像Ｐに対し、副走査方向の変数であるｎＢｌｏｃｋ＿ｙ、ｎＭａｉｎ＿ｙ、ｎＲｅｓｉｄｕｅ＿ｙ１、ｎＰｏｓＭａｉｎ＿ｙ０、及びｎＰｏｓＲｅｓ＿ｙ１の値がいずれも整数値として得られる。
【０１５６】
副走査方向ブロック処理（Ｓ７０５）の実行後、主走査方向ブロック処理を実行する（Ｓ７０６）。詳細は図８（ｂ）を参照しつつ後述するが、主走査方向ブロック処理（Ｓ７０６）の実行によって、座標出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素に対応する元画像Ｐに対し、主走査方向の変数であるｎＢｌｏｃｋ＿ｘ、ｎＭａｉｎ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ１、ｎＰｏｓＭａｉｎ＿ｘ０、及びｎＰｏｓＲｅｓ＿ｘ１の値がいずれも整数値として得られる。
【０１５７】
主走査方向ブロック処理（Ｓ７０６）の実行後、変数Ｐｌａｎｅの値を０に設定する。なお、本実施形態では、画像データがＲＧＢから構成されているので、変数Ｐｌｅｎｅの値は０から２までの３つの値を取り得、この変数Ｐｌａｎｅの値によって、赤（Ｒ）プレーン（Ｐｌａｎｅ＝０）、緑（Ｇ）プレーン（Ｐｌａｎｅ＝１）、及び青（Ｂ）プレーン（Ｐｌａｎｅ＝２）のいずれかのカラープレーンが指定される。
【０１５８】
Ｓ７０７の処理後、Ｓ７０７又は後述するＳ７１２により設定されたＰｌａｎｅ値に対応するカラープレーンの画素値を取得する縮小画像出力処理（Ｓ７０８）を実行する。なお、詳細は図９を参照しつつ後述するが、この縮小画像出力処理（Ｓ７０８）では、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素に対応する元画像Ｐの領域におけるＰｌａｎｅ値によって指定されたカラープレーンの平均画素値の計算を行う。
【０１５９】
縮小画像出力処理（Ｓ７０８）の実行後、変数Ｐｌａｎｅの値が２であるかを確認し（Ｓ７０９）、変数Ｐｌａｎｅの値が０又は１であれば（Ｓ７０９：Ｎｏ）、変数Ｐｌａｎｅの値に１加算し（Ｓ７１２）、縮小画像出力処理（Ｓ７０８）へ移行する。即ち、次のＰｌａｎｅ値に対応するカラープレーンに対し、縮小画像出力処理（Ｓ７０８）を実行する。
【０１６０】
一方で、Ｓ７０９の処理により確認した結果、変数Ｐｌａｎｅの値が２であれば（Ｓ７０９：Ｙｅｓ）、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素の画素値が、全てのカラープレーン（ＲＧＢ）に対して得られたことを示すので、次に、ｉｏｕｔ＝ｏｘであるか、即ち、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素が主走査方向の終端の画素であるかを確認する（Ｓ７１０）。
【０１６１】
Ｓ７１０の処理により確認した結果、ｉｏｕｔ＝ｏｘでなければ（Ｓ７１０：Ｎｏ）、ｉｏｕｔの値に１加算して、出力画像Ｑの画素を主走査方向に１進め（Ｓ７１３）、主走査方向次回初期値取得処理を実行する（Ｓ７１４）。なお、詳細は図１０（ａ）を参照しつつ後述するが、この主走査方向次回初期値取得処理（Ｓ７１４）では、変数ｎＲｅａｄＢｌｏｃｋ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ０、ｎＰｏｓＲｅｓ＿ｘ０の値の更新を図る。
【０１６２】
主走査方向次回初期値取得処理（Ｓ７１４）の実行後、主走査方向ブロック処理（Ｓ７０６）へ移行し、Ｓ７１３において主走査方向に１進められた出力画像Ｑの画素に対応する変数ｎＢｌｏｃｋ＿ｘ、ｎＭａｉｎ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ１、ｎＰｏｓＭａｉｎ＿ｘ０、及びｎＰｏｓＲｅｓ＿ｘ１の値が得られる。
【０１６３】
一方で、Ｓ７１０の処理により確認した結果、ｉｏｕｔ＝ｏｘであれば（Ｓ７１０：Ｙｅｓ）、同じ副走査方向の座標ｊｏｕｔに位置する全ての画素に対し、縮小画像出力処理（Ｓ７０８）が実行されて画素値が得られたことを示すので、次に、ｊｏｕｔ＝ｏｙであるか、即ち、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素が副走査方向の終端の画素であるかを確認する（Ｓ７１１）。
【０１６４】
Ｓ７１１の処理により確認した結果、ｊｏｕｔ＝ｏｙでなければ（Ｓ７１１：Ｎｏ）、ｊｏｕｔの値に１加算すると共に（Ｓ７１５）、ｉｏｕｔの値を０に設定する（Ｓ７１６）。Ｓ７１５及びＳ７１６の処理の結果として、出力画像Ｑを構成する画素の中から選択される画素の位置が、副走査方向に１進められると共に、主走査方向の先頭座標に戻される。
【０１６５】
Ｓ７１６の処理後、副走査方向次回初期値取得処理を実行する（Ｓ７１７）。なお、詳細は図１０（ｂ）を参照しつつ後述するが、副走査方向次回初期値取得処理（Ｓ７１７）では、変数ｎＲｅａｄＢｌｏｃｋ＿ｙ、ｎＲｅｓｉｄｕｅ＿ｙ０、ｎＰｏｓＲｅｓ＿ｙ０の値の更新を図る。
【０１６６】
副走査方向次回初期値取得処理（Ｓ７１７）の実行後、主走査方向次回初期値取得処理を実行する（Ｓ７１８）。この主走査方向次回初期値取得処理（Ｓ７１８）もまた、主走査方向次回初期値取得処理（Ｓ７１４）と同様に、変数ｎＲｅａｄＢｌｏｃｋ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ０、ｎＰｏｓＲｅｓ＿ｘ０の値を得る処理である。なお、詳細は図１０（ａ）を参照しつつ後述するが、主走査方向次回初期値取得処理（Ｓ７１８）は、出力画像Ｑの主走査方向先頭座標に対する処理であるので、変数ｎＲｅａｄＢｌｏｃｋ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ０、ｎＰｏｓＲｅｓ＿ｘの値はいずれも０に設定される。
【０１６７】
主走査方向次回初期値取得処理（Ｓ７１８）の実行後、副走査方向ブロック処理（Ｓ７０５）へ移行し、Ｓ７１５において副走査方向に１進められた出力画像Ｑの画素に対応する変数ｎＢｌｏｃｋ＿ｙ、ｎＭａｉｎ＿ｙ、ｎＲｅｓｉｄｕｅ＿ｙ１、ｎＰｏｓＭａｉｎ＿ｙ０、及びｎＰｏｓＲｅｓ＿ｙ１の値が得られる。
【０１６８】
一方で、ｊｏｕｔ＝ｏｙであれば（Ｓ７１１：Ｙｅｓ）、出力画像Ｑにおける全て（（ｏｘ×ｏｙ）個）の画素に対し、縮小画像出力処理（Ｓ７０８）が実行されて画素値が得られたことを示すので、この高速平均画素処理（Ｓ６０２）を終了する。この高速平均画素処理（Ｓ６０２）によって、元画像サイズ（ｉｘ×ｉｙ）の元画像Ｐを縮小して得られた出力画像サイズ（ｏｘ×ｏｙ）の出力画像Ｑに対する出力画像データが、出力画像メモリ１３ｂに記憶されることになる。
【０１６９】
次に、図８のフローチャートを参照して、上記した高速平均画素処理（図７参照）で実行される副走査方向ブロック処理（Ｓ７０５）及び主走査方向ブロック処理（Ｓ７０６）について説明する。図８（ａ）は、副走査方向ブロック処理（Ｓ７０５）を示すフローチャートであり、図８（ｂ）は、主走査方向ブロック処理（Ｓ７０６）を示すフローチャートである。
【０１７０】
図８（ａ）に示すように、副走査方向ブロック処理（Ｓ７０５）では、まず、変数ｎＢｌｏｃｋ＿ｙの値を、式ｎＢｌｏｃｋ＿ｙ＝ｊｏｕｔ×［（ｉｙ／ｏｙ）×ｎＤｅｖ］−ｎＲｅａｄＢｌｏｃｋ＿ｙから求める（Ｓ８０１）。
【０１７１】
このＳ８０１の結果として、出力画像Ｑの１画素における副走査方向の分割ブロックの数（ｎＢｌｏｃｋ＿ｙ）は、高速平均画素処理（Ｓ６０２）において既に処理済みである副走査方向の分割ブロックに隣接する分割ブロックを始点として抽出されることになる。
【０１７２】
また、出力画像Ｑの１画素における副走査方向の分割ブロックの終点を、副走査方向の縮小率（ｏｙ／ｉｙ）の値に依らず、ガウス記号によって小数点以下を切り捨てることによって求めるので、結果として、変数ｎＢｌｏｃｋ＿ｙを、分割ブロックの数、即ち、整数で表すことができる。
【０１７３】
Ｓ８０１の処理後、Ｓ８０１において求めた変数ｎＢｌｏｃｋ＿ｙの値を用いて、変数ｎＭａｉｎ＿ｙの値を、式ｎＭａｉｎ＿ｙ＝［（ｎＢｌｏｃｋ＿ｙ−ｎＲｅｓｉｄｕｅ＿ｙ０）／ｎＤｅｖ］から求める（Ｓ８０２）。
【０１７４】
Ｓ８０２の処理後、Ｓ８０２において求めた変数ｎＭａｉｎ＿ｙの値を用いて、変数ｎＲｅｓｉｄｕｅ＿ｙ１を、式ｎＲｅｓｉｄｕｅ＿ｙ１＝ｎＢｌｏｃｋ＿ｙ−ｎＲｅｓｉｄｕｅ＿ｙ０−（ｎＭａｉｎ＿ｙ×ｎＤｅｖ）から求める（Ｓ８０３）。
【０１７５】
次に、変数ｎＰｏｓＭａｉｎ＿ｙ０の値を、式＝ｎＰｏｓＲｅｓ＿ｙ０＋１から求め（Ｓ８０４）、求めた変数ｎＰｏｓＭａｉｎ＿ｙ０の値を用いて、変数ｎＰｏｓＲｅｓ＿ｙ１の値を、式ｎＰｏｓＲｅｓ＿ｙ１＝ｎＰｏｓＭａｉｎ＿ｙ０×＋ｎＭａｉｎ＿ｙ＋１から求め（Ｓ８０５）、この副走査方向ブロック処理（Ｓ７０５）を終了する。
【０１７６】
図８（ｂ）に示すように、主走査方向ブロック処理（Ｓ７０６）では、まず、変数ｎＢｌｏｃｋ＿ｘの値を、式ｎＢｌｏｃｋ＿ｘ＝ｊｏｕｔ×［（ｉｘ／ｏｘ）×ｎＤｅｖ］−ｎＲｅａｄＢｌｏｃｋ＿ｘから求める（Ｓ８１１）。
【０１７７】
このＳ８１１の結果として、出力画像Ｑの１画素における主走査方向の分割ブロックの数（ｎＢｌｏｃｋ＿ｘ）は、高速平均画素処理（Ｓ６０２）において既に処理済みである主走査方向の分割ブロックに隣接する分割ブロックを始点として抽出されることになる。
【０１７８】
また、出力画像Ｑの１画素における主走査方向の分割ブロックの終点を、主走査方向の縮小率（ｏｘ／ｉｘ）の値に依らず、ガウス記号によって小数点以下を切り捨てることによって求めるので、結果として、変数ｎＢｌｏｃｋ＿ｘを、分割ブロックの数、即ち、整数で表すことができる。
【０１７９】
Ｓ８１１の処理後、Ｓ８１１において求めた変数ｎＢｌｏｃｋ＿ｘの値を用いて、変数ｎＭａｉｎ＿ｘの値を、式ｎＭａｉｎ＿ｘ＝［（ｎＢｌｏｃｋ＿ｘ−ｎＲｅｓｉｄｕｅ＿ｘ０）／ｎＤｅｖ］から求める（Ｓ８１２）。
【０１８０】
Ｓ８１２の処理後、Ｓ８１２において求めた変数ｎＭａｉｎ＿ｘの値を用いて、変数ｎＲｅｓｉｄｕｅ＿ｘ１を、式ｎＲｅｓｉｄｕｅ＿ｘ１＝ｎＢｌｏｃｋ＿ｘ−ｎＲｅｓｉｄｕｅ＿ｘ０−（ｎＭａｉｎ＿ｘ×ｎＤｅｖ）から求める（Ｓ８１３）。
【０１８１】
次に、変数ｎＰｏｓＭａｉｎ＿ｘ０の値を、式＝ｎＰｏｓＲｅｓ＿ｘ０＋１から求め（Ｓ８１４）、求めた変数ｎＰｏｓＭａｉｎ＿ｘ０の値を用いて、変数ｎＰｏｓＲｅｓ＿ｘ１の値を、式ｎＰｏｓＲｅｓ＿ｘ１＝ｎＰｏｓＭａｉｎ＿ｘ０×＋ｎＭａｉｎ＿ｘ＋１から求め（Ｓ８１５）、この主走査方向ブロック処理（Ｓ７０６）を終了する。
【０１８２】
これら副走査方向ブロック処理（Ｓ７０５）及び主走査方向ブロック処理（Ｓ７０６）の結果として、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素は、Ａ１〜Ａ９の領域（図５参照）に区分されることになる。
【０１８３】
このように、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素は、完全な元画像Ｐの画素から構成される領域（Ａ５）と、元画像Ｐの１画素に満たない領域（Ａ１〜Ａ４，Ａ６〜Ａ９）とに区分されているので、１画素に満たない領域（Ａ１〜Ａ４，Ａ６〜Ａ９）の分割ブロック数も、その領域における（主走査方向の分割ブロック数×副走査方向の分割ブロック数）の計算によって容易に算出することができる。その結果として、次に図９を参照しつつ説明する縮小画素出力処理（Ｓ７０８）における各領域の部分画素値の算出（Ｓ９０１参照）や、最終的な平均画素値の算出（Ｓ９０３）を容易に行い得るのである。
【０１８４】
また、Ｓ８０１及びＳ８１１における演算式において小数点以下の切り捨てが行われるので、主走査方向の縮小率（ｏｘ／ｉｘ）及び副走査方向の縮小率（ｏｙ／ｉｙ）に依ることなく、変数ｎＢｌｏｃｋ＿ｘ及び変数ｎＢｌｏｃｋ＿ｙの値を整数で表すことができる。その結果として、次に図９を参照しつつ説明する縮小画素出力処理（Ｓ７０８）による平均画素値の算出が整数演算によって行われるので、処理速度の向上（処理時間の短縮）を図ることができることになる。
【０１８５】
また、Ｓ８０１及びＳ８１１の結果として、出力画像Ｑの１画素における主走査方向の分割ブロックの数（ｎＢｌｏｃｋ＿ｘ）及び副走査方向の分割ブロックの数（ｎＢｌｏｃｋ＿ｙ）は、いずれも、高速平均画素処理（Ｓ６０２）において既に処理済みである分割ブロックに隣接する分割ブロックを始点として抽出されることになる。その結果、次に図９を参照しつつ説明する縮小画素出力処理（Ｓ７０８）による平均画素値の算出では、元画像Ｐに含まれる画像情報を漏れなく全て使用することになるので、縮小に伴う画質劣化を抑制できることになる。
【０１８６】
次に、図９のフローチャートを参照して、上記した高速平均画素処理（図７参照）で実行される縮小画素出力処理（Ｓ７０８）について説明する。図９は、縮小画素出力処理（Ｓ７０８）を示すフローチャートである。
【０１８７】
図９に示すように、この縮小画像出力処理（Ｓ７０８）では、まず、主走査方向ブロック処理（Ｓ７０６）及び副走査方向ブロック処理（Ｓ７０５）の結果として区分された各領域毎に、Ｐｌａｎｅ値に対応するカラープレーンの部分画素値を計算する（Ｓ９０１）。なお、本実施形態における「部分画素値」とは、各領域における（Ｐｌａｎｅ値に対応するカラープレーンの画素値×その画素に含まれる分割ブロック数）の総和によって得られる値を意味するものとする。
【０１８８】
Ｓ９０１において、例えば、領域Ａ１の部分画素値は、（領域Ａ１におけるＰｌａｎｅ値に対応するカラープレーンの画素値×領域Ａ１に含まれる分割ブロック数）、即ち、（元画像Ｐの座標（ｎＲｅｓｉｄｕｅ＿ｘ０，ｎＲｅｓｉｄｕｅ＿ｙ０）の画素におけるＰｌａｎｅ値に対応するカラープレーンの画素値×ｎＲｅｓｉｄｕｅ＿ｘ０×ｎＲｅｓｉｄｕｅ＿ｙ０）から得ることができる。なお、このとき、ｎＲｅｓｉｄｕｅ＿ｘ０の値が０である場合には、領域Ａ１の部分画素値は０と計算される。
【０１８９】
Ｓ９０１の処理後、各領域毎に計算された部分画素値を合計し（Ｓ９０２）、得られた合計値を、処理中の画素に含まれる総分割ブロック数（ｎＢｌｏｃｋ＿ｘ×ｎＢｌｏｃｋ＿ｙ）で除して平均画素値を算出する（Ｓ９０３）。
【０１９０】
Ｓ９０３の処理後、算出した平均画素値を、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の画素の画素値として出力画像メモリ１３ｂに記憶し（Ｓ９０４）、この縮小画素出力処理（Ｓ７０８）を終了する。
【０１９１】
即ち、この縮小画素出力処理（Ｓ７０８）が１回実行される毎に、出力画像Ｑにおける座標（ｉｏｕｔ，ｊｏｕｔ）の１画素の画素値が出力画像メモリ１３ｂに記憶されることになる。このとき、出力画像メモリ１３ｂに記憶される出力画像Ｑの１画素の画素値は、その画素に対応する元画像Ｐの領域の平均画素値である。
【０１９２】
次に、図１０のフローチャートを参照して、上記した高速平均画素処理（図７参照）で実行される主走査方向次回初期値取得処理（Ｓ７１４，Ｓ７１７）及び副走査方向次回初期値取得処理（Ｓ７１８）について説明する。図１０（ａ）は、主走査方向次回初期値取得処理（Ｓ７１４，Ｓ７１７）を示すフローチャートであり、図１０（ｂ）は、副走査方向次回初期値取得処理（Ｓ７１８）を示すフローチャートである。
【０１９３】
図１０（ａ）に示すように、主走査方向次回初期値取得処理（Ｓ７１４，Ｓ７１７）では、まず、ｉｏｕｔ＝０かを確認し（Ｓ１００１）、ｉｏｕｔ＝０であれば（Ｓ１００１：Ｙｅｓ）、変数ｎＲｅａｄＢｌｏｃｋ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ０、及びｎＰｏｓＲｅｓ＿ｘ０の値をいずれも０に設定し（Ｓ１００２）、この主走査方向次回初期値取得処理（Ｓ７１４，Ｓ７１７）を終了する。
【０１９４】
一方で、Ｓ１００１の処理により確認した結果、ｉｏｕｔの値が０でなければ（Ｓ１００１：Ｎｏ）、変数ｎＲｅｓｉｄｕｅ＿ｘ０の値を、式ｎＲｅｓｉｄｕｅ＿ｘ０＝ｎＤｅｖ−ｎＲｅｓｉｄｕｅ＿ｘ１から求める（Ｓ１００３）。
【０１９５】
Ｓ１００３の処理後、変数ｎＰｏｓＲｅｓ＿ｘ０の値を、式ｎＰｏｓＲｅｓ＿ｘ０＝ｎＰｏｓＲｅｓ＿ｘ１から求め（Ｓ１００４）、変数ｎＲｅａｄＢｌｏｃｋ＿ｘの値を、式ｎＲｅａｄＢｌｏｃｋ＿ｘ＝ｎＲｅａｄＢｌｏｃｋ＿ｘ＋ｎＢｌｏｃｋ＿ｘから求め（Ｓ１００５）、この主走査方向次回初期値取得処理（Ｓ７１４，Ｓ７１７）を終了する。
【０１９６】
図１０（ｂ）に示すように、副走査方向次回初期値取得処理（Ｓ７１８）では、まず、変数ｎＲｅｓｉｄｕｅ＿ｙ０の値を、式ｎＲｅｓｉｄｕｅ＿ｙ０＝ｎＤｅｖ−ｎＲｅｓｉｄｕｅ＿ｙ１から求める（Ｓ１０１１）。
【０１９７】
Ｓ１００３の処理後、変数ｎＰｏｓＲｅｓ＿ｙ０の値を、式ｎＰｏｓＲｅｓ＿ｙ０＝ｎＰｏｓＲｅｓ＿ｙ１から求め（Ｓ１０１２）、変数ｎＲｅａｄＢｌｏｃｋ＿ｙの値を、式ｎＲｅａｄＢｌｏｃｋ＿ｙ＝ｎＲｅａｄＢｌｏｃｋ＿ｙ＋ｎＢｌｏｃｋ＿ｙから求め（Ｓ１０１３）、この副走査方向次回初期値取得処理（Ｓ７１８）を終了する。
【０１９８】
これらの主走査方向次回初期値取得処理（Ｓ７１４，Ｓ７１７）及び副走査方向次回初期値取得処理（Ｓ７１８）の結果として、次回、主走査方向ブロック処理（Ｓ７０６）及び副走査方向ブロック処理（Ｓ７０５）を実行する上で必要となる変数ｎＲｅａｄＢｌｏｃｋ＿ｘ、ｎＲｅｓｉｄｕｅ＿ｘ０、ｎＰｏｓＲｅｓ＿ｘ０、ｎＲｅａｄＢｌｏｃｋ＿ｙ、ｎＲｅｓｉｄｕｅ＿ｙ０、及びｎＰｏｓＲｅｓ＿ｙ０の値が得られる。
【０１９９】
特に、変数ｎＰｏｓＲｅｓ＿ｘ０及び変数ｎＰｏｓＲｅｓ＿ｙ０の値が求められることによって、次回処理する出力画像Ｑの画素において領域Ａ１〜Ａ９に対応する元画像Ｐの画素位置（画素の座標）を容易に特定することができる。その結果、１画素に満たない領域（Ａ１〜Ａ４，Ａ６〜Ａ９）を含む元画像Ｐの領域に対しても、上記した縮小画素出力処理（Ｓ７０８,図９参照）による平均画素の算出を容易に行い得る。
【０２００】
次に、図１１を参照して、上記した高速平均画素処理（Ｓ５０２）を含む本実施形態の画像縮小処理（図５）を用いた場合の優位性を実証する。なお、以下では、高速平均画素処理（Ｓ５０２）を含む本実施形態の画像縮小処理による縮小手法を「高速平均画素法」称する。図１１は、本実施形態の高速平均画素法を用いた場合の処理時間と、その他の縮小手法を用いた場合の処理時間との比較図である。
【０２０１】
図１１には、本実施形態の高速平均画素法などの各種縮小手法を用いて、８００万画素（２４４８×３２６４）の元画像Ｐ（自然画）を、種々の画像サイズの出力画像Ｑに縮小する場合の処理時間の結果が列挙されている。
【０２０２】
なお、これらの縮小処理（本実施形態の画像縮小処理（図５）を含む）を行う際に用いたスペックは、ＣＰＵ（本実施形態のＣＰＵ１１に相当）として、Ｐｅｎｔｉｕｍ４  ３．４ＧＨ（なお、Ｐｅｎｔｉｕｍは登録商標である）を使用し、メモリとして２ＧＢのサイズのＲＡＭ（本実施形態のＲＡＭ１３に相当）を使用した。
【０２０３】
また、図１１に示すように、出力画素Ｑの画像サイズは、２００万画素（１２００×１６００）、３００万画素（１５３６×２０４８）、４００万画素（１７２８×２３０４）、５００万画素（１９２０×２５６０）、６００万画素（２１１２×２８１６）、及び７００万画素（２３０４×３０７２）とした。
【０２０４】
図１１に示すように、本実施形態の高速平均画素法（分割数ｎＤｅｖ＝１２８）を用いた場合には、２００万画素、３００万画素、４００万画素、５００万画素、６００万画素、及び７００万画素の出力画像Ｑを得るための処理時間は、それぞれ、１３９１ｍｓ、１７１９ｍｓ、１９３８ｍｓ、２１５６ｍｓ、２３７５ｍｓ、及び２６７２ｍｓであった。
【０２０５】
一方で、従来の平均画素法であって、最小公倍数を用いる手法（図１１における「従来の平均画素法（最小公倍数）」）を用いた場合には、図１１に示すように、２００万画素の出力画像Ｑは処理時間１０４６ｍｓで得ることができたものの、３００万画素〜７００万画素の出力画像Ｑは処理が終わらない（処理不能）という結果が得られた。
【０２０６】
なお、従来の平均画素法（最小公倍数）における、２００万画素の出力画像Ｑを得るための処理時間は、本実施形態の高速平均画素法による処理時間に比べて短くなっているが、これは、出力画像Ｑの画像サイズ（１２２４×１６３２）が元画像Ｐの画像サイズ（２４４８×３２６４）の丁度１／２であり、最小公倍数の値が元画像Ｐの画像サイズそのものとなるためである。
【０２０７】
このように、従来の平均画素法（最小公倍数）を用いたとしても、最小公倍数の値が比較的小さく決まる場合には、本実施形態の高速平均画素法よりも速く処理できることもある。しかし、多くの場合は、最小公倍数の値は相当に大きくなるので、処理不能に陥るか、処理不能に陥らなかったとしても処理速度は相当に遅い。
【０２０８】
従って、図１１に示す結果は、本実施形態の高速平均画素法は、従来の平均画素法（最小公倍数）の問題点であった処理速度の遅さを解決し、高画質な縮小画像を高速で得ることができることを示している。
【０２０９】
さらに一方で、図１３を参照しつつ説明した従来の平均画素法「従来の平均画素法（浮動小数）」）を用いた場合には、２００万画素、３００万画素、４００万画素、５００万画素、６００万画素、及び７００万画素の出力画像Ｑを得るための処理時間は、それぞれ、１４２２ｍｓ、１７６５ｍｓ、２０３１ｍｓ、２３９０ｍｓ、２６４１ｍｓ、及び２９２２ｍｓであった。
【０２１０】
ここで、図１１からも明らかなように、この従来の平均画素法（浮動小数）及び上記した本実施形態の高速平均画素法を用いた場合の処理時間（処理速度）は、ニアレストレイバー法やバイリニア法に比べて遅い。しかし、平均画素法によって得た出力画像Ｑ（縮小画像）が、ニアレストレイバー法やバイリニア法では得ることのできない高画質な画像である点を考慮すれば、本実施形態の高速平均画素法や従来の平均画素法（浮動小数）による処理時間は、ニアレストレイバー法やバイリニア法による処理時間と遜色ない値であるといえる。
【０２１１】
図１１に示すように、従来の平均画素法（浮動小数）による処理時間の値は、いずれの画像サイズの出力画像Ｑを得る場合に対しても、本実施形態の高速平均画素法による処理時間の値よりも大きかった。この結果は、本実施形態の高速平均画素法の使用によって「従来の平均画素法（浮動小数）」を用いた場合よりも処理速度が向上したことを示す。
【０２１２】
このような処理速度の向上は、出力画像Ｑの画像サイズが大きいほどその向上度合いが大きく、２００万画素及び３００万画素の出力画像Ｑを得る場合には、２〜３％程度、処理速度が向上し、４００万画素の出力画像を得る場合には、５％程度、処理速度が向上し、５００万画素、６００万画素、及び７００万画素の出力画像Ｑを得る場合には、１０％程度、処理速度が向上した。
【０２１３】
従って、図１１に示す結果は、本実施形態の高速平均画素法による縮小は、従来の平均画素法（浮動小数）による縮小に比べて、有意に速い処理速度で実行されることを示している。
【０２１４】
また、分割数ｎＤｅｖの値を１２８から２５６に増加させて本実施形態の高速平均画素法を用いた場合についても処理時間の計測を行った。２００万画素及び４００万画素の出力画像Ｑを得る場合についてのみ計測を行ったが、得られた結果は分割数ｎＤｅｖ＝１２８の場合に比べ、１〜２％程度であるが減少した。
【０２１５】
上記したように、分割数ｎＤｅｖの値が大きいほど高画質な出力画像Ｑが得られるので、この結果は、本実施形態の高速平均画素法は、分割数ｎＤｅｖの値を１２８から２５６にすることによって、より高画質な出力画像Ｑをより速い処理速度で得られることを示している。
【０２１６】
なお、本実施形態では、ＣＰＵをＰｅｎｔｉｕｍ４  ３．４ＧＨとし、メモリを２ＧＢのサイズのＲＡＭとするマシンスペックで処理時間の計測を行ったが、ＲＡＭのメモリサイズが同じであっても、キャッシュサイズの異なるＣＰＵを用いることによって処理時間（処理速度）が変わる。
【０２１７】
以上、説明したように、本実施形態のプリンタ１は、画像縮小プログラム１２ａを実行することによって、元画像ＰをｎＤｅｖ個に分割することによって生じた分割ブロックを単位として、出力画像Ｑ（縮小画像）の１画素における平均画素値を算出するので、整数演算によって平均画素値を得ることができる。即ち、縮小率に応じて生じる小数に対して行われる浮動小数演算を省くことができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるのである。
【０２１８】
また、本実施形態のプリンタ１で実行される画像縮小プログラム１２ａは、上記のように整数演算によって平均画素値を算出するので、組み込み系への実装に適している。
【０２１９】
また、本実施形態のプリンタ１は、画像縮小プログラム１２ａを実行することによって、元画像Ｐの画像サイズを、出力画像サイズとの最小公倍数のサイズに拡大することなく、出力画像Ｑを得ることができるので、平均画素法の処理速度が従来に比べて格段に向上し、速い速度で高画質な縮小画像を得ることができるのである。
【０２２０】
さらに、本実施形態のプリンタ１で実行される画像縮小プログラム１２ａは、分割数ｎＤｅｖの値を、演算処理装置であるＣＰＵ１１によって処理可能な範囲内の数値に決定するので、縮小時におけるＣＰＵ１１のオーバーフローを確実に防止できる。
【０２２１】
また、本実施形態のプリンタ１で実行される画像縮小プログラム１２ａは、分割数ｎＤｅｖの値を、ＣＰＵ１１によって処理可能な範囲内の数値のうちの最大値に決定するので、元画像Ｐを分割数ｎＤｅｖに分割することによって生じた分割ブロックの大きさは、演算処理装置によって処理可能な範囲において最も細かい大きさとなる。即ち、かかる場合において、個々の分割ブロックの大きさの分解能が最も高くなるので、分割ブロック単位を利用することによって生じ得る誤差が確実に小さくなる。その結果、ＣＰＵ１１によって処理可能な範囲内において最高画質の縮小画像（出力画像）を得ることができるのである。
【０２２２】
なお、請求項１記載の縮小率取得ステップとしては、Ｓ７０１の処理が該当し、請求項１記載の分割数取得ステップとしては、Ｓ７０２の処理が該当し、請求項１記載の処理ブロック数演算ステップとしては、Ｓ８０１，Ｓ８１１の処理が該当し、請求項１記載の平均画素値演算ステップとしては、Ｓ７０８の処理が該当する。
【０２２３】
また、請求項４記載の主走査方向区分ステップとしては、Ｓ７０３における変数ｎＲｅｓｉｄｕｅ＿ｘ０の値の設定と、Ｓ１００２における変数ｎＲｅｓｉｄｕｅ＿ｘ０の値の設定と、Ｓ８１２，Ｓ８１３，Ｓ１００３の処理とが該当する。
【０２２４】
また、請求項５記載の主走査方向画素位置計算ステップとしては、Ｓ７０３における変数ｎＰｏｓＲｅｓ＿ｘ０の値の設定と、Ｓ１００２におけるｎＰｏｓＲｅｓ＿ｘ０の値の設定と、Ｓ１００４の処理とが該当する。
【０２２５】
また、請求項６記載の副走査方向区分ステップとしては、Ｓ７０３における変数ｎＲｅｓｉｄｕｅ＿ｙ０の値の設定と、Ｓ８０２，Ｓ８０３，Ｓ１０１１の処理とが該当する。
【０２２６】
また、請求項７記載の副走査方向画素位置計算ステップとしては、Ｓ７０３における変数ｎＰｏｓＲｅｓ＿ｙ０の値の設定とＳ１０１２の処理とが該当する。
【０２２７】
また、請求項８記載の入力画像サイズ取得ステップとしては、Ｓ７０１において元画像メモリ１３ａに記憶されている元画像Ｐの画像サイズ（ｉｘ，ｉｙ）の値を取得することが該当し、請求項８記載の出力画像サイズ入力ステップとしては、出力画像サイズ（ｏｘ，ｏｙ）が、ユーザによる操作パネル１６の操作によって入力された場合に、その値を読み、出力サイズメモリ１３ｃに出力（記憶）することが該当する。
【０２２８】
また、請求項１０記載の縮小手段としては、画像縮小処理（図６）が該当し、請求項１０記載の縮小率取得手段としては、Ｓ７０１の処理が該当し、請求項１０記載の分割数取得手段としては、Ｓ７０２の処理が該当し、請求項１０記載の処理ブロック数演算手段としては、Ｓ８０１，Ｓ８１１の処理が該当し、請求項１０記載の平均画素値演算手段としては、Ｓ７０８の処理が該当する。
【０２２９】
また、請求項１３記載の主走査方向区分手段としては、Ｓ７０３における変数ｎＲｅｓｉｄｕｅ＿ｘ０の値の設定と、Ｓ１００２における変数ｎＲｅｓｉｄｕｅ＿ｘ０の値の設定と、Ｓ８１２，Ｓ８１３，Ｓ１００３の処理とが該当する。
【０２３０】
また、請求項１４記載の副走査方向区分手段としては、Ｓ７０３における変数ｎＲｅｓｉｄｕｅ＿ｙ０の値の設定と、Ｓ８０２，Ｓ８０３，Ｓ１０１１の処理とが該当する。
【０２３１】
また、請求項１５記載の入力画像サイズ取得手段としては、Ｓ７０１において元画像メモリ１３ａに記憶されている元画像Ｐの画像サイズ（ｉｘ，ｉｙ）の値を取得することが該当し、請求項１５記載の出力画像サイズ入力手段としては、出力画像サイズ（ｏｘ，ｏｙ）が、ユーザによる操作パネル１６の操作によって入力された場合に、その値を読み、出力サイズメモリ１３ｃに出力（記憶）することが該当する。
【０２３２】
以上、実施例に基づき本発明を説明したが、本発明は上述した実施例に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
【０２３３】
例えば、上記実施形態では、画像縮小プログラム１２ａをプリンタ１に搭載し、プリンタ１に入力された元画像Ｐを縮小して出力画像Ｑを得る構成としたが、画像縮小プログラム１２ａをＰＣ２に搭載し、ＰＣ２のＣＰＵで画像縮小プログラム１２ａを実行させて、元画像Ｐの縮小画像である出力画像Ｑを得る構成であってもよい。
【０２３４】
また、上記実施形態では、画像縮小プログラム１２ａを用いてソフト的に縮小を実行する構成としたが、画像縮小プログラム１２ａによって行われる各処理をプリンタ１又はＰＣ２のハード構成によって演算させるように構成してもよい。
【０２３５】
また、上記実施形態では、元画像Ｐのサイズとユーザによって入力された出力画像サイズとから縮小率を得る構成としたが、ユーザによって入力される値を出力画像サイズではなく縮小率とする構成であってもよい。
【０２３６】
また、上記実施形態では、ユーザによって入力された出力画像サイズから縮小率を得る構成としたが、プリンタ１によって自動的に設定される値であってもよい。例えば、プリンタ１に装填された印刷媒体の大きさに応じて適宜縮小率が設定される構成であってもよい。
【０２３７】
また、上記実施形態では、出力画像Ｑの１画素における主走査方向及び副走査方向の分割ブロックの各終点を、ガウス記号によって小数点以下を切り捨てることによって求めるように構成したが、切り上げによって求める構成であってもよい。
【図面の簡単な説明】
【０２３８】
【図１】本発明の一実施形態におけるプリンタの電気的な構成を示したブロック図である。
【図２】本発明の一実施形態におけるプリンタによる縮小機能を示す機能ブロック図である。
【図３】分割数決定部の機能を示す機能ブロック図である。
【図４】高速平均画素処理において使用される変数を説明するための模式図である。
【図５】高速平均画素処理において使用される変数を説明するための模式図である。
【図６】プリンタで実行される縮小処理を示すフローチャートである。
【図７】図６の縮小処理の中で実行される高速平均画素処理を示すフローチャートである。
【図８】（ａ）は、図７の高速平均画素処理の中で実行される副走査方向ブロック処理を示すフローチャートであり、（ｂ）は、図７の高速平均画素処理の中で実行される主走査方向ブロック処理を示すフローチャートである。
【図９】図７の高速平均画素処理の中で実行される縮小画素出力処理を示すフローチャートである。
【図１０】（ａ）は、図７の高速平均画素処理の中で実行される主走査方向次回初期値取得処理を示すフローチャートであり、（ｂ）は、図７の高速平均画素処理の中で実行される副走査方向次回初期値取得処理を示すフローチャートである。
【図１１】図１１は、本実施形態の高速平均画素法を用いた場合の処理時間と、その他の縮小手法を用いた場合の処理時間との比較図である。
【図１２】従来の平均画素法を説明するための模式図である。
【図１３】従来の平均画素処理を示すフローチャートである。
【符号の説明】
【０２３９】
１          プリンタ（画像処理装置）
１１        ＣＰＵ（演算装置）
１２ａ      画像縮小プログラム（画像処理プログラム）
１０２      縮小率算出部（縮小率取得ステップ、縮小率取得手段）
１０３      処理ブロック算出手段（処理ブロック数演算ステップ、処理ブロック数演算手段）
１０４      平均画素値算出手段（平均画素値演算ステップ、主走査方向区分ステップ、副走査方向区分ステップ、平均画素値演算手段、主走査方向区分手段、副走査方向区分手段）
１０５      分割数決定手段（分割数決定ステップ、分割数決定手段）
１０５ａ    最大ブロック数算出部（分割数決定ステップ、分割数決定手段）
１０５ｂ    分割数計算部（分割数決定ステップ、分割数決定手段）
【図１】
2007156585.tif 000007
【図２】
2007156585.tif 000008
【図３】
2007156585.tif 000009
【図４】
2007156585.tif 000010
【図５】
2007156585.tif 000011
【図６】
2007156585.tif 000012
【図７】
2007156585.tif 000013
【図８】
2007156585.tif 000014
【図９】
2007156585.tif 000015
【図１０】
2007156585.tif 000016
【図１１】
2007156585.tif 000017
【図１２】
2007156585.tif 000018
【図１３】
2007156585.tif 000019