(57)【特許請求の範囲】
【請求項１】
画像データの所定の第１注目画素の誤差拡散処理を行う第１の誤差拡散手段と、
前記第１注目画素と同一ライン上で且つ第１注目画素の次の画素である第２注目画素の誤差拡散処理を行う第２の誤差拡散手段と、
前記第２の誤差拡散手段による誤差拡散処理により前記第２注目画素の量子化データが確定するか否かを判定する第１の判定手段と、を備え、
前記第２の誤差拡散手段は、第１の誤差拡散手段と並行して誤差拡散処理を実行するものであり、前記第２注目画素の入力画像データ及び第１注目画素以外の画素から拡散される誤差データの合計値を演算する演算手段と、前記第１の判定手段により量子化データが確定すると判定された場合に量子化データ及び誤差値を算出する算出手段と、を備え、
前記第１の判定手段は、前記合計値が第１の基準値以下か否か及び前記第１の基準値より大きい第２の基準値以上か否かに基づいて、前記第２の誤差拡散手段により前記第２注目画素の量子化データが確定するか否かを判定することを特徴とする画像処理装置。
【請求項２】
前記第１の基準値は、前記第２の誤差拡散手段において設定される閾値及び前記第１の誤差拡散手段から拡散される誤差データの取り得る値の最大値から求められる値であり、前記第２の基準値は、前記第２の誤差拡散手段において設定される閾値及び前記第１の誤差拡散手段から拡散される誤差データの取り得る値の最小値から求められる値であることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記第１の判定手段により量子化データが確定すると判定された場合は、前記第１の誤差拡散手段は、次のクロックにおいて前記第２注目画素と同一ライン上で且つ第２注目画素の次の画素を次の第１注目画素として誤差拡散処理を行い、
前記第１の判定手段により量子化データが確定しないと判定された場合は、前記第１の誤差拡散手段は、次のクロックにおいて前記第２注目画素を次の第１注目画素として誤差拡散処理を行うことを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
前記第１の判定手段により量子化データが確定すると判定された場合は、次のクロックにおいて、前記第１の誤差拡散手段に対して前記第１注目画素と同一ラインから拡散される誤差データとして、現在のクロックの第１の誤差拡散手段により算出される誤差値に基づく値と第２の誤差拡散手段により算出される誤差値に基づく値の合計値を選択し、前記第１の判定手段により量子化データが確定しないと判定された場合は、次のクロックにおいて、前記第１の誤差拡散手段に対して前記第１注目画素と同一ラインから拡散される誤差データとして、現在のクロックの第１の誤差拡散手段により算出される誤差値に基づく値を選択する選択手段をさらに備えることを特徴とする請求項１〜３のいずれか一項に記載の画像処理装置。
【請求項５】
前記第１注目画素と同一ライン上で且つ第２注目画素以降の第Ｋ注目画素（Ｋは、３以上の自然数）の誤差拡散処理を行う第Ｋの誤差拡散手段と、
前記第Ｋの誤差拡散手段による誤差拡散処理により前記第Ｋ注目画素の量子化データが確定するか否かを判定する第（Ｋ−１）の判定手段と、をさらに備え、
前記第Ｋの誤差拡散手段は、第１の誤差拡散手段と並行して誤差拡散処理を実行するものであり、前記第Ｋ注目画素の入力画像データ及び第１〜第（Ｋ−１）注目画素以外の画素から拡散される誤差データの合計値を演算する演算手段と、前記第（Ｋ−１）の判定手段により量子化データが確定すると判定された場合に前記第Ｋ注目画素の量子化データ及び誤差値を算出する算出部と、を備え、
前記（Ｋ−１）の判定手段は、前記合計値が前記第１の基準値以下か否か及び前記第２の基準値以上か否かに基づいて、前記第Ｋの誤差拡散手段により前記第Ｋ注目画素の量子化データが確定するか否かを判定することを特徴とする請求項１〜４のいずれか一項に記載の画像処理装置。
【請求項６】
画像データの所定の第１注目画素の誤差拡散処理を行う第１の誤差拡散工程と、
前記第１注目画素と同一ライン上で且つ第１注目画素の次の画素である第２注目画素の誤差拡散処理を行う第２の誤差拡散工程と、
前記第２の誤差拡散工程による誤差拡散処理により前記第２注目画素の量子化データが確定するか否かを判定する第１の判定工程と、を備え、
前記第２の誤差拡散工程は、第１の誤差拡散工程と並行して誤差拡散処理を実行し、前記第２注目画素の入力画像データ及び第１注目画素以外の画素から拡散される誤差データの合計値を演算する工程と、前記第１の判定工程において量子化データが確定すると判定された場合に量子化データ及び誤差値を演算する演算工程を備え、
前記判定工程では、前記合計値が第１の基準値以下か否か及び前記第１の基準値より大きい第２の基準値以上か否かに基づいて、前記第２の誤差拡散工程において演算した前記量子化データが確定するか否かを判定することを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力した画像データを誤差拡散法により量子化する画像処理方法及び画像処理装置に関する。
【背景技術】
【０００２】
従来、誤差拡散法による量子化処理では、各画素の量子化によって発生する誤差が、例えば、二次元の誤差マトリクスに従って所定の画素に拡散される。そして、次に処理する同一ラインの隣接する画素では、当初の画素値に拡散された誤差を加えて量子化処理を行う。そして、１ライン分の画素の量子化が終了すると、隣接する次の１ライン分の画素に対して同様に量子化を行う。このようにして、画像データを構成するすべてのラインに対して順次量子化を行う。
【０００３】
誤差拡散法による量子化処理では、上述したように、注目画素の処理をする際に直前の画素の処理結果を用いるため、１画素ずつ順次量子化をしなければならない。つまり量子化処理の高速化が困難であるという問題があった。
【０００４】
そこで、この誤差拡散法による画像処理の高速化を実現する方法の一つとして、２画素を同じクロックで同時に処理する方法が提案されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−０５０８４６公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示された画像処理方法では、４画素のうちの１画素の誤差値を近接する画素に拡散させることができない。このため、その画素の誤差データが本来の位置から離れたところに拡散されてしまう。なお、誤差データが本来の位置から離れたところに拡散されると、細線が不連続となったり、鮮鋭度が高い画像部分の鮮鋭感が低下したりしてしまうことがある。このように、従来の画像処理方法では、誤差拡散法を高速化する場合には、誤差拡散法のアルゴリズムを一部変更し、画質と引き換えに高速化する方法が取られていた。
【０００７】
本発明はこのような事情に鑑み、誤差拡散法による効果を損なわずに、誤差拡散法による画像処理の高速化を実現した画像処理装置及び画像処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題を解決するための本発明の態様は、画像データの所定の第１注目画素の誤差拡散処理を行う第１の誤差拡散手段と、前記第１注目画素と同一ライン上で且つ第１注目画素の次の画素である第２注目画素の誤差拡散処理を行う第２の誤差拡散手段と、前記第２の誤差拡散手段による誤差拡散処理により前記第２注目画素の量子化データが確定するか否かを判定する第１の判定手段と、を備え、前記第２の誤差拡散手段は、第１の誤差拡散手段と並行して誤差拡散処理を実行するものであり、前記第２注目画素の入力画像データ及び第１注目画素以外の画素から拡散される誤差データの合計値を演算する演算手段と、前記第１の判定手段により量子化データが確定すると判定された場合に量子化データ及び誤差値を算出する算出手段と、を備え、前記第１の判定手段は、前記合計値が第１の基準値以下か否か及び前記第１の基準値より大きい第２の基準値以上か否かに基づいて、前記第２の誤差拡散手段により前記第２注目画素の量子化データが確定するか否かを判定することを特徴とする画像処理装置にある。
【発明の効果】
【０００９】
本発明によれば、誤差拡散法による効果を損なわずに、誤差拡散法による画像処理の高速化を実現するという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】インクジェット記録装置の構成を示す機能ブロック図である。
【図２】画像処理部の構成を示す機能ブロック図である。
【図３】画像データ処理の概要を示すフローチャートである
【図４】実施形態１の量子化処理部の構成を示すブロック図である。
【図５】実施形態１の量子化演算部の誤差拡散方法の説明図である。
【図６】実施形態１の第１の量子化演算部の演算方法を説明する図である。
【図７】実施形態１の第２の量子化演算部の演算方法を説明する図である。
【図８】実施形態１の誤差拡散処理の判定フラグ毎のタイミングチャートである。
【図９】実施形態１の誤差拡散処理のタイミングチャートである。
【図１０】実施形態１の誤差データ加算方法の説明図である。
【図１１】実施形態１の入力データ制御部の処理フローを示す図である。
【図１２】実施形態１の出力データ制御部の処理フローを示す図である。
【図１３】実施形態２の量子化処理部の構成を示す機能ブロック図である。
【図１４】実施形態２の入力データ制御部の処理フローを示す図である。
【図１５】実施形態２の出力データ制御部の処理フローを示す図である。
【発明を実施するための形態】
【００１１】
図１は、本発明の実施形態の例である記録装置の構成を示すブロック図である。図１に示されるように、記録装置２は画像形成コントローラ１０１とプリンタエンジン１１８とを有する。
【００１２】
画像形成コントローラ１０１は、パーソナルコンピュータ等のホスト装置から印刷指示及び印刷用の画像データを受信し、受信した画像データをプリンタエンジン１１８で印刷可能な構成の二値画像データに変換して出力する。画像形成コントローラ１０１は、ＣＰＵ１０２、画像処理部１０３、プリンタエンジンインタフェース１０４、通信インタフェース１０５、拡張バス回路１０６、ＲＡＭコントローラ１０７、及びＲＯＭコントローラ１０８を備える。これらのブロックはそれぞれバスライン１１０ａ〜１１０ｇを介してシステムバスブリッジ１０９に接続されている。この実施形態では、これらのブロックはシステムＬＳＩとして一つのパッケージに封止されたＡＳＩＣ１１１として実現されている。また、画像形成コントローラ１０１は、機能拡張ユニットを装着する拡張スロット１１２とＲＡＭ１１５とＲＯＭ１１７とを備える。
【００１３】
ＣＰＵ１０２は、画像形成コントローラ１０１全体の制御を司る。ＣＰＵ１０２は、ＲＯＭ１１７に格納されている制御プログラムを読み出してＲＡＭ１１５にロードして実行し、ホスト装置から受信した画像データを二値画像データである画像形成データに変換するための画像処理部１０３を制御する。また、ＣＰＵ１０２は、ホスト装置と通信するための通信インタフェース１０５の制御や通信プロトコルの解釈、画像処理部１０３で生成された画像形成データをプリンタエンジン１１８へ転送するためのプリンタエンジンインタフェース１０４の制御等を行う。
【００１４】
画像処理部１０３は、ホスト装置から受信した画像データをプリンタエンジン１１８で画像を印刷させる際の処理に用いられる１画素につき二値の画像データに変換する機能を備えている。なお、画像処理部１０３の詳細な構成については図を参照して後述する。
【００１５】
プリンタエンジンインタフェース１０４は、画像形成コントローラ１０１とプリンタエンジン１１８との間でデータの送受信を行う。プリンタエンジンインタフェース１０４はＤＭＡＣ（ダイレクトメモリアクセスコントローラ）を有し、画像処理部１０３で生成されＲＡＭ１１５に格納された二値画像データをＲＡＭコントローラ１０７を介して順次読出してプリンタエンジン１１８に転送する。
【００１６】
通信インタフェース１０５は、パーソナルコンピュータやワークステーション等のホスト装置との間でデータの送受信を行い、ホスト装置から受信した画像データを、ＲＡＭコントローラ１０７を介してＲＡＭ１１５に格納する。通信インタフェース１０５は有線通信プロトコルまたは無線通信プロトコルに対応する。
【００１７】
拡張バス回路１０６は、拡張スロット１１２に装着した機能拡張ユニットを制御する機能を備え、拡張バス１１３を介して機能拡張ユニットにデータを送信する制御と、機能拡張ユニットが出力するデータを受信する制御とを行う。拡張スロット１１２には、通信機能を提供する通信ユニット、大容量記憶機能を提供するハードディスクドライブユニット等が装着可能である。なお、画像処理部１０３、通信インタフェース１０５、および、拡張バス回路１０６は、プリンタエンジンインタフェース１０４と同様にＤＭＡＣを有し、メモリアクセス要求を発行する機能を備えている。
【００１８】
ＲＡＭコントローラ１０７は、ＲＡＭバス１１４を介してＡＳＩＣ１１１に接続されたＲＡＭ１１５の制御を行う機能を備えている。ＲＡＭコントローラ１０７はＣＰＵ１０２とＤＭＡＣを有する各ブロックとＲＡＭ１１５との間で、書き込みまたは読み出しされるデータの中継を行う。ＲＡＭコントローラ１０７は、ＣＰＵ１０２および各ブロックからの読み出し要求や書き込み要求に応じて必要な制御信号を生成してＲＡＭ１１５への書き込みやＲＡＭ１１５からの読み出しを実現する。
【００１９】
ＲＯＭコントローラ１０８は、ＲＯＭバス１１６を介してＡＳＩＣ１１１に接続されたＲＯＭ１１７の制御を行う機能を備えている。ＲＯＭコントローラ１０８は、ＣＰＵ１０２からの読み出し要求に応じて必要な制御信号を生成し、予めＲＯＭ１１７に格納されたプログラムやデータを読み出し、システムバスブリッジ１０９を介してＣＰＵ１０２に読み出した内容を送り返す。また、ＲＯＭ１１７がフラッシュメモリ等の電気的に書き換え可能なデバイスで構成される場合、ＲＯＭコントローラ１０８は必要な制御信号を発生してＲＯＭ１１７の内容を書き換える機能を備える。
【００２０】
システムバスブリッジ１０９は、ＡＳＩＣ１１１を構成する各ブロック間を接続する機能を備えるほか、複数のブロックから同時にアクセス要求が発行された場合に、バス権を調停する機能を備えている。ＣＰＵ１０２とＤＭＡＣを有する各ブロックとがＲＡＭコントローラ１０７を介してＲＡＭ１１５へのアクセス要求をほぼ同時に発行する場合があり、システムバスブリッジ１０９は予め指定された優先順位に従って適切に調停を行う。
【００２１】
ＲＡＭ１１５は同期ＤＲＡＭ等で構成され、ＣＰＵ１０２が実行するプログラムの一時的な格納、画像処理部１０３で生成された画像形成データの一時的な記憶、および、ＣＰＵ１０２のワークメモリなどの機能を提供する。ＲＡＭ１１５は、通信インタフェース１０５がホスト装置から受信した画像データの一時的なバッファリングや拡張バス１１３を介して接続された機能拡張ユニットとの間で受け渡しされるデータの一時保存などの機能を提供する。
【００２２】
ＲＯＭ１１７はフラッシュメモリ等で構成され、ＣＰＵ１０２が実行するプログラムおよびプリンタ制御に必要なパラメータを格納する。フラッシュメモリは電気的に書換え可能な不揮発性のデバイスであり、決められたシーケンスに従うことによりプログラムやパラメータを書き換えることが可能である。
【００２３】
このほか、各回路ブロックは動作モード等を設定するレジスタを備え、ＣＰＵ１０２はレジスタアクセスバスを介して各回路ブロックの動作モード等を設定することが可能である。
【００２４】
プリンタエンジン１１８は、画像形成コントローラ１０１から送出される二値画像データに基づいて記録ヘッドにより記録媒体上に画像を印刷させる印刷機構である。本実施形態では、プリンタエンジン１１８は、インクジェット記録を行うものである。即ち、二値画像データに従ってシアン（Ｃ）、マゼンタ（Ｍ）、イエロー（Ｙ）、ブラック（Ｋ）の４色のインクを記録ヘッドから吐出させ記録媒体上に付与することによって画像を記録する。
【００２５】
次に、記録装置２の画像処理部１０３について、図面を参照して説明する。図２は、画像処理部１０３の詳細な構成を示す機能ブロック図である。
【００２６】
画像処理部１０３は、色変換処理部２０１、量子化処理部２０２、レジスタ２０４、画像データリード用のＤＭＡＣ２０６、画像データライト用のＤＭＡＣ２０７、誤差データリード用のＤＭＡＣ２０８、及び誤差データライト用のＤＭＡＣ２０３を備える。
【００２７】
色変換処理部２０１は、ホスト装置から受信したライン形式の１画素につき多値（Ｍ値）の入力画像データの色空間をプリンタエンジン１１８のインク色で表される色空間に変換する。本実施形態では、ホスト装置からの多値の画像データは、各画素が赤（Ｒ）、緑（Ｇ）、青（Ｂ）のそれぞれ８ビット（２５６値）で表現されるカラー画像データとする。色変換処理部２０１では、この入力画像データの各画素を、プリンタエンジン１１８のインク色であるＣ、Ｍ、Ｙ、Ｋのそれぞれ８ビット（０〜２５５）で表現される色空間に変換する。また、色変換処理部２０１では、プリンタエンジン１１８の出力特性に応じたガンマ補正もあわせて行われる。
【００２８】
量子化処理部２０２は、各色成分について誤差拡散法による二値（Ｎ値）化処理を行う。量子化処理部２０２では、周辺画素から拡散される誤差を注目画素に加算し、誤差が加算された画素値を閾値と比較することで二値化処理、すなわち量子化処理を行う。誤差が加算された後の画素値が閾値を越えた場合は１（ドットがオンされることを示す）となり、閾値を越えない場合はゼロ（ドットがオフされることを示す）となる。このとき発生する量子化誤差（０又は２５５との差分）は周辺の未処理の画素へ拡散され、全体として画像データの濃度が保存される。誤差データはＤＭＡＣ２０３に送られ、誤差メモリに格納され、ＤＭＡＣ２０８を介して量子化処理部２０２に転送する。
【００２９】
レジスタ２０４は、画像処理の開始を指示する画像処理起動レジスタや実行する画像処理の内容およびパラメータを指定するコマンド・パラメータレジスタ等を備えたレジスタ群から構成される。また、レジスタ２０４は、量子化用の閾値に関するパラメータを設定するレジスタを有している。
【００３０】
ＤＭＡＣ２０６は、ＲＡＭ１１５に格納された入力画像データを読み出すためのＤＭＡＣである。また、ＤＭＡＣ２０７は、入力画像データに対して量子化処理を行って生成された二値画像データをＲＡＭ１１５に格納するためのＤＭＡＣである。
【００３１】
ＤＭＡＣ２０８は、隣接ラインから拡散される誤差データを誤差メモリから読み出すためのＤＭＡＣである。また、ＤＭＡＣ２０３は、隣接ラインに拡散する誤差データを誤差メモリに格納するためのＤＭＡＣである。なお、この実施形態では、誤差メモリはＲＡＭ１１５の一部として構成される。
【００３２】
以下、本実施形態に係る記録装置の動作を説明する。図３は記録装置が画像データを量子化処理する場合の画像処理部の動作手順を示すフローチャートである。画像処理部１０３は量子化処理の実行を指示されると図３に示すフローチャートに従った画像処理動作を実行し、量子化処理を行う。
【００３３】
ステップ６０２で画像処理部１０３は、注目画素の画像データを、ＤＭＡＣ２０６を介してＲＡＭ１１５から読み出す。
【００３４】
次に、ステップ６０３で画像処理部１０３は、注目画素を色変換処理部２０１によりインク色で表現される画像データに変換する。
【００３５】
さらに、ステップ６０４で画像処理部１０３は、注目画素の画像データを量子化処理部２０２においてＣ、Ｍ、Ｙ、Ｋの色成分毎に誤差拡散法により量子化する。なお、このステップの量子化処理部に係る処理の詳細は図を参照しつつ後述する。
【００３６】
ステップ６０５で画像処理部１０３は、１ラインの画像処理が終了したか否かを判定し、未処理の画素が残っている場合、処理はステップ６０１へ戻り、１ラインの全ての画素の処理が終了している場合は処理を終了する。
【００３７】
以下、図４〜１２を用いて、画像処理部１０３における量子化処理部２０２の動作を詳細に説明する。
【００３８】
図４に示すように、量子化処理部２０２は、入力制御部９００と、第１の誤差拡散部（ＥＤ１）９１０と、第２の誤差拡散部（ＥＤ２）９２０と、出力制御部９３０と、を備える。詳細は後述するが、第１の誤差拡散部９１０と第２の誤差拡散部９２０は、並列に動作する。
【００３９】
入力制御部９００は、色変換処理部２０１から出力された注目画素の画像データに、前ラインから拡散される誤差データを読み出して加算し、入力データを各誤差拡散部に送信する。なお、前ラインから拡散される誤差データは、ＲＡＭ１１５に格納されている。
【００４０】
第１の誤差拡散部９１０は、入力画像データ及び前ラインからの誤差データが入力されると、これに同一ラインの処理済みの画素の誤差データを加算して、これをそれぞれの色成分毎に閾値と比較して量子化を行い、量子化データ及び誤差データを出力する。一方、第２の誤差拡散部９２０は、入力画像データ及び前ラインからの誤差データが入力されると、これをそれぞれの色成分毎に閾値と比較して量子化を行い、量子化データ及び誤差データを出力する。
【００４１】
そして、出力制御部９３０は、第１の誤差拡散部９１０から出力された量子化データ及び誤差データをＤＭＡＣ２０７によってＲＡＭ１１５に格納する。また、出力制御部９３０は、後述する判定フラグに応じて、第２の誤差拡散部９２０から出力された量子化データ及び誤差データをＲＡＭ１１５に格納するか否かを制御する。
【００４２】
なお、画像処理部１０３は、ＣＰＵ１０２からレジスタ２０４への書き込みにより画像処理開始を指示されると、ＲＡＭ１１５に格納された画像データを一方端の画素から他方端の画素まで順次読み出し、上述した色変換処理及び量子化処理を行う。ライン処理が終了すると画像処理部１０３はＣＰＵ１０２に対して割り込みを発行して処理の完了を通知する。ＣＰＵ１０２からの指示により副走査方向に隣接する画素列について同様に処理を行うことで画像データ全体の二値化処理が実現できる。二値化された出力画像データは順次ＲＡＭ１１５に格納される。これを、プリンタエンジンインタフェース１０４を介してプリンタエンジン１１８へ送出することで記録媒体への記録が行われる。
【００４３】
ここで、本実施形態の第１の誤差拡散部９１０の誤差拡散方法及び第２の誤差拡散部９２０の誤差拡散方法について説明する。図５は、本実施形態の第１の誤差拡散部９１０の誤差拡散方法及び第２の誤差拡散部９２０の誤差拡散方法を説明する図である。本実施形態では、Ｆｌｏｙｄ＆Ｓｔｅｉｎｂｅｒｇ型の誤差拡散法を適用した。
【００４４】
図５（ａ）において、「Ｐ」で示される画素が注目画素である。量子化処理によって発生する量子化誤差は、図５（ａ）に示す拡散係数にしたがって、未処理の周辺画素に拡散される。このうち、図５（ａ）に「Ａ」で示す同一ラインへ拡散される誤差データは量子化処理部２０２内の誤差拡散部のバッファに保存する。また、図５に「Ｂ」、「Ｃ」および「Ｄ」で示す隣接ラインへ拡散される誤差データは量子化処理部２０２内の誤差拡散部のバッファにいったん記憶され、同一画素へ拡散する誤差データをすべて足し合わせる。合算された誤差データは、出力制御部９３０に送信され誤差データライトＤＭＡＣ２０３を介してＲＡＭ１１５に格納される。
【００４５】
図５（ｂ）は、誤差値を拡散する画素から見た誤差データの拡散の様子を模式的に示す図であり、図５（ｃ）は、誤差データを拡散される画素から見た誤差データの拡散の様子を模式的に示す図である。図５（ｂ）及び（ｃ）において、縦方向の座標をｋ、横方向の座標をｍとし、注目画素Ｐの座標を（ｋ，ｍ）とし、注目画像Ｐから周囲に拡散される誤差値をＥ（ｋ，ｍ）とする。
【００４６】
図５（ｂ）に示すように、Ｆｌｏｙｄ＆Ｓｔｅｉｎｂｅｒｇ型では、同一ラインの画像、すなわち、座標（ｋ，ｍ＋１）の画像２１１に対して、注目画素Ｐ２００からＥ（ｋ，ｍ）×αが分散される。また、座標（ｋ＋１，ｍ＋１）の画像２１４に対しては注目画素Ｐ２００からＥ（ｋ，ｍ）×βが分散される。同様に、座標（ｋ＋１，ｍ）の画像２１３に対しては注目画素Ｐ２００からＥ（ｋ，ｍ）×γ、座標（ｋ＋１，ｍ−１）の画像２１２に対しては注目画素Ｐ２００からＥ（ｋ，ｍ）×δが分散される。これにより、（ｋ，ｍ＋１）の画像データは、もともとの画像データに対して、Ｅ（ｋ，ｍ）×αが加算された値になる。同様に、（ｋ＋１，ｍ−１）の画像データ、（ｋ＋１，ｍ）の画像データ、（ｋ＋１，ｍ＋１）の画像データはそれぞれ、もともとの画像データに対して所定の誤差データが加算された値になる。同様の処理を順次、対象画素に対して行う。なお、誤差データの拡散係数の割合の総和（α＋β＋γ＋δ）が１となるようにして、画像全体の濃度を保つようにする。本実施形態では、α＝７／１６、β＝１／１６、γ＝５／１６、δ＝３／１６である。すなわち、同一ラインの座標（ｋ，ｍ＋１）の画素２１１には誤差値Ｅ（ｋ，ｍ）に７／１６を乗じた値を加算する。隣接ラインの座標（ｋ＋１，ｍ＋１）の画素２１４には誤差値に１／１６を乗じた誤差データを加算する。また、座標（ｋ＋１，ｍ）の画像２１３には誤差値に５／１６を乗じた誤差データ、座標（ｋ＋１，ｍ−１）の画像２１２には誤差値に３／１６を乗じた誤差データを、それぞれ加算する。
【００４７】
一方、図５（ｃ）に示すように、注目画素Ｐ２００へ拡散される誤差は、次の４つの誤差データを合算したものとなる。具体的には、座標（ｋ−１，ｍ−１）の画像２０１からの誤差データＥ（ｋ−１，ｍ−１）×βと、座標（ｋ−１，ｍ）の画像２０２からの誤差データ×γと、座標（ｋ−１，ｍ＋１）の画像２０３からの誤差データδと、座標（ｋ，ｍ−１）の画像２０４からの誤差データαとが加算される。
【００４８】
ここで、図６及び図７を用いて、第１の誤差拡散部９１０の第１の量子化演算部９１１及び第２の誤差拡散部９２０の第２の量子化演算部９２１における量子化データ及び誤差データの算出方法についてそれぞれ詳細に説明する。なお、図６及び図７では、各ラインの第１番目の画像及び第２番目の画像を処理する場合について説明する。本実施形態の入力画像データは、８ｂｉｔデータで０〜２５５の値をとり、出力を２値データとし、閾値を１２８とした。
【００４９】
図６は、第１の誤差拡散部９１０の第１の量子化演算部９１１の演算方法を説明する図である。第１の量子化演算部９１１では、入力画像データ、前ラインからの誤差データ、及び同一ラインからの誤差データの合計値（以下、「Ｓ１」ともいう）を演算する。また、Ｓ１と閾値（本実施形態では、１２８）とを比較して、量子化データを求めると共に、Ｓ１と閾値との差から第１の誤差値Ｅ（ｋ，ｍ）を算出する。
【００５０】
図６において、座標（ｋ，ｍ）の画素のＳ１は、入力画像データＡ（ｋ，ｍ）と、前ラインからの誤差データ［Ｅ（ｋ−１，ｍ−１）×β＋Ｅ（ｋ−１，ｍ）×γ＋Ｅ（ｋ−１，ｍ＋１）×δ］と、左画素からの誤差データ［Ｅ（ｋ，ｍ−１）×α］が加算されたものである。
【００５１】
図６（ａ）に示すように、「Ｓ１≧閾値」の場合は、量子化データ＝１とする。また、第１の誤差値Ｅ（ｋ，ｍ）＝Ｓ１−２５５を演算する。
【００５２】
図６（ｂ）に示すように、「Ｓ１＜閾値」の場合は、量子化データ＝０とする。また、第１の誤差値Ｅ（ｋ、ｍ）＝Ｓ１とする。
【００５３】
図７は、第２の誤差拡散部９２０の第２の量子化演算部９２１の演算方法を説明する図である。第２の誤差拡散部９２０の第２の量子化演算部９２１では、入力画像データと、第１注目画素以外の画素から拡散される誤差データの合計値（以下、「Ｓ２」ともいう）を演算する。なお、本実施形態では、図５（ａ）に示すＦｌｏｙｄ＆Ｓｔｅｉｎｂｅｒｇ型の誤差拡散法を適用しているので、「第１注目画素以外の画素から拡散される誤差データ」は、前ライン（上ライン）からの誤差データのみとなる。第２の誤差拡散部９２０は、第１の誤差拡散部９１０が処理する画像の次の画素の処理を行う。すなわち、第２の量子化演算部９２１は、座標（ｋ，ｍ＋１）の画素の演算を行う。
【００５４】
座標（ｋ，ｍ＋１）の画素のＳ２は、入力画像データＡ（ｋ，ｍ＋１）と、前ラインの誤差データ［Ｅ（ｋ−１，ｍ）×β＋Ｅ（ｋ−１，ｍ＋１）×γ＋Ｅ（ｋ−１，ｍ＋２）×δ］と、を加算したものである。このＳ２は、第１注目画素の誤差データ、すなわち、左画素の誤差データを加算する前の値である。
【００５５】
第２の量子化演算部９２１では、第１注目画素の誤差データが加算される前の合計値であるＳ２から、量子化データが確定するか否かを判定した判定フラグを算出する。具体的には、合計値Ｓ２が第１の基準値以下か否か及びこの第１の基準値より大きい第２の基準値以上か否かに基づいて、量子化データが確定するか否かを判定する。
【００５６】
本実施形態では、Ｓ２と、閾値及び同一ライン上の第１注目画素からの誤差データが取り得る値の最大値の和と、閾値及び同一ライン上の第１注目画素からの誤差データが取り得る値の最小値の和と、を比較し、判定フラグを決定する。すなわち、上記の第１の基準値は、第２の誤差拡散部９２０において設定される閾値及び同一ライン上の第１注目画素からの誤差データの取り得る値の最大値から求められる。また、上記の第２の基準値は、第２の誤差拡散部９２０において設定される閾値及び同一ラインからの誤差データの取り得る値の最小値から求められる。なお、量子化データが確定する場合は１、量子化データが確定しない場合は０と判定する。
【００５７】
本実施形態では、８ｂｉｔデータで閾値が１２８である。したがって、左画素から拡散される誤差データ（Ｅ（ｋ，ｍ）×α）の最大値（以下、「Ｔｍａｘ」ともいう）は、１２８×（７／１６）＝５６である。また、左画素から拡散される誤差データ（Ｅ（ｋ，ｍ）×α）の最小値（以下、「Ｔｍｉｎ」ともいう）は、−１２８×（７／１６）＝−５６である。
【００５８】
Ｓ２＋Ｔｍａｘ≧閾値である場合、すなわち、Ｓ２≧１８４である場合は、左画素の誤差データが加算される前からドットがＯＮと確定している。したがって、量子化データ＝１とし、判定フラグ＝１とする。すなわち、前の処理と並列処理が可能と判断する。また、第２の誤差値Ｅ（ｋ，ｍ＋１）＝Ｓ２−２５５を演算する。
【００５９】
Ｓ２＋Ｔｍｉｎ≦閾値である場合、すなわち、Ｓ２≦７２である場合は、左画素の誤差データが加算される前からドットがＯＦＦと確定している。したがって、量子化データ＝０とし、判定フラグ＝１とする。また、第２の誤差値Ｅ（ｋ，ｍ＋１）＝Ｓ２とする。
【００６０】
一方、Ｓ２＋Ｔｍｉｎ＜閾値、且つ、Ｓ２＋Ｔｍａｘ＞閾値の場合、すなわち、７２＜Ｓ２＜１８４の場合は、左画素から拡散される誤差データの値によってドットのＯＮ／ＯＦＦが確定する。言い換えれば、左画素から拡散される誤差データの値を加算しないと量子化データは確定しない。したがって、判定フラグ＝０とする。すなわち、前の処理と並列処理が不可能と判断する。
【００６１】
このように、第２の量子化演算部９２１は、左画素の誤差データが加算される前の合計値が、閾値と同一ラインからの誤差データの取り得る値の最小値との和以上である場合は、量子化データ＝１とし、判定フラグ＝１とすると共に第２の誤差値を算出する。また、左画素の誤差データが加算される前の合計値が、閾値と同一ラインからの誤差データの取り得る値の最大値との和以下である場合は、量子化データ＝０とし、判定フラグ＝１とすると共に第２の誤差値を算出する。一方、左画素の誤差データが加算される前の合計値が、閾値と同一ラインからの誤差データの取り得る値の最大値の和より大きく且つ閾値と同一ラインからの誤差データの取り得る値の最小値との和未満である場合は、量子化データが確定できず、判定フラグ＝０とする。
【００６２】
なお、判定フラグは、レジスタ２０４に保存する。
【００６３】
図８は、誤差拡散処理の判定フラグの結果毎のタイミングチャートを示す図である。
【００６４】
図８（ａ）及び（ｂ）は、いずれも、上から順に、クロック（以下、「ＣＬＫ」ともいう）、後述する第１の誤差拡散部（以下、「ＥＤ１」ともいう）の処理画素の座標、第２の誤差拡散部（以下、「ＥＤ２」ともいう）の処理画素の座標、判定フラグである。
【００６５】
図８（ａ）は、第２の量子化演算部９２１における誤差拡散処理で量子化データが確定し、判定フラグ＝１となる場合のタイミングチャートである。図８（ａ）に示すように、クロック１で、ＥＤ１では座標（ｋ，ｍ）の画素の誤差拡散処理を行う。また、これと並行してＥＤ２では座標（ｋ，ｍ＋１）の画素の誤差拡散処理を行う。このとき、ＥＤ１では図６で示した誤差拡散処理を行い、ＥＤ２では図７で示した誤差拡散処理を行う。
【００６６】
そして、ＥＤ２において判定フラグ＝１と判定されると、次のクロック２では、ＥＤ１は、座標（ｋ，ｍ＋２）の画素の誤差拡散処理を行い、これと並行してＥＤ２は、座標（ｋ，ｍ＋３）の画素の誤差拡散処理を行う。
【００６７】
図８（ｂ）は、第２の量子化演算部９２１における誤差拡散処理で量子化データが確定せず、判定フラグ＝０となる場合のタイミングチャートである。図８（ｂ）に示すように、クロック１では、図８（ａ）と同様に、ＥＤ１は座標（ｋ，ｍ）の画素の誤差拡散処理を行い、これと並行してＥＤ２は座標（ｋ，ｍ＋１）の画素の誤差拡散処理を行う。
【００６８】
そして、ＥＤ２において判定フラグ＝０と判定された場合、座標（ｋ，ｍ＋１）の画素の量子化データを確定できなかったので、次のクロック２では、ＥＤ１は、座標（ｋ，ｍ＋１）の画素の誤差拡散処理を行う。また、これと並行して、ＥＤ２は、座標（ｋ，ｍ＋１）の次の画素、すなわち、（ｋ，ｍ＋２）の画素の誤差拡散処理を行う。なお、クロック１において、座標（ｋ，ｍ）の画素の誤差拡散処理は確定している、すなわち、座標（ｋ，ｍ）の画素は誤差データが確定している。
【００６９】
図９を用いて、ＥＤ１及びＥＤ２の誤差拡散処理についてさらに説明する。図９において、数字は画素番号を示す。図９（ａ）は、画像データの処理順序を説明する図であり、図９（ｂ）は、誤差拡散処理のタイミングチャートの一例を示す図である。なお、図９（ｂ）は、上から順に、ＣＬＫ、処理中信号（以下、「ＡＣＴ」ともいう）、ＥＤ１の処理対象の画素番号、ＥＤ２の処理対象の画素番号、判定フラグを示す。
【００７０】
図９（ａ）に示すように、画像データの誤差拡散処理は、ライン毎に所定方向に処理が実行される。
【００７１】
図９（ｂ）に示すように、クロック１でＡＣＴ信号がアサートし、ＥＤ１では画素１の誤差拡散処理を行い、ＥＤ２では画素１の次の画素である画素２の誤差拡散処理を行う。
【００７２】
次に、クロック１においてＥＤ２の判定フラグ＝１であったとすると、画素２までの誤差拡散処理が終わっているので、次のクロック２では、ＥＤ１は画素３の誤差拡散処理を行い、ＥＤ２は画素３の次の画素４の誤差拡散処理を行う。
【００７３】
次いで、クロック２においてＥＤ２の判定フラグ＝０であったとすると、画素４の量子化データが確定できていないので、次のクロック３では、ＥＤ１は再び画素４の誤差拡散処理を行い、ＥＤ２は画素４の次の画素である画素５の誤差拡散処理を行う。同様の処理を順次続けていく。
【００７４】
図９（ｂ）では、判定フラグ＝１に３回なっていることにより、７クロックで１０画素の誤差拡散処理ができる。１０画素の誤差拡散処理をするためには、従来の方法によれば、１０クロック必要であったが、本実施形態によれば、１０クロックよりも判定フラグ＝１になった回数分少ないクロック数で１０画素の誤差拡散処理をすることができる。
【００７５】
これにより、誤差拡散法による効果を損なうことなく、言い換えれば通常の誤差拡散法と同様の画質を維持しつつ、誤差拡散処理を高速化することができる。
【００７６】
ここで、図１０を用いて、実施形態１に係る誤差データ加算方法について説明する。図１０は、実施形態１に係る誤差データ加算方法の説明図である。なお、図１０において、次のクロックの第１の誤差拡散処理部の注目画像は、座標（ｋ，ｍ）の画像である。
【００７７】
図１０（ａ）は、前のクロックで、第２の量子化演算部９２１において量子化データが確定した場合、すなわち、判定フラグ＝１の場合の誤差データの拡散の様子を示す図である。この場合、前のクロックで、座標（ｋ，ｍ）の注目画素の１画素前の画素（座標（ｋ，ｍ−１））の第１の誤差値Ｅ（ｋ，ｍ−１）、及び注目画素の２画素前の画素（座標（ｋ，ｍ−２））の第２の誤差値Ｅ（ｋ，ｍ−２）が前のクロックで同時に確定している。
【００７８】
したがって、同一ラインからの誤差データは、注目画素の２画素前の画素の誤差データと、注目画素の１画素前の画素の誤差データとを加算したものとなる。本実施形態では、同一ラインからの誤差データは、座標（ｋ，ｍ−２）の画素の誤差値Ｅ（ｋ，ｍ−２）に拡散係数αを２回乗算した値と、座標（ｋ，ｍ−１）の画素の誤差値Ｅ（ｋ，ｍ−１）に拡散係数αを１回乗算した値と、を加算した値となる。すなわち、このクロックでは、第１の量子化演算部９１１には、入力画像データＡ（ｋ，ｍ）と、前ラインの誤差データと、座標（ｋ，ｍ−２）の画素の誤差値Ｅ（ｋ，ｍ−２）に拡散係数αを２回乗算した値と、座標（ｋ，ｍ−１）の画素の誤差値Ｅ（ｋ，ｍ−１）に拡散係数αを１回乗算した値と、の合計値を加算する。
【００７９】
また、次のラインに拡散する誤差データに関しては次の演算を行う。
【００８０】
座標（ｋ−１，ｍ−２）の画素に関しては、図示しないが、座標（ｋ，ｍ−２）の画素から拡散する誤差データとして誤差値Ｅ（ｋ，ｍ−２）に拡散係数γを乗算した値を加算する（後述する第１の誤差データ９３３に相当する）。さらに、座標（ｋ，ｍ−１）の画素から拡散する誤差データとして誤差値Ｅ（ｋ，ｍ−２）に拡散係数αとδを乗算した値を加算し、誤差データＥ（ｋ，ｍ−１）に係数δを乗算した値を加算する（後述する第２の誤差データ９３５に相当する）。
【００８１】
座標（ｋ−１，ｍ−１）の画素に関しては、図示しないが、座標（ｋ，ｍ−２）の画素から拡散する誤差データとして誤差値Ｅ（ｋ，ｍ−２）にβを乗算した値を加算する（後述する第１の誤差データ９３３に相当する）。さらに、座標（ｋ，ｍ−１）の画素が拡散する誤差データとして誤差値Ｅ（ｋ，ｍ−２）に係数αとγを乗算した値を加算し、誤差値Ｅ（ｋ，ｍ−１）に係数γを乗算した値を加算する（後述する第２の誤差データ９３５に相当する）。
【００８２】
座標（ｋ−１，ｍ）の画素に関しては、座標（ｋ，ｍ−１）の画素から拡散する誤差データとして誤差値Ｅ（ｋ，ｍ−２）に係数αとβを乗算した値を加算し、誤差値Ｅ（ｋ，ｍ−１）に対して係数βを乗算した値を加算する（後述する第２の誤差データ９３５に相当する）。
【００８３】
また、図１０（ｂ）は、前のクロックで、第２の量子化演算部９２１において量子化データが確定しなかった場合、すなわち、判定フラグ＝０の場合の誤差データの拡散の様子を示す図である。この場合、前のクロックで座標（ｋ，ｍ）の注目画素は、すでに第２の量子化演算部９２１が演算処理をしているが、このクロックで、ＥＤ１により再度、座標（ｋ，ｍ）の画素の誤差拡散処理を行う。
【００８４】
したがって、同一ラインからの誤差データは、注目画素の１画素前の画素の誤差データのみとなる。すなわち、座標（ｋ，ｍ）の画素の１画素前の画素（座標（ｋ，ｍ−１））の誤差値Ｅ（ｋ，ｍ−１）に係数αを乗算した値を加算する。
【００８５】
下のラインの誤差データに関しては次の演算を行う。
【００８６】
座標（ｋ−１，ｍ−２）の画素に関しては、誤差値Ｅ（ｋ，ｍ−１）に対して拡散係数δを乗算した値を加算する（後述する第１の誤差データ９３３に相当する）。
【００８７】
座標（ｋ−１，ｍ−１）の画素に関しては、誤差値Ｅ（ｋ，ｍ−１）に対して拡散係数γを乗算した値を加算する（後述する第１の誤差データ９３３に相当する）。
【００８８】
座標（ｋ−１，ｍ）の画素に関しては、誤差値Ｅ（ｋ，ｍ−１）に対して拡散係数βを乗算した値を加算する（後述する第１の誤差データ９３３に相当する）。
【００８９】
図４に戻って、画像処理部１０３の量子化処理部２０２の構成を詳細に説明する。図４は、量子化処理部２０２の詳細なブロック図である。
【００９０】
図４に示すように、量子化処理部は、入力制御部９００と、第１の誤差拡散部９１０と、第２の誤差拡散部９２０と、出力制御部９３０とを備える。このように、図４に示す実施形態１に係る記録装置は、誤差拡散部を２つ備えており、この２つの誤差拡散部が並列に動作する。なお、本図においては第１の誤差拡散部９１０の処理する第１注目画素を座標（ｋ，ｍ）の画素、第２の誤差拡散部９２０の処理する第２注目画素を座標（ｋ，ｍ＋１）の画素とする。
【００９１】
入力制御部９００は、入力データ制御部９０１と、第１の加算部９０２と、第２の加算部９０３とを備えている。
【００９２】
第１の加算部９０２は、第１の入力画像データＡ（ｋ，ｍ）と、前ラインからの誤差データとの加算を行う。第１の入力画像データは、ＲＡＭからＤＭＡＣ２０６及び色変換処理部２０１を介して入力される。また、前ラインからの誤差データは、誤差メモリからＤＭＡＣ２０８を介して入力されるものであり、前ラインからの誤差データ［Ｅ（ｋ−１，ｍ−１）×β＋Ｅ（ｋ−１，ｍ）×γ＋Ｅ（ｋ−１，ｍ＋１）×δ）］である。第１の入力画像データと前ラインからの誤差データとを加算することにより第１の入力データを算出して、第１の誤差拡散部（ＥＤ１）９１０に送信する。
【００９３】
また、第２の加算部９０３は、第２の入力画像データＡ（ｋ，ｍ＋１）と、前ラインからの誤差データとの加算を行う。第２の加算部９０３は、上述した第１の加算部９０２の動作と同時に動作する。第２の入力画像データは、ＲＡＭからＤＭＡＣ２０６及び色変換処理部２０１を介して入力される。また、前ラインからの誤差データは、誤差メモリからＤＭＡＣ２０８を介して入力されるものであり、前ラインからの誤差データ［Ｅ（ｋ−１，ｍ）×β＋Ｅ（ｋ−１，ｍ＋１）×γ＋Ｅ（ｋ−１，ｍ＋２）×δ）］である。第２の入力画像データ９０４と前ラインからの誤差データとを加算することにより第２の入力データを算出して、第２の誤差拡散部（ＥＤ２）９２０に送信する。
【００９４】
第１の誤差拡散部９１０は、量子化を行う第１の量子化演算部９１１と、第１の係数乗算部９１２とを備えている。さらに、第１の係数乗算部９１２から算出された誤差データ（Ｅ（ｋ，ｍ）×α）に拡散係数αを乗算する乗算部９１３と、拡散係数β、γ、δをそれぞれ乗算する乗算部９１４と、誤差データのセレクタ９１５と、加算部９１６，９１７とを備えている。
【００９５】
加算部９１６は、加算部９０２から受信した第一の入力データと、セレクタ９１５で選択した同一ラインの画素からの誤差データを加算し、これを第１の量子化演算部９１１に送信する。このとき、セレクタ９１５は、判定フラグ＝０の場合は、誤差データＥ１（ｋ，ｍ−１）×αを選択し、判定フラグ＝１の場合は、誤差データＥ１（ｋ，ｍ−２）×（αの２乗）と誤差データＥ２（ｋ，ｍ−１）×αを加算した値を選択する。
【００９６】
第１の量子化演算部９１１は、レジスタ２０４に格納された閾値をもとに、入力された値を二値に量子化すると共に誤差値Ｅ（ｋ，ｍ）を算出する。第１の量子化演算部９１１の演算方法については、図６を用いて説明した通りである。第１の量子化演算部９１１により量子化した結果は、第１の量子化データａ（ｋ，ｍ）９３２として出力制御部９３０に送信する。一方、第１の量子化演算部９１１で算出した誤差値Ｅ（ｋ，ｍ）は、第１の係数乗算部９１２に送信する。
【００９７】
第１の係数乗算部９１２では、誤差値に対して振り撒く画素ごとに、図５で示したように係数を乗算する。第１の係数乗算部９１２において、誤差値Ｅ（ｋ，ｍ）に拡散係数αを乗じた値は、同一ラインの次の画素に拡散するため誤差データとしてセレクタ９１５に送信する。誤差値Ｅ（ｋ，ｍ）に拡散係数αを乗じた値は、さらに、乗算部９１３及び乗算部９１４にそれぞれ送信される。一方、第１の係数乗算部９１２において、誤差値Ｅ（ｋ，ｍ）に係数β、γ、δをそれぞれ乗じた値は、次のラインに拡散するため、第１の誤差データ９３３として出力制御部９３０に送信する。
【００９８】
乗算部９１３は、誤差データＥ（ｋ，ｍ）×αに係数αを乗じて、その結果を加算部９１７に送信する。加算部９１７は、誤差データＥ（ｋ，ｍ）×（αの二乗）と、後述する第２の誤差拡散部９２０から送信される誤差データＥ（ｋ，ｍ＋１）×αとを加算し、結果をセレクタ９１５に送信する。
【００９９】
乗算部９１４は、誤差データＥ（ｋ，ｍ）×αに係数β、γ、δをそれぞれ乗じて、結果を第２の誤差拡散部９２０の加算部９２３に送信する。
【０１００】
一方、第２の誤差拡散部９２０は、量子化を行う第２の量子化演算部９２１と、第２の係数乗算部９２２と、加算部９２３とを備えている。
【０１０１】
そして、第２の量子化演算部９２１は、レジスタ２０４に格納された閾値と、Ｓ２と閾値及び同一ラインからの誤差データが取り得る値の最大値の和と、閾値及び同一ラインからの誤差データが取り得る値の最小値の和と、に基づいて判定フラグの決定をする。判定フラグの結果は、入力データ制御部９０１、セレクタ９１５、出力制御部９３１にそれぞれ送信される。
【０１０２】
第２の量子化演算部９２１は、第２の入力データを二値に量子化すると共に誤差値Ｅ（ｋ，ｍ＋１）を算出する。第２の量子化演算部９２１の演算方法については、図７で説明した通りである。第２の量子化演算部９２１により量子化した結果は、第２の量子化データａ（ｋ，ｍ＋１）９３４として出力制御部９３０に送信する。一方、第２の量子化演算部９２１で算出した誤差値は、第２の係数乗算部９２２に送信する。
【０１０３】
第２の係数乗算部９２２では、誤差値に対して振り撒く画素ごとに係数を乗算する。第２の係数乗算部９２２において、誤差値Ｅ（ｋ，ｍ＋１）に係数αを乗じた値は、同一ラインの次の画素に拡散するため誤差データとしてセレクタ９１５に送信する。一方、係数乗算部９２２において、誤差値Ｅ（ｋ，ｍ＋１）に係数β、γ、δをそれぞれ乗じた値は、加算部９２３に送信する。
【０１０４】
加算部９２３は、第２の係数演算部９２２から送信される誤差データ［Ｅ（ｋ，ｍ＋１）に係数β、γ、δをそれぞれ乗じた値］と、第１の誤差拡散部９１０から送信される誤差データ［Ｅ（ｋ，ｍ）に係数β、γ、δをそれぞれ乗じた値］とを加算する。加算した結果は、次のラインに拡散するため、第２の誤差データ９３５として出力部９３０に送信する。
【０１０５】
出力データ制御部９３１は、判定フラグ＝０の場合は、第２の量子化データ９３４及び第２の誤差データ９３５を使用せず、第１の量子化データ９３２をＲＡＭ１１５に保存すると共に第１の誤差データ９３３を誤差メモリに保存するように制御する。判定フラグ＝１の場合は、第１の量子化データ９３２及び第２の量子化データ９３４をＲＡＭ１１５に保存すると共に、第１の誤差データ９３３及び第２の誤差データ９３５を誤差メモリに保存するように制御する。
【０１０６】
出力制御部９３０は、誤差データを次のラインへ分配するために、誤差の累積値を保持するレジスタを備えている。このレジスタは、図５に示すように、１つの注目画素から次のラインの３画素に分配するので、各画素位置に累積される誤差データを保持するメモリ領域を備えている。１つの画素位置について累積がなされる（誤差データ「Ｂ」、「Ｃ」、「Ｄ」の加算が完了する）と、その誤差値を誤差メモリへ出力する。
【０１０７】
図１１を用いて、入力制御部９００の処理手順を詳細に説明する。図１１は、入力制御部９００の処理フローを示す図である。画素の番号をｋとして、最終画素をＮとする。
【０１０８】
データを受信して入力データ制御をスタートし、ステップ１００１においてｋに初期値＝１を代入する。
【０１０９】
次に、ステップ１００２において、ｋ＝Ｎ（最終画素）かどうか判断する。
ｋ＝Ｎでない場合は、ステップ１００３に進み、ＥＤ１に第一の入力データ［ｋ］を送信し、ＥＤ２に第二の入力データ［ｋ＋１］を送信する。
【０１１０】
ステップ１００４において、判定フラグ＝１か否かを判定する。判定フラグ＝０の場合は、ステップ１００５に進み、ｋ＝ｋ＋１として、ステップ１００２に戻って、ＥＤ２の処理したｋ＋１の画像の処理をＥＤ１で再び行う。判定フラグ＝１の場合は、ステップ１００６に進み、ｋ＝Ｎ−１か否かを判断する。ｋ＝Ｎ−１の場合は、ステップ１００３においてＥＤ２において最終画素が処理されているので、処理を終了する。ｋ＝Ｎ−１でない場合は、ステップ１００７においてｋ＝ｋ＋２として、ステップ１００２に戻る。
【０１１１】
ステップ１００２において、ｋ＝Ｎであった場合はステップ１００８に進み、ＥＤ１に第一の入力データ［ｋ＝Ｎ］を送信する。その後、処理を終了する。
【０１１２】
図１２を用いて、出力制御部９３０の処理手順を詳細に説明する。図１２は、出力制御部９３０の処理フローを示す図である。ここでも画素の番号をｋとして、最終画素をＮとする。
【０１１３】
データを受信して出力データ制御をスタートし、ステップ１１０１においてｋに初期値＝１を代入する。
【０１１４】
次に、ステップ１１０２において、判定フラグ＝１か否かを判断する。
【０１１５】
判定フラグ＝１の場合は、ステップ１１０３に進み、第一の量子化データ及び第一の誤差データをメモリに出力する。さらに、ステップ１１０４において、第二の量子化データ及び第二の誤差データをメモリに出力する。そして、ステップ１１０５に進み、ｋ＝ｋ＋２として、ステップ１１０８に進む。
【０１１６】
一方、判定フラグ＝０である場合は、ステップ１１０６において、第一の量子化データ及び第一の誤差データをメモリに出力する。そして、ステップ１１０７に進み、ｋ＝ｋ＋１として、ステップ１１０８に進む。すなわち、第二の量子化データ及び第２の誤差データはメモリに出力しない。
【０１１７】
ステップ１１０８では、最終画素Ｎの処理が完了したか判断する。最終画素Ｎが完了していない場合は、ステップ１１０２に戻り処理を繰り返し、最終画素Ｎの処理が完了した場合は処理を終了する。
【０１１８】
本実施形態では、上述したように、第１の誤差拡散部９１０と第２に誤差拡散部９２０を並行して動作させる。そして、第２の量子化演算部９２１の判定フラグ＝１の場合は、第２の誤差拡散部９２０は、同一ラインの誤差データを加算せずに誤差拡散処理を進めることができる。すなわち、第２の量子化演算部９２１の判定フラグ＝１の場合は、同一ラインの誤差データを待つ必要がない。そして、次のクロックでは、第１の誤差拡散部９１０は、第２の量子化演算部９２１が処理を行った画素の次の画素の誤差拡散処理を行うことができる。したがって、第２の量子化演算部９２１の判定フラグ＝１と判定された数の分だけ誤差拡散処理を高速化することができる。
【０１１９】
これにより、誤差拡散法による効果を損なわずに、通常の誤差拡散処理と比較して高速に処理を行うことができる。
【０１２０】
（実施形態２）
本実施形態は、画像処理部１０３の量子化処理部２０２以外の構成は、実施形態１と同様であるので、重複する説明は省略する。図１３は、実施形態２に係る量子化処理部２０２の構成を示すブロック図である。
【０１２１】
図１３に示すように、量子化処理部は、入力制御部１２００と、第１の誤差拡散部１２１０と、第２の誤差拡散部１２２０と、第３の誤差拡散部（以下、ＥＤ３ともいう）１２３０と、出力制御部１２４０とを備える。このように、図１３に示す実施形態２に係る記録装置は、誤差拡散部を３つ備えており、この３つの誤差拡散部が並列に動作する。以下、ＥＤ１の処理する第１注目画素を座標（ｋ，ｍ）の画素、ＥＤ２の処理する第２注目画素を座標（ｋ，ｍ＋１）画素、ＥＤ３の処理する第３注目画素を座標（ｋ，ｍ＋２）の画素として説明する。
【０１２２】
入力制御部１２００は、入力データ制御部１２０１と、第１の加算部１２０２と、第２の加算部１２０３と、第３の加算部１２０４とを備えている。
【０１２３】
第１の加算部１２０２は、実施形態１の第１の加算部９０２に対応するものであるため簡単に説明する。第１の加算部１２０２は、入力画像データＡ（ｋ，ｍ）と、前ラインからの誤差データとの加算を行う。入力画像データと前ラインからの誤差データとを加算することにより第１の入力データを算出して、第１の誤差拡散部（ＥＤ１）１２１０に送信する。
【０１２４】
第２の加算部１２０３は、実施形態１の第２の加算部９０３に対応するものであるため簡単に説明する。第２の加算部１２０３は、入力画像データＡ（ｋ，ｍ＋１）と、前ラインからの誤差データとの加算を行う。第２の入力画像データと前ラインからの誤差データとを加算することにより第２の入力データを算出して、第２の誤差拡散部（ＥＤ２）１２２０に送信する。
【０１２５】
第３の加算部１２０４は、入力画像データＡ（ｋ，ｍ＋２）と、前ラインからの誤差データとの加算を行う。第３の加算部１２０４の処理は、第１の加算部１２０２と第２の加算部１２０３と並行して行う。入力画像データＡ（ｋ，ｍ＋２）は、ＲＡＭからＤＭＡＣ２０６及び色変換処理部２０１を介して入力される。また、前ラインからの誤差データは、誤差メモリからＤＭＡＣ２０８を介して入力されるものであり、Ｅ（ｋ−１，ｍ＋１）×β＋Ｅ（ｋ−１，ｍ＋２）×γ＋Ｅ（ｋ−１，ｍ＋３）×δ）である。入力画像データと前ラインからの誤差データとを加算することにより第３の入力データを算出して、第３の誤差拡散部（ＥＤ３）１２３０に送信する。
【０１２６】
第１の誤差拡散部１２１０は、量子化を行う第１の量子化演算部１２１１と、第１の係数乗算部１２１２と、セレクタ１２１７と、加算部１２１８、１２１９１、１２１９２とを備えている。また、係数乗算部１２１２から算出された誤差データＥ（ｋ，ｍ）×αに係数αを乗算する乗算部１２１３と、誤差データＥ（ｋ，ｍ）×αにαの２乗を乗算する乗算部１２１５と、を備える。さらに、誤差データＥ（ｋ，ｍ）×αに係数β、γ、δをそれぞれ乗算する乗算部１２１４と、誤差データＥ（ｋ，ｍ）×αに係数αβ、αγ、αδをそれぞれ乗算する乗算部１２１６と、を備える。
【０１２７】
加算部１２１８は、第１の加算部１２０２から受信した第一の入力データと、セレクタ１２１７で選択した前の画素の誤差データを加算し、これを第１の量子化演算部１２１１に送信する。セレクタ１２１７は、第１の判定フラグ＝０の場合は、誤差データＥ（ｋ，ｍ−１）×αを選択する。第１の判定フラグ＝１で且つ第２の判定フラグ＝０の場合は、誤差データＥ（ｋ，ｍ−２）×（αの２乗）と誤差データＥ（ｋ，ｍ−１）×αを加算した値を選択する。第１の判定フラグ＝１で且つ第２の判定フラグ＝１の場合は、誤差データ（ｋ，ｍ−３）×（αの３乗）と誤差データＥ（ｋ，ｍ−２）×（αの二乗）と、誤差データＥ（ｋ，ｍ−１）×αとを加算した値を選択する。なお、第１の判定フラグ及び第２の判定フラグについては後述する。
【０１２８】
第１の量子化演算部１２１１は、レジスタ２０４に格納された閾値をもとに加算部１２１８により入力される値を二値に量子化すると共に誤差値を算出する。第１の量子化演算部１２１１の演算方法については、図６を用いて説明した通りである。第１の量子化演算部１２１１により量子化した結果は、第１の量子化データａ（ｋ，ｍ）１２４２として出力制御部１２４０に送信する。一方、第１の量子化演算部１２１１で算出した誤差値は、第１の係数乗算部１２１２に送信する。
【０１２９】
第１の係数乗算部１２１２では、誤差値に対して振り撒く画素ごとに、係数を乗算する。第１の係数乗算部１２１２において、誤差値Ｅ（ｋ，ｍ）に係数αを乗じた値は、同一ラインの次の画素に拡散するため誤差データとしてセレクタ１２１７に送信する。また、誤差値Ｅ（ｋ，ｍ）に係数αを乗じた値は、乗算部１２１３、乗算部１２１４、乗算部１２１５、及び乗算部１２１６にそれぞれ送信される。一方、係数乗算部１２１２において、誤差値Ｅ（ｋ，ｍ）に係数β、γ、δをそれぞれ乗じた値は、次のラインに拡散するため、第１の誤差データ１２４３として出力制御部１２４０に送信する。
【０１３０】
誤差値Ｅ（ｋ，ｍ）に係数αを乗じた値は、乗算部１２１３において係数αを乗じて、加算部１２１９に送信する。加算部１２１９１では、誤差データＥ（ｋ，ｍ）×（αの二乗）と、第２の誤差拡散部１２２０から送信される誤差データＥ（ｋ，ｍ＋１）×αとが加算され、結果はセレクタ１２１７に送信される。
【０１３１】
また、誤差値Ｅ（ｋ，ｍ）に係数αを乗じた値は、乗算部１２１５において（αの２乗）を乗じて、加算部１２１９２に送信する。加算部１２１９２では、誤差データＥ（ｋ，ｍ）×（αの三乗）と、第２の誤差拡散部１２２０から送信される誤差データＥ（ｋ，ｍ＋１）×（αの二乗）と、第３の誤差拡散部１２３０から送信される誤差データＥ（ｋ，ｍ＋２）×（αの三乗）とが加算される。加算された結果はセレクタ１２１７に送信される。
【０１３２】
第２の誤差拡散部１２２０は、量子化を行う第２の量子化演算部１２２１と、第２の係数乗算部１２２２と、乗算部１２２３と、乗算部１２２４と、加算部１２２５と、を備えている。
【０１３３】
そして、第２の量子化演算部１２２１は、レジスタ２０４に格納された閾値と、Ｓ２と閾値及び同一ラインからの誤差データが取り得る値の最大値の和と、閾値及び同一ラインからの誤差データが取り得る値の最小値の和と、をもとに第１の判定フラグの決定をする。第１の判定フラグの結果は、入力データ制御部１２０１、セレクタ１２１７、出力データ制御部１２４１にそれぞれ送信される。
【０１３４】
第２の量子化演算部１２２１は、第２の入力データを二値に量子化すると共に第２の誤差値Ｅ（ｋ，ｍ＋１）を算出する。第２の量子化演算部１２２１の演算方法については、実施形態１の第２の量子化演算部９２１と同様である。第２の量子化演算部１２２１により量子化した結果は、第２の量子化データａ（ｋ，ｍ＋１）１２４１として出力制御部１２４０に送信する。一方、第２の量子化演算部１２２１で算出した誤差値は、第２の係数乗算部１２２２に送信する。
【０１３５】
第２の係数乗算部１２２２では、誤差値に対して振り撒く画素ごとに係数を乗算する。第２の係数乗算部１２２２において、誤差値Ｅ（ｋ，ｍ＋１）に係数αを乗じた値は、加算部１２１９１、加算部１２１９２、乗算部１２２３、及び乗算部１２２４にそれぞれ送信する。一方、第２の係数乗算部１２２２において、誤差値Ｅ（ｋ，ｍ＋１）に係数β、γ、δをそれぞれ乗じた値は、加算部１２２５に送信する。
【０１３６】
加算部１２２５は、第２の係数演算部１２２２から送信される誤差データ［Ｅ（ｋ，ｍ＋１）に係数β、γ、δをそれぞれ乗じた値］と、第１の誤差拡散部１２１０から送信される誤差データ［Ｅ（ｋ，ｍ）に係数β、γ、δをそれぞれ乗じた値］とを加算する。加算した結果は、次のラインに拡散するため、第２の誤差データ１２４５として出力部１２４０に送信する。
【０１３７】
乗算部１２２３は、誤差データＥ（ｋ，ｍ＋１）×αに係数αを乗じて、結果を加算部１２１９２に送信する。乗算部１２２４は、誤差データＥ（ｋ，ｍ＋１）×αに係数β、γ、δをそれぞれ乗じて、結果を第３の誤差拡散部１２３０の加算部１２３３に送信する。
【０１３８】
第３の誤差拡散部１２３０は、量子化を行う量子化演算部１２３１と、係数乗算部１２３２と、加算部１２３３と、を備えている。
【０１３９】
そして、第３の量子化演算部１２２１は、レジスタ２０４に格納された閾値と、Ｓ２と閾値及び同一ラインからの誤差データが取り得る値の最大値の和と、閾値及び同一ラインからの誤差データが取り得る値の最小値の和と、をもとに第２の判定フラグの決定をする。第２の判定フラグの結果は、入力データ制御部１２０１、セレクタ１２１７、出力データ制御部１２４１にそれぞれ送信される。
【０１４０】
第３の量子化演算部１２３１は、第３の入力データを二値に量子化すると共に誤差値Ｅ（ｋ，ｍ＋２）を算出する。
【０１４１】
以下、第３の量子化演算部１２３１の演算方法について簡単に説明する。
【０１４２】
第３の誤差拡散部１２３０の第３の量子化演算部１２３１では、入力画像データと、第１注目画素及び第２注目画素以外からの誤差データとの合計値（以下、「Ｓ３」ともいう）を演算する。なお、本実施形態では、図５（ａ）に示すＦｌｏｙｄ＆Ｓｔｅｉｎｂｅｒｇ型の誤差拡散法を適用しているので、「第１注目画素以外及び第２注目画素以外の画素から拡散される誤差データ」は、前ライン（上ライン）からの誤差データのみとなる。
【０１４３】
第３の誤差拡散部１２３０は、第２の誤差拡散部１２２０が処理する画像の次の画素の処理を行う。すなわち、第３の量子化演算部１２３１は、座標（ｋ，ｍ＋２）の画素の演算を行う。
【０１４４】
座標（ｋ，ｍ＋２）の画素のＳ３は、入力画像データＡ（ｋ，ｍ＋２）と、前ラインの誤差データ［Ｅ（ｋ−１，ｍ＋１）×β＋Ｅ（ｋ−１，ｍ＋２）×γ＋Ｅ（ｋ−１，ｍ＋３）×δ］と、を加算したものである。また、Ｓ３は、同一ラインの誤差データ、具体的には、左画素の誤差データを加算する前の値である。
【０１４５】
第３の量子化演算部１２３１では、同一ラインの第１注目画素及び第２注目画素からの誤差データが加算される前の合計値であるＳ３により、量子化データが確定するか否か判定する判定フラグを算出する。具体的には、合計値Ｓ３が第１の基準値以下か否か及びこの第１の基準値より大きい第２の基準値以上か否かに基づいて、量子化データが確定するか否かを判定する。
【０１４６】
本実施形態では、Ｓ３と、閾値及び同一ラインの第１注目画素及び第２注目画素からの誤差データが取り得る値の最大値の和と、閾値及び同一ラインの第１注目画素及び第２注目画素からの誤差データが取り得る値の最小値の和と、を比較し、判定フラグが１か０かを決定する。すなわち、上記の第１の基準値は、第３の誤差拡散部１２３０において設定される閾値及び同一ラインからの第１注目画素及び第２注目画素からの誤差データの取り得る値の最大値から求められる。また、上記の第２の基準値は、第３の誤差拡散部１２３０において設定される閾値及び同一ラインの第１注目画素及び第２注目画素からの誤差データの取り得る値の最小値から求められる。第３の量子化演算部１２３１の演算方法については、図７で説明した方法と同様であるので、説明を省略する。
【０１４７】
第３の量子化演算部１２３１により量子化した結果は、第３の量子化データａ（ｋ，ｍ＋２）１２４６として出力制御部１２４０に送信する。一方、第３の量子化演算部１２３１で算出した誤差値は、第３の係数乗算部１２３２に送信する。
【０１４８】
第３の係数乗算部１２３２では、誤差値に対して振り撒く画素ごとに係数を乗算する。第３の係数乗算部１２３２において、誤差値Ｅ（ｋ，ｍ＋２）に係数αを乗じた値は、セレクタ１２１７に送信する。一方、第３の係数乗算部１２３２において、誤差値Ｅ（ｋ，ｍ＋２）に係数β、γ、δをそれぞれ乗じた値は、加算部１２３３に送信する。
【０１４９】
加算部１２３３は、第３の係数演算部１２３２から送信される誤差データ［Ｅ（ｋ，ｍ＋２）に係数β、γ、δをそれぞれ乗じた値］と、第２の誤差拡散部１２２０から送信される誤差データ［Ｅ（ｋ，ｍ＋１）に係数β、γ、δをそれぞれ乗じた値］と、第１の誤差拡散部１２１０から送信される誤差データ［Ｅ（ｋ，ｍ）に係数β、γ、δをそれぞれ乗じた値］を加算する。加算した結果は、次のラインに拡散するため、第３の誤差データ１２４７として出力部１２４０に送信する。
【０１５０】
出力データ制御部１２４１は、第１の判定フラグ＝０の場合は、第２の量子化データ１２４４及び第２の誤差データ１２４５、並びに第３の量子化データ１２４６及び第３の誤差データ１２４７を使用しない。そして、第１の量子化データ９３２をＲＡＭ１１５に保存すると共に、第１の誤差データ１２４３を誤差メモリに保存するように制御する。また、第１の判定フラグ＝１で且つ第２の判定フラグ＝０の場合は、第３の量子化データ１２４６及び第３の誤差データ１２４７を使用しない。そして、第１の量子化データ１２４２及び第２の量子化データ１２４４をＲＡＭ１１５に保存すると共に、第１の誤差データ１２４３及び第２の誤差データ１２４５を誤差メモリに保存するように制御する。一方、第１の判定フラグ＝１で且つ第２の判定フラグ＝１の場合は、第１の量子化データ１２４２、第２の量子化データ１２４４、及び第３の量子化データ１２４６をＲＡＭ１１５に保存する。そして、第１の誤差データ１２４３、第２の誤差データ１２４５、及び第３の誤差データ１２４７を誤差メモリに保存するように制御する。
【０１５１】
出力制御１２４０は、誤差データを次のラインへ分配するために、誤差の累積値を保持するレジスタを備えている。このレジスタは、図５に示すように、１つの注目画素から次のラインの３画素に分配するので、各画素位置に累積される誤差データを保持するメモリ領域を備えている。１つの画素位置について累積がなされる（誤差データ「Ｂ」、「Ｃ」、「Ｄ」の加算が完了する）と、その誤差値を誤差メモリへ出力する。
【０１５２】
図１４を用いて、入力制御部１２００の処理手順を詳細に説明する。図１４は、入力制御部１２００の処理フローを示す図である。画素の番号をｋとして、最終画素をＮとする。
【０１５３】
データを受信して入力データ制御をスタートし、ステップ１３０１においてｋに初期値＝１を代入する。
【０１５４】
次に、ステップ１３０２において、ｋ＝Ｎ（最終画素）かどうか判断する。
【０１５５】
ｋ＝Ｎでない場合は、ステップ１３０３において、ｋ＝Ｎ−１かどうか判断する。ｋ＝Ｎ−１でない場合、ステップ１３０４に進む。
【０１５６】
ステップ１３０４では、ＥＤ１に第一の入力データ［ｋ］を送信、ＥＤ２に第二の入力データ［ｋ＋１］を送信、ＥＤ３に第三の入力データ［ｋ＋１］を送信する。
【０１５７】
次のステップ１３０５では、第一の判定フラグ＝１かどうか判定する。第一の判定フラグ＝１でない場合、ステップ１３０６に進む。ステップ１３０６では、ｋ＝ｋ＋１として、ステップ１３０２に戻る。一方、第一の判定フラグ＝１の場合、ステップ１３０７に進み、第二の判定フラグ＝１かどうか判定する。
【０１５８】
第二の判定フラグ＝１でない場合、ステップ１３０８に進む。そして、ステップ１３０８では、ｋ＝ｋ＋２として、ステップ１３０２に戻る。一方、第二の判定フラグ＝１の場合、ステップ１３０９においてｋ＝Ｎ−２かどうか判断する。ｋ＝Ｎ−２の場合は、ステップ１３０４において最終画素をＥＤ３において処理しているので処理を終了する。ｋ＝Ｎ−２でない場合はステップ１３１０において、ｋ＝ｋ＋３として、ステップ１３０２に戻る。
【０１５９】
ステップ１３０３において、ｋ＝Ｎ−１であった場合はステップ１３１１に進む。
【０１６０】
ステップ１３１１では、ＥＤ１に第一の入力データ［ｋ＝Ｎ］を送信し、ＥＤ２に第二の入力データ［ｋ＝Ｎ＋１］を送信する。次に、ステップ１３１２において、第一の判定フラグ＝１かどうかを判定する。第１の判定フラグ＝１でない場合、ステップ１３０６に進む。第１の判定フラグ＝１である場合は、ステップ１３１１において最終画素をＥＤ２において処理しているので、処理を終了する。
【０１６１】
ステップ１３０２においてｋ＝Ｎであった場合は、ステップ１３１３に進み、ＥＤ１に第一の入力データ［ｋ＝Ｎ］を送信する。その後、処理を終了する。
【０１６２】
図１５を用いて、出力制御部１２４０の処理手順を詳細に説明する。図１５は、出力制御部１２４０の処理フローを示す図である。画素の番号をｋとして、最終画素をＮとする。
【０１６３】
データを受信して出力データ制御をスタートし、ステップ１１０１においてｋに初期値＝１を代入する。
【０１６４】
次に、ステップ１４０２において、第一の判定フラグ＝１かどうか判断する。第一の判定フラグ＝１の場合は、ステップ１４０３に進む。そして、ステップ１４０３において、第二の判定フラグ＝１かどうか判断する。
【０１６５】
ステップ１４０３において、第二の判定フラグ＝１の場合は、ステップ１４０４において、第一の量子化データ及び第一の誤差データをメモリに出力する。さらにステップ１４０５において、第二の量子化データ及び第二の誤差データをメモリに出力し、ステップ１４０６において、第三の量子化データ及び第三の誤差データをメモリに出力する。そして、Ｓ１４０７に進みｋ＝ｋ＋３として、ステップ１４１３に進む。
【０１６６】
一方、ステップ１４０３において、第二の判定フラグ＝１でない場合は、ステップ１４０８に進み、第一の量子化データ及び第一の誤差データをメモリに出力する。さらにステップ１４０９において、第二の量子化データ及び第二の誤差データをメモリに出力し、ステップ１４１０に進む。ステップ１４１０では、ｋ＝ｋ＋２として、ステップ１４１３に進む。
【０１６７】
ステップ１４０２において、第一の判定フラグ＝１でない場合は、ステップ１４１１に進み、第一の量子化データ及び第一の誤差データをメモリに出力する。そして、ステップ１４１２に進みｋ＝ｋ＋１として、ステップ１４１３に進む。
【０１６８】
ステップ１４１３において、最終画素が完了したか判断する。最終画素が完了していない場合はステップ１４０２に戻り処理を繰り返し、最終画素が完了した場合は処理を終了する。
【０１６９】
本実施形態では、上述したように、第１の誤差拡散部１２１０と、第２の誤差拡散部１２２０と、第３の誤差拡散部１２３０とを並行して動作させる。
【０１７０】
第２の量子化演算部１２２１の判定フラグ＝１の場合は、第２の誤差拡散部１２２０は、同一ラインの誤差データを加算せずに誤差拡散処理を進めることができる。すなわち、第２の量子化演算部１２２１は、同一ラインの誤差データを待つ必要がない。
【０１７１】
第２の量子化演算部１２２１の判定フラグ＝１で且つ第３の量子化演算部１２３１の判定フラグ＝１の場合は、第２の量子化演算部１２２１だけでなく、第３の量子化演算部１２３１も、同一ラインの誤差データを加算せずに誤差拡散処理を進めることができる。
【０１７２】
したがって、第２の量子化演算部１２２１の判定フラグ＝１と判定された数と、第２の量子化演算部１２２１の判定フラグ＝１且つ第３の量子化演算部１２３１の判定フラグ＝１と判定された数との分だけ誤差拡散処理を高速化することができる。
【０１７３】
これにより、誤差拡散処理の効果を損なうことなく、通常の誤差拡散処理と比較して高速に処理を行うことができる。
【０１７４】
（他の実施形態）
以上、各実施形態を説明したが、本発明の基本的構成は上述したものに限定されるものではない。
【０１７５】
例えば、誤差データの拡散係数の乗算部、入力データと誤差データの加算部、誤差データ同士の和の加算部等の演算部は、いずれのブロックに存在していてもよく、実施形態１や実施形態２の構成に限定されるものではない。演算部の位置が異なったとしても、上述した実施形態と同様の処理をしていれば、実施形態１や実施形態２と同様の効果を得ることができる。例えば、各実施形態では、入力画像データと誤差データの加算は入力制御部で行っているが、この加算処理は入力制御部で行わなくてもよい。例えば、次のラインに拡散する誤差データを計算したときに、出力制御部で加算処理を行ってもよく、また、別途、入力画像データと誤差データを加算する演算手段を持つ構成としてもよい。
【０１７６】
また、実施形態１及び２では、第２の誤差拡散部の量子化演算部が演算した合計値により、量子化データが確定するか否かを判定する手段を、第２の量子化演算部自身が備えるものとしたが、これに限定されるものではない。例えば、第２の誤差拡散部の外部に、量子化演算部が演算した合計値により、量子化データが確定するか否かを判定する手段を設けるようにしてもよい。同様に、第３の誤差拡散部の量子化演算部が演算した合計値により量子化データが確定するか否かを判定する手段を、第３の量子化演算部の外部に設けるようにしてもよい。
【０１７７】
上述した実施形態では、Ｍ値の画像データを二値化する例について説明したが、Ｍ値の画像データを３値以上のＮ値（Ｍ＞Ｎ）の画像データに変換するものとしてもよい。すなわち、３値、５値、９値等の多値誤差拡散法においても同様に実施可能である。多値誤差拡散とした場合、閾値が複数個に増えるが、一方で左画素に拡散する誤差値として取り得る範囲が小さくなる。したがって、処理の高速化が一概に低下することはなく、誤差拡散法による効果を損なわずに、誤差拡散法による画像処理の高速化を実現することができる。
【０１７８】
本実施形態では、誤差拡散部において設定される閾値と、同一ライン上で且つ並行して誤差拡散処理されている注目画素から拡散される誤差データが取り得る値の最大値、その誤差データが取り得る値の最小値に基づいて、量子化データが確定するか否かの判定行ったがこれに限定されるものではない。例えば、同一ライン上で且つ並行して誤差拡散処理されている注目画素から拡散される誤差データが取り得る値の最大値の代わりに、その誤差データが取り得る値の最大値に所定の調整値を加算した値を用いてもよい。同様に、同一ライン上で且つ並行して誤差拡散処理されている注目画素から拡散される誤差データが取り得る値の最小値の代わりに、その誤差データが取り得る値の最小値に所定の調整値を加算した値を用いてもよい。例えば、８ｂｉｔデータで０〜２５５の値をとり、閾値が１２８の場合、同一ラインから拡散される誤差データが取り得る値の最大値（−５６）に所定の値（５）を加算した設定値１７９以上であれば、量子化データが確定すると判定するように設定してもよい。また、例えば、同一ラインから拡散される誤差データが取り得る値の最大値（５６）に所定の値（−５）を加算した設定値７７以下であれば、量子化データが確定すると判定するように設定してもよい。
【０１７９】
また、誤差拡散法は、図５に示すＦｌｏｙｄ＆Ｓｔｅｉｎｂｅｒｇ型に限定されるものではなく、公知の誤差マトリクスを用いることができる。
【０１８０】
また、上述した実施形態では、閾値や拡散係数を固定値して説明したが、誤差拡散部に入力される入力値に応じて閾値を変化させたり、誤差拡散部に入力される入力値に応じて拡散係数を変化させたり、誤差拡散部に入力される入力値に乱数を付加させたりしてもよい。このように閾値の変更、拡散係数の変更、乱数の不可等により画質を向上させることもできる。
【０１８１】
誤差拡散部に入力される入力値に応じて閾値を変化させる場合は、ＥＤ１及びＥＤ２の各誤差拡散部に入力される値に応じて閾値を変化させて処理する。このとき、ＥＤ２では以下に説明する方法により、図７における処理と同様の処理を行う。まず、ＥＤ１の処理の対象とする画素の入力するデータの値をＥＤ２に入力することによりＥＤ１の閾値がわかる。そして、この閾値からＥＤ１が右画素に拡散する誤差データの最大値及び最小値がわかる。このＥＤ１が右画素に拡散する誤差データが取り得る値の最大値及び最小値と、ＥＤ２の処理の対象とする画素の入力データとを図７を用いて説明した演算により、前の画素と並列処理ができるか否かを判定することができる。なお、誤差拡散部が３以上ある場合についても、同一ラインからの誤差データが取り得る値の最大値及び最小値を求め、これらを用いて同様に演算をすればよいので説明を省略する。
【０１８２】
また、複数クロックで１画素の処理を行う誤差拡散法を用いる場合は、ＥＤ２にＥＤ１の入力データを入力する代わりに、ＥＤ２がＥＤ１から閾値情報を受信することによって、ＥＤ１とＥＤ２との並列処理をすることができる。なお、ＥＤ３が存在する場合は、ＥＤ３がＥＤ２から閾値情報を受信することによって、ＥＤ１と、ＥＤ２と、ＥＤ３との並列処理をすることができ、誤差拡散部が４以上ある場合についても同様に並列処理をすればよいので説明を省略する。
【０１８３】
さらに、誤差拡散部の入力値に応じて閾値を変化させる処理と、拡散係数を変化させる処理を、同時に実施してもよい。
【０１８４】
入力データに画素毎に乱数を付加させる処理の場合は、制御ブロックに入力データを入力したとき又は各誤差拡散部に入力データを入力するときに、各画素に与える乱数値を付加すればよい。この制御が加わることによっても、本発明の高速化が妨げられることはない。
【０１８５】
また、実施形態２では、誤差拡散部を３つ備える構成としたが、これを応用し、さらに１以上の誤差拡散部を連結することも同様に可能である。この場合も同様に、第Ｋの誤差拡散部（Ｋは、４以上の自然数）は、ＥＤ１、ＥＤ２、及びＥＤ３と並行して、第１注目画素と同一ライン上で且つ第２注目画素以降の第Ｋ注目画素（Ｋは、４以上の自然数）の誤差拡散処理を行うものとする。このとき、第Ｋの誤差拡散部の誤差拡散処理により、第Ｋ注目画素の量子化データが確定するか否かをそれぞれ判定するようにすればよい。具体的には、第Ｋ注目画素の入力画像データ及び第１〜第（Ｋ−１）注目画素以外の画素から拡散される誤差データの合計値が第１の基準値以下か否か及び第２の基準値以上か否かに基づいて第Ｋ注目画素の量子化データが確定するか否かを判定すればよい。なお、第１の基準値及び第２の基準値は、それぞれＥＤ２やＥＤ３とは異なる値としてもよい。
【０１８６】
なお、図５では処理方向を１方向のみ示したが、逆方向での処理も存在し、処理方向は交互に切り替えられるようにしてもよい。
【０１８７】
また、以上の実施形態の処理の全てをハードウェアで実行する必要はなく、一部をソフトウェアによって構成してもよい。
【符号の説明】
【０１８８】
９００，１２００  入力制御部
９１０，１２１０  第１の誤差拡散部
９１１，１２１１  第１の量子化演算部
９１２，１２１２  第１の係数乗算部
９２０，１２２０  第２の誤差拡散部
９２１，１２２１  第２の係数乗算部
１２３０  第３の誤差拡散部
１２３１  第３の量子化演算部
１２３２  第３の係数演算部
１２３０  第３の誤差拡散部
９３０，１２４０  出力制御部
【図１】
0005955109.tif 000002
【図２】
0005955109.tif 000003
【図３】
0005955109.tif 000004
【図４】
0005955109.tif 000005
【図５】
0005955109.tif 000006
【図６】
0005955109.tif 000007
【図７】
0005955109.tif 000008
【図８】
0005955109.tif 000009
【図９】
0005955109.tif 000010
【図１０】
0005955109.tif 000011
【図１１】
0005955109.tif 000012
【図１２】
0005955109.tif 000013
【図１３】
0005955109.tif 000014
【図１４】
0005955109.tif 000015
【図１５】
0005955109.tif 000016