(57)【要約】【課題】誤差拡散処理の並列化を容易にする。【解決手段】画像を主走査方向にｎ個（ｎは２以上の整数）に分割した分割画像の各々に対応してｎ個の誤差拡散処理部を用意し、２つの分割画像に対するハーフトーン処理の少なくとも一部を同時に行なわせる。主走査方向手前に位置する分割画像を処理する一の誤差拡散処理部が、ラスターの１つについて主走査方向端部まで処理したことにより、着目画素の周辺の画素に拡散する拡散誤差を求めたとき、順方向拡散誤差を、他の誤差拡散処理部に受け渡す。また、順方向拡散誤差を受け取った他の誤差拡散処理部は、１つのラスターについての前記ハーフトーン処理を開始し、逆方向の端部において拡散誤差を求めた後で、拡散誤差のうち、一の誤差拡散処理部が後続ラスターのハーフトーン処理において用いる拡散誤差である逆方向拡散誤差を、一の誤差拡散処理部に受け渡す。【選択図】図４
2020065100.tif 000002
【特許請求の範囲】
【請求項１】
複数の画素からなる縦横２次元の画像を、前記縦横のうちの一方向を主走査方向として順次ハーフトーン処理する画像処理装置であって、
前記画像を前記主走査方向にｎ個（ｎは２以上の整数）に分割した分割画像の各々に対応して設けられ、前記分割画像の前記主走査方向の画素の並びであるラスターに属する画素を順次着目画素とし、前記着目画素に誤差拡散法を適用して前記ハーフトーン処理を行なうｎ個の誤差拡散処理部と、
ｎ個の前記誤差拡散処理部が処理した結果を併せ、前記分割画像が備える階調値未満の階調値を有する処理済みデータを出力する出力部と
を備え、
前記ｎ個の誤差拡散処理部のうち、主走査方向に隣接する２つの分割画像にそれぞれ前記ハーフトーン処理を施す２つの誤差拡散処理部は、前記主走査方向手前に位置する一の分割画像のＮ＋１番目（Ｎは１以上の整数）のラスターについての前記ハートフトーン処理の少なくとも一部と、前記一の分割画像に隣接する他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の少なくとも一部とを、同時に行ない、
前記主走査方向手前に位置する分割画像を処理する一の誤差拡散処理部は、Ｎ番目のラスターについて前記主走査方向端部まで処理したことにより、前記主走査方向端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めたとき、前記拡散誤差のうち、前記他の誤差拡散処理部が用いる拡散誤差である順方向拡散誤差であって、少なくともＮ番目のラスターについて確定した順方向拡散誤差を、前記他の誤差拡散処理部による前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の開始より以前に、前記他の誤差拡散処理部に受け渡し、
前記他の誤差拡散処理部は、前記一の誤差拡散処理部から前記一の分割画像のＮ番目のラスターにおける前記確定した順方向拡散誤差を受け取った後で、前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理を開始し、前記主走査方向とは逆方向の端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めた後で、前記拡散誤差のうち、前記一の誤差拡散処理部が前記一の分割画像のＮ＋１番目のラスターについての前記ハーフトーン処理において用いる拡散誤差である逆方向拡散誤差のうち、少なくともＮ＋１番目のラスターに関して確定した逆方向拡散誤差を、前記一の誤差拡散処理部による前記Ｎ＋１番目のラスターについての前記ハーフトーン処理が前記主走査方向端部に至るまでに受け渡す
画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記一の誤差拡散処理部と前記他の誤差拡散処理部とは、直接データのやり取り可能な経路を有し、
少なくとも前記確定した順方向拡散誤差および前記確定した逆方向拡散誤差を、前記経路を介してやり取りする
画像処理装置。
【請求項３】
請求項２記載の画像処理装置であって、
前記経路は、前記２つの誤差拡散処理部から読み書き可能な共有メモリーである画像処理装置。
【請求項４】
請求項１記載の画像処理装置であって、
前記ｎ個の誤差拡散処理部は、データのやり取りが可能な転送路を共有し、
前記一の誤差拡散処理部と前記他の誤差拡散処理部とは、少なくとも前記確定した順方向拡散誤差および前記確定した逆方向拡散誤差を、前記転送路を介してやり取りする
画像処理装置。
【請求項５】
請求項１から請求項４のいずれか一項に記載の画像処理装置であって、
前記一の誤差拡散処理部は、前記確定した順方向拡散誤差を前記他の誤差拡散処理部に向けて出力している間は、前記誤差拡散法を適用した前記ハーフトーン処理は実行せず、
前記他の誤差拡散処理部は、前記確定した逆方向拡散誤差を前記一の誤差拡散処理部に向けて出力している間は、前記誤差拡散法を適用した前記ハーフトーン処理は実行しない、
画像処理装置。
【請求項６】
請求項５に記載の画像処理装置であって、
前記他の誤差拡散処理部は、前記一の誤差拡散処理部からの前記確定した順方向拡散誤差を入力している間は、前記誤差拡散法を適用した前記ハーフトーン処理は実行しない、
画像処理装置。
【請求項７】
請求項１から請求項６のいずれか一項に記載の画像処理装置と、
前記出力部が出力する処理済みデータに対応した階調値のドットを形成することにより、印刷媒体に印刷を行なう印刷部と、
を備えた印刷装置。
【請求項８】
複数の画素からなる縦横２次元の画像を、前記縦横のうちの一方向を主走査方向として順次ハーフトーン処理する画像処理方法であって、
前記画像を前記主走査方向にｎ個（ｎは２以上の整数）に分割した分割画像の各々に対応して設けられ、前記分割画像の前記主走査方向の画素の並びであるラスターに属する画素を順次着目画素とし、前記着目画素に誤差拡散法を適用して前記ハーフトーン処理を行なうｎ個の誤差拡散処理部を用意し、
前記ｎ個の誤差拡散処理部のうち、主走査方向に隣接する２つの分割画像にそれぞれ前記ハーフトーン処理を施す２つの誤差拡散処理部は、前記主走査方向手前に位置する一の分割画像のＮ＋１番目（Ｎは１以上の整数）のラスターについての前記ハートフトーン処理の少なくとも一部と、前記一の分割画像に隣接する他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の少なくとも一部とを、同時に行ない、
前記主走査方向手前に位置する分割画像を処理する一の誤差拡散処理部は、Ｎ番目のラスターについて前記主走査方向端部まで処理したことにより、前記主走査方向端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めたとき、前記拡散誤差のうち、前記他の誤差拡散処理部が用いる拡散誤差である順方向拡散誤差であって、少なくともＮ番目のラスターについて確定した順方向拡散誤差を、前記他の誤差拡散処理部による前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の開始より以前に、前記他の誤差拡散処理部に受け渡し、
前記他の誤差拡散処理部は、前記一の誤差拡散処理部から前記一の分割画像のＮ番目のラスターにおける前記確定した順方向拡散誤差を受け取った後で、前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理を開始し、前記主走査方向とは逆方向の端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めた後で、前記拡散誤差のうち、前記一の誤差拡散処理部が前記一の分割画像のＮ＋１番目のラスターについての前記ハーフトーン処理において用いる拡散誤差である逆方向拡散誤差のうち、少なくともＮ＋１番目のラスターに関して確定した逆方向拡散誤差を、前記一の誤差拡散処理部による前記Ｎ＋１番目のラスターについての前記ハーフトーン処理が前記主走査方向端部に至るまでに受け渡し、
ｎ個の前記誤差拡散処理部が処理した結果を併せ、前記分割画像が備える階調値未満の階調値を有する処理済みデータを出力する
画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、誤差拡散法を用いた画像処理とこれを用いた印刷の技術に関する。
【背景技術】
【０００２】
多階調の画像を、これより階調数の少ないドットや画素の集合により再現する際、再現される画像を高品質にするために、どのようにドットの配置を決定するかが重要になる。この技術を、一般にハーフトーン処理と呼ぶ。従来から、高品質のハーフトーン処理を行なう手法として誤差拡散法が知られている。
【０００３】
誤差拡散法は、処理の対象となる１つの画素（以下、着目画素とも言う）にドットを形成するか否かを決定すると、その画素がもともと持っていた階調値と、ドットの形成の有無による濃度を換算した階調値との差異を階調誤差として求め、注目画素の周辺の、まだ処理がなされていない画素に拡散誤差として配分する。このように誤差を、処理対象の画素の周辺に拡散し、誤差の拡散を受けた画素について、同様にドット形成の有無の判断と誤差の拡散とを継続することで、画像全体の階調値は元画像の階調値となり、また形成されるドットの分布も元画像の階調に沿ったものとなる。
【０００４】
こうした誤差の拡散は、注目画素の周辺の複数の画素に対して行なわれる。このため、誤差の拡散には各画素に拡散する誤差の演算と、分配される誤差を集計する誤差バッファが必要となる。この結果、拡散する誤差の演算に時間を要し、また大規模な高速メモリーが必要になる。そこで、元画像を複数の領域に分け、誤差拡散法によるハーフトーン処理を領域毎に並列に行ない、高速化を図ることが考えられた。発明者等は、こうした誤差拡散法の並列処理を行なう印刷装置を、特許文献１、２などの技術を提案している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３９６３５９８号公報
【特許文献２】特許第４０９６９４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
これらの技術は、並列に処理される分割画像同士の境界において疑似輪郭を発生させない優れたものだが、発明者は、こうした誤差拡散法によるハーフトーン処理の並列化を、より一層効率的に行なう構成を見いだした。
【課題を解決するための手段】
【０００７】
本開示の画像処理装置は、複数の画素からなる縦横２次元の画像を、前記縦横のうちの一方向を主走査方向として順次ハーフトーン処理する。この画像処理装置は、前記画像を前記主走査方向にｎ個（ｎは２以上の整数）に分割した分割画像の各々に対応して設けられ、前記分割画像の前記主走査方向の画素の並びであるラスターに属する画素を順次着目画素とし、前記着目画素に誤差拡散法を適用して前記ハーフトーン処理を行なうｎ個の誤差拡散処理部と、ｎ個の前記誤差拡散処理部が処理した結果を併せ、前記分割画像が備える階調値未満の階調値を有する処理済みデータを出力する出力部とを備える。ここで、前記ｎ個の誤差拡散処理部のうち、主走査方向に隣接する２つの分割画像にそれぞれ前記ハーフトーン処理を施す２つの誤差拡散処理部は、前記主走査方向手前に位置する一の分割画像のＮ＋１番目（Ｎは１以上の整数）のラスターについての前記ハートフトーン処理の少なくとも一部と、前記一の分割画像に隣接する他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の少なくとも一部とを、同時に行ない、前記主走査方向手前に位置する分割画像を処理する一の誤差拡散処理部は、Ｎ番目のラスターについて前記主走査方向端部まで処理したことにより、前記主走査方向端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めたとき、前記拡散誤差のうち、前記他の誤差拡散処理部が用いる拡散誤差である順方向拡散誤差であって、少なくともＮ番目のラスターについて確定した順方向拡散誤差を、前記他の誤差拡散処理部による前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の開始より以前に、前記他の誤差拡散処理部に受け渡し、前記他の誤差拡散処理部は、前記一の誤差拡散処理部から前記一の分割画像のＮ番目のラスターにおける前記確定した順方向拡散誤差を受け取った後で、前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理を開始し、前記主走査方向とは逆方向の端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めた後で、前記拡散誤差のうち、前記一の誤差拡散処理部が前記一の分割画像のＮ＋１番目のラスターについての前記ハーフトーン処理において用いる拡散誤差である逆方向拡散誤差のうち、少なくともＮ＋１番目のラスターに関して確定した逆方向拡散誤差を、前記一の誤差拡散処理部による前記Ｎ＋１番目のラスターについての前記ハーフトーン処理が前記主走査方向端部に至るまでに受け渡すものとしてよい。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態の印刷装置としてのプリンターの概略構成図である。
【図２】プリンターにおける印刷処理の流れを示すフローチャートである。
【図３】画像の分割の様子とＥＤユニットとの関係を示す説明図である。
【図４】１つのＥＤユニットが実施するハーフトーン処理を示すフローチャートである。
【図５】誤差拡散法処理の一例を示すフローチャートである。
【図６】誤差拡散法処理において、誤差拡散マトリクスに定められた重み付けで階調誤差を周辺画素に拡散する様子を示す説明図である。
【図７】分割画像間で生じた拡散誤差を受けた渡す処理の概要を示す説明図である。
【図８】Ｒ端部誤差入力処理（ステップＳ３００）の詳細を示すフローチャートである。
【図９】Ｒ端部誤差出力処理（ステップＳ７００）の詳細を示すフローチャートである。
【図１０】分割画像の所定のラスター右端での誤差拡散法処理により生じた拡散誤差のやり取りの一例を示す説明図である。
【図１１】Ｌ端部誤差入力処理（ステップＳ４００）の詳細を示すフローチャートである。
【図１２】Ｌ端部誤差出力処理（ステップＳ６００）の詳細を示すフローチャートである。
【図１３】分割画像の所定のラスター左端での誤差拡散法処理より生じた拡散誤差のやり取りの一例を示す説明図である。
【図１４】複数のＥＤユニット間で個別に入力部、出力部とデータをやり取りする構成を例示する説明図である。
【図１５】複数のＥＤユニット間で共通の入出力部を用いてデータをやり取りする構成を例示する説明図である。
【図１６】複数のＥＤユニット間で転送路を用いてデータをやり取りする構成を例示する説明図である。
【図１７】複数のＥＤユニット間で共通の入出力部と転送路を用いてデータをやり取りする構成を例示する説明図である。
【図１８】複数のＥＤユニット間同士の拡散誤差のやり取りを転送路を用いて行なう構成を例示する説明図である。
【図１９】複数のＥＤユニット間同士の拡散誤差のやり取りおよびハーフトーン処理済みのデータ出力も転送路を用いて行なう構成を例示する説明図である。
【図２０】誤差拡散をブロック間で行なう手法を例示する説明図である。
【発明を実施するための形態】
【０００９】
Ａ．第１実施形態：
（１）ハードウェア構成：
図１は、第１実施形態としての画像処理装置を含むプリンター２０の概略構成図である。プリンター２０は、双方向印刷を行なうシリアル式インクジェットプリンタであり、図示するように、プリンター２０は、紙送りモータ７４によって印刷媒体Ｐを搬送する機構と、キャリッジモータ７０によってキャリッジ８０をプラテン７５の軸方向に往復動させる機構と、キャリッジ８０に搭載された印刷ヘッド９０を駆動してインクの吐出及びドット形成を行なう機構と、これらの紙送りモータ７４，キャリッジモータ７０，印刷ヘッド９０、メモリカードスロット９８及び操作パネル９９との信号のやり取りを司る制御ユニット３０とから構成されている。
【００１０】
キャリッジ８０をプラテン７５の軸方向に往復動させる機構は、プラテン７５の軸と平行に架設され、キャリッジ８０を摺動可能に保持する摺動軸７３と、キャリッジモータ７０との間に無端の駆動ベルト７１を張設するプーリ７２等から構成されている。
【００１１】
キャリッジ８０には、カラーインクとして、シアンインクＣ、マゼンタインクＭ、イエロインクＹ、ブラックインクＫ、ライトシアンインクＬｃ、ライトマゼンタインクＬｍをそれぞれ収容したカラーインク用のインクカートリッジ８２〜８７が搭載される。キャリッジ８０の下部の印刷ヘッド９０には、上述の各色のカラーインクに対応するノズル列が形成されている。キャリッジ８０にこれらのインクカートリッジ８２〜８７を上方から装着すると、各カートリッジから印刷ヘッド９０へのインクの供給が可能となる。
【００１２】
制御ユニット３０は、ＣＰＵ４０や、ＲＯＭ４２、ＲＡＭ６０がバスで相互に接続されて構成されている。ＲＯＭ４２に記憶されたプログラムをＲＡＭ６０に展開し、ＣＰＵ４０が、このブログラムを実行することにより、プリンター２０の動作全般を制御する。ＣＰＵ４０は、制御プログラムを実行することにより、入力部４１、画像処理部５０、印刷部４６としても機能する。このうち、入力部４１は、メモリカードスロット９８に装着されたメモリカードＭＣから、画像データを読込んだり、操作パネル９９からの操作を読込むといった機能を実現する。また、印刷部４６は、上述した印刷ヘッド９０や各種モータなどを制御して、印刷媒体Ｐへの印刷を  行なう機能を実現する。
【００１３】
画像処理部５０は、誤差拡散法に従ったハーフトーン処理を行なう複数の誤差拡散ユニット（以下、ＥＤ１〜ＥＤｎユニットとも呼ぶ）５０１〜５０ｎを備える。これらの複数のＥＤ１〜ＥＤｎユニット５０１〜５０ｎは、誤差拡散法に従うハーフトーン処理をハードウェアにより行なうユニットとして個別に用意されている。もとよりＣＰＵ４０をマルチコアタイプのものとし、各コアに並列的に動作するハーフトーン処理を割り当てることで実現してもよい。各ＥＤ１〜ＥＤｎユニット５０１〜５０ｎは、共有メモリー５２を介して、直接的にデータ交換を行なうことが可能である。こうした共有メモリー５２としては、マルチコアタイプのＣＰＵではＬ２キャッシュなどを利用しても良い。ＥＤ１〜ＥＤｎユニット５０１〜５０ｎの動作については、図４、図５のフローチャートを用いて後で詳しく説明する。
【００１４】
ＲＯＭ４２は、制御プログラムの他、誤差拡散マトリクス４３等を記憶している。誤差拡散マトリクス４３は、後述する誤差拡散法に従うハーフトーン処理において、注目している画素において発生した誤差を注目画素の周辺の画素に格差する際の重み付け係数を集めたものである。誤差拡散マトリクス４３の実例は後で具体的に説明する。
【００１５】
ＲＡＭ６０は、上述した制御ブログラムの他、ＣＰＵ４０による演算に必要なデータを一時的な保存したりする目的で用いられる。こうしたデータとしては、以下のものがある。
［１］ハーフトーン処理される原画像の画像データＤｎ
［２］ハーフトーン処理された結果得られた印刷用のドットデータ
［３］着目画素の周辺の各画素に拡散される誤差を記憶する拡散誤差データ
このうち［３］については、各ＥＤ１〜ＥＤｎユニット５０１〜５０ｎ毎に必要になるため、ＲＡＭ６０には、第１誤差バッファ６０１〜第ｎ誤差バッファ６０ｎが用意されている。
【００１６】
制御ユニット３０には、メモリカードスロット９８が接続されており、メモリカードスロット９８に挿入したメモリカードＭＣから、入力部４１を介して、画像データＯＲＧを読み込んで入力することができる。本実施例においては、メモリカードＭＣから入力する画像データＯＲＧは、レッド（Ｒ）、グリーン（Ｇ）、ブルー（Ｂ）の３色の色成分からなるデータである。
【００１７】
以上のようなハードウェア構成を有するプリンター２０は、キャリッジモータ７０を駆動することによって、印刷ヘッド９０を印刷媒体Ｐに対して主走査方向に往復動させ、また、紙送りモータ７４を駆動することによって、印刷媒体Ｐを副走査方向に移動させる。制御ユニット３０は、キャリッジ８０が往復動する動き（主走査）や、印刷媒体の紙送りの動き（副走査）に合わせて、印刷データに基づいて適切なタイミングでノズルを駆動することにより、印刷媒体Ｐ上の適切な位置に適切な色のインクドットを形成する。こうすることによって、プリンター２０は、印刷媒体Ｐ上にメモリカードＭＣから入力したカラー画像を印刷することが可能となっている。本実施形態のプリンター２０は、印刷ヘッド９０が印刷媒体Ｐの幅方向、つまり主走査方向に往復動する、いわゆるシリアルプリンターの構成を採用しているが、プリンター２０の形式は、シリアルプリンターに限定されず、ラインプリンターやページプリンターであっても適用可能なことは勿論である。
【００１８】
（２）印刷処理および画像処理：
実施形態における印刷処理と、印刷処理において行なわれる画像処理との概要を説明する。図２は、プリンター２０における印刷処理の流れを示すフローチャートである。ここでの印刷処理は、ユーザが操作パネル９９等を用いて、メモリカードＭＣに記憶された所定の画像の印刷指示操作を行なうことで開始される。印刷処理を開始すると、ＣＰＵ４０は、まず、入力部４１の処理として、メモリカードスロット９８を介してメモリカードＭＣから印刷対象であるＲＧＢ形式の画像データＯＲＧを読み込んで入力する（ステップＳ１１０）。
【００１９】
画像データＯＲＧを入力すると、ＣＰＵ４０は、ＲＯＭ４２に記憶されたルックアップテーブル（図示せず）を参照して、画像データＯＲＧについて、ＲＧＢ形式をＣＭＹＫＬｃＬｍ形式に色変換する（ステップＳ１２０）。色変換処理は周知のものなので、その説明は省略する。
【００２０】
その後、画像を分割する処理を行なう（ステップＳ１３０）。画像の分割は、本実施形態では、図３に例示するように、主走査方向に３つの領域に分割するものとした。もとより分割の数は２以上であれば、いくつでもよい。画像の分割は、画像処理部５０が備えるＥＤユニットの数に応じて行なわれるが、ＥＤユニットの数より少ない数に分割しても差し支えない。以下の説明では、分割された画像を、画像１、画像２、画像３と呼ぶことがある。これに対応して、画像処理部５０は、同時に動作可能な３個のＥＤ１〜ＥＤ３ユニット５０１〜５０３を用いる。各画像や各ＥＤユニットは、主走査方向に何番目のユニットであるかをサフィックスｉで、表わすものとする。従って、分割画像やＥＤユニットは、どの分割画像か、あるいはどのユニットかを特定しない場合には、画像ｉやＥＤｉユニット５０ｉのように表記することがある。また、画像ｉやＥＤｉユニット５０ｉを、単に画像i-1 、画像i 、画像i+1 あるいはＥＤi-1 、ＥＤi、ＥＤi+1 のように表記して、隣接する画像やユニットの関係を示す場合がある。ここで、二つのＥＤユニットとして、ＥＤi-1 、ＥＤiを取り上げると、ＥＤi-1 が、「一の誤差拡散処理部」に相当し、ＥＤiが、「他の誤差拡散処理部」に相当する。また、二つのＥＤユニットとして、ＥＤi 、ＥＤi+1 を取り上げると、ＥＤi が、「一の誤差拡散処理部」に相当し、ＥＤi+1 が、「他の誤差拡散処理部」に相当する。
【００２１】
説明の便を図って、この実施形態では、図３に示したように、元画像は主走査方向に３ａ個、副走査方向にｂ個の画素から構成されているものとする。ａ，ｂは、いずれも２以上の整数である。従って、画像１、２、３は、いずれも、横縦ａ×ｂ個の画素から構成されている。この分割された画像ｉの画素は、主走査方向をｘ方向、副走査方向をｙ方向として、座標（ｘ，ｙ）により特定可能である。ｘの範囲は、画像１については値１〜ａ、画像２については値１＋ａ〜２ａ、画像３については値２ａ＋１〜３ａ、となるが、各画像ｉに着目すれば、いずれもｘ方向にａ個の画素が並んでいることになることから、以下の説明では、ＥＤｉユニット５０ｉが処理する際の画素は、ｘ方向に１〜ａの座標を指定するものとして説明する。ｙ方向については、１〜ｂの座標が指定される。従って、各画像ｉにおいて、処理が開始される左上の画素ＯＰ１〜ＯＰ３は、いずれもＯＰｉ（１，１）のように指定される。なお、着目画素と明記するか否かにかかわらず、ハーフトーン処理の対象となっている画素については、画素ＯＰのように、記載し、それら以外の画素については、単に画素（ｘ，ｙ）のように、座標を用いて記載する場合がある。こうした画像の分割に応じて、各ＥＤｉは、画素ＯＰ（１，１）を開始点として、ここから主走査方向にａ個の画素を処理し、副走査方向にｂ個の画素（ラスター）を処理する。後述する誤差拡散処理は、このラスターに沿って、ｘ座標が次第に大きくなる方向に実施される。この方向を、以下、主走査方向あるいは順方向と呼ぶことがある。また順方向とは反対向きの方向を、以下、逆方向と呼ぶことがある。
【００２２】
画像の分割（ステップＳ１３０）を行なった後、ＣＰＵ４０は、画像処理部５０の処理として、分割された各画像ｉ毎にＥＤｉユニット５０ｉを起動し、画像データを、誤差拡散法を用いて、各色のドットのＯＮ／ＯＦＦを画素毎に定めたドットデータに変換する誤差拡散処理を行なう（ステップＳ２００）。ここでの誤差拡散処理の詳細については後述する。なお、本明細書では、「誤差拡散処理」は、ドットのＯＮ／ＯＦＦの２値化処理に限らず、大小ドットや大中小ドットなどのＯＮ／ＯＦＦなど、３以上の階調値への多値化処理を含んだ階調数変換（低減）処理一般としても実現可能である。また、ステップＳ２００に供する画像データは、解像度変換処理やスムージング処理などの画像処理が施されたものであってもよい。
【００２３】
誤差拡散処理（ステップＳ２００）を分割した各画像ごとに行なうと、ＣＰＵ４０は、分割された画像毎に生成されたドットデータを組み合わせて、元の画像に対応したドットデータとした上で、これを並び替えるインタレース処理（ステップＳ１５０）を行なう。プリンター２０のノズル配置や紙送り量などに合わせは、ラスター単位のドットデータの並びと必ずしも一致しないからである。印刷ヘッド９０の１回の主走査単位で印画するドットパターンデータに並び替えた後、ＣＰＵ４０は、印刷部４６の処理として、印刷ヘッド９０、キャリッジモータ７０、モータ７４等を駆動させて、印刷媒体Ｐ上への各色インクドットの形成、つまり印刷を実行する（ステップＳ１６０）。
【００２４】
（３）ハーフトーン処理：
各ＥＤｉユニット５０ｉが実行する誤差拡散処理（ステップＳ２００）の詳細について、図４以下を用いて説明する。この誤差拡散処理は、分割した画像毎に、つまり並列に実行される。各ＥＤｉユニット５０ｉは、図３に示したように、分割された画像の左上の画素ＯＰｉを開始点とし、主走査方向の座標をｘ、副走査方向の座標をｙとして、順次処理を行なう。但し、以下に説明するように、各ＥＤｉユニット５０ｉの開始タイミングは同一ではない。第１実施形態では、ＥＤ１ユニット５０１（以下、簡略にＥＤ１とも言う）が最初の１ラスター（ｙ＝１）についての全画素（ｘ＝１〜ａ）の処理を終えて、次の１ラスター（ｙ＝２）の処理に入るのと並行して、隣接するＥＤ２ユニット５０２（以下、簡略にＥＤ２とも言う）が最初の１ラスター（ｙ＝１）の処理を開始し、このＥＤ２が最初の１ラスター（ｙ＝１）についての全画素（ｘ＝ａ＋１〜２ａ）の処理を終えて、次のラスター（ｙ＝２）の処理に入るのと並行して、から、隣接するＥＤ３ユニット５０３（以下、簡略にＥＤ３もと言う）が最初の１ラスター（ｙ＝１）の処理を開始する。
【００２５】
以下の説明では、副走査方向ｙの何番目のラスターにおいて、主走査方向ｘの何番目の画素を着目画素として処理を行なうと言った場合、着目画素ＯＰ（ｘ，ｙ）のように、表記する。従って、着目画素ＯＰ（ｘ，ｙ）と、同じラスターにおいて主走査方向に隣接する画素は、画素ＯＰ（ｘ＋１，ｙ）と表記し、副走査方向に隣接する画素は、画素ＯＰ（ｘ，ｙ＋１）と表記する。また、何番目のラスターであるかを問わない場合には、Ｎ番目のラスターとも呼ぶ。このＮ番目のラスターに副走査方向に隣接するラスターは、Ｎ＋１番目のラスターと呼ぶ。
【００２６】
図４に示した各ＥＤｉ（ｉ＝１〜３）がハーフトーン処理を開始すると、まず、注目画素の位置を示す変数ｘ，ｙを共に値１に初期化する（ステップＳ２１０）。次に、入力部４１を介して対応する分割画像ｉから１ラスター分の画像データを入力する処理を行なう（ステップＳ２２０）。ここで、１ラスター分の画像データとは、各分割画像ｉに対応する１ラスター分のデータであり、各ＥＤｉにとっては、ｘ＝１〜ａまでの画素の各色の階調値を示すデータである。これを着目画素の階調値Ｄｎ（ｘ，ｙ）と呼ぶ。なお、位置に関係なく階調値を扱う場合には、単に階調値Ｄｎと呼ぶことがある。各ＥＤｉは、読込んだ１ラスター分の画像データをＲＡＭ６０の所定の領域に格納する。
【００２７】
次に、各ＥＤｉは、Ｒ端部誤差入力処理（ステップＳ３００）とＬ端部誤差入力処理（ステップＳ４００）とを順次実行する。Ｒ端部誤差入力処理（ステップＳ３００）は、各ＥＤｉが分割画像ｉの右端（ｘ＝ａ）の近傍、つまり右端付近で処理した結果発生した誤差を、そのＥＤｉの右側に位置するＥＤi+1 が受け取る処理である。ここで「右端」とは、各分割画像ｉにおいて、誤差拡散処理が行なわれるラスターの主走査方向の端部を言う。右端は、「Ｒ端部」とも言う。他方、Ｌ端部誤差入力処理（ステップＳ４００）は、各ＥＤｉが分割画像ｉの左端（ｘ＝０）の近傍、つまり左端付近で処理した結果発生した誤差を、そのＥＤｉの左側に位置するＥＤi-1 が受け取る処理である。ここで「左端」とは、各分割画像ｉにおいて、誤差拡散処理が行なわれるラスターの主走査方向逆方向側の端部を言う。左端は、「Ｌ端部」とも言う。これらの処理は、全ての着目画素ＯＰ（ｘ，ｙ）に対する処理の際に行なわれるのではなく、所定のタイミングで行なわれる。そのタイミングも含めて、これらの処理は、後で詳述する。
【００２８】
続いて、ＥＤｉは、誤差拡散法処理（ステップＳ５００）とこの処理によるハーフトーン結果の出力処理（ステップＳ２３０）とを実行する。誤差拡散法処理（ステップＳ５００）の詳細を図５に示した。誤差拡散法処理を開始すると、各ＥＤｉは、先に読込んでＲＡＭ６０に記憶した着目画素の階調値Ｄｎ（ｘ，ｙ）を入力する（ステップＳ５１０）。次にこの着目画素の階調値Ｄｎ（ｘ，ｙ）に、拡散誤差ｅｒｂ（ｘ，ｙ）を加えて、階調値補正値ＤＣｎを求める処理を行なう（ステップＳ５２０）。拡散誤差ｅｒｂ（ｘ，ｙ）とは、近傍の誤差拡散法処理済み画素から着目画素ＯＰ（ｘ，ｙ）に拡散されてきた誤差を順次累積して記憶したものである。拡散誤差ｅｒｂ（ｘ，ｙ）は、誤差バッファ６０ｉに記憶されている。この拡散誤差ｅｒｂ（ｘ，ｙ）についても後で説明する。
【００２９】
階調値補正値ＤＣｎを求めた後、次のこの階調値補正値ＤＣｎと閾値ＴＨｎとを比較する（ステップＳ５３０）。ここで閾値ＴＨｎは、着目画素の階調値Ｄｎが値０〜２５５の範囲をとるのであれば、その中央値１２８を用いることができる。なお、閾値ＴＨｎを画像データＤｎの関数として求めることも差し支えない。
【００３０】
階調値補正値ＤＣｎと閾値ＴＨｎとを比較した結果、階調値補正値ＤＣｎが閾値ＴＨｎ以上であれば、着目画素にドットを形成するとして、ハーフトーン結果を「ドットＯＮ」とし（ステップＳ５４０）、結果値ＲＳＴに値２５５を設定する（ステップＳ５５０）。他方、階調値補正値ＤＣｎと閾値ＴＨｎとを比較した結果、階調値補正値ＤＣｎが閾値ＴＨｎ未満であれば、着目画素にドットを形成しないとして、ハーフトーン結果を「ドットＯＦＦ」とし（ステップＳ５６０）、結果値ＲＳＴに値０を設定する（ステップＳ５７０）。その後、誤差演算を行なう（ステップＳ５８０）。誤差演算とは、階調誤差Ｅｄ（ｘ，ｙ）を、階調値補正値ＤＣｎと結果値ＲＳＴとの差分として求める演算である。その後、演算した階調誤差Ｅｄ（ｘ，ｙ）を着目画素の周辺画素に拡散する誤差拡散処理（ステップＳ５９０）を行なう。
【００３１】
これらの誤差拡散法処理の一例を図６に示した。図６では、着目した画素の階調補正値が値１５９の場合と値９６の場合とを示している。このとき、閾値ＴＨｎ（１２８）と比較して（ステップＳ５３０）、ドットのＯＮ・ＯＦＦを決定すると、階調補正値１５９の画素は、ドットを形成すると判断され（ステップＳ５４０）、結果値ＲＳＴに値２５５が設定される（ステップＳ５５０）。結果値ＲＳＴを値２５５に設定するのは、ドットが形成された場合、その画素に対応した印刷媒体Ｐ上の位置の階調値が最大（２５５）になると擬制しているからである。同様に、階調補正値９６の画素は、ドットを形成しないと判断され（ステップＳ５６０）、結果値ＲＳＴに値０が設定される（ステップＳ５７０）。結果値ＲＳＴを値０に設定するのは、ドットが形成されない場合、その画素に対応した印刷媒体Ｐ上の位置の階調値は、印刷媒体Ｐの地色、つまり一般に白色に対応して最小（０）になると擬制しているからである。実際に形成されるドットの大きさやインクの濃度などに応じて、結果値ＲＳＴは適宜設定される。
【００３２】
上記条件で、階調誤差Ｅｄ（ｘ，ｙ）を求めると、ドットを形成する場合は、
Ｅｄ（ｘ，ｙ）＝１５９−２５５＝−９６
ドットを形成しない場合は、
Ｅｄ（ｘ，ｙ）＝９６−０＝９６
となる（ステップＳ５８０）。そこで、この階調誤差Ｅｄ（ｘ，ｙ）を、着目画素の周辺の画素に拡散する（ステップＳ５９０）。周辺の画素への拡散は、図６に示す誤差拡散マトリクス４３に記憶された重み付け係数に従って行なわれる。図６に示した例では、重み付け係数は、着目画素＊の周辺の７つの画素について規定されており、着目画素ＯＰ（ｘ，ｙ）に対して画素（ｘ＋１，ｙ）と画素（ｘ，ｙ＋１）では１／４であり、画素（ｘ＋２，ｙ）と画素（ｘ＋１，ｙ＋１）と画素（ｘ−１，ｙ＋１）では１／８であり、画素（ｘ＋２，ｙ＋１）と画素（ｘ−２，ｙ＋１）では１／１６である。従って、階調誤差Ｅｄが±９６であれば、各画素に拡散される誤差は、図示するように、重み付け係数が１／４であれば±２４となり、重み付け係数が１／８であれば±１２となり、重み付け係数が１／１６であれば±６となる。これらの値が、各画素への拡散誤差ｅｒｂとして、ＲＡＭ６０に用意された第ｉ誤差バッファ６０ｉに加算して格納される。具体的には、以下の式（１）に従って求められた拡散誤差ｅｒｂが、ＲＡＭ６０に用意された誤差バッファに格納される。
ｅｒｂ（ｘ＋１，ｙ    ）＝ｅｒｂ（ｘ＋１，ｙ    ）＋Ｅｄ×（１／４）
ｅｒｂ（ｘ＋２，ｙ    ）＝ｅｒｂ（ｘ＋２，ｙ    ）＋Ｅｄ×（１／８）
ｅｒｂ（ｘ−２，ｙ＋１）＝ｅｒｂ（ｘ−２，ｙ＋１）＋Ｅｄ×（１／１６）
ｅｒｂ（ｘ−１，ｙ＋１）＝ｅｒｂ（ｘ−１，ｙ＋１）＋Ｅｄ×（１／８）
ｅｒｂ（ｘ    ，ｙ＋１）＝ｅｒｂ（ｘ    ，ｙ＋１）＋Ｅｄ×（１／４）
ｅｒｂ（ｘ＋１，ｙ＋１）＝ｅｒｂ（ｘ＋１，ｙ＋１）＋Ｅｄ×（１／８）
ｅｒｂ（ｘ＋２，ｙ＋１）＝ｅｒｂ（ｘ＋２，ｙ＋１）＋Ｅｄ×（１／１６）
… （１）
【００３３】
この式（１）から分るように、本実施形態では、階調誤差Ｅｄは、着目画素ＯＰ（ｘ，ｙ）と同じラスターｙとその一段下のラスターｙ＋１とに拡散される。このため、各ＥＤｉ用に用意された第ｉ誤差バッファ６０ｉの大きさは、２つのラスター分の拡散誤差を記憶できれば足りる。着目画素と同じラスターｙの各画素に累積される拡散誤差ｅｒｂ（ｘ，ｙ）を記憶する領域を、第１領域誤差バッファと呼び、着目画素の次のラスターｙ＋１の各画素に累積される拡散誤差ｅｒｂ（ｘ，ｙ＋１）を記憶する領域を、第２領域誤差バッファと呼ぶ。１つのラスターの処理が終れば、第１領域誤差バッファの内容は全て使い尽くされるので、第２領域誤差バッファｅｒｂを第１領域誤差バッファとし、第１領域誤差バッファを全て値０にリセットした上で、第２領域誤差バッファｅｒｂ用に置き換えれば良い。この処理を、誤差バッファの更新処理と呼ぶ。
【００３４】
各ラスターの端部で上記式（１）による階調誤差Ｅｄの拡散を行なうと、誤差の拡散範囲は、主走査方向の画素ＯＰ（１，ｙ）からＯＰ（ａ，ｙ）までの範囲を超える。この範囲は、誤差拡散マトリクス４３の大きさによって異なるが、図６に示した誤差拡散マトリクスであれば、ラスターの右端においては４画素分、ラスターの左端においては２画素分となる。１つの分割画像において主走査方向に処理される画素のｘ座標が１〜ａであることから、ラスターの右端において必要となる余剰の範囲のうち、Ｎ番目のラスターの画素からの拡散誤差であって、第１領域誤差バッファに記憶されるものを、拡散誤差ｅｒｂ（ａ＋１，ｙ）、ｅｒｂ（ａ＋２，ｙ）と表記し、第２領域誤差バッファに記憶されたものを、拡散誤差ｅｒｂ（ａ＋１，ｙ＋１）、ｅｒｂ（ａ＋２，ｙ＋１）と表記する。他方、ラスターの左端において必要となる余剰の範囲のうち、Ｎ番目のラスターの画素からの拡散誤差であって、第２領域誤差バッファに記憶されたものを、拡散誤差ｅｒｂ（−２，ｙ＋１），ｅｒｂ（−１，ｙ＋１）と表記する。ラスターの左端では、着目画素より左側の同じラスターに拡散される誤差は存在しないので、第１領域誤差バッファには余剰の範囲を確保する必要がない。この範囲の拡散誤差の取扱いについては、後で詳しく説明する。
【００３５】
着目画素が移動していくことにより、図６に示した誤差拡散マトリクスの例では、誤差バッファ内の特定の画素に対応する記憶領域への拡散誤差の加減算は、初期値を０として、各着目画素毎に計７回行なわれ、最終的な値が定められる。
【００３６】
上述した誤差拡散法処理（ステップＳ５００）を行なった後、閾値ＴＨｎとの比較により決定されたドットのＯＮ・ＯＦＦをハーフトーン処理の結果として出力する（図４：ステップＳ２３０）。ハーフトーン処理の結果は、ＲＡＭ６０の所定の領域に記憶される。
【００３７】
その後、Ｌ端部誤差出力処理（ステップＳ６００）とＲ端部誤差出力処理（ステップＳ７００）とを行なう。Ｌ端部誤差出力処理（ステップＳ６００）およびＲ端部誤差出力処理（ステップＳ７００）は、Ｌ端部誤差入力処理（ステップＳ４００）およびＲ端部誤差入力処理（ステップＳ３００）の前提となる処理である。そこで、これらの処理も、Ｒ端部誤差入力処理（ステップＳ３００）およびＬ端部誤差入力処理（ステップＳ４００）と共に後でまとめて説明する。
【００３８】
その後、着目画素の主走査方向の座標ｘを値１だけインクリメントし（ステップＳ２４０）、座標ｘが値ａより大きい、つまり１つのラスターについての誤差拡散処理が右端まで到達したかを判断する（ステップＳ２５０）。主走査方向の座標ｘが値ａを越えていなければ、１ラスター処理が未了であると判断し、ステップＳ４００に戻って、上述した処理（ステップＳ４００〜Ｓ２５０）の処理を、着目画素が主走査方向端部（右端）に至るまで繰り返す。
【００３９】
着目画素が右端に至ったと判断すれば（ステップＳ２５０）、各ＥＤｉは、座標ｘを値１に初期化すると共に、副走査方向の座標ｙを値１だけインクリメントし（ステップＳ２６０）、座標ｙが値ｂより大きい、つまり１つの分割画像についての誤差拡散処理が最後のラスターまで到達したかを判断する（ステップＳ２７０）。副走査方向の座標ｙが値ｂを越えていなければ、１つの分割画像の処理が未了であると判断し、ステップＳ２２０に戻って、１ラスター分の画像データの入力から上述した処理（ステップＳ２２０〜Ｓ２７０）の処理を、処理が分割画像の下端に至るまで繰り返す。処理が分割画像の下端に至れば（ステップＳ２７０：ＹＥＳ）、ＥＮＤに抜けて、ＥＤによるハーフトーン処理を終了する。
【００４０】
（４）ＥＤユニット間の誤差のやり取り：
次に、上述したＥＤによるハーフトーン処理（図４）において行なわれ各ＥＤユニット間の誤差の受け渡しについて説明する。各ＥＤユニット間での誤差の受け渡しには、次の２種類がある。一つは、ＥＤi-1 の右端で生じた階調誤差に基づく拡散誤差を、主走査方向に隣接するＥＤｉに受け渡すものである。この場合の誤差の受け渡しは、ＥＤi-1 によるＲ端部誤差出力処理（ステップＳ７００）により誤差を共有メモリー５２に出力し、これをＥＤｉによるＲ端部誤差入力処理（ステップＳ３００）により入力することにより実現される。
【００４１】
もうひとつの誤差の受け渡しは、ＥＤｉの左端で生じた階調誤差に基づく拡散誤差を、主走査方向逆向きに隣接するＥＤi-1 に受け渡すものである。この場合の誤差の受け渡しは、ＥＤｉによるＬ端部誤差出力処理（ステップＳ６００）により誤差を共有メモリー５２に出力し、これをＥＤi-1 によるＬ端部誤差入力処理（ステップＳ４００）により入力することにより実現される。
【００４２】
これらの誤差の受け渡しの概要を、図７を用いて説明する。図７では、分割画像１を誤差拡散処理するＥＤ１と分割画像２を誤差拡散処理するＥＤ２との間で誤差を受け渡す場合を例示している。誤差拡散処理を行なうＥＤ１が、座標ｙのラスター上において着目画素を一つずつ主走査方向に移動しながら、誤差拡散法処理（ステップＳ５００）を実施し、右端（ａ，ｙ）に至った場合を考える。着目画素が分割画像の右端に至ると、右端（ａ，ｙ）より主走査方向側には、ドットデータが形成されるべき画素は存在しないが、誤差拡散法処理（ステップＳ５００）では、階調誤差Ｅｄは、着目画素ＯＰ（ａ，ｙ）の周辺に、誤差拡散マトリクス（図６参照）により規定された重み付けで拡散される。分割画像の右端では、着目画素ＯＰ（ａ，ｙ）よりも主走査方向側の４つの画素に対応する範囲に誤差が拡散される。
【００４３】
着目画素ＯＰ（ａ，ｙ）より主走査方向右側に拡散されるべき拡散誤差は、分割画像１では参照されることがないが、上述したように、４つの画素に対応する範囲であって、第１，第２領域誤差バッファの拡張された領域に、拡散誤差ｅｒｂ（ａ＋１，ｙ）、ｅｒｂ（ａ＋２，ｙ）、ｅｒｂ（ａ＋１，ｙ＋１）、ｅｒｂ（ａ＋２，ｙ＋１）として保存される。もとより、この分割画像１の領域外への拡散誤差は、着目画素ＯＰ（ａ−１、ｙー１）、（ａ，ｙ−１）、（ａ−１，ｙ）の時にも発生するから、第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋１，ｙ）、ｅｒｂ（ａ＋２，ｙ）、ｅｒｂ（ａ＋１，ｙ＋１）、ｅｒｂ（ａ＋２，ｙ＋１）は、これらを累積したものである。着目画素が、ｙラスターの右端（ａ，ｙ）まで至っていれば、拡散誤差ｅｒｂ（ｘ＋１，ｙ）、ｅｒｂ（ａ＋２，ｙ）、ｅｒｂ（ａ＋１，ｙ＋１）、ｅｒｂ（ａ＋２，ｙ＋１）は、ｙラスターから拡散される誤差としては、確定している。
【００４４】
これらの範囲に保存された確定した拡散誤差は、共有メモリー５２を介して、隣接するＥＤ２に転送される。これらの範囲の拡散誤差が保存される共有メモリー５２上の領域を、共有バッファｅｒＲ００，ｅｒＲ０１，ｅｒＲ１０，ｅｒＲ１１と呼ぶ。この領域を、図７では、右斜め線のハッチングを施した。ｙラスターの主走査方向右端での拡散誤差を、共有メモリー５２の共有バッファｅｒＲ００，ｅｒＲ０１，ｅｒＲ１０，ｅｒＲ１１に出力する処理が、Ｒ端部誤差出力処理（ステップＳ７００）に相当する。本実施形態では、後述する様に、着目画素が、ｙラスターの右端一つ手前の画素ＯＰ（ａ−１，ｙ）に至った時点で求められた拡散誤差ｅｒｂ（ａ＋１，ｙ）、ｅｒｂ（ａ＋１，ｙ＋１）を共有メモリー５２の共有バッファに出力し、更に、着目画素が、ｙラスターの右端の画素ＯＰ（ａ，ｙ）に至った時点で求められた拡散誤差ｅｒｂ（ａ＋１，ｙ）、ｅｒｂ（ａ＋２，ｙ）、ｅｒｂ（ａ＋１，ｙ＋１）、ｅｒｂ（ａ＋２，ｙ＋１）を共有メモリー５２の誤差バッファに出力し、誤差バッファ上で加算処理を行なって、ｙラスターから拡散される拡散誤差を確定させるものとした。もとより、着目画素が、ｙラスターの右端（ａ，ｙ）に至るまでは拡散誤差を仮バッファに記憶しておき、着目画素がｙラスターの右端（ａ，ｙ）まで至って全ての拡散誤差が確定してから、Ｒ端部誤差出力処理をまとめて行なうものとしてもよい。
【００４５】
こうして、ＥＤ１により共有メモリー５２の共有バッファｅｒＲ００，ｅｒＲ０１、ｅｒＲ１０、ｅｒＲ１１に出力された拡散誤差は、本来、分割画像２の着目画素ＯＰ（１，ｙ）、（２，ｙ）、（１，ｙ＋１）、（２，ｙ＋１）での誤差拡散法処理において参照されるべきものである。そこで、ＥＤ２では、共有メモリー５２の共有バッファｅｒＲ００の値を拡散誤差ｅｒｂ（１，ｙ）として、共有バッファｅｒＲ１０の値を拡散誤差ｅｒｂ（２，ｙ）として、共有バッファｅｒＲ０１の値を拡散誤差ｅｒｂ（１，ｙ＋１）として、共有バッファｅｒＲ１１の値を拡散誤差ｅｒｂ（２，ｙ＋１）として、それぞれＥＤ２における誤差バッファ６０ｉに加算する。この処理が、Ｒ端部誤差入力処理（ステップＳ３００）に相当する。分割画像２、３を処理するＥＤ２、ＥＤ３が、Ｎ番目のラスターについて行なうＲ端部誤差入力処理（ステップＳ３００）は、分割画像１、２にしてＥＤ１、ＥＤ２がＮ番目のラスターについて行なうＲ端部誤差出力処理（ステップＳ７００）の完了後に実行可能となる。
【００４６】
次に、Ｌ端部誤差の入力および出力について説明する。分割画像２、３における主走査方向左端の画素ＯＰ（１，ｙ）について誤差拡散法処理（図５）が行なわれると、図６に示したように、着目画素ＯＰ（１，ｙ）より主走査方向逆方向にも階調誤差は拡散される。分割画像１では、この階調誤差は拡散されても対応する画像は存在しないが、分割画像２、３では、この階調誤差は、隣接する分割画像１、２の右端の画素に本来は拡散されるべきものである。既に説明した様に、第１領域誤差バッファには、分割画像の左端の画素ＯＰ（１，ｙ）における誤差拡散法処理により生じた階調誤差を左端の画素ＯＰ（１，ｙ）より主走査方向逆方向側、つまり分割画像の外側に拡散する際の拡散誤差を記憶する領域が確保されている。この第１領域誤差バッファ上に記憶される拡散誤差が、拡散誤差ｅｒｂ（−２，ｙ）、ｅｒｂ（−１，ｙ）である。
【００４７】
第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（−２，ｙ）、ｅｒｂ（−１，ｙ）は、共有メモリー５２を介して、隣接するＥＤ１、２に転送される。これらの範囲の拡散誤差が保存される共有メモリー５２上の領域を、共有バッファｅｒＬ（−２）、ｅｒＬ（−１）と呼ぶ。この領域を、図７では、縦線のハッチングを施した。ｙラスターの主走査方向左端での拡散誤差を、共有メモリー５２の共有バッファｅｒＬ（−２）、ｅｒＬ（−１）に出力する処理が、Ｌ端部誤差出力処理（ステップＳ６００）に相当する。着目画素が、ｙラスター上の左端（１，ｙ）にある場合には、第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（−２，ｙ）、ｅｒｂ（−１，ｙ）のうち、拡散誤差ｅｒｂ（−２，ｙ）は確定しているが、拡散誤差ｅｒｂ（−１，ｙ）は、まだ確定していない。着目画素が、ｙラスター上の左端（１，ｙ）から隣の画素ＯＰ（２，ｙ）となり、誤差を拡散する処理が終った時点で、拡散誤差ｅｒｂ（−１，ｙ）は確定する。つまり、画素ＯＰ（１，ｙ）の誤差拡散法処理が終った時点では拡散誤差ｅｒｂ（−２，ｙ）が、画素ＯＰ（２，ｙ）の誤差拡散法処理が終った時点では拡散誤差ｅｒｂ（−１，ｙ）が、それぞれ確定する。そこで、本実施形態では、着目画素が左端（１，ｙ）の場合、確定した拡散誤差ｅｒｂ（−２，ｙ）と共に、拡散誤差ｅｒｂ（−２，ｙ）を共有バッファに出力し、着目画素が隣接する画素ＯＰ（２，ｙ）に進んだ際には、誤差ｅｒｂ（−１，ｙ）を共有バッファに加算して書込むものとした。もとより、第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（−１，ｙ）を一旦仮のバッファに書込んでおき、値が確定してから、共有バッファｅｒＬ（−１）に書込む形でＬ端部誤差出力処理（ステップＳ６００）を行なうものとしても差し支えない。
【００４８】
こうして、ＥＤ２により共有メモリー５２の共有バッファｅｒＬ（−２）、ｅｒＬ（−１）に出力された拡散誤差は、図７に示したように、分割画像１の着目画素ＯＰ（ａ−１，ｙ＋１）、（ａ，ｙ＋１）での誤差拡散法処理において参照されるべきものである。そこで、ＥＤ１では、この拡散誤差を共有メモリー５２から、第２領域誤差バッファに、拡散誤差ｅｒｂ（ａ−１，ｙ＋１）、ｅｒｂ（ａ，ｙ＋１）として入力する。この処理が、Ｌ端部誤差入力処理（ステップＳ４００）に相当する。分割画像２、３にしてＥＤ２、３がＮ番目のラスター上の着目画素について行なう誤差拡散法処理によりＮ＋１番目のラスター上の画素へのＬ端部誤差出力処理（ステップＳ６００）は、分割画像１、２を処理するＥＤ１、２が、Ｎ＋１番目のラスターについて行なうＬ端部誤差入力処理（ステップＳ４００）の実施までに完了していればよい。換言すれば、分割画像１、２に対するＥＤ１、２によるＬ端部誤差入力処理（ステップＳ４００）は、分割画像２、３に対するＥＤ２、３によるＬ端部誤差出力処理（ステップＳ６００）の完了後に実行可能となる。
【００４９】
これらの端部処理のうち、まずＲ端部誤差入力処理（ステップＳ３００）およびＲ端部誤差出力処理（ステップＳ７００）の詳細を、図８〜図１０を用いて説明する。図８は、Ｒ端部誤差入力処理（ステップＳ３００）の詳細を示すフローチャート、図９は、Ｒ端部誤差出力処理（ステップＳ７００）の詳細を示すフローチャートである。図４に示したハーフトーン処理では、Ｒ端部誤差入力処理（ステップＳ３００）は、誤差拡散法処理（ステップＳ５００）の実行に先立って実行される。図８に示した処理が開始されると、ＥＤｉは、まず順方向拡散誤差に相当するＲ端部誤差が共有メモリー５２の共有バッファｅｒＲ００，０１，１０，１１に用意されたかを判断する（ステップＳ３１０）。分割画像１を処理するＥＤ１では、ＥＤ１より主走査方向逆方向に隣接する分割画像は存在しないので、そもそもＲ端部誤差入力処理（ステップＳ３００）は実行されない。従って、ＥＤ１は、図４に示したハーフトーン処理のステップＳ４００以下を、直ちに実行する。
【００５０】
これに対して、分割画像２、３を処理するＥＤ２、３では、まず隣接するＥＤ１、２が共有メモリー５２の共有バッファｅｒＲ００，０１，１０，１１に、Ｒ端部誤差を書込んだかを判断する。この判断は、共有メモリー５２にＲ端部誤差の書込みの完了を示すフラグを準備し、前段のＥＤｉが、後述するＲ端部誤差出力処理（ステップＳ７００）を完了した際に、このフラグをセットするようにすれば、後段のＥＤi+1 は、Ｒ端部誤差の書込みの完了を、このフラグにより容易に判断することができる。Ｌ端部誤差の書き込みの完了も同様に行なうことができる。分割画像２、３を処理するＥＤ２、３は、前段のＥＤ１、２がＲ端部誤差を共有メモリー５２の共有バッファｅｒＲ００，０１，１０，１１に準備するまで、ステップＳ３１０の判断を繰り返し、待機する。
【００５１】
ＥＤ２、３がステップＳ３１０の判断を繰り返しているうちに、ＥＤ１は、ステップＳ４００以下の処理を繰り返す。具体的には、着目画素を主走査順方向に進めながら、誤差拡散法処理（ステップＳ５００）、ハーフトーン処理結果の出力（ステップＳ２３０）、Ｌ端部誤差出力処理（ステップＳ６００）とこれに続くＲ端部誤差出力処理（ステップＳ７００）を実行する。Ｒ端部誤差出力処理の詳細を図９に示した。Ｒ端部誤差出力処理（ステップＳ７００）では、ＥＤｉは、まず主走査方向のｘ座標が、ａ−１またはａであるか否かの判断を行なう（ステップＳ７１０）。ｘ座標が、ａ−１またはａでなければ、着目画素は、まだＲ端部誤差の出力処理を行なう位置にないとして、何も行なわずに「ＮＥＸＴ」に抜けて、Ｒ端部誤差出力処理（ステップＳ７００）を一旦終了する。
【００５２】
ステップＳ７１０の判断において、ｘ座標が、ａ−１であれば、第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋１，ｙ）、第２領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋１，ｙ＋１）を、共有メモリー５２の共有バッファｅｒＲ００，ｅｒＲ０１に書込む処理を行なう（ステップＳ７３５）。着目画素が、右端の１つ手前の画素ＯＰ（ａ−１，ｙ）なので、図６に示した誤差拡散マトリクスの大きさでは、隣接するＥＤｉ に転送される拡散誤差は、第１領域誤差バッファに記憶されている拡散誤差ｅｒｂ（ａ＋１，ｙ）、第２領域誤差バッファに記憶されている拡散誤差ｅｒｂ（ａ＋１，ｙ＋１）に限られるからである。ステップＳ７３５を実行した場合には、「ＮＥＸＴ」に抜けて本処理ルーチンを一旦終了する。
【００５３】
また、ｘ座標がａに等しければ、着目座標は、処理しているラスターの右端に至っているとして、第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋２，ｙ）、第２領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋２，ｙ＋１）を、共有メモリー５２の共有バッファｅｒＲ１０，ｅｒＲ１１に書込む（ステップＳ７２０）。第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋２，ｙ）、および第２領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋２，ｙ＋１）は、いずれもラスターｙ上の右端の画素を処理したことで生じた拡散誤差として確定しているとして、ＥＤ１からＥＤ２に引き渡される。続いて、第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋１，ｙ）、第２領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋１，ｙ＋１）を、共有メモリー５２の共有バッファｅｒＲ００，ｅｒＲ０１に加算して書込む（ステップＳ７３０）。ここで、共有バッファに加算して書込むとは、対応する共有バッファに既に拡散誤差が書込まれている場合、これに新たな拡散誤差を加算することを意味する。拡散誤差は、マイナスの値である場合もあるため、実際には、加減算処理が行なわれる。第１領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋１，ｙ）、および第２領域誤差バッファに記憶された拡散誤差ｅｒｂ（ａ＋１，ｙ＋１）は、加減算処理により、いずれもラスターｙ上の右端の２つの画素を処理したことで求められた拡散誤差として確定しているとして、ＥＤ１からＥＤ２に引き渡される。なお、ラスターｙ＋１上の画素に周辺の画素から拡散される拡散誤差は、ラスターｙ上の画素からの拡散誤差とラスターｙ＋１上の画素からの拡散誤差とがあるので、この時点で、隣接するＥＤ２における拡散誤差ｅｒｂ（１，ｙ＋１）、ｅｒｂ（２，ｙ＋１）は、誤差拡散法処理において階調補正値を求めるための拡散誤差としては確定していない。これらの拡散誤差ｅｒｂ（１，ｙ＋１）、ｅｒｂ（２，ｙ＋１）が階調補正値を求めるたの拡散誤差として確定するのは、ＥＤ１において、ラスターｙ＋１上の画素の誤差拡散法処理が完了した時点である。
【００５４】
分割画像の右端で拡散誤差が隣接するユニットに受け渡される様子を図１０に例示した。図１０は、分割画像i-1 のｙラスターでの誤差拡散法処理（ステップＳ５００）がｙラスターの右端、つまり着目画素ＯＰ（ａ，ｙ）に至った場合の拡散誤差の出力の様子を示している。このとき、着目画素ＯＰ（ａ，ｙ）における階調誤差Ｅｄが、周辺の７画素に対応する範囲に拡散される。このとき、着目画素より右側の位置に拡散される拡散誤差は、共有メモリー５２の共有バッファｅｒＲ００，０１に加算して書込まれ、ｅｒＲ１０，１１に書込まれる。
【００５５】
ステップＳ７１０において、ｘ座標がａに等しいと判断された場合には、上述したステップＳ７２０，Ｓ７３０に続いて、誤差バッファの更新処理（ステップＳ７４０）を実行する。この処理は、既述したように、１つのラスターについての誤差拡散法処理が終了したので、使用済みのラスターｙに対応する第１領域誤差バッファの内容をクリアし、これをラスターｙ＋１の処理時に、ラスターｙ＋２への拡散誤差を記憶する新たな第２領域バッファとする。また同時に現在の第２領域誤差バッファは、ラスターｙ＋１の処理時には、そのまま第１領域誤差バッファとする。
【００５６】
ＥＤ１が、図９に示したＲ端部誤差出力処理（ステップＳ７００）を実行すると、共有メモリー５２の共有バッファｅｒＲ００，０１，１０，１１には、分割画像１の主走査方向右端での誤差拡散法処理による拡散誤差が保存される。従って、図８に示したように、ＥＤ１が最初のラスター１（一般化すれば、Ｎ番目のラスター）の誤差拡散処理を完了するまで待機していたＥＤ２は、これを受けて、ステップＳ３２０以下の処理、即ち分割画像２のラスター１（一般化すればＮ番目のラスター）の処理を開始する。ステップＳ３２０では、画素（１，ｙ）、（２，ｙ）へ拡散すべき拡散誤差を共有メモリー５２の共有バッファｅｒＲ００，ｅｒＲ１０から読込む処理を行なう。また、続けて、座標（１，ｙ＋１）、（２，ｙ＋１）へ拡散すべき拡散誤差を共有メモリー５２の共有バッファｅｒＲ０１，ｅｒＲ１１から読込む処理を行なう（ステップＳ３３０）。
【００５７】
その上で、共有バッファｅｒＲ００，ｅｒＲ１０から読込んだこれらの拡散誤差を、第１領域誤差バッファに、拡散誤差ｅｒｂ（１，ｙ），ｅｒｂ（２，ｙ）として書込む処理（ステップＳ３４０）と、共有バッファｅｒＲ０１，ｅｒＲ１１から拡散誤差を第２領域誤差バッファにｅｒｂ（１，ｙ＋１），ｅｒｂ（２，ｙ＋１）として書込む処理（ステップＳ３５０）とを行なう。この様子も、図１０に示した。以上で、ＥＤ２は、Ｒ端部誤差入力処理（ステップＳ３００）を終了する。この実施形態では、上記のように、ＥＤ１が処理したＲ端部誤差は、まとめて隣接するＥＤ２が読込むものとしたが、Ｒ端部誤差は、二度に分けて受け渡してもよい。つまり、ＥＤ１が、ラスターｙ上の画素ＯＰ（ａ−１，ｙ）についての処理を終えた時点で、隣接するＥＤ２に一度目の受け渡しを行ない、ＥＤ１が画素ＯＰ（ａ，ｙ）についての処理を終えた時点で、ＥＤ２に二度目に受け渡しを行なうものとしてもよい。この場合、隣接するＥＤ２が画素ＯＰ（１，ｙ）において階調補正値を求めるための拡散誤差ｅｒｂ（１，ｙ）は、ＥＤ２側で加算されて確定される。画素ＯＰ（２，ｙ）についての拡散誤差ｅｒｂ（２，ｙ）は、二度目の受け渡しの際に確定した値として受け渡される。
【００５８】
以上説明したように、分割画像１、２を処理するＥＤ１、ＥＤ２間では、主走査方向側に位置する画像２を処理するＥＤ２は、主走査方向逆方向側に位置する画像１を処理するＥＤ１が、Ｎ番目のラスターに相当するラスターｙ（最初はラスター１）の右端まで誤差拡散法処理を終えるのを待ち、ＥＤ１がラスターｙの右端の画素ＯＰ（ａ，ｙ）での誤差拡散の処理を終えると、共有メモリー５２を介して、ラスターｙでの処理により確定された拡散誤差の引き渡しを受け、Ｎ番目のラスターに相当するラスターｙ（最初はラスター１）の処理を開始する。このとき、ＥＤ２は、ＥＤ１から誤差を引継いでいるので、画像１と画像２との境界でも誤差は引継がれ、ハーフトーン処理された画像に擬似輪郭などが生じることがない。なお、この関係は、分割画像２、３を処理するＥＤ２、３間でも同様である。
【００５９】
ＥＤ２は、Ｒ端部誤差入力処理（ステップＳ３００）を終えると、ステップＳ４００以下の処理を開始する。ステップＳ４００は、Ｌ端部誤差入力処理（ステップＳ４００）である。このＬ端部誤差入力処理（ステップＳ４００）は、図８、図９に示したＲ端部の誤差に関する入力処理および出力処理（ステップＳ３００、Ｓ７００）が対になっていたのと同様に、Ｌ端部誤差出力処理（ステップＳ６００）と対になった処理である。以下、両処理（ステップＳ４００，Ｓ６００）を、図１１〜図１３を用いて説明する。
【００６０】
Ｌ端部誤差入力処理（ステップＳ４００）は、図１１に示すように、開始されると、まずＬ端部の拡散誤差が準備されたか否かの判断を行なう（ステップＳ４１０）。Ｌ端部誤差は、図６に例示した様に、分割画像ｉのＮ番目のラスター上の画素を順次処理するＥＤｉの主走査方向逆方向の端部（左端）の画素での誤差拡散法処理で生じたＮ＋１番目のラスター上の画素への拡散誤差である。この拡散誤差は、分割画像ｉの主走査方向逆方向側（左側）に位置する画像i-1 を処理するＥＤi-1 に転送される。従って、ＥＤi-1 は、ＥＤｉがＬ端部誤差出力処理（ステップＳ６００）により、Ｌ端部誤差を共有メモリー５２の共有バッファｅｒＬ（−２），ｅｒＬ（−１）に準備するまでは、何も行なわず、「ＮＥＸＴ」に抜けて、本処理ルーチンを一旦終了する。このため、ＥＤi-1 は、Ｌ端部誤差を入力することなく、誤差拡散法処理（ステップＳ５００）を実行し、着目画素のｘ座標を１つずつ移動しながら、ハーフトーン処理を継続する。
【００６１】
この間に、隣接するＥＤｉは、分割画像ｉの各ラスターの先頭の画素、つまり画素ＯＰ（１，ｙ）において、誤差拡散法処理（ステップＳ５００）とハーフトーン処理結果出力処理（ステップＳ２３０）とを行ない、続いてＬ端部誤差出力処理（ステップＳ６００）を実行する。このＬ端部誤差出力処理（ステップＳ６００）を図１２に示した。Ｌ端部誤差出力処理（ステップＳ６００）では、まず主走査方向のｘ座標が、値１または２であるか否かの判断を行なう（ステップＳ６１０）。図４に示したハーフトーン処理が分割画像ｉに対して初めて実行された時には、ｘ座標は値１であり、二度目に実行された時には、ｘ座標は値２である。
【００６２】
従って、分割画像ｉに対して処理が開始された直後では、ｘ＝１となり、誤差拡散法処理（ステップＳ５００）で着目画素の周辺に拡散された拡散誤差のうち、拡散誤差ｅｒｂ（−２，ｙ＋１）、ｅｒｂ（−１，ｙ＋１）を第２領域誤差バッファから読み出し、共有メモリー５２の共有バッファｅｒＬ（−２），ｅｒＬ（−１）に書込む（ステップＳ６２０）。このとき、拡散誤差ｅｒｂ（−２，ｙ＋１）は、ＥＤ２からＥＤ１に引き渡される拡散誤差としては確定した拡散誤差である。他方、２度目にこの処理が実行された場合には、ｘ＝２となり、誤差拡散法処理（ステップＳ５００）で着目画素の周辺に拡散された拡散誤差のうち、拡散誤差ｅｒｂ（−１，ｙ＋１）を第２領域誤差バッファから読み出し、共有メモリー５２の共有バッファｅｒＬ（−１）に加算して書込む（ステップＳ６３０）。共有バッファに拡散誤差を加算して書込むとは、共有バッファに拡散誤差が既に書込まれていれば、これに加算することを意味する。拡散誤差は、マイナスの値である場合もあるため、実際には、加減算処理が行なわれる。第２領域誤差バッファに記憶された拡散誤差ｅｒｂ（−２，ｙ＋１）、ｅｒｂ（−１，ｙ＋１）は、加減算処理により、いずれもＥＤ２からＥＤ１に引き渡される拡散誤差としては確定する。つまり、ＥＤｉがＬ端部誤差出力処理（ステップＳ６００）により、Ｌ端部誤差を共有メモリー５２の共有バッファｅｒＬ（−２），ｅｒＬ（−１）に準備する場合、ＥＤｉが画素ＯＰ（１，ｙ）についての誤差拡散法処理を終えた時点で、共有バッファｅｒＬ（−２）の内容は確定し、ＥＤｉが画素ＯＰ（２，ｙ）についての誤差拡散法処理を終えた時点で、共有バッファｅｒＬ（−１）の内容は確定する。
【００６３】
主走査方向のｘ座標が、値１と値２で処理を分けているのは、図６に示した誤差拡散マトリクスの大きさでは、ｘ＝２の場合、書込まれるのは、第２領域誤差バッファに記憶されている拡散誤差ｅｒｂ（−１，ｙ＋１）に限られるからである。処理が進んで、ｘ座標が値３以上になれば（ステップＳ６１０：「ＮＯ」）、「ＮＥＸＴ」に抜け、Ｌ端部誤差出力処理（ステップＳ６００）では何も行なわない。
【００６４】
この様子を、図１３に示した。こうして、Ｌ端部誤差が共有バッファに準備されると、Ｌ端部誤差入力処理（図１１、ステップＳ４００）におけるステップＳ４１０での判断は「ＹＥＳ」となり、ＥＤi-1 は、共有バッファｅｒＬ（−２）、ｅｒＬ（−１）に保存された拡散誤差を読込み（ステップＳ４２０）、これを第２領域誤差バッファに拡散誤差ｅｒｂ（ａ−１，ｙ＋１）、ｅｒｂ（ａ，ｙ＋１）に加算して書込む（ステップＳ４３０）。共有メモリー５２の共有バッファから、拡散誤差が転送される様子を、図１０に例示した。なお、この例では、Ｌ端部誤差が準備されたと判断されるのは、Ｌ端部誤差出力処理（図１２、ステップＳ６２０およびＳ６３０）においてｘ＝１，２の場合の処理が行なわれ、第２領域誤差バッファに書込まれた拡散誤差ｅｒｂ（−２，ｙ＋１）、ｅｒｂ（−１，ｙ＋１）が共有メモリー５２の共有バッファｅｒＬ（−２），ｅｒＬ（−１）に準備されて、拡散誤差として確定された後である。従って、図１１に示したＬ端部誤差入力処理は、拡散誤差ｅｒｂ（−２，ｙ＋１）、ｅｒｂ（−１，ｙ＋１）が共有バッファｅｒＬ（−２）、ｅｒＬ（−１）に書込まれて確定された後に一度だけ実行される。もとより、ＥＤi-1 がラスターｙ＋１において画素ＯＰ（ａ−１，ｙ＋１）を処理する際に必要になるのは、隣接するＥＤi が処理した拡散誤差ｅｒｂ（−２，ｙ＋１）だけなので、共有バッファｅｒＬ（−２）に拡散誤差が書込まれた時点で、画素ＯＰ（ａ−１，ｙ＋１）の処理に必要な拡散誤差ｅｒｂ（ａ−１，ｙ＋１）を共有バッファｅｒＬ（−２）から読込み、ＥＤi-1 が画素ＯＰ（ａ−１，ｙ＋１）についての誤差拡散法処理を行なうのに備えるものとしても差し支えない。この場合は、隣接するＥＤi でのラスターｙ上の画素ＯＰ（２，ｙ）での処理が行なわれて、共有バッファｅｒＬ（−１）に拡散誤差ｅｒｂ（−１，ｙ＋１）が書込まれた後で、画素ＯＰ（ａ，ｙ＋１）の処理に必要な拡散誤差ｅｒｂ（ａ，ｙ＋１）を共有バッファｅｒＬ（−１）から読込み、ＥＤi-1 が画素ＯＰ（ａ，ｙ＋１）について誤差拡散法処理を行なうのに備えればよい。つまり、隣接するＥＤi からのＥＤi-1 へのＬ端部誤差の受け渡しは、図１１，図１２に示したように、２画素分まとめて行なってもよいし、一画素ずつ行なっても差し支えない。
【００６５】
以上説明したＬ端部誤差入力処理（ステップＳ４００）およびＬ端部誤差出力処理（ステップＳ６００）が、隣接するＥＤi-1 とＥＤｉとの間で行なわれることにより、隣接する分割画像i-1 と分割画像ｉとの境界でも、誤差はＥＤｉからＥＤi-1 側に受け渡される。この結果、境界領域での誤差拡散処理法を用いたハーフトーン処理結果に擬似輪郭などが生じることがない。
【００６６】
以上説明したハーフトーン処理（図４）を各ＥＤｉが行なうと、処理は実際には次のように進行する。
〈１〉分割画像１を処理するＥＤ１が起動し、１ラスター分の画像データを入力し、これをｘ＝１から順方向に順次誤差拡散法処理によりハーフトーン処理して、その処理結果を、ＲＡＭ６０の所定の領域に書き出していく。
〈２〉ＥＤ１が、１ラスターの処理を進め、処理が右端に至ると、Ｒ端部誤差出力処理（ステップＳ７００）が実行され、ＥＤ２に引き渡すべきＲ端部誤差が共有バッファｅｒＲ００〜１１に準備される。
〈３〉これを受けて、分割画像２の１ラスター分の画像データを入力して待機していたＥＤ２が、Ｒ端部誤差入力処理（ステップＳ３００）を実行し、ＥＤ１が準備したＲ端部誤差を自らの第１，第２領域誤差バッファに入力し、その後、ｘ＝１から誤差拡散法処理（ステップＳ５００）を実行する。
【００６７】
〈４〉ＥＤ２は、画素ＯＰ（１，ｙ）、ＯＰ（２，ｙ）についての誤差拡散法処理（ステップＳ５００）を終えると、Ｌ端部誤差出力処理（ステップＳ６００）を実行する。この結果、ＥＤ１に引き渡すべき拡散誤差ｅｒＬ（−２），ｅｒＬ（−１）が準備される。
〈５〉これと平行して、ＥＤ１は、次のラスターｙ＋１の画像データを入力し、Ｌ端部誤差入力処理（ステップＳ４００）からＲ端部誤差出力処理（ステップＳ７００）までを繰り返し実行して、ラスターｙ＋１についてのハーフトーン処理を継続しており、ＥＤ２により、Ｌ端部誤差が共有バッファｅｒＬ（−２），ｅｒＬ（−１）に準備されると、Ｌ端部誤差入力処理（ステップＳ４００）により、これを自らの誤差バッファに入力する。Ｌ端部誤差を共有バッファｅｒＬ（−２），ｅｒＬ（−１）から誤差バッファに入力するＬ端部誤差入力処理（ステップＳ４００）は、ＥＤ１により誤差拡散法処理が、そのラスターｙ＋１について右端、正確にはｘ座標ａ−１に至るまでに行なわれれば、いずれのタイミングで行なってもよい。仮に、処理がｘ座標ａ−２に至って、画素ＯＰ（ａ−２，ｙ＋１）についての誤差拡散法処理が終了してもまだＬ端部誤差が共有バッファｅｒＬ（−２），ｅｒＬ（−１）に用意されていない場合には、Ｌ端部誤差が用意されまで待機するものとすればよい。
【００６８】
上記の処理により、ＥＤ１とＥＤ２との間では、ＥＤ１の順方向拡散誤差であるＲ端部誤差がＥＤ２に引き渡されて、ＥＤ２での誤差拡散法処理（ステップＳ５００）で用いられ、ＥＤ２の逆方向拡散誤差であるＬ端部誤差がＥＤ１に引き渡されて、ＥＤ１での誤差拡散法処理（ステップＳ５００）で用いられる。この結果、２つの分割画像１、２の境界においても、誤差拡散法処理における拡散誤差が引継がれることになる。同じ処理が、ＥＤ２とＥＤ３との間でも行なわれる。分割画像が４つ以上あり、ＥＤユニットが４つ以上の場合でも同様に、処理が行なわれることは勿論である。
【００６９】
以上説明した第１実施形態のプリンター２０では、ハーフトーン処理の対象である画像を３つの分割画像１、２、３に分けて誤差拡散法による処理を、ＥＤ１、２、３で行なう。このとき、各ＥＤｉは、担当する分割画像の主走査方向ｘに画素数ａのラスター２本分の容量の第１，第２領域誤差バッファを準備するだけで良い。各ＥＤ１、２、３は、まずＥＤ１が動作を開始し、処理しているラスターｙの右端（ａ，ｙ）まで処理して、Ｒ端部誤差を共有メモリー５２の共有バッファに出力すると、ＥＤ１に隣接するＥＤ２が、Ｒ端部誤差入力処理（ステップＳ３００）を開始する。ＥＤ２が、Ｒ端部誤差を入力して、誤差拡散法処理（ステップＳ５００）を実施すると、ｘ＝１、またはｘ＝２の位置で、つまりＥＤ２が図４の誤差拡散処理を開始した直後に、Ｌ端部誤差出力処理（ステップＳ６００）を実行するので、ＥＤ１が処理している着目画素がラスターの右端に至るよりかなり前に、ＥＤ１にとってのＬ端部誤差が準備される。このため、ＥＤ１が、ラスターｙ＋１の右端の処理をする時点では、Ｌ端部誤差は準備されている。
【００７０】
同様の処理が、ＥＤ２とＥＤ３との間でも行なわれる。従って、分割画像１、２、３は、１ラスター分の誤差拡散法処理（ステップＳ５００）が完了する程度の時間差、つまり１つのラスターについてＲ端部誤差入力処理（ステップＳ３００）からＲ端部誤差出力処理（ステップＳ７００）までの処理に必要な時間差ずつ遅れて順次実行されることになる。
【００７１】
このため、画像を誤差拡散法により処理するのに必要が時間を、１つのＥＤユニットが画像全体を処理する時間の約１／３程度に短縮できる。しかも、ＥＤユニットの数を増やせば、ほぼその数に応じて、処理時間を短縮することができる。ＥＤユニットの数が増えても、上述した処理（図４）を各ＥＤユニットが実行すればよく、ユニットの数の増加を対して、処理内容を修正する必要がほとんどない。つまりプリンター２０をＥＤユニットの増減に対して、フレキシブルに対応できる、いわゆるスケーラブルな構成とすることができる。また、本実施形態のプリンター２０によれば、Ｌ端部誤差出力処理（ステップＳ６００）やＲ端部誤差出力処理（ステップＳ７００）を実行している間は、誤差拡散法処理（ステップＳ５００）は実行されない。このため、ラスターを構成する各画素の誤差拡散法処理（ステップＳ５００）と、隣接する誤差拡散処理部への拡散誤差の受け渡しの処理とを分離して、両処理を共に確実に行なうことができる。
【００７２】
（５）他の実施形態：
上述した第１実施形態は、以下の点で異なる実施形態で実施可能である。まず、上記実施形態では、分割画像のｘ方向の大きさは同じとしたが、必ずしも同じである必要はなく、分割画像毎に異なる大きさでも良い。この場合、ｘ方向の画素数が少ない分割画像を担当したＥＤユニットは、主走査方向手前に位置するＥＤユニットからＲ端部誤差を入力するＲ端部入力処理（ステップＳ３００）を開始するまでに待ち時間が発生する場合も有り得るが、複数のＥＤユニットにより、全体の画像処理時間を短縮できることに変りはない。また一番目の分割画像においては、Ｌ端部誤差出力処理（ステップＳ６００）が必要ないこと、末尾の分割画像においてはＲ端部誤差出力処理（ステップＳ７００）が必要ないことから、一番目と末尾の分割画像を若干大きくして、全ＥＤユニットの処理時間を平均化することも可能である。なお、両端の分割画像を処理するＥＤユニットでは、Ｌ端部誤差出力処理（ステップＳ６００）やＲ端部誤差出力処理（ステップＳ７００）は行なわないが、ラスターの両端で、領域外の画素に対応する位置、例えば座標（−２，ｙ）等に拡散誤差を拡散する処理は、そのまま行なえば良い。
【００７３】
誤差拡散マトリクスの大きさは、図６以外の大きさであっても差し支えない。着目画素がラスターｙ上にあるとき、誤差の拡散範囲をｙ＋１のみならず、ｙ＋２など、ｙ方向に拡張することも差し支えない。また、誤差拡散法処理の対象となる画素の階調値やラスター内の着目画素の位置に応じて、誤差拡散マトリクリスの大きさや重み付けを切換えるようにすることも可能である。
【００７４】
上記の実施形態では、Ｒ端部誤差出力処理（ステップＳ７００）やＬ端部誤差出力処理（ステップＳ６００）において、画素ＯＰ（ａ−１，ｙ）、ＯＰ（ａ，ｙ）や、画素ＯＰ（１，ｙ）、ＯＰ（２，ｙ）について、別々に出力処理を行なったが、画素ＯＰ（ａ−１，ｙ）での誤差、画素ＯＰ（１，ｙ）での誤差は、次の位置の画素ＯＰ（ａ，ｙ）や、画素ＯＰ（２，ｙ）での処理でそれぞれ加算されるので（ステップＳ７３０，Ｓ６３０）、毎回共有メモリー５２に書き出さず、ＥＤユニット内に一時的に記憶し、まとめて共有メモリー５２の共有バッファに書き出すようにしてもよい。また、その場合、同一の共有バッファに加算して書き込みを行なう誤差は、書き込み前にＥＤユニット内で加算処理を行なっておくことで、共有バッファへの書き込みを１回で済ませることもできる。上記の実施形態ではＲ端部誤差用に同一ラスターへの拡散誤差を記憶する共有バッファｅｒＲ００，ｅｒＲ１０と次のラスターへの拡散誤差を記憶する共有バッファｅｒＲ０１，ｅｒＲ１１との２ラスター分の共有バッファを用意したが、これを同一ラスターへの拡散誤差用に用いた共有バッファｅｒＲ００，ｅｒＲ１０だけですませることもできる。その場合は、上記の実施形態で共有バッファｅｒＲ０１，ｅｒＲ１１に書き込んでいた次のラスターへの拡散誤差は、ＥＤユニットの内のメモリに用意した内部バッファｅｒＲ０１ｉ，ｅｒＲ１１ｉに記憶しておいて、次のラスターの処理に移る。これにより、共有バッファｅｒＲ００，ｅｒＲ１０へ同一ラスターからの拡散誤差を書き込む時点では、内部バッファｅｒＲ０１ｉ，ｅｒＲ１１ｉには、１つ前のラスターからの拡散誤差が記憶されている状態となる。そこで、共有バッファｅｒＲ００には同一ラスターからの拡散誤差に加え、内部バッファｅｒＲ０１ｉに記憶しておいた１つ前のラスターからの拡散誤差を加算して書き込み、同様に共有バッファｅｒＲ１０には同一ラスターからの拡散誤差に加え、内部バッファｅｒＲ１１ｉに記憶しておいた１つ前のラスターからの拡散誤差を加算して書きこむ。その後に、使用済みとなった内部バッファｅｒＲ０１ｉ，ｅｒＲ１１ｉに、次のラスターへの拡散誤差を書きこんで記憶すればよい。
【００７５】
上記実施形態では、各ＥＤユニットの誤差バッファは第１領域誤差バッファと第２領域誤差バッファとの２つを用いたが、その記憶容量を減らすことも可能である。これは、階調誤差Ｅｄが拡散されると、着目画素ＯＰ（ｘ，ｙ）の同じラスターｙの主走査方向側の拡散誤差は、順次誤差拡散法での判断に用いられて役目を終える一方で、着目画素の１つ下のラスターｙ＋１では、図６に示した誤差拡散マトリクスを用いていれば、ｘ座標で、ｘ＋３より大きな位置の拡散誤差は、存在しないことを利用する。この場合、役目を終えた第１領域誤差バッファを、同じラスター位置の第２領域誤差バッファに転用していくことで、１つのＥＤユニット当りに必要となる誤差バッファの容量を、１ラスター分の画素数＋α＋β程度に抑制することができる。ここで、αは、ラスターｙとラスターｙ＋１とで重複している画素数である。図６に示した誤差拡散マトリクスでは、主走査方向でｘ＋１とｘ＋２とで重複しているので、α＝２である。この場合、ラスターｙ＋１の座標ｘ＋１とｘ＋２のα画素への拡散誤差は、別途用意したα個の誤差バッファ領域に一時的に記憶しておき、対応する画素の第２領域誤差バッファが使用可能となった段階で、一時的に記憶しておいた内容を反映してゆけばよい。またβは、隣接するＥＤユニットとの間での拡散誤差のやり取りをするために必要となるバッファの数である。第１実施形態では、Ｒ端部誤差のために４個、Ｌ端部誤差のために２個必要となり、合計でβ＝６である。
【００７６】
第１実施形態では、ＥＤユニット間の拡散誤差のやり取りに共有メモリー５２用いたが、ＥＤユニット間の拡散誤差のやり取りは、図１４〜図１８に示すように、種々の構成を採用可能である。図１４に示す構成では、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 がそれぞれ入力部４１と出力部４４とに接続されている。ここで出力部４４は、ハーフトーン処理結果を印刷部４６に出力する際（図４、ステップＳ２３０）のインタフェース部である。図１４では、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 は、入力部４１とも出力部４４ともそれぞれ単独でデータを授受可能であり、かつＥＤi-1 、ＥＤｉ、ＥＤi+1 間でもＲ端部誤差やＬ端部誤差を直接やり取り可能な構成を採用している。こうすれば、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 が直接、各部と画像や拡散誤差をやり取りできるので、例えば、Ｒ端部誤差とＬ端部誤差とのやり取りを同時に行なうことも可能となる。また、図１４の構成を採用すれば、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 が分割画像i-1 、分割画像ｉ、分割画像i+1 を入力部４１を介して受け取るとき、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 が１ラスターずつ、独立に受け取ることができる。このため、入力部４１と接続されたデータの転送路が各ＥＤi-1 、ＥＤｉ、ＥＤi+1 からのデータ要求を受けて輻輳することがない。
【００７７】
ＣＰＵ４０の内部構成としては、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 と外部とのやり取りを、入力部４１と出力部４４に分けず、１つの入出力部４５を介して行なう構成を取ることも差し支えない。この場合の構成を図１５に示した。図１５では、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 と外部とのやり取りが、入出力部４５に統一されている点以外は、図１４と同じである。分割画像から１ラスター分のデータを受け取るタイミング（図４、ステップＳ２２０）と、ハーフトーン処理結果の出力のタイミング（ステップＳ２３０）とは分離できるので両者が競合することはなく、全体構成をコンパクトなものとすることができる。
【００７８】
図１６，図１７は、図１４，図１５に示した構成において、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 と入力部４１、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 と出力部４４とのやり取りを、それぞれ専用の転送路１００、１１０、１２０を用いて行なうように変更した場合の構成を示す。図１６、図１７に示した構成では、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 は、単独で入力部４１や出力部４４、あるいは入出力部４５でデータをやり取りするのではなく、共通の転送路１００、１１０、１２０を用いて行なう。このため、新たなＥＤユニットを加える場合でも、単に転送路１００、１１０、１２０に接続するものとし、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 には、入力部４１、出力部４４あるいは入出力部４５とのデータをやり取りするプロトコルをインストールしておけば良い。入力部４１や出力部４４などを、接続するＥＤユニットの数に応じて作り替え必要がなく、全体構成を、より柔軟な構成にできる。この構成では各ユニットへのデータ入力は同時には行なえず、時系列でＥＤi-1 、ＥＤｉ、ＥＤi+1の順に１ラスター分のデータ入力を行なう。また、データ出力についても同様である。この場合、ＥＤｉへの１ラスター分のデータ入力を行なっている間に、既にデータ入力を終えたＥＤi-1はハーフトーン処理を開始してもよい。図１６，図１７において、転送路１００、１１０は、それぞれデータ転送を一方向に行なうものであり、転送路１２０は、双方向に行なうものである。また、図１６，図１７に示した構成では、各ＥＤユニット間のＲ端部誤差やＬ端部誤差のやり取りは、直接、各ＥＤユニット間で行なう。
【００７９】
図１８、図１９は、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 間のデータのやり取り、つまりＲ端部誤差やＬ端部誤差のやり取りも、転送路１３０、１４０を用いて行なう場合の構成を示す。図１８に示した構成では、転送路１３０を用いた制御を行なう入力部＋転送部４７が用いられる。各ＥＤi-1 、ＥＤｉ、ＥＤi+1 は、この転送路１３０を用いて、各分割画像から１ラスター分の画像データを入力部＋転送部４７の入力部から入力する処理（図４、ステップＳ２２０）や、入力部＋転送部４７の転送部を介したＲ端部誤差の入出力処理（ステップＳ３００およびＳ７００）、更にはＬ端部誤差の入出力処理（ステップＳ４００およびＳ６００）を、行なう。複数のＥＤi-1 、ＥＤｉ、ＥＤi+1 がこれらのデータを１つの転送路１３０を用いて行なうので、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 間で直接データをやり取りする転送路を別途設ける必要がない。他方、転送路１３０に対する要求を調停（アービトレーション）する機能が入力部＋転送部４７に必要となる。図１９に示した構成では、ハーフトーン処理結果の出力も転送路１４０および入出力部＋転送部４８を用いて行なわれるので、更に構成をシンプルなものにすることができる。他方、転送路１４０に対する使用の要求は更に高まり、バスアービトレーションの必要性は一層高まる。
【００８０】
図４に示したように、分割画像の１ラスター分のデータ入力（ステップＳ２２０）の直後にＲ端部誤差入力処理（ステップＳ３００）が行なわれるので、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 間の処理は、少なくとも１ラスターの誤差拡散法処理（ステップＳ５００）の完了、つまりＲ端部誤差を出力可能となるまでの時間だけ、後段のＥＤユニットの処理の開始が遅れることになる。他方、前段のＥＤユニットが次の１ラスターの画像データの処理を終える前には、Ｌ端部誤差入力処理（ステップＳ４００）が可能となっていなければならず、つまりそれまでには、後段のＥＤユニットは、Ｌ端部についての誤差拡散法処理（ステップＳ５００）を終えて、Ｌ端部誤差出力処理（ステップＳ６００）が可能となっていなければならない。換言すれば、これらの条件さえ満たしていれば、各ＥＤi-1 、ＥＤｉ、ＥＤi+1 間の処理のタイミングは自由に設定可能である。このため、転送路１３０や転送路１４０を用いる場合でも、転送路１３０等の競合が起きないように、例え競合が起きてもバスアービトレーションによる待ち時間が少なくなるように、各ＥＤユニットの処理タイミングを設定すれば良い。
【００８１】
上記の実施形態では、誤差拡散法処理は、画素を単位として行なったが、複数の画素、例えば２×２の４画素をひとつのブロックとして扱い、各ブロック間で誤差を拡散するようにしても良い。図２０はこうしたブロック間誤差拡散の手法を例示する説明図である。図示するように、１つのブロックＢij内に含まれる画素についてドットのＯＮ・ＯＦＦを決定し、それによって発生した誤差を、誤差拡散マトリクスに設定された重み付けで、周辺のブロックに拡散する。各ブロック内の画素についてのドットのＯＮ・ＯＦＦの決定は、ブロック内の画素の階調値の平均値を用いてディザ法により決定してもよい。こうしたブロック間の誤差拡散法処理については、例えば特開２０１６−１１６１０５号公報などに詳しく示されている。
【００８２】
（６）その他の実施態様：
［１］本開示の画像処理装置は、次の態様で実施可能である。第１の態様は、複数の画素からなる縦横２次元の画像を、前記縦横のうちの一方向を主走査方向として順次ハーフトーン処理する画像処理装置としての態様である。この画像処理装置は、前記画像を前記主走査方向にｎ個（ｎは２以上の整数）に分割した分割画像の各々に対応して設けられ、前記分割画像の前記主走査方向の画素の並びであるラスターに属する画素を順次着目画素とし、前記着目画素に誤差拡散法を適用して前記ハーフトーン処理を行なうｎ個の誤差拡散処理部と、ｎ個の前記誤差拡散処理部が処理した結果を併せ、前記分割画像が備える階調値未満の階調値を有する処理済みデータを出力する出力部とを備える。ここで、前記ｎ個の誤差拡散処理部のうち、主走査方向に隣接する２つの分割画像にそれぞれ前記ハーフトーン処理を施す２つの誤差拡散処理部は、前記主走査方向手前に位置する一の分割画像のＮ＋１番目（Ｎは１以上の整数）のラスターについての前記ハートフトーン処理の少なくとも一部と、前記一の分割画像に隣接する他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の少なくとも一部とを、同時に行ない、前記主走査方向手前に位置する分割画像を処理する一の誤差拡散処理部は、Ｎ番目のラスターについて前記主走査方向端部まで処理したことにより、前記主走査方向端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めたとき、前記拡散誤差のうち、前記他の誤差拡散処理部が用いる拡散誤差である順方向拡散誤差であって、少なくともＮ番目のラスターについて確定した順方向拡散誤差を、前記他の誤差拡散処理部による前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の開始より以前に、前記他の誤差拡散処理部に受け渡し、前記他の誤差拡散処理部は、前記一の誤差拡散処理部から前記一の分割画像のＮ番目のラスターにおける前記確定した順方向拡散誤差を受け取った後で、前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理を開始し、前記主走査方向とは逆方向の端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めた後で、前記拡散誤差のうち、前記一の誤差拡散処理部が前記一の分割画像のＮ＋１番目のラスターについての前記ハーフトーン処理において用いる拡散誤差である逆方向拡散誤差のうち、少なくともＮ＋１番目のラスターに関して確定した逆方向拡散誤差を、前記一の誤差拡散処理部による前記Ｎ＋１番目のラスターについての前記ハーフトーン処理が前記主走査方向端部に至るまでに受け渡すものとしてよい。
【００８３】
こうすることで、画像の誤差拡散法を用いたハーフトーン処理を短時間に行なうことができ、しかも、誤差拡散処理部の数が増減しても、互いに隣接する２つの誤差拡散処理部間では、主走査方向に手前側の分割画像を処理する誤差拡散処理部を一の誤差拡散処理部とし、他方を他の誤差拡散処理部として、各誤差拡散処理部が処理を行なえば良い。従って、誤差拡散処理部の増減を極めて容易に行なうことができる。更に、この画像処理装置では、誤差拡散のために周辺の画素に拡散する拡散誤差を記憶する記憶容量を低減することができる。
【００８４】
［２］こうした画像処理装置において、前記一の誤差拡散処理部と前記他の誤差拡散処理部とは、直接データのやり取り可能な経路を有し、少なくとも前記確定した順方向拡散誤差および前記確定した逆方向拡散誤差を、前記経路を介してやり取りするものとしてよい。こうすれば、順方向拡散誤差および逆方向拡散誤差を誤差拡散処理部間で直接やり取りすることができる。
【００８５】
［３］こうした画像処理装置において、前記経路は、前記２つの誤差拡散処理部から読み書き可能な共有メモリーとしてよい。共有メモリーを用いれば、読み書きのためにデータをやり取りするプロトコルなどを設定する必要がない。
【００８６】
［４］こうした画像処理装置において、前記ｎ個の誤差拡散処理部は、データのやり取りが可能な転送路を共有し、前記一の誤差拡散処理部と前記他の誤差拡散処理部とは、少なくとも前記確定した順方向拡散誤差および前記確定した逆方向拡散誤差を、前記転送路を介してやり取りするものとしてもよい。こうすれば、各誤差拡散処理部間の拡散誤差のやり取りなどを転送路に集約して行なうことができ、誤差拡散処理部間の接続を簡略なものにできる。また、各誤差拡散処理部同士の接続が転送路に集約されるので、誤差拡散処理部の増減に対して、柔軟に対応できる。
【００８７】
［５］こうした画像処理装置において、前記一の誤差拡散処理部は、前記確定した順方向拡散誤差を前記他の誤差拡散処理部に向けて出力している間は、前記誤差拡散法を適用した前記ハーフトーン処理は実行せず、前記他の誤差拡散処理部は、前記確定した逆方向拡散誤差を前記一の誤差拡散処理部に向けて出力している間は、前記誤差拡散法を適用した前記ハーフトーン処理は実行しないものとしてもよい。こうすれば、ラスターを構成する各画素の誤差拡散法処理と、隣接する誤差拡散処理部への拡散誤差の受け渡しとを確実に行なうことができる。
【００８８】
［６］上記の画像処理装置において、前記他の誤差拡散処理部は、前記一の誤差拡散処理部からの前記確定した順方向拡散誤差を入力している間は、前記誤差拡散法を適用した前記ハーフトーン処理は実行しないものとしてもよい。こうすれば、更に確実に、ラスターを構成する各画素の誤差拡散法処理と、隣接する誤差拡散処理部への拡散誤差の受け渡しとを行なうことができる。
【００８９】
［７］本開示の第２の態様は、印刷装置としての態様である。この印刷装置は、上記の画像処理装置のいずれか１つと、その画像処理装置の出力部が出力する処理済みデータに対応した階調値のドットを形成することにより、印刷媒体に印刷を行なう印刷部と、を備える。この印刷装置によれば、画像の誤差拡散法を用いたハーフトーン処理を短時間に行なうことができ、印刷完了に要する時間を端主することができる。また、印刷装置に備えられた画像処理装置において、誤差拡散処理部の増減を極めて容易に行なうことができる点や、誤差拡散のために周辺の画素に拡散する拡散誤差を記憶する記憶容量を低減することができるなどのメリットを享受できることは、画像処理装置単体と同様である。
【００９０】
［８］本開示の第３の態様は、複数の画素からなる縦横２次元の画像を、前記縦横のうちの一方向を主走査方向として順次ハーフトーン処理する画像処理方法として態様である。この画像処理方法は、前記画像を前記主走査方向にｎ個（ｎは２以上の整数）に分割した分割画像の各々に対応して設けられ、前記分割画像の前記主走査方向の画素の並びであるラスターに属する画素を順次着目画素とし、前記着目画素に誤差拡散法を適用して前記ハーフトーン処理を行なうｎ個の誤差拡散処理部を用意して実行される。この画像処理装置では、前記ｎ個の誤差拡散処理部のうち、主走査方向に隣接する２つの分割画像にそれぞれ前記ハーフトーン処理を施す２つの誤差拡散処理部は、前記主走査方向手前に位置する一の分割画像のＮ＋１番目（Ｎは１以上の整数）のラスターについての前記ハートフトーン処理の少なくとも一部と、前記一の分割画像に隣接する他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の少なくとも一部とを、同時に行なう。ここで、前記主走査方向手前に位置する分割画像を処理する一の誤差拡散処理部は、Ｎ番目のラスターについて前記主走査方向端部まで処理したことにより、前記主走査方向端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めたとき、前記拡散誤差のうち、前記他の誤差拡散処理部が用いる拡散誤差である順方向拡散誤差であって、少なくともＮ番目のラスターについて確定した順方向拡散誤差を、前記他の誤差拡散処理部による前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理の開始より以前に、前記他の誤差拡散処理部に受け渡し、前記他の誤差拡散処理部は、前記一の誤差拡散処理部から前記一の分割画像のＮ番目のラスターにおける前記確定した順方向拡散誤差を受け取った後で、前記他の分割画像のＮ番目のラスターについての前記ハーフトーン処理を開始し、前記主走査方向とは逆方向の端部において前記Ｎ番目のラスター上の着目画素の周辺の画素に拡散する拡散誤差を求めた後で、前記拡散誤差のうち、前記一の誤差拡散処理部が前記一の分割画像のＮ＋１番目のラスターについての前記ハーフトーン処理において用いる拡散誤差である逆方向拡散誤差のうち、少なくともＮ＋１番目のラスターに関して確定した逆方向拡散誤差を、前記一の誤差拡散処理部による前記Ｎ＋１番目のラスターについての前記ハーフトーン処理が前記主走査方向端部に至るまでに受け渡し、ｎ個の前記誤差拡散処理部が処理した結果を併せ、前記分割画像が備える階調値未満の階調値を有する処理済みデータを出力する。かかる画像処理方法によっても、上記画像処理装置と同様の効果を奏することができる。
【００９１】
本開示は、上述の実施形態、実施態様に限られるものではなく、その趣旨を逸脱しない範囲において種々の構成で実現することができる。例えば、発明の概要の欄に記載した各形態中の技術的特徴に対応する実施形態の技術的特徴は、上述の課題の一部又は全部を解決するために、あるいは、上述の効果の一部又は全部を達成するために、適宜、差し替えや、組み合わせを行うことが可能である。また、その技術的特徴が本明細書中に必須なものとして説明されていなければ、適宜、削除することが可能である。例えば、上記実施形態においてハードウェアにより実現した構成の一部は、ソフトウェアにより実現することができる。また、ソフトウェアにより実現している構成の少なくとも一部は、ディスクリートな回路構成により実現することも可能である。
【符号の説明】
【００９２】
２０…プリンター、３０…制御ユニット、４０…ＣＰＵ、４１…入力部、４２…ＲＯＭ、４３…誤差拡散マトリクス、４４…出力部、４５…入出力部、４６…印刷部、４７…入力部＋転送部、４８…入出力部＋転送部、５０…画像処理部、５２…共有メモリー、６０…ＲＡＭ、７０…キャリッジモータ、７１…駆動ベルト、７３…摺動軸、７４…モータ、７５…プラテン、８０…キャリッジ、８２…インクカートリッジ、９０…印刷ヘッド、９８…メモリカードスロット、９９…操作パネル、１００，１２０，１３０，１４０…転送路、５０１…ＥＤ１ユニット、５０ｉ…ＥＤｉユニット、５０ｎ…ＥＤｎユニット、６０１…第１誤差バッファ、６０ｉ…第ｉ誤差バッファ、６０ｎ…第ｎ誤差バッファ、ＭＣ…メモリカード、Ｐ…印刷媒体
【図１】
2020065100.tif 000003
【図２】
2020065100.tif 000004
【図３】
2020065100.tif 000005
【図４】
2020065100.tif 000006
【図５】
2020065100.tif 000007
【図６】
2020065100.tif 000008
【図７】
2020065100.tif 000009
【図８】
2020065100.tif 000010
【図９】
2020065100.tif 000011
【図１０】
2020065100.tif 000012
【図１１】
2020065100.tif 000013
【図１２】
2020065100.tif 000014
【図１３】
2020065100.tif 000015
【図１４】
2020065100.tif 000016
【図１５】
2020065100.tif 000017
【図１６】
2020065100.tif 000018
【図１７】
2020065100.tif 000019
【図１８】
2020065100.tif 000020
【図１９】
2020065100.tif 000021
【図２０】
2020065100.tif 000022