(57)【要約】【課題】ディザマトリクスの幅が１ワードを超える奇数画素分であっても、ディザ閾値を記憶する記憶媒体にシングルポートの記憶媒体を用いて並列処理ができるようにする。【解決手段】ディザマトリクスの主走査方向に連続する各ディザ閾値のうち、１ワード分のディザ閾値をＳＲＡＭの第１のアドレスに書き込み、１ワードを超えるディザ閾値を第２のアドレスに書き込む。ディザマトリクスの主走査方向の幅が奇数画素数分である場合に、主走査方向に連続する各ディザ閾値のうち先頭のディザ閾値と、第１のアドレスの末尾に書き込まれたディザ閾値とを、第２のアドレスに書き込まれた１ワードを超えるディザ閾値の次に書き込む。【選択図】図５
2011239108.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ画素に対応する複数のディザ閾値からなるディザマトリクスを、画像データの主走査方向および副走査方向のそれぞれに対して繰り返し適用して、２画素毎にディザ処理を行う画像処理装置であって、
１のアドレス指定で所定偶数画素数に対応するデータ長のデータが読み出される第１の記憶手段と、
第２の記憶手段と、
前記ディザマトリクスによる前記ディザ閾値の前記第１の記憶手段および前記第２の記憶手段への書き込みを制御する書き込み制御手段と、
前記第１の記憶手段および前記第２の記憶手段からの前記ディザ閾値の読み出しを制御する読み出し制御手段と、
入力画像データの２の画素と、該２の画素に対応して前記読み出し制御手段で読み出された２の前記ディザ閾値とをそれぞれ比較して、比較結果を出力画像データとして出力する比較手段と
を有し、
前記書き込み制御手段は、
前記ディザマトリクスの前記主走査方向に連続する各ディザ閾値のうち、前記所定偶数画素数までの該ディザ閾値を前記第１の記憶手段の第１のアドレスが示す領域に書き込み、該所定偶数画素数を超える該ディザ閾値を該第１の記憶手段の第２のアドレスが示す領域に書き込み、
該ディザマトリクスの前記主走査方向の幅が奇数画素数分である場合に、該主走査方向に連続する各ディザ閾値のうち先頭のディザ閾値と、該第１のアドレスが示す領域の末尾または該第２のアドレスが示す領域の先頭に書き込まれるディザ閾値とを前記第２の記憶手段に書き込む
ことを特徴とする画像処理装置。
【請求項２】
前記第２の記憶手段は、前記第１の記憶手段における前記第２のアドレスが示す領域の空き領域であって、
前記書き込み制御手段は、
前記幅が奇数画素数分である場合に、前記主走査方向に連続する各ディザ閾値のうち先頭のディザ閾値と、該第１のアドレスが示す領域の末尾に書き込まれたディザ閾値とを前記第２の記憶手段に書き込む
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記読み出し制御手段は、
前記比較手段で前記２の画素と比較される前記２のディザ閾値が、前記ディザマトリクスの主走査方向における終端部の前記ディザ閾値を含む場合に、前記第２の記憶手段から前記ディザ閾値を読み出す
ことを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記第２の記憶手段は、前記第１の記憶手段とは別途に設けられ、
前記書き込み制御手段は、
前記幅が奇数画素数分である場合に、前記主走査方向に連続する各ディザ閾値のうち先頭のディザ閾値と、該第２のアドレスが示す領域の先頭に書き込まれたディザ閾値とを前記第２の記憶手段に書き込む
ことを特徴とする請求項１に記載の画像処理装置。
【請求項５】
前記読み出し制御手段は、
前記比較手段で前記２の画素と比較される前記２のディザ閾値が、前記ディザマトリクスの主走査方向における終端部の前記ディザ閾値を含む場合に、前記第１の記憶手段および前記第２の記憶手段からそれぞれ前記ディザ閾値を読み出す
ことを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記入力画像データの画素を前記主走査方向および副走査方向にそれぞれカウントして主走査カウント値および副走査カウント値を取得するカウント手段と、
前記ディザマトリクスのサイズと、前記主走査カウント値と、前記副走査カウント値とから、前記読み出し制御手段が前記第１の記憶手段および前記第２の記憶手段から前記ディザ閾値を読み出すアドレスを生成するアドレス生成手段と
をさらに有する
ことを特徴とする請求項１乃至請求項５の何れか１項に記載の画像処理装置。
【請求項７】
前記ディザマトリクスのサイズと前記主走査カウント値とから、前記読み出し制御手段により前記第１の記憶手段および前記第２の記憶手段から読み出されたデータから前記比較手段で前記２の画素と比較する前記２のディザ閾値を抽出する読み出しデータ制御手段をさらに有する
ことを特徴とする請求項６に記載の画像処理装置。
【請求項８】
それぞれの画素に対応する複数のディザ閾値からなるディザマトリクスを、画像データの主走査方向および副走査方向のそれぞれに対して繰り返し適用して、２画素毎にディザ処理を行う画像処理装置の画像処理方法であって、
前記画像処理装置は、
１のアドレスが示す領域指定で所定偶数画素数に対応するデータ長のデータが読み出される第１の記憶手段と、
第２の記憶手段と
を備え、
書き込み制御手段が、前記ディザマトリクスによる前記ディザ閾値の前記第１の記憶手段および前記第２の記憶手段への書き込みを制御する書き込み制御ステップと、
読み出し制御手段が、前記第１の記憶手段および前記第２の記憶手段からの前記ディザ閾値の読み出しを制御する読み出し制御ステップと、
比較手段が、入力画像データの２の画素と、該２の画素に対応して前記読み出し制御ステップで読み出された２の前記ディザ閾値とをそれぞれ比較して、比較結果を出力画像データとして出力する比較ステップと
を有し、
前記書き込み制御ステップは、
前記ディザマトリクスの前記主走査方向に連続する各ディザ閾値のうち、前記所定偶数画素数までの該ディザ閾値を前記第１の記憶手段の第１のアドレスが示す領域に書き込み、該所定偶数画素数を超える該ディザ閾値を該第１の記憶手段の第２のアドレスが示す領域に書き込み、
該ディザマトリクスの前記主走査方向の幅が奇数画素数分である場合に、該主走査方向に連続する各ディザ閾値のうち先頭のディザ閾値と、該第１のアドレスが示す領域の末尾または該第２のアドレスが示す領域の先頭に書き込まれたディザ閾値とを前記第２の記憶手段に書き込む
ことを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数画素を並列処理する画像処理装置および画像処理方法に関する。
【背景技術】
【０００２】
電子写真方式の画像形成装置の性能向上を追及する上で、コピー動作における原稿読み取りから紙出力までの時間（ファーストコピー時間）の削減は、重要なポイントの一つである。このフローの一部分である、画像処理の処理速度を向上させる方法の一つとして、並列処理で単位当たりの処理数を増加させる技術が既に知られている。
【０００３】
図１３は、並列処理による画像処理を概略的に示す。例えば原稿５００からスキャナで読み取った画像データに対し、画素単位で画像処理を施す場合について考える。図１３において、スキャナ５０１Ａ、画像処理部５０２Ａおよびプロッタ５０３Ａの流れは、画像処理部５０２Ａで並列処理を行わない場合の例を示す。この場合、画像処理部５０２Ａは、スキャナ５０１Ａから出力された画像データに対し、例えば１クロック毎に１画素に対する画像処理を施す。一方、スキャナ５０１Ｂ、画像処理部５０２Ｂおよびプロッタ５０３Ｂの流れは、画像処理部５０２Ｂで２画素単位で並列処理を行う場合の例を示す。この場合、画像処理部５０２Ｂは、スキャナ５０１Ｂから出力されたデータに対し、例えば１クロック毎に２画素に対する画像処理を施す。並列処理を行わない場合に比べ、処理速度を高速化できる。
【０００４】
ここで、並列処理を行うためには、回路を追加する必要があり、性能向上とゲート規模増加（コストアップ）とは、トレードオフの関係となる。そのため、並列処理で回路を共有させることは、ゲート規模削減の有効な手段となる。
【０００５】
ところで、画像処理の一つとして、グレースケールの画像データを例えば２値化するディザ処理がある。ディザ処理のうち組織的ディザ処理では、グレースケールの画像データを小さいブロックに分割し、このブロックに対してディザマトリクスと呼ばれるマスクを掛けて、画素値がディザマトリクスの各要素にそれぞれ設定された閾値を超えた画素を白、閾値未満の画素を黒とする。ディザマトリクスは、閾値の設定パターンにより、ベイヤ型、渦巻型、網点型などの種類がある。
【０００６】
この画像処理のディザ処理で用いられるディザマトリクスのサイズは、処理対象となる画像データの色や、印刷対象の種類で変更するのが一般的である。これは、干渉縞（モアレ）の出現防止や、解像度や階調数によって適切なマトリクスが異なるなどの理由による。
【０００７】
ディザ処理を行う構成として、ディザマトリクスの値であるディザ閾値をＳＲＡＭ(Static Random Access Memory)に保存しておき、必要なときにＳＲＡＭを参照するようにした構成が既に知られている。図１４は、５画素×５画素のディザマトリクス５１０の例を示す。図１４に例示されるように、ディザマトリクス５１０は、画像データにおける画素の位置によって参照するディザ閾値が異なる。また、原稿画像５２０について、１つのディザマトリクス５１０の値を主走査および副走査方向に対して繰り返し参照する。
【０００８】
特許文献１には、サイズの異なるディザマトリクスをメモリに展開し、アドレスのアクセス方法を変化させることでゲート規模の削減を図った技術が開示されている。また、特許文献２には、１ラインを複数に分割し、ディザ処理の比較部と、ディザマトリクス制御部と、ディザマトリクスにアクセスするためのアドレスカウンタ制御部とをラインの分割数分持つことで画素の並列処理を可能とし、処理の高速化を図った技術が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、ディザ処理を並列処理により行おうとすると、ディザ閾値を記憶するＳＲＡＭにアクセスするポート数が増加し、ゲート規模が大きくなってしまうという問題点があった。
【００１０】
２画素を並列処理する場合を例に、この点についてより具体的に説明する。なお、画素データは、２５６階調、８ビットのビット深度を有し、ディザ閾値は、データ長が８ビットのデータであるものとする。また、ＳＲＡＭは、１クロックで１ワード（３２ビット＝４画素分）の読み出しが可能であるものとする。
【００１１】
先ず、図１５（ａ）に例示されるように、４画素×４画素など、ディザマトリクス５１１のサイズが主走査および副走査方向それぞれで偶数画素の場合について考える。この場合、ディザ閾値のデータ長が８ビットなので、ディザ閾値を参照するディザマトリクス５１１の幅が、並列処理を行う画素データ数の整数倍になる。そのため、図１５（ｂ）に例示されるように、並列処理を行う画素の組の境界がディザマトリクス５１１の幅に一致し、当該画素の組に対して参照されるディザ閾値を、常に１クロックで読み出すことができる。したがって、シングルポートＳＲＡＭを用いて、２画素並列でディザ処理を行うことができる。
【００１２】
次に、図１６（ａ）に例示されるように、５画素×５画素など、ディザマトリクス５１２のサイズが主走査および副走査方向でそれぞれ奇数画素の場合について考える。この場合、ディザ閾値を参照するディザマトリクス５１２の幅が並列処理を行う画素データ数の整数倍にならないため、並列処理を行う画素の組の境界がディザマトリクスの幅方向の端部を跨ぐ場合が発生する。したがって、シングルポートＳＲＡＭへのアクセスを行おうとすると、並列処理を行う画素の組がディザマトリクスの幅方向の端部を跨ぐ部分で複数アドレスにアクセスする必要があり、処理速度が低下する。
【００１３】
そのため、ディザ閾値が記憶されるＳＲＡＭを、ディザマトリクスの幅が偶数画素の場合と、データサイズが１ワードを超える奇数画素の場合とで共有するためには、１クロックで２ワードの読み出しが可能なデュアルポートＳＲＡＭを用いる必要があり、シングルポートＳＲＡＭを用いる場合に比べ、ゲート数が大幅に増加してしまうという問題点があった。
【００１４】
本発明は、上記に鑑みてなされたものであって、ディザマトリクスの幅が１ワードを超える奇数画素分であっても、ディザ閾値を記憶する記憶媒体にシングルポートの記憶媒体を用いて並列処理ができることを目的とする。
【課題を解決するための手段】
【００１５】
上述した課題を解決し、目的を達成するために、本発明は、それぞれ画素に対応する複数のディザ閾値からなるディザマトリクスを、画像データの主走査方向および副走査方向のそれぞれに対して繰り返し適用して、２画素毎にディザ処理を行う画像処理装置であって、１のアドレス指定で所定偶数画素数に対応するデータ長のデータが読み出される第１の記憶手段と、第２の記憶手段と、ディザマトリクスによるディザ閾値の第１の記憶手段および第２の記憶手段への書き込みを制御する書き込み制御手段と、第１の記憶手段および第２の記憶手段からのディザ閾値の読み出しを制御する読み出し制御手段と、入力画像データの２の画素と、２の画素に対応して読み出し制御手段で読み出された２のディザ閾値とをそれぞれ比較して、比較結果を出力画像データとして出力する比較手段とを有し、書き込み制御手段は、ディザマトリクスの主走査方向に連続する各ディザ閾値のうち、所定偶数画素数までのディザ閾値を第１の記憶手段の第１のアドレスが示す領域に書き込み、所定偶数画素数を超えるディザ閾値を第１の記憶手段の第２のアドレスが示す領域に書き込み、ディザマトリクスの主走査方向の幅が奇数画素数分である場合に、主走査方向に連続する各ディザ閾値のうち先頭のディザ閾値と、第１のアドレスが示す領域の末尾または第２のアドレスが示す領域の先頭に書き込まれるディザ閾値とを第２の記憶手段に書き込むことを特徴とする。
【００１６】
また、本発明は、それぞれの画素に対応する複数のディザ閾値からなるディザマトリクスを、画像データの主走査方向および副走査方向のそれぞれに対して繰り返し適用して、２画素毎にディザ処理を行う画像処理装置の画像処理方法であって、画像処理装置は、１のアドレスが示す領域指定で所定偶数画素数に対応するデータ長のデータが読み出される第１の記憶手段と、第２の記憶手段とを備え、書き込み制御手段が、ディザマトリクスによるディザ閾値の第１の記憶手段および第２の記憶手段への書き込みを制御する書き込み制御ステップと、読み出し制御手段が、第１の記憶手段および第２の記憶手段からのディザ閾値の読み出しを制御する読み出し制御ステップと、比較手段が、入力画像データの２の画素と、２の画素に対応して読み出し制御ステップで読み出された２のディザ閾値とをそれぞれ比較して、比較結果を出力画像データとして出力する比較ステップとを有し、書き込み制御ステップは、ディザマトリクスの主走査方向に連続する各ディザ閾値のうち、所定偶数画素数までのディザ閾値を第１の記憶手段の第１のアドレスが示す領域に書き込み、所定偶数画素数を超えるディザ閾値を第１の記憶手段の第２のアドレスが示す領域に書き込み、ディザマトリクスの主走査方向の幅が奇数画素数分である場合に、主走査方向に連続する各ディザ閾値のうち先頭のディザ閾値と、第１のアドレスが示す領域の末尾または第２のアドレスが示す領域の先頭に書き込まれたディザ閾値とを第２の記憶手段に書き込むことを特徴とする。
【発明の効果】
【００１７】
本発明によれば、ディザマトリクスの幅が１ワードを超える奇数画素分であっても、ディザ閾値を記憶する記憶媒体にシングルポート記憶媒体を用いて並列処理ができるという効果を奏する。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明の各実施形態に適用可能な画像形成装置の一例の構成を示すブロック図である。
【図２】図２は、画像処理部の一例の構成を示すブロック図である。
【図３】図３は、第１の実施形態による階調処理モジュールの一例の構成を示すブロック図である。
【図４】図４は、ＳＲＡＭにディザ閾値を格納する際の、レジスタ制御部における一例の処理を示すフローチャートである。
【図５】図５は、ＳＲＡＭにディザ閾値を書き込んだ場合の例を示す略線図である。
【図６】図６は、ＳＲＡＭに書き込まれたディザ閾値を読み出すためのアドレスを生成する一例の処理を示すフローチャートである。
【図７】図７は、リードアドレスＲADについて説明するための略線図である。
【図８】図８は、読み出しデータ制御部による、ＳＲＡＭから読み出したディザ閾値に対する一例の処理を示すフローチャートである。
【図９】図９は、第２の実施形態による階調処理モジュールの一例の構成を示すブロック図である。
【図１０】図１０は、ＳＲＡＭに記憶されるディザ閾値と、端部記憶領域に記憶されるディザ閾値との一例の関係を示す略線図である。
【図１１】図１１は、ＳＲＡＭおよび端部記憶領域にディザ閾値を格納する際の、レジスタ制御部における一例の処理を示すフローチャートである。
【図１２】図１２は、読み出しデータ制御部による、ＳＲＡＭおよび端部記憶領域から読み出したディザ閾値に対する一例の処理を示すフローチャートである。
【図１３】図１３は、並列処理による画像処理を概略的に示す略線図である。
【図１４】図１４は、５画素×５画素のディザマトリクスの例を示す略線図である。
【図１５】図１５は、従来技術による２画素の並列処理について説明するための略線図である。
【図１６】図１６は、従来技術による２画素の並列処理について説明するための略線図である。
【発明を実施するための形態】
【００１９】
以下に添付図面を参照して、この発明に係る画像処理装置の実施形態を詳細に説明する。図１は、本発明の各実施形態に適用可能な画像形成装置１の一例の構成を示す。画像形成装置１は、コントローラ部１０とエンジン部１１とを備える。この例では、画像形成装置１は、スキャナによる原稿読み取り動作およびプロッタによる画像形成動作を行うことができると共に、例えばスキャナにて原稿を読み取った画像データをＦＡＸ送信するＦＡＸ送信機能を有する。
【００２０】
先ず、エンジン部１１について説明する。エンジン部１１は、スキャナ１２０、スキャナ画像処理ＡＳＩＣ(Application Specific Integrated Circuit)１２１、エンジンＡＳＩＣ１３０、プロッタ１４０、プロッタ制御ＡＳＩＣ１４１、エンジンＣＰＵ(Central Processing Unit)１５０、ＲＡＭ(Random Access Memory)１５１およびフラッシュメモリ１５２を含む。エンジン部１１は、原稿画像の読み取りと、画像の出力とを行う。
【００２１】
フラッシュメモリ１５２は、書き換え可能な不揮発性メモリであって、エンジンＣＰＵ１５０が各種制御を実行するときに使用するプログラムを記憶する。エンジンＣＰＵ１５０は、フラッシュメモリ１５２に予め記憶されたプログラムに従い、ＲＡＭ１５１をワークメモリとして動作し、スキャナ制御、用紙の搬送、作像、定着といったエンジン部１１全体の動作を制御する。ＲＡＭ１５１は、エンジンＣＰＵ１５０により、プログラム実行中の変数記憶領域などに使用される。
【００２２】
エンジンＡＳＩＣ１３０は、ビデオ出力部１３２、アービタ１３１、コミュニケーションバッファ１３３、解像度変換部１３４および圧縮伸張部１３５を備える。エンジンＡＳＩＣ１３０は、コントローラ１０とエンジンＣＰＵ１５０との間、ならびに、コントローラ１０とプロッタ制御ＡＳＩＣ１４１との間のデータのインタフェースを行う。また、エンジンＡＳＩＣ１３０は、コントローラ１０から供給された画像データに対して、所定の画像処理を施す。
【００２３】
アービタ１３１は、エンジンＡＳＩＣ１３０内の各モジュール（ビデオ出力部１３２、コミュニケーションバッファ１３３、解像度変換部１３４および圧縮伸張部１３５）から、後述するコントローラＣＰＵ１１０へのアクセスの調停を行う。コミュニケーションバッファ１３３は、エンジンＣＰＵ１５０とコントローラＣＰＵ１１０との間の通信のためのバッファである。
【００２４】
ビデオ出力部１３２は、出力する画像の画像データを、アービタ１３１およびコントローラＣＰＵ１１０を介して、後述するメインメモリ１１１から読み込み、マスク処理、合成処理、フォーマット変換など所定の画像処理を施す。ビデオ出力部１３２で画像処理された画像データは、プロッタ制御ＡＳＩＣ１４１に対して出力される。
【００２５】
解像度変換部１３４は、プリンタ動作、ＦＡＸ動作時に、メインメモリ１１１から読み出した低解像度の画像データを、プロッタに適合する高解像度の画像データに変換して、メインメモリ１１１に出力する。圧縮伸張部１３５は、画像データを圧縮してメインメモリ１１１に送出する。また、メインメモリ１１１から出力された圧縮画像データを伸張する。これにより、メインメモリ１１１上の画像データ領域を削減している。
【００２６】
スキャナ１２０は、原稿の読み取りを行うユニットであり、スキャナ動作、コピー動作、ＦＡＸ送信動作時に原稿の画像データを出力する。スキャナ画像処理ＡＳＩＣ１２１は、スキャナ１２０で読み取られた画像データに対して補正処理を施して出力すると共に、原稿における文字部および写真部、有彩および無彩を判定した像域分離データを生成して出力する。像域分離データおよび補正された画像データは、コントローラ部１０に供給される。
【００２７】
プロッタ１４０は、プロッタ制御ＡＳＩＣ１４１から出力される画像データに基づいて用紙上に画像形成を行う。プロッタ制御ＡＳＩＣ１４１は、プロッタ１４０からの同期信号に同期させて、エンジンＡＳＩＣ１３０から入力される画像データをプロッタ１４０に対して出力する。
【００２８】
次に、コントローラ部１０について説明する。コントローラ部１０は、この画像形成装置１の全体の制御や、画像形成装置１における各種アプリケーションを実行する。コントローラ部１０は、コントローラＡＳＩＣ１００、コントローラＣＰＵ１１０、メインメモリ１１１およびハードディスク１０５を含む。
【００２９】
コントローラＡＳＩＣ１００は、アービタ１０１、ビデオ入力部１０２、画像処理部１０３、ハードディスクＩ／Ｆ（インターフェイス）１０４および配信画像処理部１０６を含む。コントローラＡＳＩＣ１００は、エンジン部１１から供給される画像データのメインメモリ１１１への転送、コピー動作時の画像処理、ハードディスク１０５に対する読み出しおよび書き込み制御などを行う。
【００３０】
アービタ１０１は、コントローラＡＳＩＣ１００内の各モジュール（ビデオ入力部１０２、画像処理部１０３、ハードディスクＩ／Ｆ（インターフェイス）１０４および配信画像処理部１０６）からコントローラＣＰＵ１１０に対するアクセスの調停を行う。
【００３１】
ビデオ入力部１０２は、スキャナ画像処理ＡＳＩＣ１２１から供給された画像データを圧縮して、メインメモリ１１１に転送する。配信画像処理部１０６は、メインメモリ１１１上の画像データをネットワーク経由で配信するために、画像データの変換処理を行い、変換後の画像データをメインメモリ１１１に出力する。
【００３２】
画像処理部１０３は、メインメモリ１１１上の圧縮画像データを展開し、フィルタ処理、色変換処理および階調処理といった所定の画像処理を施す。画像処理が施された画像データは、メインメモリ１１１に転送される。この画像処理部１０３で行われる階調処理において、本発明の各実施形態に係るディザ処理が行われる。
【００３３】
ハードディスク１０５は、各種画像データの蓄積や、コントローラ部１０における一時記憶領域に用いられる。コントローラＣＰＵ１１０が動作するためのプログラムも、ハードディスク１０５に格納される。ハードディスクＩ／Ｆ１０４は、ハードディスク１０５に対する読み出しおよび書き込み制御を行う。
【００３４】
コントローラＣＰＵ１１０は、メインメモリ１１１に対するアクセス制御を行うメモリコントローラと、メインメモリ１１１とのインターフェイスであるＰＣＩ(Peripheral Component Interconnect Bus)や、ＰＣＩ  Ｅｘｐｒｅｓｓといった汎用インタフェースを備える。メインメモリ１１１は、コントローラＣＰＵ１１０が各種アプリケーションを実行するためのワークメモリとして用いられ、コントローラＣＰＵ１１０により、各種データの一時記憶領域や、ＤＭＡＣ(Direct Memory Access Controller)用ディスクリプタ領域などに使用される。
【００３５】
コントローラＣＰＵ１１０は、メインメモリ１１１をワークメモリとして用い、例えばハードディスク１０５から読み出したプログラムに従い、この画像形成装置１の全体の動作を制御する。例えば、コントローラＣＰＵ１１０は、プログラムに従い、メインメモリ１１１の領域確保や読み出しおよび書き込みの制御を行うと共に、プロッタ１４０による画像描画、コピー機能、スキャナ機能、ＦＡＸ機能、画像配信機能などの各種アプリケーションを実行する。
【００３６】
図２は、画像処理部１０３の一例の構成を示す。また、図２には、画像処理部１０３とメインメモリ１１１との間のデータの流れをさらに示す。画像処理部１０３は、画像処理モジュール群２００およびレジスタ制御部２２０を含むと共に、データリードＤＭＡＣ２３１と、データライトＤＭＡＣ２３２Ａ〜２３２Ｄとを含む。
【００３７】
データリードＤＭＡＣ２３１は、メインメモリ１１１からの画像データの読み出しを制御する。より具体的には、データリードＤＭＡＣ２３１はメインメモリ１１１から、ＲＧＢ各画素が画素順次とされたＲＧＢ画像データと、像域分離データＸとを読み出して、画像処理モジュール群２００に送出する。
【００３８】
画像処理モジュール群２００は、ＲＧＢ画像データおよび像域分離データに対して各種画像処理を施す複数の画像処理モジュールを含む。例えば、画像処理モジュール群２００は、γ変換を行うγ変換モジュール、フィルタ処理を行うフィルタモジュール、色補正を行う色補正モジュール、階調変換などの階調処理を行う階調処理モジュールなどを含む。
【００３９】
これら各画像処理モジュールのうち、階調処理モジュールは、ディザ処理部、誤差拡散処理部および単純２値化処理部などを含み、画像データに対して、プロッタ１４０の階調特性に適した階調処理を施す。詳細は後述するが、ディザ処理部は、ディザマトリクスを用いてディザ処理を行う。
【００４０】
さらに、画像処理モジュール群２００は、ディザマトリクスやγテーブルといったルックアップテーブルを用いるモジュール（階調処理モジュール、ガンマ変換モジュールなど）は、ルックアップテーブルを記憶するためのＳＲＡＭ(Static RAM)をそれぞれ持つ。
【００４１】
画像処理モジュール群２００は、データリードＤＭＡＣ２３１から供給されたＲＧＢ画像データおよび像域分離データＸに対して画像処理を施し、ＣＭＹＫ各色の画像データが面順次とされたＣＭＹＫ画像データとして出力する。データライトＤＭＡＣ２３２Ａ〜２３２Ｄは、画像処理モジュール群２００から供給された各ＣＭＹＫ画像データを、それぞれをメインメモリ１１１に出力する。
【００４２】
レジスタ制御部２２０は、画像処理モジュール群２００に含まれる、各画像処理モジュールが画像処理を行う際に用いるパラメータをコントローラＣＰＵ１１０から受け取って保持する。また、レジスタ制御部２２０は、コントローラＣＰＵ１１０から受け取ったパラメータを、画像処理モジュール群２００に含まれる各画像処理モジュールが有するＳＲＡＭ（図示しない）に書き込む。
【００４３】
レジスタ制御部２２０は、さらに、各ＤＭＡＣ、すなわち、データリードＤＭＡＣ２３１、ならびに、データライトＤＭＡＣ２３２Ａ〜２３２Ｄそれぞれに対して起動を指示するためのＥＸＥＣレジスタや、割り込みのステータスを保持する割り込みステータスレジスタ、各ＤＭＡＣのディスクリプタポインタレジスタなどを備える。レジスタ制御部２２０は、各ＤＭＡＣの起動処理を行うと共に、コントローラＣＰＵ１１０に対する割り込み信号の出力を行う。
【００４４】
画像処理部１０３で画像処理を行う際のデータの流れは、次のようになる。メインメモリ１１１に記憶されるＲＧＢ画像データおよび像域分離データＸは、データリードＤＭＡＣ２３１により読み出され、アービタ１０１を介して画像処理モジュール群２００に供給される。それと共に、メインメモリ１１１に記憶される画像処理パラメータがコントローラＣＰＵ１１０に読み出され、アービタ１０１を介してレジスタ制御部２２０に供給される。画像処理パラメータは、例えばコントローラＣＰＵ１１０の制御により、所定のタイミングでレジスタ制御部２２０から画像処理モジュール群２００に供給される。
【００４５】
画像処理モジュール群２００は、データリードＤＭＡＣ２３１から供給されたＲＧＢ画像データと像域分離データＸとに基づき、所定の画像処理を行い、処理結果として、ＣＭＹＫ各色の画像データが面順次とされたＣＭＹＫ画像データそれぞれを出力する。このＣＭＹＫ画像データそれぞれは、データライトＤＭＡＣ２３２Ａ〜２３２Ｄから、アービタ１０１を介してメインメモリ１１１に供給され、出力画像データＣ、出力画像データＭ、出力画像データＹおよび出力画像データＫとして、それぞれメインメモリ１１１の所定の領域に書き込まれる。
【００４６】
＜第１の実施形態＞
次に、本発明の第１の実施形態について説明する。図３は、本第１の実施形態による階調処理モジュール２１０の一例の構成を示す。階調処理モジュール２１０は、画像処理モジュール群２００に含まれる画像処理モジュールのうちの一つである。階調処理モジュール２１０は、ディザ処理部２６０およびＳＲＡＭ２１１を含み、入力されたＲＧＢ画像データに対して、２画素単位で並列的にディザ処理を施す。ディザ処理部２６０は、例えば、ディザ処理を行う構成を、Ｒ色、Ｇ色およびＢ色それぞれの画像データに対して持つ。以下では、ＲＧＢ各色のうち１色分の画像データに対する構成について説明する。
【００４７】
ディザ処理部２６０は、読み出しデータ制御部２１２、アドレス生成部２１３、カウンタ部２１４および比較部２１５を含む。カウンタ部２１４は、主走査カウンタと副走査カウンタとを有し、ディザ処理部２６０に入力された画像データの画素を入力順にカウントする。主走査カウンタは、画像データの主走査方向に画素数をカウントし、副走査カウンタは、画像データの副走査方向にライン数をカウントする。本第１の実施形態では、入力画像データは、２画素が並列的に入力されるため、主走査カウンタは、カウント値が２ずつ増加される。
【００４８】
カウンタ部２１４は、レジスタ制御部２２０から主走査サイズと副走査サイズのパラメータを受け取り、主走査カウンタのカウント値が主走査サイズと等しくなったら副走査カウンタのカウント値を１だけ増加させる。副走査カウンタのカウンタ値が副走査サイズと等しくなったら、主走査カウンタおよび副走査カウンタそれぞれのカウント値を０にリセットする。カウンタ部２１４は、主走査カウント値をアドレス生成部２１３と読み出しデータ制御部２１２とに渡し、副走査カウント値をアドレス生成部２１３に渡す。
【００４９】
アドレス生成部２１３は、カウンタ部２１４から主走査カウント値と副走査カウント値を受け取ると共に、レジスタ制御部２２０からディザマトリクスサイズのパラメータを受け取り、必要となるディザ閾値が格納されているアドレスを生成する。このアドレスは、ＳＲＡＭ２１１からの読み出しを行う際のリードアドレスとして用いられる。
【００５０】
ＳＲＡＭ２１１は、ディザマトリクスのディザ閾値が格納される。より具体的には、レジスタ制御部２２０は、ディザ処理部２６０に対して画像データが入力される前に、ＳＲＡＭ２１１に格納するディザ閾値と、当該ディザ閾値をＳＲＡＭ２１１に格納するアドレスを示すライトアドレスをＳＲＡＭ２１１に供給する。ＳＲＡＭ２１１には、各ライトアドレスが示すアドレスに、各ディザ閾値がそれぞれ格納される。
【００５１】
また、ＳＲＡＭ２１１から、アドレス生成部２１３から供給されたリードアドレスが示す１ワード長（３２ビット）のディザ閾値が読み出される。この例では、ディザ閾値のデータ長が８ビットであるので、４個のディザ閾値が一度のリードアドレス指定でＳＲＡＭ２１１から読み出されることになる。ＳＲＡＭ２１１から読み出された１ワード長のディザ閾値は、読み出しデータ制御部２１２に渡される。
【００５２】
読み出しデータ制御部２１２は、カウンタ部２１４から受け取った主走査カウント値と、レジスタ制御部２２０から受け取った主走査サイズ情報とにより、ＳＲＡＭ２１１から読み出された１ワード長のディザ閾値から、ディザ処理部２６０に入力された２画素に対応する、２画素分のディザ閾値を取り出す。読み出しデータ制御部２１２は、取り出した２画素分のディザ閾値を、比較部２１５に渡す。
【００５３】
比較部２１５は、ディザ処理部２６０に入力された画像データの、主走査方向に隣り合った２画素が１クロックで入力される。この２画素の画素値と、当該２画素に対応して読み出しデータ制御部２１２から受け取った２画素分のディザ閾値とを画素毎に比較する。そして、画素値がディザ閾値を超えていれば１を、画素値がディザ閾値以下であれば０を、出力画像データとする。比較部２１５は、画素値とディザ閾値との比較の結果得られた２画素分の出力画像データを出力する。
【００５４】
本第１の実施形態では、ディザマトリクスのサイズが変更になる度に、ＳＲＡＭ２１１に格納されるディザ閾値を書き換える。図４は、ＳＲＡＭ２１１にディザ閾値を格納する際の、レジスタ制御部２２０における一例の処理を示すフローチャートである。なお、以下では、ディザマトリクスのサイズは、４画素×４画素および５画素×５画素の２種類から選択されるものとする。ディザマトリクスのサイズを示す情報は、画像処理パラメータの一つとしてコントローラＣＰＵ１１０が生成し、アービタ１０１を介してレジスタ制御部２２０に供給される。
【００５５】
図４のフローチャートによる処理は、コントローラＣＰＵ１１０からレジスタ制御部２２０に対してディザマトリクスのデータが供給されると、開始される。ディザマトリクスのデータは、ディザマトリクスのサイズを示す情報と、ディザマトリクスにおける各ディザ閾値のデータを含む。ディザマトリクスのデータは、レジスタ制御部２２０が有するメモリ（図示しない）に記憶される。
【００５６】
先ず、ステップＳ１００で各変数Ｘ、Ｙが０に初期化され、変数ａが−１に初期化される。なお、変数Ｘおよび変数Ｙは、それぞれディザマトリクスの垂直方向および水平方向の画素単位の位置を示す。以下、これら変数Ｘおよび変数Ｙを、適宜、行Ｘおよび列Ｙなどのように記す。変数ａは、ＳＲＡＭ２１１のオフセットアドレスｎに対する１ワード単位のアドレスを示す。
【００５７】
ここで、ＳＲＡＭ２１１は、図５に例示されるように、３２ビットを１ワードとし、１ワード毎に１つ、アドレスが割り当てられるものとする。すなわち、ＳＲＡＭ２１１は、アドレスを指定することで、１ワード分のデータが一度に読み出される。また、１つのアドレスで示される１ワードのデータのＬＳＢ(Least Significant Bit)からＭＳＢ(Most Significant Bit)に向けて、データ長が８ビットのディザ閾値が、主走査の方向に従い順に詰め込まれるものとする。
【００５８】
説明は図４に戻り、ステップＳ１００で各変数が初期化されると、次のステップＳ１０１で、変数ａが１だけ増加される。そして、次のステップＳ１０２で、変数Ｙの値に基づき、現在の処理がディザマトリクスにおける主走査方向の端部、すなわちＭＳＢ側の８ビットに対する書き込み処理であるか否かが判定される。ディザマトリクスのサイズが５画素×５画素または４画素×４画素であるこの例では、ステップＳ１０２の時点で変数Ｙ＝４の場合に、端部の書き込みであると判定される。
【００５９】
若し、ステップＳ１０２で、端部の書き込み処理ではないと判定されたら、処理はステップＳ１０３に移行される。ステップＳ１０３では、ディザマトリクスの第Ｘ行目における第Ｙ列目〜第Ｙ＋３列目の、連続する４個のディザ閾値をライトデータとして、ライトアドレスｎ＋ａと共に出力する。これにより、当該ライトデータがＳＲＡＭ２１１のアドレスｎ＋ａに書き込まれる。そして、次のステップＳ１０４で変数Ｙが４だけ増加され、処理が後述するステップＳ１０６に移行される。
【００６０】
一方、ステップＳ１０２で、端部の書き込み処理であると判定されたら、処理はステップＳ１０５に移行される。ステップＳ１０５では、ディザマトリクスにおける行Ｘの端部のディザ閾値と、行Ｘの先頭のディザ閾値と、行Ｘの端部の直前のディザ閾値とをライトデータとして、ライトアドレスｎ＋ａと共に出力する。より具体的には、行Ｘの端部のディザ閾値と、位置（Ｘ，０）すなわち行Ｘ、列０のディザ閾値と、位置（Ｘ，３）のディザ閾値とがライトデータとされる。これにより、ＳＲＡＭ２１１のアドレスｎ＋ａに対して、ディザマトリクスにおける行Ｘの端部位置（Ｘ，４）のディザ閾値と、位置（Ｘ，０）のディザ閾値と、位置（Ｘ，３）のディザ閾値とが、ＬＳＢ側から順に詰め込まれる。
【００６１】
ステップＳ１０５の処理が終了したら、処理は、ステップＳ１０６に移行される。ステップＳ１０６では、行Ｘがディザマトリクスにおける垂直方向のサイズに達したか否かが判定される。若し、達したと判定されたら、図４のフローチャートの一連の処理が終了される。一方、達していないと判定されたら、処理はステップＳ１０７に移行され、行Ｘの値が１だけ増加されると共に、列Ｙの値が０とされる。そして、処理がステップＳ１０１に戻される。
【００６２】
ディザマトリクスのサイズが５画素×５画素の場合に、図４のフローチャートに従いＳＲＡＭ２１１にディザ閾値を書き込んだ場合の例を、図５に示す。なお、図５において、各升は、それぞれ８ビットのディザ閾値を示し、升内の数字は、左側がディザマトリクスにおける行Ｘ、右側が列Ｙを示す。以下、ディザマトリクスにおける各ディザ閾値を、これら行Ｘ、列Ｙの記述を用いて、適宜、ディザ閾値「ＸＹ」のように表現する。
【００６３】
ここで、ディザマトリクスのサイズが５画素×５画素の場合、ディザマトリクスの１行分のディザ閾値の一部は、ＳＲＡＭ２１１において１回のアドレス指定で読み出し可能な領域からはみ出してしまう。そこで、当該はみ出した端部のディザ閾値と、当該ディザ閾値が含まれるディザマトリクスの行における先頭のディザ閾値と、当該端部のディザ閾値の直前のディザ閾値とを、ＳＲＡＭ２１１において１回のアドレス指定で一度に読み出し可能な領域に書き込むようにする。
【００６４】
すなわち、図５に例示されるように、ディザマトリクスの行の端部のディザ閾値「Ｘ４」と、当該ディザマトリクスにおける先頭のディザ閾値「Ｘ０」およびディザ閾値「Ｘ４」の直前のディザ閾値「Ｘ３」とを、ＳＲＡＭ２１１の１回のアドレス指定で読み出し可能な領域に書き込む。
【００６５】
より具体的には、図５を参照し、ディザマトリクスにおける行の先頭から４個のディザ閾値「００」、「０１」、「０２」および「０３」が、アドレスｎに対し、列番号の小さい順に格納される。ディザマトリクスにおける当該行からはみ出たディザ閾値「０４」がアドレスｎ＋１に書き込まれる。ディザ閾値「０４」に続けて、当該行の先頭のディザ閾値「００」が書き込まれ、このディザ閾値「００」に続けて、アドレスｎの末尾に書き込まれたディザ閾値「０３」が書き込まれる。
【００６６】
図６は、図４および図５で説明したようにしてＳＲＡＭ２１１に書き込まれたディザ閾値を読み出すためのアドレスを生成する一例の処理を示すフローチャートである。この図６のフローチャートにおける各処理は、アドレス生成部２１３で実行される。なお、ディザマトリクスは、サイズが４画素×４画素および５画素×５画素のうち何れかが選択されるものとする。
【００６７】
図６のフローチャートによる処理は、カウンタ部２１４における主走査カウンタによるカウント値が増加する度に開始される。上述したように、カウンタ部２１４では、主走査カウンタによるカウント値が入力された画像データの２画素毎に増加する。
【００６８】
最初のステップＳ１２０で、ディザマトリクスのサイズが４画素×４画素および５画素×５画素のうち何れであるかが判定される。ディザマトリクスのサイズを示す情報は、例えばコントローラＣＰＵ１１０から画像処理部１０３に渡され、ディザ処理部２６０に供給される。若し、ディザマトリクスのサイズが５画素×５画素であると判定されたら、処理はステップＳ１２１に移行される。
【００６９】
ステップＳ１２１では、カウンタ部２１４における主走査カウンタのカウント値を１０で除した際の剰余が４または８であるか否かが判定される。若し、当該剰余が４または８であると判定されたら、処理はステップＳ１２２に移行され、ＳＲＡＭ２１１からディザ閾値を読み出すためのリードアドレスＲADが、下記の式（１）に従い計算される。
ＲAD＝ｎ＋１＋Ｃx×(Ｍsize/４)    …（１）
【００７０】
なお、式（１）において、変数Ｃxは、カウンタ部２１４における副走査カウンタのカウント値、Ｍsizeは、ディザマトリクスの１辺のサイズを示す。また、式（１）において、「Ｍsize/４」の項は、小数点以下を切り捨てるものとする。
【００７１】
アドレス生成部２１３は、計算されたリードアドレスＲADをＳＲＡＭ２１１に対して出力する。ＳＲＡＭ２１１は、供給されたリードアドレスＲADに示されるアドレスから、１ワード分のデータすなわち４個のディザ閾値を読み出す。
【００７２】
また、上述のステップＳ１２１で、カウンタ部２１４における主走査カウンタのカウント値を１０で除した際の剰余が４および８の何れでもないと判定されたら、処理はステップＳ１２３に移行され、ＳＲＡＭ２１１からディザ閾値を読み出すためのリードアドレスＲADが、下記の式（２）に従い計算される。なお、式（２）における各変数の意味は、上述した式（１）と共通である。また、式（２）においても、上述の式（１）と同様に、「Ｍsize/４」の項は、小数点以下を切り捨てるものとする。
ＲAD＝ｎ＋Ｃx×(Ｍsize/４)    …（２）
【００７３】
一方、上述のステップＳ１２０で、マトリクスサイズが４画素×４画素であると判定されたら、処理はステップＳ１２４に移行され、ＳＲＡＭ２１１からディザ閾値を読み出すためのリードアドレスＲADが、下記の式（３）に従い計算される。
ＲAD＝ｎ＋(Ｃｙ％Ｍsize)/４＋Ｃx    …（３）
【００７４】
なお、式（３）において、変数Ｃyは、カウンタ部２１４における主走査カウンタのカウント値を示す。式（３）のその他の変数は、上述の式（１）の各変数と共通である。また、演算子「％」は、剰余を求めることを示す。また、式（３）において、「(Ｃｙ％Ｍsize)/４」の項は、小数点以下を切り捨てるものとする。
【００７５】
図６のフローチャートの処理により生成されるリードアドレスＲADについて、図７を用いてより具体的に説明する。ここでは、図７（ｃ）に例示されるように、ディザマトリクスのサイズを５画素×５画素とする。図７（ａ）は、カウンタ部２１４の主走査カウンタでカウントされる画素の例を示し、図７（ｂ）は、図７（ａ）に例示される各画素に対応するディザ閾値を示す。また、ＳＲＡＭ２１１には、図５を用いて説明したようにして各ディザ閾値が格納されているものとする。
【００７６】
主走査カウンタにおいて、画素が２画素毎にカウントされるので、主走査カウンタのカウント値Ｃyは、値が０、２、４、…のように２ずつ増加する。画素＃４がカウントされる直前までは、主走査カウンタのカウント値Ｃyを１０で除した剰余がそれぞれ０、２であるので、ステップＳ１２１の判定に従い処理がステップＳ１２２に移行され、式（１）を用いてリードアドレスＲADが求められる。副走査カウンタのカウント値Ｃx＝０とすると、
ＲAD＝ｎ＋０×(Ｍsize/４)＝ｎ
となる。
【００７７】
読み出しデータ制御部２１２は、ＳＲＡＭ２１１に対してアドレスｎを指定して、ディザ閾値「００」、「０１」、「０２」および「０３」を読み出す。そして、比較部２１５において、読み出したディザ閾値「００」、「０１」、「０２」および「０３」を参照して、カウントされた画素の次の４画素（画素＃１〜画素＃４）の画素値とディザ閾値との比較を、２画素単位で順次行う。
【００７８】
なお、式（１）および式（２）において、(Ｍsize/４)の項は、ディザマトリクスのサイズにより決まる値であって、マトリクスサイズが５画素×５画素の場合には、値が１となる。
【００７９】
次に、画素＃４がカウントされると、主走査カウンタのカウント値Ｃyを１０で除した剰余が４となり、処理がステップＳ１２３に移行され、式(２)を用いてリードアドレスＲADが下記のように求められる。
ＲAD＝ｎ＋１＋０×(Ｍsize/４)＝ｎ＋１
【００８０】
読み出しデータ制御部２１２は、ＳＲＡＭ２１１に対してアドレスｎ＋１を指定して、ディザ閾値「０４」、「００」および「０３」を読み出す。そして、比較部２１５において、読み出したディザ閾値のうちディザ閾値「０４」および「００」を参照して、カウントされた画素の次の２画素（画素＃５、画素＃６）の画素値とディザ閾値との比較を行う。
【００８１】
次に、画素＃６がカウントされると、主走査カウンタのカウント値Ｃyを１０で除した剰余が２となり、処理がステップＳ１２２に移行され、式(２)を用いてリードアドレスＲADが下記のように求められる。
ＲAD＝ｎ＋０×(Ｍsize/４)＝ｎ
【００８２】
読み出しデータ制御部２１２は、ＳＲＡＭ２１１に対してアドレスｎを指定して、ディザ閾値「００」、「０１」、「０２」および「０３」を読み出す。そして、比較部２１５において、読み出したディザ閾値のうちディザ閾値「０１」および「０２」を参照して、カウントされた画素の次の２画素（画素＃７、画素＃８）の画素値とディザ閾値との比較を行う。
【００８３】
次に、画素＃８がカウントされると、主走査カウンタのカウント値Ｃyを１０で除した剰余が８となり、処理がステップＳ１２３に移行され、式(２)を用いてリードアドレスＲADが下記のように求められる。
ＲAD＝ｎ＋１＋０×(Ｍsize/４)＝ｎ＋１
【００８４】
読み出しデータ制御部２１２は、ＳＲＡＭ２１１に対してアドレスｎ＋１を指定して、ディザ閾値「０４」、「００」および「０３」を読み出す。そして、比較部２１５において、読み出したディザ閾値のうちディザ閾値「０３」および「０４」を参照して、カウントされた画素の次の２画素（画素＃９、画素＃１０）の画素値とディザ閾値との比較を行う。
【００８５】
このように、ディザマトリクスのサイズが５画素×５画素の場合、図５を用いて説明したように、ＳＲＡＭ２１１の第１のアドレスに対してディザマトリクスの行の先頭から４画素分のディザ閾値「Ｘ０」〜「Ｘ３」を書き込み、第２のアドレスに対してディザマトリクスの行の端部のディザ閾値「Ｘ４」と、先頭のディザ閾値「Ｘ０」およびディザ閾値「Ｘ４」の直前のディザ閾値「Ｘ３」とを書き込む。そして、ディザマトリクスの幅（主走査方向のサイズ）と１度に並列処理を行う画素数との最小公倍数に対する画素の主走査方向のカウント数の剰余が、ＳＲＡＭ２１１の１ワード分の画素数の倍数になる位置で、ＳＲＡＭ２１１のリードアドレスＲADを、第１のアドレスおよび第２のアドレスとで切り替えている。
【００８６】
そのため、ディザ閾値を格納するＳＲＡＭ２１１から１回のアドレス指定で１ワード分（４画素分）のデータが読み出し可能であり、ディザマトリクスの幅が５画素分の場合であっても、並列処理を行う２画素が参照する２個のディザ閾値を、シングルポートのＳＲＡＭ２１１から常に１クロックで読み出すことができる。
【００８７】
図８は、読み出しデータ制御部２１２による、ＳＲＡＭ２１１から読み出したディザ閾値に対する一例の処理を示すフローチャートである。この図８のフローチャートは、アドレス生成部２１３で生成されたリードアドレスＲADに従いＳＲＡＭ２１１から読み出されたデータが読み出しデータ制御部２１２に入力されると、開始される。
【００８８】
最初のステップＳ１３０で、ディザマトリクスのサイズが４画素×４画素および５画素×５画素のうち何れであるかが判定される。若し、マトリクスサイズが５画素×５画素であると判定されたら、処理はステップＳ１３１に移行され、変数ｂが下記の式（４）に従い求められる。なお、変数Ｃyは、主走査カウンタのカウント値を示す。
ｂ＝(Ｃy/２)％５    …（４）
【００８９】
一方、ステップＳ１３０でディザマトリクスのサイズが４画素×４画素であると判定されたら、処理はステップＳ１３２に移行され、変数ｂが下記の式（５）に従い求められる。なお、Ｍsizeは、ディザマトリクスの幅を示す。
ｂ＝{(Ｃy％Ｍsize)/２}％２    …（５）
【００９０】
ステップＳ１３１またはステップＳ１３２で変数ｂが求められたら、処理はステップＳ１３３に移行される。ステップＳ１３３では、変数ｂが０または２であるか否かが判定される。若し、変数ｂが０または２であると判定されたら、処理はステップＳ１３４に移行される。ステップＳ１３４では、ＳＲＡＭ２１１から読み出されたデータの０ビット目〜７ビット目をｍ画素に対応するディザ閾値、８ビット目〜１５ビット目をｍ＋１画素に対応するディザ閾値として、比較部２１５に出力する。
【００９１】
ステップＳ１３３で変数ｂが０および２の何れでもないと判定されたら、処理はステップＳ１３５に移行され、変数ｂが１であるか否かが判定される。若し、変数ｂが１であると判定されたら、処理はステップＳ１３６に移行される。ステップＳ１３６では、ＳＲＡＭ２１１から読み出されたデータの１６ビット目〜２３ビット目をｍ画素に対応するディザ閾値、２４ビット目〜３１ビット目をｍ＋１画素に対応するディザ閾値として、比較部２１５に出力する。
【００９２】
ステップＳ１３５で変数ｂが１ではないと判定されたら、処理はステップＳ１３７に移行され、変数ｂが３であるか否かが判定される。若し、変数ｂが３であると判定されたら、処理はステップＳ１３８に移行される。ステップＳ１３８では、ＳＲＡＭ２１１から読み出されたデータの８ビット目〜１５ビット目をｍ画素に対応するディザ閾値、１６ビット目〜２３ビット目をｍ＋１画素に対応するディザ閾値として、比較部２１５に出力する。
【００９３】
ステップＳ１３７で変数ｂが３ではないと判定されたら、処理はステップＳ１３９に移行される。ステップＳ１３９では、ＳＲＡＭ２１１から読み出されたデータの１６ビット目〜２３ビット目をｍ画素に対応するディザ閾値、０ビット目〜７ビット目をｍ＋１画素に対応するディザ閾値として、比較部２１５に出力する。
【００９４】
比較部２１５は、上述のステップＳ１３４、ステップＳ１３６、ステップＳ１３８およびステップＳ１３９で読み出しデータ制御部２１２から出力された２個のディザ閾値と、ディザ処理部２６０に供給され比較部２１５に同時に入力されたｍ画素およびｍ＋１画素の２個の画素とをそれぞれ比較し、比較結果を画素単位の出力画像データとして出力する。
【００９５】
なお、上述では、ディザマトリクスにおいて主走査方向に連続するディザ閾値に関し、先頭から１ワード分のディザ閾値と、当該１ワード分からはみ出したディザ閾値とをＳＲＡＭ２１１の隣接するアドレスに書き込んでいるが、これはこの例に限られない。すなわち、これら先頭から１ワード分のディザ閾値と、当該１ワード分からはみ出したディザ閾値とは、１アドレス以上離れたアドレスに書き込むようにもできる。勿論、この場合であっても、当該先頭から１ワード分のディザ閾値のうちの先頭および末尾のディザ閾値は、当該１ワード分からはみ出したディザ閾値と同一のアドレスに書き込まれる。
【００９６】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。本第２の実施形態は、ディザマトリクスの主走査方向のサイズが奇数画素分で且つ５画素分以上（例えば７画素分）の場合に用いて好適なものである。
【００９７】
図９は、本第２の実施形態による階調処理モジュール２１０’の一例の構成を示す。なお、図９において、上述した図３と共通する部分には同一の符号を付し、詳細な説明を省略する。本第２の実施形態による階調処理モジュール２１０’は、図９から分かるように、図３で説明した階調処理モジュール２１０に対して、端部記憶領域２５０が追加されている。レジスタ制御部２２０から出力されたライトアドレスおよびディザ閾値は、ＳＲＡＭ２１１に供給されると共に、この端部記憶領域２５０にも供給される。
【００９８】
端部記憶領域２５０における、ディザ閾値の記憶領域は、用いるディザマトリクスのサイズに応じて決められる。ディザマトリクスのサイズを示す情報は、レジスタ制御部２２０から出力される。端部記憶領域２５０におけるディザ閾値の記憶領域のサイズＢsizeは、ディザマトリクスの１辺のサイズ（画素単位）を変数Ｍsizeとしたとき、下記の式（６）により求められる。なお、式（６）において、(Ｍsize＋３)/４の項は、小数点以下を切り捨てるものとする。
Ｂsize＝８ビット×Ｍsize×(Ｍsize＋３)/４    …（６）
【００９９】
図１０は、ＳＲＡＭ２１１に記憶されるディザ閾値と、端部記憶領域２５０に記憶されるディザ閾値との一例の関係を示す。ここでは、ディザマトリクスのサイズが５画素×５画素であるものとする。図１０（ａ）は、ＳＲＡＭ２１１に記憶されるディザ閾値の例を示す。これに対し、端部記憶領域２５０には、図１０（ｂ）に例示されるように、ＳＲＡＭ２１１の各アドレスにおけるＬＳＢの８ビット部分に保持されるディザ閾値が記憶される。このとき、ディザマトリクスの行が同一のディザ閾値を組として、端部記憶領域２５０に記憶される。
【０１００】
読み出しデータ制御部２１２は、アドレス生成部２１３で端部記憶領域２５０に対して指定されたリードアドレスから、ディザ閾値を読み出す。
【０１０１】
図１１は、ＳＲＡＭ２１１および端部記憶領域２５０にディザ閾値を格納する際の、レジスタ制御部２２０における一例の処理を示すフローチャートである。ディザマトリクスのサイズを示す情報は、画像処理パラメータの一つとしてコントローラＣＰＵ１１０が生成し、アービタ１０１を介してレジスタ制御部２２０に供給される。なお、１ワードのデータ長が３２ビットであり、ディザ閾値のデータ長が８ビットである場合、ディザマトリクスのサイズは、最大で８画素×８画素とするのが好ましい。
【０１０２】
図１１のフローチャートによる処理は、コントローラＣＰＵ１１０からレジスタ制御部２２０に対してディザマトリクスのデータが供給されると、開始される。ディザマトリクスのデータは、ディザマトリクスのサイズを示す情報と、ディザマトリクスにおける各ディザ閾値のデータを含む。ディザマトリクスのデータは、レジスタ制御部２２０が有するメモリ（図示しない）に記憶される。
【０１０３】
先ず、ステップＳ２００で各変数Ｘ、Ｙ、ｃが０に初期化され、変数ａが−１に初期化される。なお、変数Ｘおよび変数Ｙは、それぞれディザマトリクスの垂直方向および水平方向の画素単位の位置を示す。以下、これら変数Ｘおよび変数Ｙを、適宜、行Ｘおよび列Ｙなどのように記す。変数ａは、ＳＲＡＭ２１１のオフセットアドレスｎに対する１ワード単位のアドレスを示す。
【０１０４】
また、変数Ｘは、端部記憶領域２５０の垂直方向の画素単位の位置も示す。変数ｃは、端部記憶領域２５０の水平方向の画素単位の位置を示す。以下、端部記憶領域２５０に関し、この変数ｃを、適宜、列ｃとして記す。
【０１０５】
ステップＳ２００で各変数が初期化されると、次のステップＳ２０１で、変数ａが１だけ増加される。そして、次のステップＳ２０２で、変数Ｙの値に基づき、現在の処理がディザマトリクスにおける主走査方向の端部に対する書き込み処理であるか否かが判定される。
【０１０６】
若し、端部の書き込みではないと判定されたら、処理はステップＳ２０３に移行される。ステップＳ２０３では、ディザマトリクスの第Ｘ行目における第Ｙ列目〜第Ｙ＋３列目の４個のディザ閾値をライトデータとして、ライトアドレスｎ＋ａと共に出力する。これにより、当該ライトデータがＳＲＡＭ２１１のアドレスｎ＋ａに書き込まれる。さらに、次のステップＳ２０４で、ディザマトリクスにおける行Ｘ、列Ｙのディザ閾値を端部記憶領域２５０バッファの行Ｘ、列ｃに書き込む。具体的には、ディザマトリクスにおけるディザ閾値「Ｘ０」が端部記憶領域２５０の行Ｘ、列０の位置に書き込まれる。
【０１０７】
次のステップＳ２０５で、変数Ｙの値を４だけ増加させると共に、変数ｃの値を１だけ増加させる。そして、処理がステップＳ２０１に戻される。
【０１０８】
一方、上述のステップＳ２０２で、端部に対する書き込み処理であると判定されたら、処理はステップＳ２０６に移行される。ステップＳ２０６では、ディザマトリクスにおける行Ｘの端部のディザ閾値のみをライトデータとして、ライトアドレスｎ＋ａと共に出力する。さらに、次のステップＳ２０７で、ディザマトリクスの行Ｘ、列Ｙのディザ閾値を、端部記憶領域２５０バッファの行Ｘ、列ｃに書き込む。
【０１０９】
ステップＳ２０６およびステップＳ２０７の処理は、実際には、ステップＳ２０２でディザマトリクスの端部の書き込みではないと判定された後、ステップＳ２０３〜ステップＳ２０５の処理を介して行われる。そのため、変数Ｙ＝４、変数ｃ＝１とされ、ディザマトリクスにおけるディザ閾値「Ｘ４」が端部記憶領域２５０における行Ｘ、列１に書き込まれることになる。
【０１１０】
そして、処理はステップＳ２０８に移行され、行Ｘがディザマトリクスにおける垂直方向のサイズに達したか否かが判定される。若し、達したと判定されたら、図１１のフローチャートにおける一連の処理が終了される。一方、達していないと判定されたら、処理はステップＳ２０９に移行され、変数Ｘの値が１だけ増加されると共に、変数Ｙおよび変数ｃの値がそれぞれ０とされる。そして、処理がステップＳ２０１に戻される。
【０１１１】
図１２は、読み出しデータ制御部２１２による、ＳＲＡＭ２１１および端部記憶領域２５０から読み出したディザ閾値に対する一例の処理を示すフローチャートである。この図１１のフローチャートは、アドレス生成部２１３で生成されたリードアドレスＲADに従いＳＲＡＭ２１１から読み出されたデータが読み出しデータ制御部２１２に入力されると、開始される。
【０１１２】
なお、アドレス生成部２１３は、カウンタ部２１４の主走査カウンタのカウント値Ｃyが増加される度に、下記の式（７）に従いリードアドレスＲADを出力する。なお、式（７）において、(Ｃy％Ｍsize)/４の除算は、小数点以下を切り捨て、{(Ｍsize＋３)/４}の除算は、小数点以下を切り上げるものとする。
ＲAD＝ｎ＋(Ｃy％Ｍsize)/４＋Ｃx×{(Ｍsize＋３)/４}    …（７）
【０１１３】
最初のステップＳ２２０で、変数ｄが下記の式（８）に従い求められる。なお、式（８）において、除算は小数点以下を切り捨てるものとする。
ｄ＝{(Ｃy％Ｍsize)/２)％２    …（８）
【０１１４】
次のステップＳ２２１で、ディザマトリクスのサイズが５画素×５画素以上の奇数画素分（以下、奇数画素分）および４画素×４画素以上の偶数画素分（以下、偶数画素分）のうち何れであるかが判定される。若し、偶数画素分であると判定されたら、処理はステップＳ２２３に移行される。一方、奇数画素分であると判定されたら、処理はステップＳ２２２に移行され、変数ｄが下記の式（９）に従い求められ、処理がステップＳ２２３に移行される。なお、式（９）における中括弧内の除算は小数点以下を切り捨てるものとし、中括弧同士の除算は小数点以下を切り上げるものとする。
ｄ＝ｄ＋{(Ｃy/２)％Ｍsize}/{(Ｍsize＋１)/２}×２    …（９）
【０１１５】
ステップＳ２２３では、変数ｄが０であるか否かが判定される。若し、０であると判定されたら、処理はステップＳ２２４に移行される。ステップＳ２２４では、ＳＲＡＭ２１１から読み出されたデータの０ビット目〜７ビット目をｍ画素に対応するディザ閾値、８ビット目〜１５ビット目をｍ＋１画素に対応するディザ閾値として、比較部２１５に対する出力準備を行う。そして、処理がステップＳ２３１に移行される。
【０１１６】
ステップＳ２２３で変数ｄが０ではないと判定されたら、処理はステップＳ２２５に移行され、変数ｄが１であるか否かが判定される。若し、変数ｂが１であると判定されたら、処理はステップＳ２２６に移行される。ステップＳ２２６では、ＳＲＡＭ２１１から読み出されたデータの１５ビット目〜２３ビット目をｍ画素に対応するディザ閾値、２４ビット目〜３１ビット目をｍ＋１画素に対応するディザ閾値として、比較部２１５に対する出力準備を行う。そして、処理がステップＳ２３１に移行される。
【０１１７】
ステップＳ２２５で変数ｄが１ではないと判定されたら、処理はステップＳ２２７に移行され、変数ｄが２であるか否かが判定される。若し、変数ｄが２であると判定されたら、処理はステップＳ２２８に移行される。ステップＳ２２８では、ＳＲＡＭ２１１から読み出されたデータの８ビット目〜１５ビット目をｍ画素に対応するディザ閾値、１６ビット目〜２３ビット目をｍ＋１画素に対応するディザ閾値として、比較部２１５に出力する。
【０１１８】
ステップＳ２２７で変数ｄが２ではないと判定されたら、処理はステップＳ２２９に移行される。ステップＳ２２９では、変数ｅを下記の式（１１）に従い求める。なお、ここでは、除算は小数点以下を切り捨てるものとする。
ｅ＝(Ｃy＋３)/４    …（１１）
【０１１９】
次のステップＳ２３０で、ＳＲＡＭ２１１から読み出されたデータの２４ビット目〜３１ビット目をｍ画素に対応するディザ閾値とし、端部記憶領域２５０の行Ｃx、列ｅのデータをｍ＋１画素に対応するディザ閾値として、比較部２１５に出力する。
【０１２０】
一方、ステップＳ２３１では、現在の処理が、ディザマトリクスにおける行の端部の処理であるか否かが判定される。若し、端部の処理ではないと判定されたら、処理はステップＳ２３４に移行され、ステップＳ２２４またはステップＳ２２６で出力準備されたディザ閾値が比較部２１５に対して出力される。
【０１２１】
一方、ステップＳ２３１で、現在の処理が端部の処理であると判定されたら、処理はステップＳ２３２に移行され、ディザマトリクスのサイズが奇数画素分および偶数画素分のうちの何れであるかが判定される。若し、偶数画素分であると判定されたら、処理はステップＳ２３４に移行され、ステップＳ２２４またはステップＳ２２６で出力準備されたディザ閾値が比較部２１５に対して出力される。
【０１２２】
一方、ステップＳ２３２で奇数画素分であると判定されたら、処理がステップＳ２３３に移行される。ステップＳ２３３では、端部記憶領域２５０の行Ｃx、列０に記憶されるディザ閾値をｍ＋１画素のディザ閾値として、ステップＳ２２４またはステップＳ２２６で出力準備を行ったディザ閾値に替えて、比較部２１５に出力する。
【０１２３】
なお、上述では、ディザマトリクスにおいて主走査方向に連続するディザ閾値に関し、先頭から１ワード分のディザ閾値と、当該１ワード分からはみ出したディザ閾値とをＳＲＡＭ２１１の隣接するアドレスに書き込んでいるが、これはこの例に限られない。すなわち、これら先頭から１ワード分のディザ閾値と、当該１ワード分からはみ出したディザ閾値とは、１アドレス以上離れたアドレスに書き込むようにもできる。
【０１２４】
このように、本第２の実施形態では、ディザマトリクスの行の先頭のディザ閾値を記憶する端部記憶領域２５０を有する。そのため、５画素×５画素以上の奇数画素分のサイズのディザマトリクスにおいても、２画素を並列処理する場合のディザ閾値を、ＳＲＡＭ２１１に対する１回のアドレス指定で行うことができ、ディザ閾値を保持するためにシングルポートＳＲＡＭを用いることができる。
【符号の説明】
【０１２５】
１０  コントローラ部
１０３  画像処理部
２００  画像処理モジュール群
２１０，２１０’  階調処理モジュール
２１１  ＳＲＡＭ
２１２  読み出しデータ制御部
２１３  アドレス生成部
２１４  カウンタ部
２１５  比較部
２２０  レジスタ制御部
２５０  端部記憶領域
【先行技術文献】
【特許文献】
【０１２６】
【特許文献１】特開２００２−１２７５０３号公報
【特許文献２】特開２００７−１９４９５５号公報
【図１】
2011239108.tif 000003
【図２】
2011239108.tif 000004
【図３】
2011239108.tif 000005
【図４】
2011239108.tif 000006
【図５】
2011239108.tif 000007
【図６】
2011239108.tif 000008
【図７】
2011239108.tif 000009
【図８】
2011239108.tif 000010
【図９】
2011239108.tif 000011
【図１０】
2011239108.tif 000012
【図１１】
2011239108.tif 000013
【図１２】
2011239108.tif 000014
【図１３】
2011239108.tif 000015
【図１４】
2011239108.tif 000016
【図１５】
2011239108.tif 000017
【図１６】
2011239108.tif 000018