(57)【要約】【課題】画素値の算出に除算処理または小数点演算処理を用いる画像縮小方法を用いた場合と比較して、画質を劣化させることなく画像縮小処理を高速に実行する。【解決手段】係数テーブル作成部３２は、一定画素数の画像データを一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗（または２の累乗）の係数を含めた変換係数を予め算出する。算出部３４は、画像縮小処理を行う前の画像データの各画素値に、係数テーブル作成部３２により作成され変換係数を乗算して画像縮小処理後の画像データの各画素の値を算出する。誤差補正部３５は、画像縮小処理後の画像データの各画素の値に対して、０．５の画素値に相当するビットに対して１を加算することにより誤差補正を行う。ビットシフト部３６は、誤差補正が行なわれた後の各画素の値を、変換係数に含められ２の整数乗の係数を打ち消すビット数だけシフトする。【選択図】図３
2010103821.tif 000002
【特許請求の範囲】
【請求項１】
一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出する係数算出手段と、
画像縮小処理を行う前の画像データの各画素値に、前記係数算出手段により予め算出された変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出する算出手段と、
前記算出手段により算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするシフト手段と、
を有する画像処理装置。
【請求項２】
一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出する係数算出手段と、
画像縮小処理を行う前の画像データの各画素値に、前記係数算出手段により予め算出された変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出する算出手段と、
前記算出手段により算出された各画素の値のうち、前記変換係数に含められた２の整数乗の係数に対応した部分をバイト単位で取り出す取出手段と、
を有する画像処理装置。
【請求項３】
前記算出手段は、入力画像データが白黒の２値画像であり、縮小率が２倍以上であるとともに縮小率が２の整数乗でない場合、面積階調処理により２の整数乗の縮小率で入力画像データを多値画像に変換した後に、画像縮小処理後の画像データの各画素値の算出を行う請求項１または２記載の画像処理装置。
【請求項４】
前記算出手段により算出された画像縮小処理後の画像データの各画素の値に対して、０．５の画素値に相当するビットに対して１を加算することにより誤差補正を行う誤差補正手段をさらに有する請求項１から３のいずれか１項記載の画像処理装置。
【請求項５】
前記係数算出手段は、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を前記一定数の画素の特定画素分に対して算出する請求項１から４のいずれか１項記載の画像処理装置。
【請求項６】
一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出する係数算出手段と、画像縮小処理を行う前の画像データの各画素値に前記係数算出手段により予め算出された変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出する算出手段と、前記算出手段により算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするシフト手段とを有する画像処理装置と、
前記画像処理装置により処理された画像データに基づいて画像を出力する画像出力手段と、
を備えた画像形成装置。
【請求項７】
一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出するステップと、
画像縮小処理を行う前の画像データの各画素値に、予め算出された前記変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出するステップと、
算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするステップとを有する画像処理方法。
【請求項８】
一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出するステップと、
画像縮小処理を行う前の画像データの各画素値に、予め算出された前記変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出するステップと、
算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするステップとをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像形成装置、画像処理方法およびプログラムに関する。
【背景技術】
【０００２】
特許文献１には、変換画素の４近傍である被変換画素４画素から変換画素の濃度を決定するようにした画像の拡大縮小方法が開示されている。
【０００３】
特許文献２には、原画像上の複数画素を一括して読み込んでその画素パターンを整数比に拡縮した結果を出力するテーブルを用意し、このテーブルを使用して複数画素一括の２値または多値の整数比拡縮結果を高速に得ることができるように構成された画像処理装置が開示されている。
【０００４】
特許文献３には、第１の縮小処理に最近接内挿法、第２の縮小処理に投影法を使用する画像縮小方法が開示されている。
【０００５】
特許文献４には、第１の縮小処理に投影法、第２の縮小処理にバイリニア補間法を使用する画像縮小方法が開示されている。
【０００６】
【特許文献１】特開昭５８−９７９５８号公報
【特許文献２】特開平６−３４８８３４号公報
【特許文献３】特開２００５−３０１８８１号公報
【特許文献４】特開２００６−５００９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、画素値の算出に除算処理または小数点演算処理を用いる画像縮小方法を用いた場合と比較して、画質を劣化させることなく画像縮小処理を高速に実行可能な画像処理装置、画像形成装置、画像処理方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００８】
［画像処理装置］
請求項１に係る本発明は、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出する係数算出手段と、
画像縮小処理を行う前の画像データの各画素値に、前記係数算出手段により予め算出された変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出する算出手段と、
前記算出手段により算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするシフト手段とを有する画像処理装置である。
【０００９】
請求項２に係る本発明は、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出する係数算出手段と、
画像縮小処理を行う前の画像データの各画素値に、前記係数算出手段により予め算出された変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出する算出手段と、
前記算出手段により算出された各画素の値のうち、前記変換係数に含められた２の整数乗の係数に対応した部分をバイト単位で取り出す取出手段とを有する画像処理装置である。
【００１０】
請求項３に係る本発明は、前記算出手段が、入力画像データが白黒の２値画像であり、縮小率が２倍以上である場合、面積階調処理により２の整数乗の縮小率で入力画像データを多値画像に変換した後に、画像縮小処理後の画像データの各画素値の算出を行う請求項１または２記載の画像処理装置である。
【００１１】
請求項４に係る本発明は、前記算出手段により算出された画像縮小処理後の画像データの各画素の値に対して、０．５の画素値に相当するビットに対して１を加算することにより誤差補正を行う誤差補正手段をさらに有する請求項１から３のいずれか１項記載の画像処理装置である。
【００１２】
請求項５に係る本発明は、前記係数算出手段が、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を前記一定数の画素の特定画素分に対して算出する。
【００１３】
［画像形成装置］
請求項６に係る本発明は、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出する係数算出手段と、画像縮小処理を行う前の画像データの各画素値に前記係数算出手段により予め算出された変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出する算出手段と、前記算出手段により算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするシフト手段とを有する画像処理装置と、
前記画像処理装置により処理された画像データに基づいて画像を出力する画像出力手段とを備えた画像形成装置である。
【００１４】
［画像処理方法］
請求項７に係る本発明は、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出するステップと、
画像縮小処理を行う前の画像データの各画素値に、予め算出された前記変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出するステップと、
算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするステップとを有する画像処理方法である。
【００１５】
［プログラム］
請求項８に係る本発明は、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗の係数を含めた変換係数を算出するステップと、
画像縮小処理を行う前の画像データの各画素値に、予め算出された前記変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出するステップと、
算出された各画素の値を、前記変換係数に含められた２の整数乗の係数を打ち消すビット数だけシフトするステップとをコンピュータに実行させるためのプログラムである。
【発明の効果】
【００１６】
請求項１に係る本発明によれば、画素値の算出に除算処理または小数点演算処理を用いる画像縮小方法を用いた場合と比較して、画質を劣化させることなく画像縮小処理を高速に実行することができる画像処理装置を提供することができる。
【００１７】
請求項２に係る本発明によれば、画素値の算出に除算処理または小数点演算処理を用いる画像縮小方法を用いた場合と比較して、画質を劣化させることなく画像縮小処理を高速に実行することができる画像処理装置を提供することができる。
【００１８】
請求項３に係る本発明によれば、入力画像が２値画像の場合、画像縮小処理をより高速に実行することができる画像処理装置を提供することができる。
【００１９】
請求項４に係る本発明によれば、画像縮小処理を行う際に発生する誤差を抑制することが可能な画像処理装置を提供することができる。
【００２０】
請求項５に係る本発明によれば、変換係数をより高速に算出することができる画像処理装置を提供することができる。
【００２１】
請求項６に係る本発明によれば、画素値の算出に除算処理または小数点演算処理を用いる画像縮小方法を用いた場合と比較して、画質を劣化させることなく画像縮小処理を高速に実行することができる画像形成装置を提供することができる。
【００２２】
請求項７に係る本発明によれば、画素値の算出に除算処理または小数点演算処理を用いる画像縮小方法を用いた場合と比較して、画質を劣化させることなく画像縮小処理を高速に実行することができる画像処理方法を提供することができる。
【００２３】
請求項８に係る本発明によれば、画素値の算出に除算処理または小数点演算処理を用いる画像縮小方法を用いた場合と比較して、画質を劣化させることなく画像縮小処理を高速に実行することができるプログラムを提供することができる。
【発明を実施するための最良の形態】
【００２４】
次に、本発明の実施の形態について図面を参照して詳細に説明する。図１は本発明の一実施形態の画像形成システムの構成を示すブロック図である。
【００２５】
本発明の一実施形態の画像形成システムは、図１に示されるように、ネットワーク３０により相互に接続された画像形成装置１０、および端末装置２０により構成される。端末装置２０は、印刷データを生成して、ネットワーク３０経由にて生成した印刷データを画像形成装置１０に対して送信する。画像形成装置１０は、端末装置２０から送信された印刷データを受け付けて、印刷データに応じた画像を用紙上に出力する。なお、画像形成装置１０は、印刷（プリント）機能、スキャン機能、複写（コピー）機能、ファクシミリ機能等の複数の機能を有するいわゆる複合機と呼ばれる装置である。
【００２６】
次に、本実施形態の画像形成システムにおける画像形成装置１０のハードウェア構成を図２に示す。
【００２７】
画像形成装置１０は、図２に示されるように、ＣＰＵ１１、メモリ１２、ハードディスクドライブ（ＨＤＤ）等の記憶装置１３、ネットワーク３０を介して外部の装置等との間でデータの送信及び受信を行う通信インタフェース（ＩＦ）１４、タッチパネル又は液晶ディスプレイ並びにキーボードを含むユーザインタフェース（ＵＩ）装置１５、スキャナ１６、プリントエンジン１７を有する。これらの構成要素は、制御バス１８を介して互いに接続されている。
【００２８】
ＣＰＵ１１は、メモリ１２または記憶装置１３に格納された制御プログラムに基づいて所定の処理を実行して、画像形成装置１０の動作を制御する。なお、本実施形態では、ＣＰＵ１１は、メモリ１２または記憶装置１３内に格納された制御プログラムを読み出して実行するものとして説明したが、当該プログラムをＣＤ−ＲＯＭ等の記憶媒体に格納してＣＰＵ１１に提供することも可能である。
【００２９】
図３は、上記の制御プログラムが実行されることにより実現される画像形成装置１０の機能構成を示すブロック図である。
【００３０】
本実施形態の画像形成装置１０は、図３に示されるように、各種画像に対する画像処理を行うための画像処理装置４１と、画像出力部４２とを備えている。また、画像処理装置４１は、入力画像データ格納部３１と、係数テーブル作成部３２と、係数テーブル格納部３３と、算出部３４と、誤差補正部３５と、ビットシフト部３６と、出力画像データ格納部３７とから構成されている。
【００３１】
入力画像データ格納部３１は、画像縮小処理を行う前の画像データを入力画像データとして格納する。
【００３２】
係数テーブル作成部３２は、一定画素数の画像データを当該一定画素数よりも少ない画素数の画像データに変換するための係数に２の整数乗（または２の累乗）の係数を含めた変換係数を予め算出する係数算出手段として機能する。そして、係数テーブル作成部３２は、この算出した変換係数を係数テーブルとして係数テーブル格納部３３に格納させる。係数テーブル格納部３３は、係数テーブル作成部３２により作成された係数テーブルを格納する。
【００３３】
算出部３４は、画像縮小処理を行う前の画像データの各画素値に、係数テーブル作成部３２により作成され係数テーブル格納部３３に格納された変換係数を乗算することにより画像縮小処理後の画像データの各画素の値を算出する。また、算出部３４は、入力画像データが白黒の２値画像であり、縮小率が２倍以上であるとともに縮小率が２の整数乗（２、４、８、１６・・・）でない場合、面積階調処理により２の整数乗の縮小率で入力画像データを多値画像に変換した後に、画像縮小処理後の画像データの各画素値を算出する。入力画像データが白黒の２値画像であり、縮小率が２の整数乗の場合には、面積階調処理のみで目的の縮小率が実現される。
【００３４】
誤差補正部３５は、算出部３４により算出された画像縮小処理後の画像データの各画素の値に対して、０．５の画素値に相当するビットに対して１を加算することにより誤差補正を行う。
【００３５】
ビットシフト部３６は、算出部３４により算出され誤差補正部３５により誤差補正が行なわれた後の各画素の値を、変換係数に含められ２の整数乗の係数を打ち消すビット数だけシフトする。出力画像データ格納部３７は、ビットシフト部３６により処理された後の画像データを出力画像データとして格納する。
【００３６】
画像出力部４２は、画像処理装置４１により処理された画像データに基づいて画像を出力する。
【００３７】
次に、本実施形態の画像形成システムにおける画像形成装置１０の動作を図面を参照して詳細に説明する。
本実施形態の画像処理装置１０による画像縮小処理は、印刷しようとする画像を縮小するだけでなく、スキャンして読み取った画像データをパーソナルコンピュータ（以下、パソコンと略す。）等に転送する際に添付するサムネイル画像を生成したり、ファクシミリ送信を行う際に、ファクシミリの規格に合わせた解像度の画像を生成するような場合にも用いられる。また、ＯＣＲ（Optical Character Reader：光学式文字読取り装置）等を用いて画像の読み取りを行うような場合に、ＯＣＲ用のメモリを削減するために、読み取った画像データを低解像度の画像データに縮小処理するような場合にも用いられる。
【００３８】
先ず、本実施形態における画像処理装置４１の画像縮小処理の全体動作を図４のフローチャートに示す。
画像縮小処理を実行する間に、先ず係数テーブル作成部３２は、どのような縮小率で画像縮小処理を行うかという縮小情報に基づいて、入力画素毎に変換係数が設定された係数テーブルを作成する（ステップＳ１０１）。この係数テーブル作成部３２により作成された係数テーブルは、係数テーブル格納部３３に格納される。
【００３９】
なお、算出部３４は、入力画像が白黒画像であり（ステップＳ１０２）、縮小率が２以上の場合（ステップＳ１０３）には、面積階調処理を行って、２値の白黒画像を多値の白黒画像に変換する処理を行う（ステップＳ１０４）。しかし、この面積階処理については、後段において説明するため、ここでは説明を行なわない。
【００４０】
次に、この係数テーブルを作成するための具体的な方法について説明する。本実施形態では、入力画像データを１０画素毎に６画素に変換する画像縮小処理を行う場合について説明する。この画像縮小処理では、１０画素の画素列を６画素の画素列に変換する処理を繰り返すことにより、入力画像データの縮小処理が行われる。
【００４１】
具体的には、図５に示すように、入力画像データから１０画素の画素列Ａ[０]〜Ａ[９]を順次取り出し、６画素の出力画素列Ｂ[０]〜Ｂ[５]に変換するものとして説明する。
【００４２】
変換係数を算出して係数テーブルを作成するために、先ず、入力画素と出力画素との対応関係から、各入力画素の属性を判定する。この属性とは、各入力画素が出力画素に対してどのように反映されるのか、また各種画素のどの部位に位置するのか等を示している。
【００４３】
例えば、ある入力画素が出力画素の先頭に位置する場合、その入力画素の属性を“ＨＥＡＤＩＮＧ”と設定する。また、ある入力画素が出力画素の先頭でも最後尾でもなく中間において全て取り込まれるような場合には、その入力画素の属性を“ＭＡＸ”と設定する。また、ある入力画素が出力画素の最後尾に位置する場合、その入力画素の属性を“ＥＤＧＩＮＧ”と設定する。また、ある入力画素が、入力画素列、出力画素列の最後尾に位置する場合には、その入力画素の属性を“ＥＮＤＩＮＧ”と設定する。そして、上記の属性以外の入力画素、つまり、１つの入力画素が２つの出力画素により分断される場合、その入力画素の属性を“ｔｈｅ  ＯＴＨＥＲＳ”と設定する。
【００４４】
図５に示した例では、入力画素Ａ[０]、Ａ[５]が“ＨＥＡＤＩＮＧ”と設定され、Ａ「１」、Ａ［３］、Ａ［６］、Ａ［８］が“ｔｈｅ  ＯＴＨＥＲＳ”と設定され、Ａ［２］、Ａ［７］が“ＭＡＸ”と設定されている。また、Ａ［４］が“ＥＤＧＩＮＧ”、Ａ[９]が“ＥＮＤＩＮＧ”と設定されている。
【００４５】
そして、このような属性の判定が行われた後、図６に示すような条件により、各入力画素の属性に基づいて変換係数が設定される。
【００４６】
まず、属性が“ＨＥＡＤＩＮＧ”、“ＭＡＸ”、“ＥＤＧＩＮＧ”、“ＥＮＤＩＮＧ”と判定された各入力画素については、分断されずに出力画素に取り込まれるため、変換係数としてＦＵＬＬが設定される。
【００４７】
ここで変換係数として設定されるＦＵＬＬとは、出力画素に対して全ての画素値が取り込まれる入力画素に対して設定される係数であり、下記の式により算出される。
【００４８】
ＦＵＬＬ＝α×（出力画素数／入力画素数）
【００４９】
ここで、αとは、小数点演算を不要とするために変換係数に含める２の整数乗の係数である。このαの値はできるだけ大きいほうが画像縮小処理の精度が向上するが、画素値が最大値の場合にＣＰＵの処理可能な値を越えてしまうと画素の計算に狂いが生じて画像が崩れてしまうことになる。そのため、αの値には、画素値を表現するための余裕を持った値とすることが要求される。例えば、画素値を２５６階調で表現する場合には、２５６階調を表現するための８ビット分の余裕を確保しつつ、ＣＰＵの処理単位の中で最も大きな値をαの値として設定すればよい。例えば、演算処理を３２ビット単位で行う３２ビットＣＰＵを用いて演算処理を行う場合には、このαの値を２24（３２−８＝２４）と設定すればよい。また、６４ビットＣＰＵを用いて演算処理を行う場合には、α＝２56（６４−８＝５６）と設定すればよい。ここでは、３２ビットＣＰＵを用いて画像処理を行う場合を用いて説明するため、以下では、α＝２24と設定した場合について説明する。
【００５０】
そして、図５に示した場合では、入力画素数は１０であり、出力画素数は６であるため、ＦＵＬＬ＝α×（６／１０）となる。
【００５１】
次に、属性が“ｔｈｅ  ＯＴＨＥＲＳ”と判定された入力画素に対して変換係数を設定する。属性が“ｔｈｅ  ＯＴＨＥＲＳ”と判定された入力画素については、図６に示すように、α−ＦＵＬＬ×Ｎ−（繰越し分）を変換係数として設定する。ここで、Ｎは、１つの出力画素に含まれ変換係数がＦＵＬＬに設定される入力画素の数である。また、繰越し分とは、ＦＵＬＬ−（属性が“ｔｈｅ  ＯＴＨＥＲＳ”であった前回の入力画素の変換係数）である。
【００５２】
このようにして算出された変換係数に基づいて係数テーブルの例を図７に示す。
この図７では、入力画素Ａ［０］に対しては、変換係数Ｋ［０］としてα×６／１０が設定され、入力画素Ａ［１］に対しては、変換係数Ｋ［１］としてα×４／１０が設定され、入力画素Ａ［２］に対しては、変換係数Ｋ［２］としてα×６／１０が設定され、入力画素Ａ［３］に対しては、変換係数Ｋ［３］としてα×２／１０が設定され、入力画素Ａ［４］に対しては、変換係数Ｋ［４］としてα×６／１０が設定されていることがわかる。入力画素Ａ［５］〜Ａ[９]に対する変換係数Ｋ［５］〜Ｋ[９]は、変換係数Ｋ［０］〜Ｋ[４]と、それぞれ同じ値となっている。
【００５３】
ここで、属性が“ｔｈｅ  ＯＴＨＥＲＳ”と判定された入力画素Ａ[１]における変換係数Ｋ[１]は、下記のような式により算出される。
【００５４】
Ａ[１]＝α−α×（６／１０）×１−０＝α×４／１０
【００５５】
このＡ[１]の場合には、出力画素Ｂ[０]に取り込まれる入力画素のうち変換係数がＦＵＬＬである入力画素はＡ［０］の１つだけであるためＮ＝１である。そして、この入力画素列において属性が“ｔｈｅ  ＯＴＨＥＲＳ”である前回の入力画素は存在しないため（繰越し分）＝０である。
【００５６】
また、属性が“ｔｈｅ  ＯＴＨＥＲＳ”と判定された入力画素Ａ[３]における変換係数Ｋ[３]は、下記のような式により算出される。
【００５７】
Ａ[３]＝α−α×（６／１０）×１−α×（２／１０）＝α×４／１０
【００５８】
このＡ[３]の場合には、出力画素Ｂ[１]に取り込まれる入力画素のうち変換係数がＦＵＬＬである入力画素はＡ［２］の１つだけであるためＮ＝１である。そして、この入力画素列において属性が“ｔｈｅ  ＯＴＨＥＲＳ”である前回の入力画素はＡ[１]であり、その変換係数Ｋ[１]分は出力画素Ｂ[０]に取り込まれるため、（繰越し分）＝α−Ｋ[１]＝α−α×（４／１０）＝α×（２／１０）となる。
【００５９】
このようにして各入力画素Ａ[０]〜Ａ[９]に対する変換係数Ｋ［０］〜Ｋ[９]を順次算出することにより図７に示すような係数テーブルを得ることができる。
【００６０】
１つの出力画素を構成する複数の入力画素の変換係数を加算すると、α×（１０／１０）＝αとなるように設定されている。そして、図７を参照すると分かるように、全ての変換係数Ｋ[０]〜Ｋ[９]には、２の整数乗の係数であるαが含まれている。
【００６１】
次に、図４のフローチャートに戻ると、算出部３４は、係数テーブル格納部３３に格納された係数テーブルに基づいて中間データ生成処理を行う（ステップＳ１０５）。この中間データ生成処理の具体的な方法を図８のフローチャートに示す。
【００６２】
ここで、中間データとは入力画素を出力画素に変換する際に一旦生成する中間的なデータであり、ここでは図９に示すように、出力画素Ｂ[０]〜Ｂ[５]と１対１に対応する６個の中間データＭ［０］〜Ｍ[５]を用いるものとする。
【００６３】
中間データ生成処理では、算出部３４は、先ず初期化処理として、入力画素の位置を示す“ｉｎ”、出力画素の位置を示す“ｏｕｔ”、中間データＭ[０]〜Ｍ［９］の値等をクリアする処理を実行する（ステップＳ２０１）。初期化処理は各ラインごとに１度行われる。
【００６４】
そして、処理しようとする入力画素Ａ[ｉｎ]の属性が、“ＨＥＡＤＩＮＧ”、“ＭＡＸ”、“ＥＤＧＩＮＧ”、“ｔｈｅ  ＯＴＨＥＲＳ”、“ＥＮＤＩＮＧ”のいずれであるかが判定される（ステップＳ２０２〜Ｓ２０６）。
【００６５】
ここでは、ｉｎ＝０であるため、入力画素Ａ［０］の属性は“ＨＥＡＤＩＮＧ”であると判定される（ステップＳ２０２）。そのため、算出部３４は、中間データＭ[０]にＡ[０]×Ｋ[０]を加算する処理（演算処理１）を実行する（ステップＳ２０７）。そして、入力画素の位置を示す“ｉｎ”の値は１加算されて１となる（ステップＳ２０８）。（このステップＳ２０８の処理は、図４のフローチャートにおけるステップＳ１１０にも相当する。）
【００６６】
次に、ｉｎ＝１であるため、入力画素Ａ[１]の属性は“ｔｈｅ  ＯＴＨＥＲＳ”であると判定される（ステップＳ２０５）。そのため、算出部３４は、中間データＭ[０]に、Ａ［１］×Ｋ［１］を加算し、Ｍ[１]にＡ[１]×（ＦＵＬＬ−Ｋ[１]）を加算する処理（演算処理２）を実行する（ステップＳ２１１）。そして、出力画素の位置を示す“ｏｕｔ”の値は１加算されて１となり（ステップＳ２１０）、入力画素の位置を示す“ｉｎ”の値は１加算されて２となる（ステップＳ２０８）。
【００６７】
次に、ｉｎ＝２であるため、入力画素Ａ[２]の属性は“ＭＡＸ”であると判定される（ステップＳ２０３）。そのため、算出部３４は、中間データＭ[１]にＡ[２]×Ｋ[２]を加算する処理（演算処理１）を実行する（ステップＳ２０７）。そして、入力画素の位置を示す“ｉｎ”の値は１加算されて３となる（ステップＳ２０８）。
【００６８】
次に、ｉｎ＝３であるため、入力画素Ａ[１]の属性は“ｔｈｅ  ＯＴＨＥＲＳ”であると判定される（ステップＳ２０５）。そのため、算出部３４は、中間データＭ[１]に、Ａ［３］×Ｋ［３］を加算し、Ｍ[２]にＡ[３]×（ＦＵＬＬ−Ｋ[３]）を加算する処理（演算処理２）を実行する（ステップＳ２１１）。そして、出力画素の位置を示す“ｏｕｔ”の値は１加算されて２となり（ステップＳ２１０）、入力画素の位置を示す“ｉｎ”の値は１加算されて４となる（ステップＳ２０８）。
【００６９】
次に、ｉｎ＝４であるため、入力画素Ａ[４]の属性は“ＥＤＧＩＮＧ”であると判定される（ステップＳ２０４）。そのため、算出部３４は、中間データＭ[２]にＡ[４]×Ｋ[４]を加算する処理（演算処理１）を実行する（ステップＳ２０９）。そして、入力画素の位置を示す“ｉｎ”の値は１加算されて５となる（ステップＳ２０８）。
【００７０】
同様の処理がｉｎ＝５〜８まで繰り返され、ｉｎ＝９となると、入力画素Ａ[９]の属性は“ＥＮＤＩＮＧ”であると判定される（ステップＳ２０６）。そのため、算出部３４は、中間データＭ[５]にＡ[９]×Ｋ[９]を加算する処理（演算処理１）を実行する（ステップＳ２１２）。そして、中間データ生成処理は終了する。
【００７１】
このようにして算出される中間データＭ[０]〜Ｍ[５]の式を図１０（Ａ）に示す。この図１０（Ａ）に示す中間データＭ[０]〜Ｍ[５]の式に、図７に示した各変換係数Ｋ[０]〜Ｋ[９]の値を代入すると図１０（Ｂ）に示す式が得られる。この図１０（Ｂ）に示す式を参照すると、１つの出力画素を構成する式中の変換係数を加算すると、α×（１０／１０）＝αとなるように設定されていることがわかる。
【００７２】
図４のフローチャートに戻ると、算出部３４は、上記で説明した中間データ生成処理と並行して、出力画素の有無を判定し（ステップＳ１０６）、出力画素が存在する場合には、その画素を誤差補正部３５に順次出力している。ここで、出力画素の有無の判定は、入力画素の属性に基づいて判定される。入力画素の属性が、“ＥＤＧＩＮＧ”、“ｔｈｅ  ＯＴＨＥＲＳ”、“ＥＮＤＩＮＧ”のいずれかの場合には、１つの出力画素の演算は終了したものとしてその出力画素の値は誤差補正部３５に出力される。
【００７３】
次に、算出部３４により出力された出力画素は、誤差補正部３５により誤差補正処理が行なわれ（ステップＳ１０７）、ビットシフト部３６により一定ビット数のビットシフト処理が行われた後に出力画像データ格納部３７に出力される（ステップＳ１０８）。そして、１０画素全ての変換処理が終了したか否かが判定され（ステップＳ１０９）、１０画素の入力画素列に対する変換処理が終了されていない場合には、次のデータに対する処理が行われる（ステップＳ１１０）。ステップＳ１０９において１０画素の入力画素列に対する変換処理が終了されたと判定された場合、この入力画素列に対する処理は終了する。
【００７４】
そして、縮小しようとする画像の全ラインに対する処理が終了していなければ（ステップＳ１１１においてｎｏ）、次のラインの１０画素の入力画素列に対しても同様な変換処理が実行されることとなる（ステップＳ１１２）。つまり、次のラインの１０画素の入力画素列に対しても、図８のフローチャートのステップＳ２０１における初期化処理が行われ、ステップＳ１０１において生成された係数テーブルと同じ係数テーブルと、次のラインの１０画素の入力画素列を用いて同様な変換処理が行われる。そして、全てのラインの変換処理が終了すると（ステップＳ１１１においてｙｅｓ）、処理は終了する。
【００７５】
次に、誤差補正部３５により行われる誤差補正処理および、ビットシフト部３６により行われるビットシフト処理を図１１を参照して説明する。
【００７６】
誤差補正部３５は、算出部３４により算出された出力画素の値に対して、０．５（１／２）の画素値に相当するビットに対して１を加算することにより誤差補正を行う。具体的には、出力画素の実際の画素値は、算出部３４により出力される各値の上位８ビットに含まれているため、０．５の画素値に相当するビットとは少数部分を示す２４ビットのうちの最上位ビットに対して１を加算する。つまり、２４ビット目に対応する値であるため、１×２３23を誤差補正値として出力画素に加算する。
【００７７】
図１２（Ａ）に示すように出力画素の画素値を示す８ビットの下位ビットの値が１の場合、１×２23の値を加算することにより繰り上がりが行われ出力画素の画素値も１加算される。これに対して、図１２（Ｂ）に示すように出力画素の画素値を示す８ビットの下位ビットの値が０の場合には、１×２23の値を加算しても繰り上がらないため出力画素の画素値はそのままとなる。つまり、算出部３４により出力された値に対して、誤差補正値１×２23の値を加算することにより、実際の画素値の少数点以下第１位の値を四捨五入しているのと同様な処理が実行されることとなる。
【００７８】
このような誤差補正処理が行われた後、ビットシフト部３６は、図１１に示すように、誤差補正部３５により誤差補正が行なわれた後の各画素の値を、変換係数に含められ２の整数乗の係数であるα（＝２24）を打ち消すビット数、つまり２４ビットだけシフトする。
【００７９】
つまり、変換係数には２×２24という係数αが含まれているため、算出部３４から出力された各画素の値は、実際の画素値×２24という値になっている。この値がビットシフト部３６により２４ビットシフトされることにより、実際の画素値そのものが得られることとなる。
【００８０】
なお、ここでは算出部３４により算出された値から実際の画素値を取り出すために、算出部３２からの値を２４ビットシフトするようにしているが、算出部３４からの３２ビットの値の上位８ビットを直接取り出すような方法を用いるようにしても良い。このような方法を用いる場合には、ビットシフト部３６の替わりに、算出部３４により算出された各画素の値のうち、変換係数に含められた２の整数乗の係数に対応した部分をバイト単位で取り出す取出手段を用いる。ただし、このような取出手段を用いることが可能なのは、２の整数乗の係数であるαが、２の８乗、１６乗、２４乗、・・・というような２の８倍数の乗数の場合に限定される。
【００８１】
次に、図４のフローチャートにおいて説明を省略した面積階調処理（ステップＳ１０４）について説明する。この面積階調処理は、白黒の２値画像に対して縮小率が２倍以上の場合にのみ実行される。この面積階調処理の具体的な動作を図１３のフローチャートに示す。
【００８２】
縮小率が３２以上であるか否かの判定が行われ（ステップＳ３０１）、縮小率が３２以上の場合には３２ビットの窓（ウィンドウ）により面積階調処理が行われる（ステップＳ３０２）。次に、縮小率が１６以上であるか否かの判定が行われ（ステップＳ３０３）、縮小率が１６以上の場合、つまり縮小率が１６以上３２未満の場合には１６ビットの窓により面積階調処理が行われる（ステップＳ３０４）。同様にして、縮小率が８以上１６未満の場合には８ビットの窓により面積階調処理が行われ（ステップＳ３０５、Ｓ３０６）、縮小率が４以上８未満の場合には４ビットの窓により面積階調処理が行われる（ステップＳ３０７、Ｓ３０８）、縮小率が２以上４未満の場合には２ビットの窓により面積階調処理が行われる（ステップＳ３０９、Ｓ３１０）。
【００８３】
次に、８ビットの窓により面積階調が行われる様子を図１４を参照して説明する。８ビットの窓が入力画像データの８ピクセル毎に順次設定され、この８ビットの窓内における黒画素数がカウントされ、カウントされた黒画素数に基づいて２５６階調とした場合のピクセルの画素値が算出される。
【００８４】
例えば、図１４に示すように、８ビットの窓内の８ピクセルの２値画像が“００１０１１００”の場合、８ビットの窓内の黒画素数は３であるため、この８ピクセルに対応するピクセルの画素値は、３×２５５／８≒９５となる。
【００８５】
ここで面積階調処理が行われる場合の、ある一定のビット幅の窓内の黒画素数の算出方法としては、分割統治法を用いることにより高速な処理を実現することができる。
【００８６】
この分割統治法の具体例を図１５に示す。この図１５では、８ビットの窓で面積階調を行う場合を用いて説明している。
【００８７】
この分割統治法では、先ず、隣接するビットどうしを加算する処理が行われる。具体的には、３２ビット分のデータと０１０１０１０１０１０１・・・・・１０１（５５５５５５５５（１６進数））というデータの論理積の結果と、３２ビット分のデータを１ビットシフトとしたデータと０１０１０１０１０１０１・・・・・１０１（５５５５５５５５（１６進数））というデータの論理積の結果との論理和を演算することにより行われる。
【００８８】
次に、隣接する２ビットどうしを加算する処理が行われる。具体的には、３２ビット分のデータと００１１００１１００１１００・・・・・００１１（３３３３３３３３（１６進数））というデータの論理積の結果と、３２ビット分のデータを２ビットシフトとしたデータと００１１００１１００１１００・・・・・００１１（３３３３３３３３（１６進数））というデータの論理積の結果との論理和を演算することにより行われる。
【００８９】
最後に、隣接する４ビットどうしを加算する処理が行われる。具体的には、３２ビット分のデータと００００１１１１００００・・・・・１１１１（０Ｆ０Ｆ０Ｆ０Ｆ（１６進数））というデータの論理積の結果と、３２ビット分のデータを４ビットシフトとしたデータと００００１１１１００００・・・・・１１１１（０Ｆ０Ｆ０Ｆ０Ｆ（１６進数））というデータの論理積の結果との論理和を演算することにより行われる。
【００９０】
このような演算が行われることにより、図１５（Ａ）に示すようにある８ビットの窓内のデータが“０１１０１１１１”とうデータであった場合、最終的には図１５（Ｄ）に示すように“００００１１０”というデータに変換され、この８ビットの窓内の“１（黒画素）”のビットの数が６であることが示されている。
【００９１】
[変形例]
上記実施形態では、１０画素の入力画像データを６画素のデータに縮小処理する場合を用いているが、本発明はこのような画素数に限定されるものではなく、変換前後の画素数がどのような数であっても適用することが可能である。また、上記実施形態では、説明を簡単に行なうために、画像縮小処理を１ライン毎に行う場合を用いて説明したが、本発明はこれに限定されるものではなく、２方向の画像縮小処理を同時に行う場合でも、係数テーブルを２方向に対してそれぞれ生成することにより、同様に本発明を適用することができるものである。
【００９２】
また、上記実施形態では、係数テーブル作成部３２は、１０画素の入力画素列を６画素に変換するための変換係数を算出するものとして説明しているが、この変換係数を一定数の画素のうちの特定画素分に対して算出するようにしてもよい。ここで、特定画素分とは、１ラインもしくは特定のパターンを構成する画素数を意味する。
【図面の簡単な説明】
【００９３】
【図１】本発明の一実施形態の画像形成装置のシステム構成を示す図である。
【図２】本発明の一実施形態における画像形成装置１０のハードウェア構成を示すブロック図である。
【図３】本発明の一実施形態における画像形成装置１０の機能構成を示すブロック図である。
【図４】本発明の一実施形態における画像処理装置４１の画像縮小処理の全体動作を図４のフローチャートに示す。
【図５】入力画像データを１０画素毎に６画素に変換する画像縮小処理を行う場合の具体例を示す図である。
【図６】入力画素の属性に基づいて変換係数を設定するための条件を示す図である。
【図７】算出された変換係数に基づいて係数テーブルの例を示す図である。
【図８】中間データ生成処理の具体的な方法を示すフローチャートである。
【図９】入力画素Ａ[０]〜Ａ[９]、中間データＭ［０］〜Ｍ[５]、出力画素Ｂ[０]〜Ｂ[５]の関係を説明するための図である。
【図１０】中間データＭ[０]〜Ｍ[５]を算出するための式を示す図である。
【図１１】誤差補正部３５により行われる誤差補正処理および、ビットシフト部３６により行われるビットシフト処理を説明するための図である。
【図１２】誤差補正処理により出力画素の画素値の下位ビットが繰り上がる場合（図１２（Ａ））、繰り上がらない場合（図１２（Ｂ））の例を示す図である。
【図１３】面積階調処理の具体的な動作を説明するためのフローチャートである。
【図１４】８ビットの窓により面積階調が行われる様子を示す図である。
【図１５】分割統治法により黒画素数を算出する際の動作を説明するための図である。
【符号の説明】
【００９４】
１０    画像形成装置
１１    ＣＰＵ
１２    メモリ
１３    記憶装置
１４    通信インタフェース（ＩＦ）
１５    ユーザインタフェース（ＵＩ）装置
１６    スキャナ
１７    プリントエンジン
１８    制御バス
２０    端末装置
３０    ネットワーク
３１    入力画像データ格納部
３２    係数テーブル作成部
３３    係数テーブル格納部
３４    算出部
３５    誤差補正部
３６    ビットシフト部
３７    出力画像データ格納部
４１    画像処理装置
４２    画像出力部
Ｓ１０１〜Ｓ１１２    ステップ
Ｓ２０１〜Ｓ２１２    ステップ
Ｓ３０１〜Ｓ３１０    ステップ
【図１】
2010103821.tif 000003
【図２】
2010103821.tif 000004
【図３】
2010103821.tif 000005
【図４】
2010103821.tif 000006
【図５】
2010103821.tif 000007
【図６】
2010103821.tif 000008
【図７】
2010103821.tif 000009
【図８】
2010103821.tif 000010
【図９】
2010103821.tif 000011
【図１０】
2010103821.tif 000012
【図１１】
2010103821.tif 000013
【図１２】
2010103821.tif 000014
【図１３】
2010103821.tif 000015
【図１４】
2010103821.tif 000016
【図１５】
2010103821.tif 000017