(57)【要約】【課題】  誤差拡散法による多値化処理の高速化が望まれていた。【解決手段】  Ｘ方向とＹ方向に２次元的に配列された画像データを、２つのＣＰＵを用いた並列処理で誤差拡散法により多値化する。第１のＣＰＵは画像データのＸ方向に沿って画素列を順に誤差拡散法で多値化する。第１のＣＰＵが処理する画素列に隣接する画素列上には、第１のＣＰＵによる処理の進展に応じて拡散される誤差が完全に確定した誤差確定画素が現れる。第２のＣＰＵはこの誤差確定画素について、第１のＣＰＵによる処理と並行して誤差拡散法による多値化を行う。かかる並列処理により誤差拡散法による多値化を高速に行うことができる。第２のＣＰＵによる処理の進展に応じてさらに隣接する画素列に誤差確定画素が現れるようになるため、３つ以上の処理を並行して実行するものとしてもよい。【選択図】  図１５
2005143140.tif 000002
【特許請求の範囲】
【請求項１】
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行う画像処理装置であって、
未だ多値化されていない未処理の画素のうち、他の画素から拡散される濃度誤差が完全に確定した複数の画素について、誤差拡散法による多値化を並行して行うことを特徴とする画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記画像データは、第１の方向および第２の方向に２次元的に配列されたデータであり、
前記誤差拡散法は、前記第１の方向に並ぶ画素列に沿って各画素ごとに、少なくとも前記第２の方向に隣接する画素列に前記濃度誤差を拡散しつつ行われ、
前記並行して多値化が行われる複数の画素は、互いに隣接する画素列上の画素である画像処理装置。
【請求項３】
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行う画像処理装置であって、
第１の方向および第２の方向に２次元的に配列された画像データを入力する入力手段と、
未だ多値化されていない未処理の画素を、前記第１の方向に並ぶ画素列に沿って順に、少なくとも前記第２の方向に隣接する画素列に濃度誤差を拡散する誤差拡散法により多値化を行う第１の多値化手段と、
前記第１の多値化手段により多値化が行われる画素列に対し、前記第２の方向に隣接する画素列上の画素のうち、他の画素から拡散される濃度誤差が完全に確定した画素について、第１の多値化手段による多値化と並行して誤差拡散法による多値化を行う第２の多値化手段とを備える画像処理装置。
【請求項４】
請求項３記載の画像処理装置であって、
前記第２の多値化手段は、多値化を行う画素について、他の画素から拡散される濃度誤差が完全に確定したか否かを判定する判定手段を備える画像処理装置。
【請求項５】
請求項３記載の画像処理装置であって、
前記第１の多値化手段により多値化が行われている着目画素と前記第２の多値化手段により多値化が行われている着目画素とは、前記第１の方向に前記画素列の幅の約半分の間隔を有している位置関係にある画像処理装置。
【請求項６】
前記第１の多値化手段と第２の多値化手段とは異なる演算回路によって構成されることを特徴とする請求項３記載の画像処理装置。
【請求項７】
請求項３記載の画像処理装置であって、
前記画像データは前記第１の方向にＮｘ個（Ｎｘは２以上の整数）の画素を有するデータであり、
前記第１の多値化手段は、Ｙ番目からＹ＋ｎ−１番目（Ｙ，ｎは自然数）までのｎ本の画素列上の未処理の画素に濃度誤差を拡散する手段であり、
前記第２の多値化手段は、
Ｙ＋１番目からＹ＋ｎ番目までのｎ本の画素列上の未処理の画素に濃度誤差を拡散し、かつ、前記第１の多値化手段によりＹ番目の画素列に濃度誤差が拡散される領域と前記Ｙ＋ｎ番目の画素列に濃度誤差が拡散される領域との前記第１の方向の位置が重複しない画素を処理する手段であり、
前記第１の方向にＮｘ個、前記第２の方向にｎ個ずつ２次元的に配列された画素に対応したメモリと、
前記Ｙ＋１番目からＹ＋ｎ−１番目までのｎ−１本の画素列に拡散された濃度誤差を、前記第１の方向および前記第２の方向について画素とメモリの位置関係を一義的に保ちつつ、ｎ−１本の画素に対応したメモリに記憶し、
かつ、
残余の１本の画素列に対応したメモリには、前記Ｙ番目の画素列に拡散された濃度誤差と前記Ｙ＋ｎ番目の画素列に拡散された濃度誤差とを、前記第１の方向について画素とメモリの位置関係を一義的に保ちつつ記憶する記憶手段とを備える画像処理装置。
【請求項８】
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行う画像処理方法であって、
（ａ）第１の方向および第２の方向に２次元的に配列された画像データを入力する工程と、
（ｂ）未だ多値化されていない未処理の画素を、前記第１の方向に並んだ画素列に沿って順に誤差拡散法により多値化を行う工程と、
（ｃ）前記工程（ｂ）で多値化が行われる画素列に対し前記第２の方向に隣接する画素列上に他の画素から拡散される濃度誤差が完全に確定した画素が現れた後に、前記工程（ｂ）と並行して、該隣接する画素列上の画素を誤差拡散法により多値化する工程とを備える画像処理方法。
【請求項９】
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行うためのプログラムをコンピュータ読みとり可能に記録した記録媒体であって、
第１の方向および第２の方向に２次元的に配列された画像データを入力する機能と、
未だ多値化されていない未処理の画素を、前記第１の方向に並んだ画素列に沿って順に誤差拡散法により多値化を行う第１の多値化機能と、
前記第１の多値化機能により多値化が行われる画素列に対し前記第２の方向に隣接する画素列上の画素のうち、他の画素から拡散される濃度誤差が完全に確定した画素を特定する機能と、
該特定された画素について、前記第１の多値化機能と並行して誤差拡散法による多値化を行う第２の多値化機能とを実現するプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力された画像データを誤差拡散法により多値化する画像処理装置に関する。
【背景技術】
【０００２】
従来より、コンピュータの出力装置として、ヘッドから吐出される数色のインクによりドットを形成して画像を記録するタイプのカラープリンタが提案されており、コンピュータ等が処理した画像を多色多階調で印刷するのに広く用いられている。かかるプリンタは、各ドットごとに見ればドットを形成した状態（オン）と形成しない状態（オフ）の２値しか採ることができず、２階調しか表現し得ない。従って、これらのプリンタは、いわゆるハーフトーン処理により、所定の領域に分散するドットのオン・オフの状態を制御して、原画像データが有する多階調を表現している。近年、ドットの径やインク濃度を多種類形成可能とすることにより、各ドットごとにオン・オフの２値以上の状態を表現可能とした多値プリンタも提案されているが、かかるプリンタにおいても、このようなハーフトーン処理が必要であることは変わりない。
【０００３】
かかるハーフトーン処理の代表的な手法として、誤差拡散法がある。誤差拡散法とは、画像データの各画素の階調値と所定の閾値との大小比較により前記２値化を行った際に生じる階調値の誤差を、周辺の画素に一定の割合で拡散していく方法である。かかる手法によれば、局所的には原画像の階調値と印刷されるドットにより表現される濃度との間に濃度誤差が生じるものの、周辺の画素に濃度誤差を分散することにより、所定の領域で見ればこの誤差を解消することができる。このため高画質による印刷を実現することができる利点がある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、誤差拡散法は、周辺の画素に濃度誤差を拡散するため、各画素ごとの演算量が多かった。このため、処理に長時間を要していた。近年、プリンタの高解像度化が進み、従来に比べて多くの画素について多値化を行う必要が生じてきたため、誤差拡散法の処理時間の短縮化が望まれていた。
【０００５】
処理の高速化を図るために、並列処理が適用されることが多い。誤差拡散法では、一つの画素の処理によって生じる濃度誤差が拡散されるのを待ってから、次の画素を処理する必要がある。つまり、誤差拡散法では画素を一つ一つ順序よく処理していくことが要求される。このため、従来から誤差拡散法には並列処理は適用できないと考えられていた。
【０００６】
本発明は、かかる課題を解決するためになされたものであり、誤差拡散法による多値化を高速で行うための技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の課題を解決するため、本発明の画像処理装置は、次の構成を採用した。
本発明の画像処理装置は、
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行う画像処理装置であって、
未だ多値化されていない未処理の画素のうち、他の画素から拡散される濃度誤差が完全に確定した複数の画素について、誤差拡散法による多値化を並行して行うことを特徴とする。
【０００８】
かかる画像処理装置によれば、複数の画素について多値化を並行して行うため、誤差拡散法による処理を高速に実行することができる。並列処理による高速化は通常行われる手段であるが、本発明は従来は適用が困難とされてきた誤差拡散法による多値化に並列処理を適用した点に大きな意義がある。この意義について説明する。
【０００９】
誤差拡散法では、一つの画素の処理によって生じる濃度誤差が拡散されるのを待ってから、次の画素を処理する必要がある。かかる処理を実行する性質上、従来、誤差拡散法には並列処理は適用困難とされてきた。例えば、Ｘ方向にＮｘ個、Ｙ方向にＮｙ個の画素が２次元的に配列された画像データを考える。左上の画素を（１，１）と表し、右下の画素を（Ｎｘ、Ｎｙ）と表すものとする。かかる画像データの多値化に並列処理を適用する場合、最初に試みるのは画像データを上下半分、つまり画素のＹ方向の番号がＮｙ／２以下の領域と、Ｎｙ／２よりも大きい領域に分けて適用する方法である。ところが、この場合、２つに分けた領域の境界では、多値化で生じた濃度誤差が解消されず両者の継ぎ目で画質が不連続的に変化する弊害を生じる。
【００１０】
他の手段として、例えば画像領域の左上の画素から右下に向けて順次進める第１の多値化と、右下の画素から左上に向けて順次進める第２の多値化とを並行して行う手段が考えられる。かかる手段においても、画像領域の中心付近で第１の多値化と第２の多値化との継ぎ目が生じ、やはり画質が不連続的に変化するという弊害を生じる。
【００１１】
さらに他の手段として、例えば画像を上下２つの領域に分割し、中央から上方に向けて進める第１の多値化と、中央から下方に向けて進める第２の多値化とを並行して行う手段も考えられる。かかる場合には、中央付近の画素の処理で生じた濃度誤差を周辺の画素に拡散できるため、一見画質が確保されるように推測される。しかしながら、誤差拡散法は、処理を開始した画素付近においては、周辺に濃度誤差を拡散することによっては多値化による誤差を十分に解消し得ないという特質がある。２５６階調ほどの階調値をドットのオン・オフの２値で表現するためには、相当な画素数を必要とするからである。このため、通常、誤差拡散法では画像データの左上などから処理を開始することで、処理開始直後の画素に生じる濃度誤差を目立ちにくくしているのである。上述した方法のように、画像データの中央付近から誤差拡散法による多値化を開始しては、多値化による濃度誤差が目立つようになり、画質を大きく損ねてしまう。
【００１２】
以上、いくつか例を挙げて示したように、誤差拡散法では、画質を低下させることなく並列化を図ることは困難とされていた。かかる背景から、誤差拡散法の並列処理化は技術的な検討対象から除外されていた傾向にあった。本発明者は、画像処理の技術について、このような状況に満足することなく、誤差拡散法への並列処理の適用を追求した結果、以下に説明する事項に気づき、本発明を完成した。
【００１３】
誤差拡散法による多値化を行っている際、画像データ中には、他の画素から拡散される濃度誤差が完全に確定した画素が複数存在することがある。完全に確定した画素とは、誤差拡散法による多値化を継続した場合、その画素に拡散される誤差はその画素自体の処理が開始されるまで一切変動しない画素をいう。以下、このような画素を誤差確定画素と呼ぶ。少なくとも現在処理を実行している着目画素の次に処理が行われる画素は誤差確定画素となる。この他の誤差確定画素は、多値化をする際に誤差が拡散される領域に応じて決まる。また、誤差確定画素は、誤差拡散法による処理の進み具合に応じて現れるものである。
【００１４】
例えば、
前記画像データは、第１の方向および第２の方向に２次元的に配列されたデータであり、
前記誤差拡散法は、前記第１の方向に並ぶ画素列に沿って各画素ごとに、少なくとも前記第２の方向に隣接する画素列に前記濃度誤差を拡散しつつ行われる場合には、
前記並行して多値化が行われる複数の画素は、互いに隣接する画素列上の画素となる。
【００１５】
かかる場合を例にとって、本発明における並列化の様子を具体的に示す。前記第２の方向に隣接する画素列に誤差を拡散する例を図９に示す。図９の各マスは画素を示している。図９中のＸ方向が本発明の第１の方向に相当し、ＰＰ，Ｐ１・・が画素列に相当する。図９では、画素ＰＰについて誤差拡散法による多値化を施した場合の誤差配分を示している。例えば、画素ＰＰで生じた濃度誤差のうち１／４は隣の画素Ｐ１に配分される。その他、図示する通りの配分で着目画素の周辺に濃度誤差は配分され、図９中のＹ方向に隣接する画素列にも誤差が配分される。
【００１６】
誤差拡散法による処理が順次行われていく際の誤差配分の様子を図１０〜図１２に示す。図中の塗りつぶしの画素が処理中の着目画素ＰＰを示している。図中のハッチングを施した画素は着目画素ＰＰから濃度誤差が拡散される画素を示している。図１０に示す画素ＰＰを処理しているときは、そこに隣接する画素列上の画素ＰＱには誤差が拡散される。図１０の画素ＰＰについて処理が終了した後、Ｘ方向に隣接する画素の処理を実行する際には、図１１に示す通り隣接する画素列上の画素ＰＱには誤差は拡散されない。さらに、Ｘ方向に隣接する画素の処理を実行する際にも図１２に示す通り、隣接する画素列上の画素ＰＱには誤差は拡散されない。図１０〜図１２に示す具体例から明らかな通り、着目画素ＰＰに隣接する画素列上の画素ＰＱに拡散される濃度誤差は、図１０に示す画素ＰＰの処理が終了した時点で確定する。この時点で、他の画素から拡散される誤差が完全に確定した画素として、図１０中で着目画素ＰＰの右側に隣接する画素と画素ＰＱの２つが存在することになる。
【００１７】
本発明の画像処理装置は、着目画素ＰＰの右側に隣接する画素の他、この具体例の画素ＰＱのように誤差確定画素についても誤差拡散法による多値化処理を行う。この処理は、図１０〜図１２で示した画素ＰＰの多値化と並行して行うことができる。例えば、図１１の時点で画素ＰＱの多値化を実行すれば、その右側に隣接する画素ＰＲに拡散される画素が確定する。従って、図１２の時点では、画素ＰＰの処理と同時に画素ＰＲについても多値化を行うことができる。
【００１８】
本発明では、このように複数の誤差確定画素について誤差拡散法による多値化を実行することにより、従来、適用が困難とされてきた並列化を実現した。また、このような誤差確定画素について並列処理を実行すれば、並列化の具体例として先に列挙した方法のような継ぎ目が生じることがない。従って、本発明の画像処理装置によれば、従来の誤差拡散法による画質を維持したまま高速化を実現することができる。
【００１９】
なお、上述の具体例では画素ＰＰと画素ＰＱの２つの画素を並列処理する場合について説明した。誤差拡散法による多値化において、誤差確定画素は上述した２つに限らず、さらに多く存在する可能性がある。かかる画素が３つ以上存在する場合には、３つ以上の画素について並列処理を行うものとすることができるのはいうまでもない。また、並列処理の対象となり得る画素の位置関係は、図１０〜図１２で示したものに限定されず、濃度誤差が拡散される領域に応じて特定することができる。当然、Ｙ方向に３行以上にわたって誤差が拡散される場合においても、本発明の適用が可能であることはいうまでもない。
【００２０】
本発明の画像処理装置について、少なくとも２つの画素について並列処理を実行する装置は次の通り構成することができる。
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行う画像処理装置であって、
第１の方向および第２の方向に２次元的に配列された画像データを入力する入力手段と、
未だ多値化されていない未処理の画素を、前記第１の方向に並ぶ画素列に沿って順に、少なくとも前記第２の方向に隣接する画素列に濃度誤差を拡散する誤差拡散法により多値化を行う第１の多値化手段と、
前記第１の多値化手段により多値化が行われる画素列に対し、前記第２の方向に隣接する画素列上の画素のうち、他の画素から拡散される濃度誤差が完全に確定した画素について、第１の多値化手段による多値化と並行して誤差拡散法による多値化を行う第２の多値化手段とを備える画像処理装置である。
【００２１】
また、本発明はこれと同等な画像処理方法として構成することもできる。
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行う画像処理方法であって、
（ａ）第１の方向および第２の方向に２次元的に配列された画像データを入力する工程と、
（ｂ）未だ多値化されていない未処理の画素を、前記第１の方向に並んだ画素列に沿って順に誤差拡散法により多値化を行う工程と、
（ｃ）前記工程（ｂ）で多値化が行われる画素列に対し前記第２の方向に隣接する画素列上に他の画素から拡散される濃度誤差が完全に確定した画素が現れた後に、前記工程（ｂ）と並行して、該隣接する画素列上の画素を誤差拡散法により多値化する工程とを備える画像処理方法である。
【００２２】
こうすれば、先に図１０〜図１２を用いて説明したのと同様の作用に基づき、２つの画素について並列して多値化処理を実行することができる。上記発明は２つの画素について並列処理を実行するものに限定するものではなく、３つ以上の画素についての並列処理を実行するものとしても構わない。
【００２３】
なお、第１の多値化手段は、画素列の一端から他端に向けて第１の方向に順に多値化処理を実行し、他端まで処理が完了した後は、別の画素列の処理を実行する。別の画素列の処理を開始した際、第２の多値化手段による多値化がまだ終了していなければ、第１の多値化手段は、第２の多値化手段により多値化が行われる画素列に対して、前記第２の方向に隣接する画素列上の画素に存在する誤差確定画素について多値化を行うことになる。つまり、上記発明における第１の多値化手段の立場と第２の多値化手段の立場とが逆転することになる。本発明による画像処理装置は、このように一画素列についての処理が終了する度に、第１の多値化手段と第２の多値化手段とにより処理される画素を特定する方法を交互に変更する手段をさらに備えた装置として捉えることもできる。当然、本発明の画像処理方法も同様に工程（ｂ）と工程（ｃ）とで処理される画素を特定する方法を交互に変更することを含めた方法として捉えることもできる。
【００２４】
少なくとも２つの画素についての並列処理を実現する上記画像処理装置において、
前記第２の多値化手段は、多値化を行う画素について、他の画素から拡散される濃度誤差が完全に確定したか否かを判定する判定手段を備えるものとすることができる。かかる判定は、例えば第１の多値化手段により処理が実行されている画素との間隔に基づいて判断するものや、第１の多値化処理に伴って各画素に拡散される濃度誤差を所定の期間だけ観察して判断するものとすることができる。こうすれば、第２の多値化手段が誤差確定画素ではない画素を謝って処理する可能性を低減することができ、高画質な多値化が行われる確実性が増す。
【００２５】
また、上記画像処理装置において、例えば、第２の多値化手段は、第１の多値化手段による多値化処理から所定のタイミングだけずらして多値化を行うことにより、結果的に他の画素から拡散された誤差が完全に確定した画素を処理するようにしてもよい。
例えば、前記第１の多値化手段により多値化が行われている着目画素と前記第２の多値化手段により多値化が行われている着目画素とは、前記第１の方向に前記画素列の幅の約半分の間隔を有している位置関係にあるものとできる。
【００２６】
通常、誤差拡散法では画素列の幅の半分にわたって誤差を拡散したりはしない。このような広範囲に亘って誤差を拡散する場合には、画像の両端を処理している際に誤差を十分に拡散できなくなり、多値化後の画質を損ねることになるからである。従って、上記画像処理装置のように、２つの多値化手段による多値化のタイミングをずらしておけば、一方の多値化手段により誤差が拡散される領域に他方の多値化手段の着目画素が入ることは生じ難い。従って、複雑な判断処理を施すことなく、第１の多値化手段と第２の多値化手段による並列処理を実現することができる。
【００２７】
第１の多値化手段による着目画素と第２の多値化手段の着目画素との間隔を誤差が拡散される幅よりも広げておけば上述した効果を得ることはできる。但し、両者の間隔を画素列の幅の約半分としておけば、一方の多値化手段により濃度誤差が拡散される領域と、他方の多値化手段の処理対象となる画素とが重複する可能性を極小にすることができる。従って、並列処理によって画質を損なう可能性を極小にすることができる。さらに、第１の多値化手段により一つの画素列の処理が終了した時点で、第２の多値化手段は隣接する画素列の処理を概ね半分済ませているため、第１の多値化手段は待ち時間なく次の画素列の処理を開始することができ非常に効率的な処理を実現することができる。
【００２８】
本発明の画像処理装置において、第１の多値化手段と第２の多値化手段とは異なる演算回路によって構成されることが望ましい。本発明の画像処理装置は、第１の多値化手段と第２の多値化手段とを同じ演算回路で実現して構成することも可能であるが、両者を異なる演算回路で構成すれば、並列処理による高速化の効果を最大限に得ることができる。ここで演算回路とは、誤差拡散法による多値化を行うための専用回路であってもよいし、ＣＰＵなどの汎用回路であってもよい。当然、両者の組み合わせであってもよい。
【００２９】
通常、誤差拡散法による多値化処理を行う画像処理装置では、拡散された誤差を画素との対応関係を付けて記憶するためのメモリを有している。本発明の画像処理装置では、第１の多値化手段で使用するメモリと、第２の多値化手段で使用するメモリとをそれぞれ用意することもできる。
【００３０】
また、両手段で使用するメモリを次の形で共有するものとしてもよい。
つまり、２つの画素についての並列処理を行う画像処理装置において、
前記画像データは前記第１の方向にＮｘ個（Ｎｘは２以上の整数）の画素を有するデータであり、
前記第１の多値化手段は、Ｙ番目からＹ＋ｎ−１番目（Ｙ，ｎは自然数）までのｎ本の画素列上の未処理の画素に濃度誤差を拡散する手段であり、
前記第２の多値化手段は、
Ｙ＋１番目からＹ＋ｎ番目までのｎ本の画素列上の未処理の画素に濃度誤差を拡散し、かつ、前記第１の多値化手段によりＹ番目の画素列に濃度誤差が拡散される領域と前記Ｙ＋ｎ番目の画素列に濃度誤差が拡散される領域との前記第１の方向の位置が重複しない画素を処理する手段であり、
前記第１の方向にＮｘ個、前記第２の方向にｎ個ずつ２次元的に配列された画素に対応したメモリと、
前記Ｙ＋１番目からＹ＋ｎ−１番目までのｎ−１本の画素列に拡散された濃度誤差を、前記第１の方向および前記第２の方向について画素とメモリの位置関係を一義的に保ちつつ、ｎ−１本の画素に対応したメモリに記憶し、
かつ、
残余の１本の画素列に対応したメモリには、前記Ｙ番目の画素列に拡散された濃度誤差と前記Ｙ＋ｎ番目の画素列に拡散された濃度誤差とを、前記第１の方向について画素とメモリの位置関係を一義的に保ちつつ記憶する記憶手段とを備える画像処理装置である。
【００３１】
第１の多値化手段により誤差が拡散される領域と、第２の多値化手段により誤差が拡散される領域とは、Ｙ＋１番目からＹ＋ｎ−１番目の画素列までの領域で重複している。従って、この領域では両手段により拡散される誤差を記憶するメモリを共有することができ、そのためにはＮｘ×（ｎ−１）画素分のメモリがあればよい。このメモリに加えて、第１の多値化手段によりＹ番目の画素列に拡散される誤差を記憶するためのメモリと、第２の多値化手段によりＹ＋ｎ番目の画素列に拡散される誤差を記憶するためのメモリとがあれば、両手段により拡散される誤差を混同することなく記憶することが可能となる。上記画像処理装置では、Ｙ番目の画素列に誤差が拡散される領域と、Ｙ＋ｎ番目の画素列に誤差が拡散される領域との前記第１の方向の位置関係が重複しないように第２の多値化手段の着目画素を制御した上で、これらの画素列に拡散された濃度誤差を一つの画素列に対応したメモリに記憶する。このように双方の多値化手段により拡散された誤差を記憶するためのメモリを、一部共有することにより、メモリ容量を節約することができる。また、メモリの共有によって、第１の多値化手段と第２の多値化手段との間で濃度誤差を伝達し合う必要がなくなり、処理の高速化を図ることができる。
【００３２】
次の態様を採ることによって、拡散された誤差を記憶するメモリを更に節約することもできる。
つまり、２つの画素についての並列処理を行う画像処理装置において、
前記画像データは前記第１の方向にＮｘ個（Ｎｘは２以上の整数）の画素を有するデータであり、
前記第１の多値化手段は、Ｙ番目からＹ＋ｎ−１番目（Ｙ，ｎは自然数）までのｎ本の画素列上の未処理の画素に対し、処理対象である第１の着目画素から第１の方向に最大ｍ画素（ｍは自然数）に亘って濃度誤差を拡散する手段であり、
前記第２の多値化手段は、Ｙ＋１番目からＹ＋ｎ番目までのｎ本の画素列上の未処理の画素に対し、処理対象である第２の着目画素から第１の方向に最大ｍ画素に亘って濃度誤差を拡散する手段であり、
前記第１の方向にＮｘ個、前記第２の方向にｎ−１個ずつ２次元的に配列された画素に対応した第１のメモリと、
２ｍ個の画素に対応した第２のメモリとを備え、
前記Ｙ＋２番目からＹ＋ｎ番目までのｎ−１本の画素列に拡散された濃度誤差を、前記第１の方向および前記第２の方向について画素とメモリの位置関係を一義的に保ちつつ、ｎ−１本の画素に対応した第１のメモリに記憶し、
かつ、
前記Ｙ番目の画素列において前記第１の着目画素から前記第１の方向にｍ個の画素に拡散された誤差、および前記Ｙ＋１番目の画素列において前記第２の着目画素から前記第１の方向にｍ個の画素に拡散された誤差を、前記第２のメモリに記憶する記憶手段とを備える画像処理装置である。
【００３３】
こうすれば、メモリ量を「Ｎｘ×ｎ＋２ｍ」に節約することができる。上記第２のメモリに記憶される誤差には、第１の多値化手段および第２の多値化手段によって新たに拡散される誤差のみならず、従前の処理により既に拡散済みの誤差との総和を記憶する必要がある。なお、上述した態様の他、各メモリへの誤差の割り当ては、異なる画素に拡散された誤差が同じメモリに混同して記憶されることが回避することができる種々の対応関係を採用することができる。
【００３４】
以上で説明した本発明の印刷装置は、誤差拡散法による多値化処理をコンピュータにより実現させることによっても構成することができる。従って、本発明は、かかるプログラムを記録した記録媒体としての態様を採ることもできる。
【００３５】
本発明の記録媒体は、
各画素を多値化した際に生じる濃度誤差を未だ多値化されていない周辺の画素に拡散する誤差拡散法により、入力された画像データの多値化を行うためのプログラムをコンピュータ読みとり可能に記録した記録媒体であって、
第１の方向および第２の方向に２次元的に配列された画像データを入力する機能と、
未だ多値化されていない未処理の画素を、前記第１の方向に並んだ画素列に沿って順に誤差拡散法により多値化を行う第１の多値化機能と、
前記第１の多値化機能により多値化が行われる画素列に対し前記第２の方向に隣接する画素列上の画素のうち、他の画素から拡散される濃度誤差が完全に確定した画素を特定する機能と、
該特定された画素について、前記第１の多値化機能と並行して誤差拡散法による多値化を行う第２の多値化機能とを実現するプログラムを記録した記録媒体である。
【００３６】
なお、記録媒体としては、フレキシブルディスクやＣＤ−ＲＯＭ、光磁気ディスク、ＩＣカード、ＲＯＭカートリッジ、パンチカード、バーコードなどの符号が印刷された印刷物、コンピュータの内部記憶装置（ＲＡＭやＲＯＭなどのメモリ）および外部記憶装置等の、コンピュータが読取り可能な種々の媒体を利用できる。また、コンピュータに上記機能を実現させるコンピュータプログラムを通信経路を介して供給するプログラム供給装置としての態様も含む。
【発明を実施するための最良の形態】
【００３７】
以下、本発明の実施の形態について、実施例に基づき説明する。
（１）装置の構成
図１は、本発明の一実施例としての画像処理装置を適用した印刷装置の構成を示すブロック図である。図示するように、コンピュータ９０にスキャナ１２とカラープリンタ２２とが接続されている。コンピュータ９０が本実施例の画像処理装置として機能する。このコンピュータ９０は、プログラムに従って画像処理に関わる各種演算処理を実行する演算装置としてＣＰＵ８１Ａ、８１Ｂの２つを備える。また、これらのＣＰＵ８１Ａ，８１Ｂを中心に、バス８０により相互に接続された次の各部を備える。ＲＯＭ８２は、ＣＰＵ８１Ａ，８１Ｂで各種演算処理を実行するのに必要なプログラムやデータを予め格納している。
【００３８】
ＲＡＭ８３は、同じくＣＰＵ８１Ａ，８１Ｂで各種演算処理を実行するのに必要な各種プログラムやデータが一時的に読み書きされるメモリである。本実施例のＲＡＭは２つのＣＰＵ８１Ａ，８１Ｂからアクセスされる。従って、本実施例では、２つのＣＰＵが互いにタイミングを考慮することなく自由に読み書きすることができるタイプのＲＡＭを用いている。もちろん、若干の処理効率の低下を覚悟すれば、通常のＲＡＭを用い、ＲＡＭへの読み書きが２つのＣＰＵから同時に行われることがないよう、アクセスのタイミングを制御するものとしても構わない。
【００３９】
入力インターフェイス８４は、スキャナ１２やキーボード１４からの信号の入力を司り、出力インタフェース８５は、プリンタ２２へのデータの出力を司る。ＣＲＴＣ８６は、カラー表示可能なＣＲＴ２１への信号出力を制御し、ディスクコントローラ（ＤＤＣ）８７は、ハードディスク１６やＣＤ−ＲＯＭドライブ１５あるいは図示しないフレキシブルディスクドライブとの間のデータの授受を制御する。ハードディスク１６には、ＲＡＭ８３にロードされて実行される各種プログラムやデバイスドライバの形式で提供される各種プログラムなどが記憶されている。
【００４０】
このほか、バス８０には、シリアル入出力インタフェース（ＳＩＯ）８８が接続されている。このＳＩＯ８８は、モデム１８に接続されており、モデム１８を介して、公衆電話回線ＰＮＴに接続されている。コンピュータ９０は、このＳＩＯ８８およびモデム１８を介して、外部のネットワークに接続されており、特定のサーバーＳＶに接続することにより、画像処理に必要なプログラムをハードディスク１６にダウンロードすることも可能である。また、必要なプログラムをＣＤ−ＲＯＭやフレキシブルディスクによりロードし、コンピュータ９０に実行させることも可能である。
【００４１】
図２は本画像処理装置のソフトウェアの構成を示すブロック図である。コンピュータ９０内の画像処理装置は、いわゆるプリンタドライバ１００がコンピュータ９０にロードされ、図示する各機能を実現することにより構成される。まず、入力部１０２は画像処理装置が処理すべき画像データを入力する。この画像データは、図１に示したスキャナ１２から取り込まれたデータである場合もあるし、コンピュータ９０が種々のアプリケーションプログラムを実行することによって生成されたデータである場合もある。
【００４２】
入力された画像データはレンダリング部１０４のに受け渡される。レンダリング部は、画像データをＸ方向、Ｙ方向に２次元的に配列された画素に対応したデータに変換する。この結果、各画素ごとにレッド（Ｒ），グリーン（Ｇ），ブルー（Ｂ）の３色の色成分の階調値を有する画像データが生成される。レンダリング部で生成された画像データの様子を図３に示す。図中のマスがそれぞれの画素を示している。本実施例では、Ｘ方向にＮｘ個、Ｙ方向にＮｙ個の画素を２次元的に配列している。本明細書では、図３に示す通り、画像データの左上から順にＸ方向、Ｙ方向に番号を付し、各画素を（Ｘ方向の番号、Ｙ方向の番号）の座標形式で特定するものとする。従って、画像データの左上の画素は、（１，１）と表され、右下の画素は（Ｎｘ，Ｎｙ）と表される。
【００４３】
こうして生成された画像データは、色補正部１０６に受け渡される。色補正部１０６では、ＲＧＢからなる画像データを、プリンタ２２が印刷可能な色彩、ここではシアン（Ｃ）、マゼンダ（Ｍ）、イエロー（Ｙ）、ブラック（Ｋ）の各色についての多値化された信号）に変換している。色補正部１０６は、色補正テーブルＬＵＴを参照して、画像データのＲＧＢの階調値をＣＭＹＫの各色の階調値に置換するのである。本実施例では、各色成分につき、２５６階調等の幅で階調値を有するものとした。
【００４４】
ＣＭＹＫの階調値を有する画像データは、ハーフトーン処理部１１０により２値化される。つまり、プリンタ２２で形成されるドットのオン・オフに対応するデータを各画素ごとに割り当てる。本実施例のプリンタドライバ１００では、ハーフトーン処理を図２に示す第１誤差拡散部１１２と第２誤差拡散部１１４の２つのブロックにより並列して処理可能に構成している。両者は画像データを分担して誤差拡散法による２値化を実行する。本実施例では、第１誤差拡散部１１２が奇数番目の画素列上の画素、即ち（ｎ，２ｍ−１）（ｎ，ｍは自然数）で表される画素を処理し、第２誤差拡散部１１４が偶数番目の画素列上の画素、即ち（ｎ，２ｍ）（ｎ，ｍは自然数）で表される画素を処理するものとしている。両者の分担の様子を図４に示した。図４中に実線の矢印が第１誤差拡散部１１２による処理の順序を示しており、破線の矢印が第２誤差拡散部１１４による処理の順序を示している。各画素列は、図４に示す通り、Ｘ方向の番号が小さい順に処理される。なお、第１誤差拡散部１１２と第２誤差拡散部１１４による処理タイミングについては後述する。
【００４５】
誤差拡散法では、後で詳述する通り各画素の２値化に伴って生じる濃度誤差を周辺の画素に拡散することによって、濃度誤差を極小にした画像処理を実現している。この濃度誤差を記憶するメモリとして、第１誤差拡散部１１２と第２誤差拡散部１１４とはそれぞれ共通の誤差バッファ１１６を使用している。もちろん、第１誤差拡散部１１２が使用する第１の誤差バッファと第２誤差拡散部１１４が使用する誤差バッファとを別個に設けるものとしても構わない。
【００４６】
以上の各機能ブロックにより処理された画像データは、出力部１２０を介してプリンタ２２に出力される。プリンタ２２はこのデータに基づいて書く画素ごとにドットを形成することで入力された画像データに対応した画像を印刷することができる。本実施例では、画像処理結果の出力先の一例としてプリンタ２２を使用しているが、出力先はこれに限られるものではない。いわゆるプリンタの他、スクリーン印刷用の製版装置に出力することもできるし、ディスプレイに出力するものとしても構わない。
【００４７】
本実施例で使用しているプリンタ２２は、いわゆるインクジェット型のプリンタである。つまり、印刷用紙上にインクを吐出してドットを形成することによって、画像を記録するプリンタである。もちろん、その他のタイプのプリンタ、例えばいわゆるドットインパクト型のプリンタや熱転写型のプリンタなどを用いるものとしても構わない。
【００４８】
（２）画像処理：
次に本実施例の画像処理装置における画像処理内容について説明する。図５に本実施例の画像処理装置による画像処理ルーチンのフローチャートを示す。この処理は、コンピュータ９０内のＣＰＵ８１Ａ，８１Ｂにより実行される。本実施例ではＣＰＵ８１Ａが主として処理を実行し、ＣＰＵ８１ＢはＣＰＵ８１Ａとともに後述するハーフトーン処理を実行する。
【００４９】
図５に示す通り、画像処理ルーチンが開始されると、ＣＰＵ８１Ａは画像データの入力を行う（ステップＳ１００）。この画像データは、先に図２に示した入力部１０２が入力する画像データに相当する。つまり、スキャナ１２から読み込まれたデータや種々のアプリケーションなどによって生成された原画像データである。次に、ＣＰＵ８１Ａはこの画像データに対してレンダリング処理を実行する（ステップＳ２００）。この処理は、図２で示したレンダリング部１０４が実行する処理に相当する。つまり、ステップＳ１００で読み込まれた画像データを２次元的に配列された画素に対応したＲＧＢの階調データに置換するのである。レンダリング処理によって得られる画像データは、図３に示した通り、Ｘ方向にＮｘ個、Ｙ方向にＮｙ個のサイズで各画素ごとにＲＧＢの階調値を有するデータである。
【００５０】
次に、ＣＰＵ８１Ａは、色補正処理を行う（ステップＳ３００）。色補正処理とはＲ，Ｇ，Ｂの階調値からなる画像データをプリンタ２２で使用するＣ，Ｍ，Ｙ，Ｋの各色の階調値のデータに変換する処理である。この処理は、Ｒ，Ｇ，Ｂのそれぞれの組み合わせからなる色をプリンタ２２で表現するためのＣ，Ｍ，Ｙ，Ｋの組み合わせを記憶した色補正テーブルＬＵＴ（図２参照）を用いて行われる。色補正テーブルＬＵＴを用いて色補正する処理自体については、公知の種々の技術が適用可能であり、例えば補間演算による処理（例えば、特開平４−１４４４８１記載の技術）が適用できる。色補正処理の内容は、出力機器によって相違する。出力機器がＲＧＢの色系を使用する場合には色補正処理を省略することができる。
【００５１】
こうして色補正された画像データは誤差拡散法によるハーフトーン処理が施される（ステップＳ４００）。ここでのハーフトーン処理とは、原画像データの階調値（本実施例では２５６階調）を、プリンタ２２のドットのオン・オフに対応した２値のデータに変換することをいう。本実施例では、ＣＰＵ８１ＡとＣＰＵ８１Ｂの２つの演算回路によりこの処理を並行して行っている。ＣＰＵ８１Ａが図２における第１誤差拡散部１１２に相当し、ＣＰＵ８１Ｂが図２における第２誤差拡散部１１４に相当する。
【００５２】
図６は本実施例におけるハーフトーン処理の流れを示すフローチャートである。以下では、カラー画像データのうち、一色についての処理内容を示す。実際には、各色ごとに同様の処理が繰り返し実行される。図６には、ＣＰＵ８１Ａが実行する第１ハーフトーン処理と、ＣＰＵ８１Ｂが実行する第２ハーフトーン処理とを併記した。両者の処理は、互いに関連を持ったタイミングで並行して進められる。
【００５３】
第１ハーフトーン処理が開始されるとＣＰＵ８１Ａは、２値化を行うべき着目画素を特定する変数（ｋｘ１、ｋｙ１）に値（１，１）を代入して、この変数を初期化する（ステップＳ４１０）。図４に示す通り、ＣＰＵ８１Ａは画像データの左上端から順に２値化を行う。従って、最初に処理すべき画素（１，１）を特定するデータを上記変数（ｋｘ１、ｋｙ１）に代入するのである。
【００５４】
一方、この処理と並列して第２ハーフトーン処理が開始されるとＣＰＵ８１Ｂは、２値化を行うべき着目画素を特定する変数（ｋｘ２、ｋｙ２）に値（１，２）を代入する（ステップＳ４４０）。図４に示す通り、ＣＰＵ８１ＢはＣＰＵ８１Ａが処理する画素列の直下に隣接する画素列の左端から順に２値化を行う。従って、最初に処理すべき画素（１，２）を特定するデータを上記変数（ｋｘ２、ｋｙ２）に代入するのである。
【００５５】
次に、ＣＰＵ８１ＡおよびＣＰＵ８１Ｂはそれぞれの着目画素の位置関係に基づいて、ハーフトーン処理を進めてよいか否かを判定する。第１ハーフトーン処理において、ＣＰＵ８１Ａは次式（１）が満足されているか否かによってこれを判断する（ステップＳ４１２）。次式（１）が満足されている場合には処理の実行を待つ（ステップＳ４１４）。
ｋｘ２−Ｎｘ／２  ＜  ｋｘ１  ＜  ｋｘ２  ・・・（１）
【００５６】
かかる判定の意味について図７を用いて説明する。なお、以下の説明では、ＣＰＵ８１ＡとＣＰＵ８１Ｂとの処理タイミングを表現するために、便宜上「処理が進んでいる」「処理が遅れている」という表現を用いる。「処理が進んでいる」とは、一方のＣＰＵが処理している着目画素が、他方のＣＰＵが処理している着目画素よりも右側に位置する、つまりＸ方向の番号が大きいことを意味するものとする。両着目画素のＹ方向の位置関係は問わない。「処理が遅れている」とは、この逆に、一方のＣＰＵが処理している着目画素が、他方のＣＰＵが処理している着目画素よりも左側に位置することを意味するものとする。
【００５７】
本実施例では、例えば、ＣＰＵ８１Ａが図７中の矢印Ａ１で示す画素を処理している時、その下側に隣接する画素列上の画素を処理するＣＰＵ８１Ｂは、矢印Ｂ１で示す通り、Ｘ方向の画素の幅の約半分に相当する分だけ遅れたタイミングで処理を実行するものとしている。ＣＰＵ８１Ａが図７中の矢印Ａ１で示す画素列の処理を終了した時点で、ＣＰＵ８１Ｂは図７中の矢印Ｂ２当たりの画素列の処理を行うことになる。このとき、ＣＰＵ８１Ａは逆にＣＰＵ８１Ｂから、Ｘ方向の画素の幅の約半分に相当する分だけ遅れたタイミングで処理を実行する（図７の矢印Ａ２）。本実施例では、このように下側に位置する画素列を処理するＣＰＵが他方のＣＰＵよりも、Ｘ方向の画素の幅の約半分に相当する分だけ遅れたタイミングで処理を実行するものと設定しているのである。かかるタイミングで処理を実行する理由については後述する。ＣＰＵ８１ＡはステップＳ４１２，４１４において上式（１）を満足するか否かを判定することにより、次の通り図７に示した処理のタイミングが維持されるように制御している。
【００５８】
ＣＰＵ８１Ａの着目画素のＸ方向の番号ｋｘ１がＣＰＵ８１Ｂの着目画素のＸ方向の番号ｋｘ２よりも小さい場合、ＣＰＵ８１ＡはＣＰＵ８１Ｂよりも処理が遅れた状態にあることを意味する。ＣＰＵ８１Ａが図７中の矢印Ａ２の状態にあり、ＣＰＵ８１Ｂが矢印Ｂ２の状態にある場合に相当する。この状態において、ｋｘ１が「ｋｘ２−Ｎｘ／２」よりも大きい場合には、ｋｘ１とｋｘ２との間隔がＸ方向の画素の幅Ｎｘの半分以下であることを意味する。つまり、上式（１）を満足する場合、ＣＰＵ８１Ａは処理のタイミングが早くなり過ぎ、処理が進んでいるＣＰＵ８１Ｂに追いつくおそれがあることを意味している。従って、ＣＰＵ８１Ａは処理タイミングを調整するために、ステップＳ４１４で処理の実行を待つのである。
【００５９】
一方、ＣＰＵ８１Ａの方が処理が進んでいる場合、つまりＣＰＵ８１Ａが図７中の矢印Ａ１の状態にあり、ＣＰＵ８１Ｂが矢印Ｂ１の状態にある場合、処理タイミングの調整は、第２ハーフトーン処理において行われる。第２ハーフトーン処理においてＣＰＵ８１Ｂは、ｋｘ２が次式（２）を満足するか否かを判定し（ステップＳ４４２）、満足する場合にはＣＰＵ８１Ａに追いつくおそれがあると判断して処理を待つ（ステップＳ４４４）。次式（２）の内容は、上式（１）においてＣＰＵ８１Ａ，８１Ｂの関係を入れ替えた場合に等しい。
ｋｘ１−Ｎｘ／２  ＜  ｋｘ２  ＜  ｋｘ１  ・・・（２）
【００６０】
第１ハーフトーン処理におけるステップＳ４１２、および第２ハーフトーン処理におけるステップＳ４４２でＣＰＵ８１ＡとＣＰＵ８１Ｂとは、図７に示した所定のタイミングを維持しながら処理を進めるように互いの着目画素の情報を伝達し合っている。ＣＰＵ８１Ａ，８１Ｂ相互のやりとりを、図６では破線の矢印で示した。
【００６１】
以上の処理により２値化を実行すべきと判断されるとＣＰＵ８１Ａは画像データの読み込みを行う（ステップＳ４１６）。この画像データは、既に説明した通り、各画素ごとにＣＭＹＫの色成分についてそれぞれ２５６階調を有するデータである。この画像データに対して、ＣＰＵ８１Ａは誤差拡散処理を実行する（ステップＳ４１８）。誤差拡散処理の内容を図８に示す。
【００６２】
誤差拡散処理では、ＣＰＵ８１Ａは、画像データに基づいて拡散誤差補正データＣＤＸの生成を行う（ステップＳ４６０）。後述する通り、誤差拡散処理は処理済みの画素について生じた階調表現の誤差をその画素の周りの画素に所定の重みを付けて配分する。各画素の処理は、その画素に配分される誤差も考慮して行われる。従って、ステップＳ４６０では着目画素に該当する誤差分を読み出し、着目画素の画像データに反映させるのである。着目している画素ＰＰに対して、周辺の画素にどの程度の重み付けで、この誤差を配分するかを、図９に例示した。着目している画素ＰＰに対して、Ｘ方向に数画素、Ｙ方向に隣接する画素列上の数画素に対して、濃度誤差が所定の重み（１／４，１／８、１／１６）を付けて配分される。
【００６３】
ＣＰＵ８１Ａは、こうして生成された拡散誤差補正データＣＤＸと閾値ＴＨとの大小を比較し（ステップＳ４６２）、データＣＤＸが閾値ＴＨよりも小さい場合には、２値化結果を表す結果値ＲＥに値０を代入する（ステップＳ４６４）。本実施例においては、結果値ＲＥに値０を代入することは、プリンタ２２で着目画素にドットを形成しないことを意味する。閾値ＴＨはこのように２値化した結果値ＲＥが値０となるか否かを判定する基準となる値であり、いずれの値に設定することもできる。本実施例では原画像データの２５６階調を２値化するため、その中間の階調値１２７に設定している。ステップＳ４６２において、補正データＣＤＸが閾値ＴＨよりも大きい場合には、結果値ＲＥに値１を代入する（ステップＳ４６６）。本実施例においては、結果値ＲＥに値１を代入することは、プリンタ２２で着目画素にドットを形成することを意味する。
【００６４】
次に、ＣＰＵ８１Ａは２値化により生じた誤差を計算し、その誤差を周辺の画素に拡散する処理を実行する（ステップＳ４６８）。誤差とは、原画像データの階調値に相当する濃度と、２値化後結果により表現される濃度との差をいう。例えば、原画像データにおける階調値が０である場合、結果値ＲＥが０であれば、表現される濃度に誤差は生じない。このとき誤差は値０となる。原画像データにおける階調値０に対して、結果値ＲＥが１であれば表現される濃度に誤差が生じる。一つのドットによって表現される濃度が原画像の階調値２５５に相当すると評価されれば、誤差は「−２５５」となる。負号を付けたのは、２値化後の濃度の評価値よりも原画像データの階調値の方が小さいことを意味している。
【００６５】
こうして演算された誤差は図９に示した割合で周辺の画素に拡散される（ステップＳ４６８）。例えば、着目している画素ＰＰにおいて階調値４に相当する誤差が算出された場合には、隣の画素Ｐ１には誤差の１／４である階調値１に相当する誤差が拡散されることになる。その他の画素についても同様に図９で示した割合で誤差が拡散される。こうして拡散された誤差が先に説明したステップＳ４６０で画像データに反映され、拡散誤差補正データＣＤＸが生成される。
【００６６】
以上の処理により、着目画素について２値化が行われると、ＣＰＵ８１Ａはｋｘ１を値１だけ増す（ステップＳ４２０）。この処理により着目画素がＸ方向に１つずれる。さらに、ｋｘ１がＮｘよりも大きいか否かを判定し（ステップＳ４２２）、大きい場合には、ｋｘ１の値を１にすると共にｋｙ１の値を２値化だけ増やす（ステップＳ４２４）。ｋｘ１の値がＮｘよりも大きくなった場合は、一つの画素列について右端まで処理が終了したことを意味するため、次の画素列の左端の画素に対応するデータをｋｘ１，ｋｙ１に代入するのである。ｋｙ１を値２だけ増やすのは、図７に示した通り、本実施例では、ＣＰＵ８１Ａは奇数番目の画素列の２値化を行うものとしているからである。ステップＳ４２２において、ｋｘ１の値がＮｘ以下である場合は上記処理はスキップされる。
【００６７】
次にＣＰＵ８１Ａは、ｋｙ１の値がＮｙよりも大きいか否かを判定する（ステップＳ４２６）。ｋｙ１の値がＮｙよりも大きい場合、ＣＰＵ８１Ａは全ての画像データを処理したことを意味するため、第１ハーフトーン処理を終了する。ｋｙ１の値がＮｙ１以下である場合には、ステップＳ４１２以降の処理を繰り返すことによって次の着目画素の２値化を実行する。
【００６８】
第２ハーフトーン処理におけるステップＳ４４２，Ｓ４４４の処理によって、２値化を実行すべきと判断されるとＣＰＵ８１Ｂは画像データの２値化を実行する。２値化の処理内容は第１ハーフトーン処理と同様である。つまり、画像データを読み込み（ステップＳ４４６）、誤差拡散処理を実行する（ステップＳ４４８）。誤差拡散処理の内容も第１ハーフトーン処理（図８）と同様である。この後、ｋｘ２，ｋｙ２をそれぞれ増して、着目画素を順次ずらしつつ、全画像データについて処理を実行する（ステップＳ４５２〜Ｓ４５６）。なお、この処理は、第１ハーフトーン処理とは独立して並行処理される。処理タイミングによっては、ＣＰＵ８１Ａが第１ハーフトーン処理のデータ読み込みを実行している間に、ＣＰＵ８２Ｂは誤差拡散法による２値化を行っているというように、両者の処理内容が異なっている可能性もある。
【００６９】
以上で説明した通り、ＣＰＵ８１Ａ，ＣＰＵ８１Ｂによりハーフトーン処理が終了すると（図５のステップＳ４００）、ＣＰＵ８１Ａは２値化された画像データを出力する（ステップＳ５００）。本実施例では、プリンタ２２が出力先となっていることは既に説明した通りである。なお、本実施例では、全ての画像データについてハーフトーン処理が終了した後、データの出力を行うものとしているが、例えば、一つの画素列について処理が終了するごとにデータを出力するものとしても構わない。
【００７０】
ここで、本実施例においてＣＰＵ８１ＡとＣＰＵ８１Ｂの処理タイミングをＸ方向の画素の幅の半分に相当する分だけずらしている理由について説明する。図８のフローチャートから明らかな通り、誤差拡散法では、拡散誤差補正データＣＤＸに基づいて各画素の２値化を行う。拡散誤差補正データＣＤＸは、各画素の画像データに配分された拡散誤差データを反映させて生成される。従って、各画素に配分される拡散誤差データが確定しない間はその画素の２値化処理を行うことができない。本実施例では、ＣＰＵ８１ＡとＣＰＵ８１Ｂとの処理タイミングをずらすことによって、それぞれ拡散誤差データが確定した画素の並列処理を実現しているのである。
【００７１】
誤差拡散法による処理が順次行われていく際の誤差配分の様子を図１０〜図１２に示す。図中の塗りつぶしの画素がＣＰＵ８１Ａによって処理されている着目画素ＰＰを示している。図中のハッチングを施した画素は着目画素ＰＰから濃度誤差が拡散される画素を示している。着目画素から誤差が配分される領域は図９に示した通りである。図１０に示す画素ＰＰを処理しているときは、その画素列の下に隣接する画素列上の画素ＰＱには誤差が拡散される。図１０の画素ＰＰについて処理が終了した後、Ｘ方向に隣接する画素の処理を実行する際には、図１１に示す通り隣接する画素列上の画素ＰＱには誤差は拡散されない。さらに、Ｘ方向に隣接する画素の処理を実行する際にも図１２に示す通り、隣接する画素列上の画素ＰＱには誤差は拡散されない。図１０〜図１２から明らかな通り、誤差拡散法により処理が行われている画素列に隣接する画素列上の画素ＰＱに拡散される画素は、図１０に示す画素ＰＰの処理が終了した時点で確定する。
【００７２】
従って、理論的にはＣＰＵ８１Ａによって図１０に示す画素の処理が終了した以降で、ＣＰＵ８１Ｂによる第２ハーフトーン処理を開始することができる。かかるタイミングでＣＰＵ８１Ｂによる処理が開始された場合、両者の処理速度によっては、図１０の時点で未だ拡散誤差の確定していない画素ＰＲの処理をＣＰＵ８１Ｂが開始してしまう可能性もある。拡散誤差が確定していない状態で２値化の処理を行った場合には、他の画素で生じた濃度誤差を十分に補償し得ず、画質の低下を招く可能性もある。
【００７３】
本実施例では、こうした画質の低下を招く危険性を回避するため、両者の処理タイミングをＮｘ／２画素に相当する分だけずらしているのである。こうすれば、ＣＰＵ８１ＡとＣＰＵ８１Ｂのうち、いずれのＣＰＵの処理が進んでいる場合でも、両者の処理タイミングは一定量ずれているため、上述した原因による画質の低下を招くことなく安定した処理を実現することができる。
【００７４】
本実施例において両者の処理タイミングをＮｘ／２画素に相当する分だけずらしている理由として、誤差バッファの使用方法に基づく理由もある。誤差バッファとは誤差拡散処理（図８）のステップＳ４６８において拡散された誤差を一時的に記憶しておくメモリをいう。
【００７５】
本実施例では、先に図２で説明した通り、ＣＰＵ８１ＡとＣＰＵ８１Ｂによる処理の双方で誤差バッファを共有している。本実施例における誤差バッファへの誤差の記憶について図１３および図１４を用いて説明する。図１３は、ＣＰＵ８１Ａ、ＣＰＵ８１Ｂにより画素ＰＡ，ＰＢの２値化が行われている際に誤差が拡散される領域を示している。ＣＰＵ８１Ａが画素列ｋｙ上の着目画素ＰＡについて２値化処理を実行し、図９に示す配分でそれぞれの画素に誤差を拡散した場合、誤差は図１３中に実線で示す領域に拡散される。図１３中のＡ１はＣＰＵ８１Ａの着目画素ＰＡと同じ画素列上に拡散された誤差を意味し、Ａ２は着目画素ＰＡの下側の画素列に拡散された誤差を示している。
【００７６】
図１４は、本実施例で用意されている誤差バッファ内のメモリ領域を画像データに対応した形で示している。破線で示した各マスが画素に対応したメモリ領域を表している。本実施例では、２つの画素列分に相当する誤差バッファ、つまりＮｘ×２画素分のメモリを用意している。図１４に示す通り、画素ＰＡから拡散された誤差は、図１３中の画素列ｋｙ、ｋｙ＋１と同じ対応関係で誤差バッファに記憶される。
【００７７】
ＣＰＵ８１Ｂが画素列ｋｙ＋１上の着目画素ＰＢについて２値化処理を実行した場合、拡散された誤差は、図１３中に実線で示す領域に拡散される。図１３中のＢ２はＣＰＵ８１Ｂの着目画素ＰＢと同じ画素列ｋｙ＋１上に拡散された誤差を意味し、Ｂ３は着目画素ＰＢの下側の画素列ｋｙ＋２上に拡散された誤差を示している。ＣＰＵ８１Ｂにより拡散された誤差は、図１４に示す通り誤差バッファに記憶される。画素列ｋｙ＋１に拡散された誤差は、ＣＰＵ８１Ａからの拡散誤差Ａ２を記憶する部分と同じく誤差バッファ内の２番目の画素列に対応するメモリに記憶される。この画素列については、ＣＰＵ８１Ａから誤差が拡散された画素とＣＰＵ８１Ｂから誤差が拡散された画素とが重複する場合には、両者の総和をメモリに記憶する。
【００７８】
画素列ｋｙ＋２に拡散された誤差は、誤差バッファ内の１番目の画素列に対応するメモリに記憶される。図１３において着目画素ＰＡよりも左側の画素は既に２値化が終了した画素であるため、この画素に対応する誤差バッファにＣＰＵ８１Ａから拡散された誤差を記憶する必要はない。従って、本実施例ではこの部分に対応するメモリを、ＣＰＵ８１Ｂからｋｙ＋２に拡散された誤差の記憶に利用している。
【００７９】
本実施例では、ＣＰＵ８１ＡおよびＣＰＵ８１Ｂから誤差が拡散されるｋｙ〜ｋｙ＋２の画素列のうち、最上方に位置する画素列ｋｙと最下方に位置する画素列ｋｙ＋２に拡散される誤差を同じ画素列に対応するメモリに記憶することによって、誤差バッファの容量を節約している。また、本実施例では、ＣＰＵ８１ＡとＣＰＵ８１Ｂの処理タイミングをＮｘ／２画素に相当する分だけずらすことによって、画素列ｋｙに拡散された誤差と、画素列ｋｙ＋２に拡散された誤差とが、誤差バッファ内で混同して記憶される可能性を低減している。
【００８０】
以上で説明した本実施例の画像処理装置によれば、ＣＰＵ８１ＡとＣＰＵ８１Ｂとで並列して２値化を行うことにより、誤差拡散法による高画質なハーフトーン処理を高速で行うことができる。また、誤差が完全に確定した画素についての２値化を並列して行うため、画質を損ねることなく高速化を図ることができる。この際、図１４で示した通り、誤差バッファの一部を両ＣＰＵで共有することにより、誤差バッファの量を節約することができるとともに、両ＣＰＵ間で誤差量を伝達し合う必要がなくなるため、さらなる処理の高速化を図ることができる。
【００８１】
なお、本実施例においてＣＰＵ８１Ａ、ＣＰＵ８１Ｂの処理タイミングをＮｘ／２画素分だけずらしているが、タイミングのずらし量は誤差拡散法による誤差の拡散領域に応じて種々設定可能である。本実施例の図６のフローチャートで示したようにＣＰＵ８１ＡとＣＰＵ８１Ｂで処理する着目画素の間隔を制御するための処理（図６中のステップＳ４１２，Ｓ４１４，Ｓ４４２，Ｓ４４４）によって、誤差が完全に確定していない画素について２値化が行われることを回避可能であれば、両者の処理タイミングのずれをさらに狭くしてもよい。例えば、図１１に示す時点ですぐにＣＰＵ８１Ｂによる画素ＰＱの処理を開始するものとしてもよい。
【００８２】
このように密なタイミングで並列処理を行えば、３つ以上の演算回路を用いた並列処理を実現することも可能である。かかる処理の例を図１５に示す。第１の演算回路により画素Ｐ１が処理されている際に誤差が拡散される領域をＰ１ｅとする。この時点では、画素Ｐ２は拡散される誤差が確定しているから、第２の演算回路により画素Ｐ２の処理を実行する。画素Ｐ２の処理によって誤差が拡散される領域をＰ２ｅとする。画素Ｐ２の処理がなされれば、画素Ｐ３に拡散される誤差が確定しているから、第２の演算回路により画素Ｐ３の処理を実行することができる。以下、同様にして第４の演算回路により画素Ｐ４の処理、そして更に多くの画素の処理を並列して行うことができる。この場合、並列処理の多重化の程度に応じて処理速度を向上することができる。
【００８３】
以上の実施例では、２つのＣＰＵ８１Ａ，８１Ｂを用いて処理する場合を例にとって説明したが、一方の処理を誤差拡散による２値化を行うための専用の回路によって実現するものとしてもよい。当然、双方を専用回路によって実現するものとしても構わない。
【００８４】
上述の例では、カラーの画像データを例にとって説明したが、単色の画像データについても同様に適用可能であることは当然である。また、上述の例では２値化の処理を例に採って説明したが、３値以上の多値化を行う画像処理に適用することも可能である。
【００８５】
なお、上記画像処理装置はコンピュータ９０による処理が主体であるから、かかる処理を実現するためのプログラムを記録した記録媒体としての実施の態様を採ることもできる。このような記憶媒体としては、フレキシブルディスクやＣＤ−ＲＯＭ、光磁気ディスク、ＩＣカード、ＲＯＭカートリッジ、パンチカード、バーコードなどの符号が印刷された印刷物、コンピュータの内部記憶装置（ＲＡＭやＲＯＭなどのメモリ）および外部記憶装置等の、コンピュータが読取り可能な種々の媒体を利用できる。また、コンピュータに上記で説明した多値化等を行うコンピュータプログラムを通信経路を介して供給するプログラム供給装置としての態様も可能である。
【００８６】
以上、本発明の種々の実施例について説明してきたが、本発明はこれらに限定されるものではなく、その要旨を逸脱しない範囲で、種々の形態による実施が可能である。
【図面の簡単な説明】
【００８７】
【図１】本発明の画像処理装置の概略構成図である。
【図２】ソフトウェアの構成を示す説明図である。
【図３】画像データの形式を示す説明図である。
【図４】本実施例において画素を処理する順序について示す説明図である。
【図５】本実施例の画像処理ルーチンを示すフローチャートである。
【図６】本実施例のハーフトーン処理ルーチンを示すフローチャートである。
【図７】本実施例における並列処理の処理タイミングを示す説明図である。
【図８】本実施例の誤差拡散処理ルーチンを示すフローチャートである。
【図９】本実施例における誤差配分の重み値を示す説明図である。
【図１０】第１の時点での着目画素と誤差拡散領域との関係を示す説明図である。
【図１１】第２の時点での着目画素と誤差拡散領域との関係を示す説明図である。
【図１２】第３の時点での着目画素と誤差拡散領域との関係を示す説明図である。
【図１３】並列処理による誤差拡散領域の関係を示す説明図である。
【図１４】誤差バッファにおける拡散誤差の記憶の様子を示す説明図である。
【図１５】４重化の並列処理の様子を示す説明図である。
【符号の説明】
【００８８】
１２…スキャナ
１４…キーボード
１５…ＣＤ−ＲＯＭドライブ
１６…ハードディスク
１８…モデム
２１…カラーディスプレイ
２２…カラープリンタ
８０…バス
８１…ＣＰＵ
８２…ＲＯＭ
８３…ＲＡＭ
８４…入力インターフェイス
８５…出力インタフェース
８６…ＣＲＴＣ
８７…ディスクコントローラ（ＤＤＣ）
８８…シリアル入出力インタフェース（ＳＩＯ）
９０…パーソナルコンピュータ
１００…プリンタドライバ
１０２…入力部
１０４…レンダリング部
１０６…色補正部
１１０…ハーフトーン処理部
１１２…第１誤差拡散部
１１４…第２誤差拡散部
１１６…誤差バッファ
１２０…出力部
【図１】
2005143140.tif 000003
【図２】
2005143140.tif 000004
【図３】
2005143140.tif 000005
【図４】
2005143140.tif 000006
【図５】
2005143140.tif 000007
【図６】
2005143140.tif 000008
【図７】
2005143140.tif 000009
【図８】
2005143140.tif 000010
【図９】
2005143140.tif 000011
【図１０】
2005143140.tif 000012
【図１１】
2005143140.tif 000013
【図１２】
2005143140.tif 000014
【図１３】
2005143140.tif 000015
【図１４】
2005143140.tif 000016
【図１５】
2005143140.tif 000017