(57)【特許請求の範囲】
【請求項１】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定する判定手段と、
前記判定手段の判定結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した参照すべき量子化誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差を第二の誤差保持手段から取得する取得手段と、
誤差拡散マトリクスに従い、前記取得された量子化誤差から拡散誤差を算出する算出手段と、
前記注目画素の値と前記拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とする量子化手段と、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算する計算手段と、
前記判定手段の判定結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素がないことを示す場合は前記注目画素の量子化誤差を前記第二の誤差保持手段に格納し、前記判定手段の判定結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記注目画素の量子化誤差を前記第一および第二の誤差保持手段に格納する格納手段とを有し、
前記複数の領域のそれぞれは、隣接する領域との間に重複領域を有するように分割された領域であり、前記判定手段は、前記重複領域の位置に基づき前記判定を行うことを特徴とする画像処理装置。
【請求項２】
前記判定手段は、前記誤差拡散処理が未処理の領域へ誤差を伝播すべき画素位置に注目画素がある場合、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があると判定することを特徴とする請求項1に記載された画像処理装置。
【請求項３】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定する判定手段と、
前記判定手段の判定結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した前記注目画素に対する拡散誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差から算出された前記注目画素に対する拡散誤差を第二の誤差保持手段から取得する取得手段と、
前記注目画素の値と前記取得された拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とする量子化手段と、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算する計算手段と、
誤差拡散マトリクスに従い、前記注目画素の量子化誤差から前記注目画素の近傍の画素に拡散する拡散誤差を算出する算出手段と、
前記拡散誤差を前記第二の誤差保持手段に格納するとともに、前記判定手段の判定結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記拡散誤差のうち前記誤差拡散処理が未処理の領域に伝播すべき拡散誤差を前記第一の誤差保持手段に格納する格納手段とを有し、
前記複数の領域のそれぞれは、隣接する領域との間に重複領域を有するように分割された領域であり、前記判定手段は、前記重複領域の位置に基づき前記判定を行うことを特徴とする画像処理装置。
【請求項４】
前記判定手段は、さらに、前記注目画素を含む領域における前記注目画素の位置、および、前記領域の分割方法に基づき、前記判定を行うことを特徴とする請求項1から請求項3の何れか一項に記載された画像処理装置。
【請求項５】
前記判定手段は、さらに、前記注目画素を含む領域における前記注目画素の位置に応じて、前記第一の誤差保持手段の読取位置を示す情報を前記取得手段に供給し、前記第一の誤差保持手段の書込位置を示す情報を前記格納手段に供給することを特徴とする請求項4に記載された画像処理装置。
【請求項６】
さらに、前記画像の分割方法および前記誤差拡散マトリクスが示す誤差の参照範囲に応じて、前記誤差を参照すべき画素位置および前記誤差を伝播すべき画素位置を示す情報を前記判定手段に設定する設定手段を有することを特徴とする請求項4または請求項5に記載された画像処理装置。
【請求項７】
前記第一の誤差保持手段および前記第二の誤差保持手段は個別の記憶装置であることを特徴とする請求項1から請求項6の何れか一項に記載された画像処理装置。
【請求項８】
前記第一および第二の誤差保持手段は同一の記憶装置の異なる記憶領域に対応することを特徴とする請求項1から請求項6の何れか一項に記載された画像処理装置。
【請求項９】
前記第一の誤差保持手段はダイナミックランダムアクセスメモリ(DRAM)によって構成され、前記第二の誤差保持手段はスタティックランダムアクセスメモリ(SRAM)によって構成されることを特徴とする請求項1から請求項6の何れか一項に記載された画像処理装置。
【請求項１０】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定する判定手段と、
前記判定手段の判定結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した参照すべき量子化誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差を第二の誤差保持手段から取得する取得手段と、
誤差拡散マトリクスに従い、前記取得された量子化誤差から拡散誤差を算出する算出手段と、
前記注目画素の値と前記拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とする量子化手段と、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算する計算手段と、
前記判定手段の判定結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素がないことを示す場合は前記注目画素の量子化誤差を前記第二の誤差保持手段に格納し、前記判定手段の判定結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記注目画素の量子化誤差を前記第一および第二の誤差保持手段に格納する格納手段と、
複数のモードからユーザが選択したモードに応じて、前記判定手段を設定する設定手段と、
前記選択されたモードに応じて、前記画像を分割する分割手段とを有することを特徴とする画像処理装置。
【請求項１１】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定する判定手段と、
前記判定手段の判定結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した前記注目画素に対する拡散誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差から算出された前記注目画素に対する拡散誤差を第二の誤差保持手段から取得する取得手段と、
前記注目画素の値と前記取得された拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とする量子化手段と、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算する計算手段と、
誤差拡散マトリクスに従い、前記注目画素の量子化誤差から前記注目画素の近傍の画素に拡散する拡散誤差を算出する算出手段と、
前記拡散誤差を前記第二の誤差保持手段に格納するとともに、前記判定手段の判定結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記拡散誤差のうち前記誤差拡散処理が未処理の領域に伝播すべき拡散誤差を前記第一の誤差保持手段に格納する格納手段と、
複数のモードからユーザが選択したモードに応じて、前記判定手段を設定する設定手段と、
前記選択されたモードに応じて、前記画像を分割する分割手段とを有することを特徴とする画像処理装置。
【請求項１２】
前記複数のモードは第一のモードと第二のモードを有し、前記第一のモードが選択された場合に前記分割される領域のサイズと、前記第二のモードが選択された場合に前記分割される領域のサイズが異なることを特徴とする請求項10または請求項11に記載された画像処理装置。
【請求項１３】
前記複数のモードは第一のモードと第二のモードを有し、前記第一のモードが選択された場合、前記分割手段は分割された複数の領域のそれぞれが、隣接する領域との間に重複領域を有するように前記画像を分割し、前記第二のモードが選択された場合、前記分割手段は前記重複領域がないように前記画像を分割することを特徴とする請求項10または請求項11に記載された画像処理装置。
【請求項１４】
前記選択されたモードに応じて、前記誤差拡散マトリクスが異なることを特徴とする請求項10から請求項13の何れか一項に記載された画像処理装置。
【請求項１５】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置の画像処理方法であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定し、
前記判定の結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した参照すべき量子化誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差を第二の誤差保持手段から取得し、
誤差拡散マトリクスに従い、前記取得された量子化誤差から拡散誤差を算出し、
前記注目画素の値と前記拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とし、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算し、
前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素がないことを示す場合は前記注目画素の量子化誤差を前記第二の誤差保持手段に格納し、前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記注目画素の量子化誤差を前記第一および第二の誤差保持手段に格納し、
前記複数の領域のそれぞれは、隣接する領域との間に重複領域を有するように分割された領域であり、前記重複領域の位置に基づき前記判定が行われることを特徴とする画像処理方法。
【請求項１６】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置の画像処理方法であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定し、
前記判定の結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した前記注目画素に対する拡散誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差から算出された前記注目画素に対する拡散誤差を第二の誤差保持手段から取得し、
前記注目画素の値と前記取得された拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とし、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算し、
誤差拡散マトリクスに従い、前記注目画素の量子化誤差から前記注目画素の近傍の画素に拡散する拡散誤差を算出し、
前記拡散誤差を前記第二の誤差保持手段に格納するとともに、前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記拡散誤差のうち前記誤差拡散処理が未処理の領域に伝播すべき拡散誤差を前記第一の誤差保持手段に格納し、
前記複数の領域のそれぞれは、隣接する領域との間に重複領域を有するように分割された領域であり、前記重複領域の位置に基づき前記判定が行われることを特徴とする画像処理方法。
【請求項１７】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置の画像処理方法であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定し、
前記判定の結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した参照すべき量子化誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差を第二の誤差保持手段から取得し、
誤差拡散マトリクスに従い、前記取得された量子化誤差から拡散誤差を算出し、
前記注目画素の値と前記拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とし、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算し、
前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素がないことを示す場合は前記注目画素の量子化誤差を前記第二の誤差保持手段に格納し、前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記注目画素の量子化誤差を前記第一および第二の誤差保持手段に格納し、
複数のモードからユーザが選択したモードに応じて前記判定を設定し、
前記選択されたモードに応じて前記画像を分割することを特徴とする画像処理方法。
【請求項１８】
複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理装置の画像処理方法であって、
前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定し、
前記判定の結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した前記注目画素に対する拡散誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差から算出された前記注目画素に対する拡散誤差を第二の誤差保持手段から取得し、
前記注目画素の値と前記取得された拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とし、
前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算し、
誤差拡散マトリクスに従い、前記注目画素の量子化誤差から前記注目画素の近傍の画素に拡散する拡散誤差を算出し、
前記拡散誤差を前記第二の誤差保持手段に格納するとともに、前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記拡散誤差のうち前記誤差拡散処理が未処理の領域に伝播すべき拡散誤差を前記第一の誤差保持手段に格納し、
複数のモードからユーザが選択したモードに応じて前記判定を設定し、
前記選択されたモードに応じて前記画像を分割することを特徴とする画像処理方法。
【請求項１９】
コンピュータを請求項1から請求項14の何れか一項に記載された画像処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像の誤差拡散処理に関する。
【背景技術】
【０００２】
ディジタルカメラで撮影した画像などを画像処理し、画像処理した画像を印刷することが広く行われている。しかし、表示装置に比べて印刷装置は、画素当りの表現可能な階調数が少ない。そのため、印刷前の画像の階調数を低減して、元の階調を擬似的に表現する擬似中間調処理が必要になる。擬似中間調処理には様々な方法があるが、階調性と解像性が両立した画像が得られる誤差拡散処理が広く用いられている。誤差拡散処理は、注目画素の階調値と、注目画素を量子化した値の差（量子化誤差）を、注目画素の近傍の未処理の画素に所定の比率で拡散する処理を逐次的に行う。
【０００３】
ところで、画像データを画像処理する場合、画像データをメモリに展開する必要がある。しかし、一枚の画像に対応する画像データのすべてを展開することができる、フルサイズの記憶容量をもつメモリを機器に実装すればコストを増大させる要因になる。とくに家庭用のプリンタのように、安価に提供する必要がある機器において、フルサイズの記憶容量をもつメモリの搭載は現実的ではない。そのため画像を複数の領域に分割し、領域ごとに、逐次、メモリに展開して画像処理することが一般的である。
【０００４】
しかし、領域分割を行って誤差拡散処理を行うと、領域の誤差拡散処理結果が結合される繋ぎ目においてドットパターンの不整合が生じ、それが条状の画質劣化として視認される場合がある。これは、領域間で相互に誤差が拡散されないため、繋ぎ目において誤差拡散処理の連続性が損なわれることに起因する。
【０００５】
特許文献1は、注目領域の境界部の画素を量子化した際に発生する量子化誤差を、次に処理する領域（以下、次領域）の境界部の画素を誤差拡散処理する際に使用するために、バッファする発明を開示する。さらに、注目領域と次領域の間にオーバラップ領域を設け、注目領域の境界部の画素から次領域の境界部の画素に拡散されるべき量子化誤差を近似する発明を開示する。
【０００６】
また、特許文献2の発明は、画像を副走査方向に分割したバンドを、さらに主走査方向に分割したスライスの最終画素で生じた量子化誤差を第一のメモリに格納し、各画素で生じた量子化誤差を第二のメモリに格納する。そして、各スライスの一番目の画素を量子化する場合は、第一および第二のメモリに格納した量子化誤差を参照し、その他の画素を量子化する場合は第二のモリに格納した量子化誤差のみを参照して、誤差拡散処理を行う。つまり、量子化誤差をバッファする二つのメモリを使用してバンド間の誤差伝播を行うことで、画像を展開するメモリの記憶容量の削減と、バンドの境界部における誤差拡散処理の連続性の維持を同時に実現する。
【０００７】
上述した従来技術においては、注目領域の前に誤差拡散処理した領域（以下、前領域）の境界部の量子化誤差をバッファするが、誤差拡散処理の仕方によっては、必ずしも、誤差拡散処理の連続性を維持できない場合がある。例えば、量子化誤差そのものをバッファする場合と、各画素に拡散すべき拡散誤差をバッファする場合がある。拡散誤差は、注目画素と誤差の拡散先の画素（以下、被拡散画素）の関係によって決まる拡散係数を、注目画素の量子化誤差に乗じた値を、被拡散画素ごとに積算した値である。これら二種類の手法により、バッファメモリへの誤差の格納方法と、バッファメモリに格納した誤差の参照方法が異なる。つまり、バッファする誤差（以下、伝播誤差）に適切な格納と参照を行わずに各領域の処理結果を結合すれば、繋ぎ目に不連続なドットパターンが発生する。
【０００８】
また、どの画素の量子化誤差を伝播するか、どの画素に拡散誤差を伝播するかは、オーバラップ領域を設ける場合や、分割領域の一部を重複させる場合など、領域の分割の仕方によって異なる。なお、分割領域の一部を重複させる場合とは、隣接する分割領域のドットパターンを重ねて画像を形成する場合である。例えば、オーバラップ領域を設けて、注目領域の下端の境界部から次領域へ誤差を伝播しても、繋ぎ目に不連続なドットパターンが生じる場合がある。これは、領域間で誤差の伝播が必要な部分と、注目領域の下端の境界部が一致せずに、誤差拡散処理の連続性が損なわれるためである。また、分割領域の一部を重複させる場合、各注目領域の下端は、誤差の伝播を必要とする次領域の境界部ではないため、誤差の伝播を適切に行うことができず、繋ぎ目に不連続なドットパターンが生じる場合がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特公平6-091606号公報（特開昭63-310269号公報）
【特許文献２】特許第3004628号公報
【非特許文献】
【００１０】
【非特許文献１】R. Floyd, L. Steinberg「An Adaptive Algorithm for Spatial Grayscale」Proceeding of the S.I.D. vol 17/2, 1976, p.75-76
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明は、複数の領域に分割された画像を誤差拡散処理する際に、領域間の誤差の伝播を適切に行うことを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、前記の目的を達成する一手段として、以下の構成を備える。
【００１３】
本発明にかかる画像処理は、複数の領域に分割された画像の領域ごとに誤差拡散処理を行う画像処理であって、前記誤差拡散処理における注目画素が第一の誤差保持手段の参照または書き込みが必要な画素位置にあるか否かを判定し、前記判定の結果が、前記第一の誤差保持手段の参照が必要な画素位置に前記注目画素があることを示す場合は前記第一の誤差保持手段から既に誤差拡散処理された領域の前記誤差拡散処理で発生した参照すべき量子化誤差を取得するとともに、前記注目画素を含む領域の、前記注目画素の近傍の画素の誤差拡散処理で発生した量子化誤差を第二の誤差保持手段から取得し、誤差拡散マトリクスに従い、前記取得された量子化誤差から拡散誤差を算出し、前記注目画素の値と前記拡散誤差を加算した加算値を量子化して前記注目画素の量子化値とし、前記注目画素の量子化誤差として前記注目画素の量子化値と前記加算値の差分を計算し、前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素がないことを示す場合は前記注目画素の量子化誤差を前記第二の誤差保持手段に格納し、前記判定の結果が、前記第一の誤差保持手段の書き込みが必要な画素位置に前記注目画素があることを示す場合は前記注目画素の量子化誤差を前記第一および第二の誤差保持手段に格納し、前記複数の領域のそれぞれは、隣接する領域との間に重複領域を有するように分割された領域であり、前記重複領域の位置に基づき前記判定が行われることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、複数の領域に分割された画像を誤差拡散処理する際に、領域間の誤差の伝播を適切に行うことができる。従って、領域の繋ぎ目において誤差拡散処理の連続性が損なわれ、不連続なドットパターンが生じる問題を防ぐことができる。
【図面の簡単な説明】
【００１５】
【図１】実施例1に適用可能な画像処理装置の構成例を説明するブロック図。
【図２】画像の分割方法、誤差拡散処理における画素の走査方法、誤差拡散マトリクスの例を説明する図。
【図３】誤差拡散処理部の構成例を説明するブロック図。
【図４】量子化誤差を伝播する場合の誤差拡散処理部の処理例を説明するフローチャート。
【図５】誤差を参照すべき画素位置および誤差を伝播すべき画素位置を説明する図。
【図６】拡散誤差を伝播する場合の誤差拡散処理部の処理例を説明するフローチャート。
【図７】実施例2における画像の分割方法、誤差拡散処理における画素の走査方法、誤差拡散マトリクスの例を説明する図。
【図８】誤差を参照すべき画素位置および誤差を伝播すべき画素位置を説明する図。
【図９】誤差バッファに量子化誤差が格納される画素の一例を説明する図。
【図１０】ユーザが設定可能な誤差拡散処理のモードに対する、領域の分割方法、誤差拡散マトリクス、誤差を参照すべき画素位置および誤差を伝播すべき画素位置の一例を説明する図。
【図１１】実施例3の誤差拡散処理部の構成例を説明するブロック図。
【図１２】画像の分割方法、誤差拡散処理における画素の走査方法、誤差拡散マトリクスの例を説明する図。
【図１３】重複処理領域があり、量子化誤差を伝播する場合の誤差拡散処理を説明するフローチャート。
【図１４】誤差を伝播すべき画素位置を説明する図。
【発明を実施するための形態】
【００１６】
以下、本発明にかかる実施例の画像処理を図面を参照して詳細に説明する。
【実施例１】
【００１７】
実施例1においては、画像を複数のバンドに分割し、バンドごとに誤差拡散処理する際に、バンド間で伝播する誤差として量子化誤差または拡散誤差を選択可能な構成例を説明する。
【００１８】
［装置の構成］
図1のブロック図により実施例1に適用可能な画像処理装置の構成例を説明する。画像入力部100は、例えば、スキャナやディジタルカメラなどの画像入力機器やハードディスクドライブなどの記録装置から多値の画像データを入力するインタフェイスである。領域分割部101は、入力された画像データが表す画像を複数の領域に分割する。
【００１９】
誤差拡散処理部102は、領域分割部101が分割した各領域を逐次的に誤差拡散処理して階調数を低減した画像データを生成する。なお、入力画像データがN値（階調数N）であれば、誤差拡散処理された画像データはM値（階調数M＜N）である。画像出力部103は、例えば、インクジェット方式の印刷装置やプリンタエンジンに誤差拡散処理された画像データを出力するインタフェイスである。なお、印刷装置やプリンタエンジンは、誤差拡散処理された画像データが表す画像を記録紙に記録する。
【００２０】
図2により画像の分割方法、誤差拡散処理における画素の走査方法、誤差拡散マトリクスの例を説明する。領域分割部101は、図2(a)に示すように、入力画像200を主走査方向に直交する副走査方向に分割する。誤差拡散処理部102は、まずバンド201について、バンドの長手方向（主走査方向）に直交する方向（図2(a)の下方向、副走査方向）に画素を走査して、図2(b)または図2(c)に示す誤差拡散マトリクスを使用して誤差拡散処理を行う。続いて、バンド202、そしてバンド203の順に画素を走査して、図2(b)または図2(c)に示す誤差拡散マトリクスを使用して誤差拡散処理を行う。なお、各バンドのライン数は、誤差拡散マトリクスのライン数以上であれば任意である。
【００２１】
図2(b)に示す誤差拡散マトリクスは、注目画素が近傍画素から受け取る誤差の比率（拡散係数）を示す。つまり、「*」で示す注目画素には、一行上の画素から7/16、一列前の隣接する三画素から（上から順に）1/16、5/16、3/16の比率で量子化誤差が拡散される。また、図2(c)に示す誤差拡散マトリクスは、注目画素から近傍画素へ誤差を拡散する比率（拡散係数）を示す。つまり、「*」で示す注目画素から、一行下の画素へ7/16、一列後の隣接する三画素へ（上から順に）3/16、5/16、1/16の比率で量子化誤差が拡散される。なお、図2(b)は誤差を受け取る側の画素から見た場合の誤差拡散マトリクスを示し、図2(c)は誤差を拡散する側の画素から見た誤差拡散マトリクスを示し、両者は同じ誤差拡散マトリクスを表している。
【００２２】
［誤差拡散処理部］
図3のブロック図により誤差拡散処理部102の構成例を説明する。
【００２３】
誤差加算部300は、入力画像データの注目画素の値に、積算部307が出力する、注目画素の近傍の既処理の画素から拡散された誤差の累積値（拡散誤差）を加算する。量子化部301は、拡散誤差が加算された注目画素の値から予め定められたビット数の量子化値を計算する。画像データが8ビットの場合、量子化部301は、注目画素の値（0〜255）から、例えば量子化閾値127による二値化を行い、量子化後の注目画素の値として量子化値0または255を出力する。
【００２４】
量子化誤差算出部302は、誤差加算部300において拡散誤差が加算された注目画素の値と、量子化部301において量子化された後の注目画素の値の差分を量子化誤差として出力する。勿論、量子化部301の処理は、二値化に限らず、三値化、四値化、五値化などでもよい。つまり、例えば8ビットの画像データの階調数256を低減して、画像出力部103が処理可能な階調数（二値、三値、四値、五値など）の画像データにする処理であればよい。
【００２５】
レジスタ303は、量子化誤差と拡散誤差から伝播誤差を選択するためのレジスタである。レジスタ303には、量子化誤差を伝播誤差に選択する場合は‘0’が設定され、拡散誤差を伝播誤差に選択する場合は‘1’が設定される。セレクタ304a、304b、304cは、レジスタ303に設定された値によりブロック間のデータの経路を選択する。
【００２６】
バッファ参照判定部310は、注目画素のバンド上の位置(x, y)を入力して、乗算部306が用いる誤差拡散マトリクスによって決まる伝播誤差を参照すべき画素位置か否かを判定する。そして、伝播誤差を参照すべき画素位置の場合は、誤差バッファ309から読み出す誤差の位置を示す位置情報を出力する。
【００２７】
バッファ格納判定部311は、注目画素のバンド上の位置(x, y)を入力して、領域の分割方法（例えばバンドのライン数）に基づき、乗算部306が用いる誤差拡散マトリクスによって決まる誤差を伝播すべき画素位置か否かを判定する。そして、誤差を伝播すべき画素位置の場合は、誤差バッファ309に誤差を書き込む位置を示す位置情報を出力する。なお、バンドごとにライン数が異なる場合、バッファ格納判定部311は、注目画素のバンド上の位置(x, y)、および、領域分割部101から注目バンドのライン数を入力する。
【００２８】
誤差バッファ制御部308は、バッファ参照判定部310およびバッファ格納判定部311が出力する判定結果と位置情報を入力して、誤差バッファ309の読み書き、セレクタ312の経路を制御する。つまり、バッファ参照判定部310の判定結果が伝播誤差の参照を示す場合、バッファ参照判定部310が出力する誤差バッファ309の読取位置を示す位置情報に従い、誤差バッファ309から伝播誤差を取得する。そして、当該伝播誤差が乗算部306に入力されるようにセレクタ312を制御する。なお、バッファ参照判定部310の判定結果が伝播誤差の非参照を示す場合は、誤差メモリ305から出力される誤差が乗算部306に入力されるようにセレクタ312を制御する。さらに、バッファ格納判定部311の判定結果が伝播誤差の格納を示す場合、セレクタ304aを介して入力した誤差を、バッファ参照判定部310が出力する誤差バッファ309の書込位置を示す位置情報に従い、誤差バッファ309に格納する。
【００２９】
誤差メモリ305には、量子化誤差算出部302からセレクタ304aを介して量子化誤差が格納される。あるいは、誤差メモリ305には、乗算部306からセレクタ304aを介して拡散誤差が格納される。乗算部306は、セレクタ304bを介して入力される誤差に拡散係数を乗じた誤差を算出する。積算部307は、セレクタ304cを介して入力される誤差を積算して、注目画素の値に加える積算誤差を出力する。
【００３０】
このように、誤差拡散処理部102は、レジスタ303の設定により、バンド間で量子化誤差を伝播する方法と拡散誤差を伝播する方法の両方に対応可能である。なお、誤差拡散処理部102は、バンド間における誤差の伝播が適正に実現される構成であればよく、図3の構成に限られるわけではない。
【００３１】
［誤差拡散処理の例］
以下では、図2Aに示すように、画像を分割した複数のバンドを、逐次、誤差拡散処理する例に説明する。なお、領域間の誤差伝播を実現するために、既に誤差拡散処理が終了したバンド（以下、前バンド）で発生した誤差をバッファして、次に誤差拡散処理するバンド（以下、次バンド）に伝播する。
【００３２】
●量子化誤差を伝播する場合
図4のフローチャートにより量子化誤差を伝播する場合の誤差拡散処理部102の処理例を説明する。
【００３３】
誤差拡散処理部102は、注目画素の値を入力する(S501)。バッファ参照判定部310は、注目画素が伝播誤差を参照すべき画素位置にあるか否かを判定する(S502)。図5により誤差を参照すべき画素位置および誤差を伝播すべき画素位置を説明する。
【００３４】
図5(a)に示すように、各バンドが4ラインから構成されるとする。そして、バンド202のラインL4上に位置する注目画素600を処理する場合、注目画素600に誤差を拡散すべき画素（以下、拡散元画素）は、図5(b)に示す近傍画素A、B、C、Dの四画素である。ラインL3上の拡散元画素AとBはバンド201に含まれ、処理中のバンド（以下、注目バンド）202には含まれない。そこで、図5(c)に示すように、前バンドの誤差拡散処理において発生した量子化誤差を誤差バッファ309に格納し、注目画素600の誤差拡散処理において拡散元画素AとBの量子化誤差aとbを参照する。勿論、ラインL4上に位置する画素の誤差拡散処理は、注目画素600と同様、前バンド201のラインL3上に位置する画素の量子化誤差を参照する必要がある。
【００３５】
このように、図2(b)に示す誤差拡散マトリクスを使用する場合、伝播誤差を参照すべき画素位置は、注目バンドの先頭行の画素位置である。ただし、誤差拡散マトリクスの形状によって、注目画素の上方向に拡散元画素が二画素以上ある場合、誤差バッファ309に複数ライン分の記憶容量が必要になる。
【００３６】
また、ラインL4上に位置する隣接する二つの画素は、誤差バッファ309の同じ位置に格納された量子化誤差を参照する。例えば、図5(c)において、画素Cと注目画素600は、誤差バッファ309に格納された量子化誤差aを参照する。従って、画素Cの誤差拡散処理中に誤差バッファ309から参照した量子化誤差aを、例えば誤差バッファ制御部308が備える遅延メモリに保持する。そして、注目画素600を誤差拡散処理する際は、遅延メモリに保持した量子化誤差aを参照する。こうすれば、誤差拡散処理時の誤差バッファ309の参照回数を低減することが可能である。
【００３７】
注目画素が伝播誤差を参照すべき画素位置にある場合、誤差バッファ制御部308は、バッファ参照判定部310が出力する位置情報に基づき誤差バッファ309から量子化誤差を読み出し、位置情報と量子化誤差を乗算部306に供給する(S503)。次に、誤差バッファ制御部308は、誤差メモリ305が保持する注目画素に対する拡散元画素の量子化誤差を読み出し、拡散元画素の位置情報と量子化誤差を乗算部306に供給する(S504)。
【００３８】
乗算部306は、位置情報に対応する図2(b)に示す拡散マトリクスの拡散係数を量子化誤差に乗じた拡散誤差を積算部307に供給する(S505)。積算部307は、乗算部306から順次入力される拡散誤差を積算する(S506)。なお、ステップS503〜S506の処理は拡散元画素の数（図2(b)の例であれば四画素）分繰り返され、拡散誤差の積算が終了すると、積算部307は積算結果を誤差加算部300に出力する。
【００３９】
誤差加算部300は、積算部307から入力される拡散誤差の積算値と注目画素の値を加算し、加算結果を量子化部301に出力する(S507)。量子化部301は、誤差加算部300から入力される加算値を量子化し、量子化結果を出力する(S508)。量子化誤差算出部302は、量子化結果から誤差加算部300が出力する加算値を減算した量子化誤差を誤差メモリ305の注目画素の画素位置に対応する位置に格納する(S509)。
【００４０】
次に、バッファ格納判定部311は、注目画素が誤差を伝播すべき画素位置にあるか否かを判定する(S510)。図5(d)に示すように、バンド201のラインL3上に位置する注目画素601を処理する場合、注目画素601の量子化誤差を拡散すべき画素（以下、拡散先画素）は近傍画素E、F、G、Hの四画素である。ラインL4上の拡散先画素EとHはバンド202に含まれ、注目バンド201には含まれない。そこで、図5(e)に示すように、注目画素601の誤差拡散処理において発生した量子化誤差を誤差バッファ309に格納し、拡散先画素E、Hの誤差拡散処理において注目画素601の量子化誤差を参照する。勿論、ラインL3上に位置する画素の誤差拡散処理は、注目画素601と同様、次バンド202のラインL4上に位置する画素に量子化誤差を拡散する必要がある。つまり、図2(c)に示す誤差拡散マトリクスを使用する場合、誤差を伝播すべき画素位置は、注目バンドの最終行の画素位置である。
【００４１】
注目画素が誤差を伝播すべき画素位置にある場合、誤差バッファ制御部308は、量子化誤差算出部302が出力する量子化誤差を、バッファ格納判定部311が出力する位置情報に基づき誤差バッファ309に格納する(S511)。次に、誤差拡散処理部102は、画像入力部100が入力した画像の全画素について誤差拡散処理が終了したか否かを判定し(S512)、全画素の誤差拡散処理が終了するまでステップS501〜S511の処理を繰り返す。
【００４２】
●拡散誤差を伝播する場合
図6のフローチャートにより拡散誤差を伝播する場合の誤差拡散処理部102の処理例を説明する。
【００４３】
誤差拡散処理部102は、注目画素の値を入力する(S601)。バッファ参照判定部310は、注目画素が伝播誤差を参照すべき画素位置にあるか否かを判定する(S602)。上述したように、バンド202のラインL4上に位置する注目画素600を処理する場合、拡散元画素は図5(b)に示す近傍画素A、B、C、Dの四画素である。そして、画素AとBはバンド201に含まれ、注目バンド202には含まれない。
【００４４】
従って、図2(b)に示す誤差拡散マトリクスを使用する場合、伝播誤差を参照すべき画素位置は、注目バンドの先頭行の画素位置である。なお、誤差バッファ309は、拡散元画素から拡散先画素へ拡散される拡散誤差の和を格納する。つまり、図5(b)の例では、画素Aからの拡散誤差と、画素Bからの拡散誤差の和が誤差バッファ309の注目画素600に対応する位置に格納されている。つまり、誤差バッファ309が格納する伝播誤差は誤差拡散マトリクスの形状に依存しないと言える。
【００４５】
注目画素が伝播誤差を参照すべき画素位置にある場合、誤差バッファ制御部308は、バッファ参照判定部310が出力する位置情報（注目画素の位置情報）に基づき誤差バッファ309から読み出した拡散誤差を積算部307に供給する(S603)。次に、誤差バッファ制御部308は、誤差メモリ305が保持する注目画素に対応する拡散誤差を読み出し、拡散誤差を積算部307に供給する(S604)。
【００４６】
積算部307は、誤差バッファ制御部308から入力される拡散誤差を積算し、積算結果を誤差加算部300に出力する(S605)。誤差加算部300は、積算部307から入力される拡散誤差の積算値と注目画素の値を加算し、加算結果を量子化部301に出力する(S606)。量子化部301は、誤差加算部300から入力される加算値を量子化し、量子化結果を出力する(S607)。
【００４７】
量子化誤差算出部302は、量子化結果から誤差加算部300が出力する加算値を減算した量子化誤差を計算する(S608)。乗算部306は、図2(c)に示す誤差拡散マトリクスに従い、注目画素の量子化誤差を拡散した拡散誤差を計算し、誤差メモリ305の拡散先画素の画素位置に対応する位置に拡散誤差を格納する(S609)。その際、乗算部306は、格納位置に既に格納された拡散誤差と、当該格納位置に新たに格納する拡散誤差を加算して、拡散誤差を積算する。
【００４８】
次に、バッファ格納判定部311は、注目画素が誤差を伝播すべき画素位置にあるか否かを判定する(S610)。上述したように、図5(d)に示すバンド201のラインL3上に位置する注目画素601を処理する場合、注目画素601の量子化誤差の拡散先画素は近傍画素E、F、G、Hの四画素である。ラインL4上の拡散先画素EとHはバンド202に含まれ、注目バンド201には含まれない。そこで、図5(f)に示すように、注目画素601の誤差拡散処理において発生した量子化誤差に拡散先画素E、Hに対応する拡散係数を乗じた拡散誤差を計算する。そして、拡散誤差を、誤差バッファ309の画素E、Hに対応する位置に格納し、拡散先画素E、Hの誤差拡散処理において拡散誤差を参照する。勿論、ラインL3上に位置する画素の誤差拡散処理は、注目画素601と同様、次バンド202のラインL4上に位置する画素に量子化誤差を拡散する必要がある。つまり、図2(c)に示す誤差拡散マトリクスを使用する場合、誤差を伝播すべき画素位置は、注目バンドの最終行の画素位置である。
【００４９】
また、ラインL3上に位置する隣接する二つの画素の拡散誤差は、ラインL4上に位置する同じ画素に拡散される。例えば、図5(d)において、注目画素601と画素Gの拡散誤差は、画素Hに拡散される。従って、注目画素601の誤差拡散処理における画素Hヘの拡散誤差を、例えば誤差バッファ制御部308が備える遅延メモリに保持する。そして、画素Gの誤差拡散処理における画素Hへの拡散誤差と、遅延メモリに保持した拡散誤差の和を計算し、計算結果の拡散誤差を、誤差バッファ309の画素Hに対応する位置に格納する。こうすれば、誤差拡散処理時の誤差バッファ309の書込回数を低減することが可能である。
【００５０】
さらに、誤差拡散マトリクスの形状によっては、注目画素から誤差を拡散すべき拡散先画素のうち二画素以上が注目バンドにない場合、誤差バッファ309に複数ライン分の記憶容量が必要になる。例えば、ラインL2上の画素からラインL4上の画素へ拡散すべき拡散誤差、並びに、ラインL3上の画素からラインL4、L5上の画素へ拡散すべき拡散誤差を格納する必要がある。この場合、上述したように、ラインL4上の画素への複数の拡散誤差を、誤差バッファ制御部308が備える遅延メモリを用いて積算し、誤差バッファ309に格納する。
【００５１】
また、一般的な誤差拡散処理においては、隣接画素以外へ伝播される誤差は小さく、ラインL2上の画素からラインL4上の画素へ拡散される誤差は無視できるほど小さい。加えて、隣接画素へ伝播される誤差の影響が大きく、ラインL2上の画素からラインL4上の画素へ拡散される誤差の影響よりも、ラインL3上の画素からラインL4上の画素へ拡散される誤差の影響が大きい。つまり、ラインL2上の画素からラインL4上の画素に拡散される誤差を無視しても誤差拡散処理の連続性は保たれる。このような誤差の拡散特性を考慮すれば、誤差バッファ309の記憶容量を1ライン分にすることも可能である。
【００５２】
注目画素が誤差を伝播すべき画素位置にある場合、誤差バッファ制御部308は、乗算部306が出力する次バンドに拡散すべき拡散誤差を、誤差バッファ309の拡散先画素の画素位置に対応する位置に拡散誤差を格納する(S611)。その際、誤差バッファ制御部308は、格納位置に既に格納された拡散誤差と、当該格納位置に新たに格納する拡散誤差を加算して、拡散誤差を積算する。
【００５３】
次に、誤差バッファ制御部308は、バッファ参照判定部310の判定結果や位置情報に基づき注目バンドの誤差拡散処理が終了したか否かを判定する(S612)。さらに、バッファ格納判定部311の判定結果や位置情報に基づき、注目バンドにおいて伝播誤差を参照すべき画素（この例では、注目バンドの一行目の画素）の誤差拡散処理が終了したか否かを判定する(S614)。そして、注目バンドの誤差拡散処理が終了すると、前バンドの拡散誤差を積算しないように、誤差バッファ制御部308は誤差メモリ305をクリアする(S613)。また、注目バンドにおいて伝播誤差を参照すべき画素の誤差拡散処理が終了すると、前バンドの拡散誤差を積算しないように、誤差バッファ制御部308は誤差バッファ309をクリアする(S615)。
【００５４】
次に、誤差拡散処理部102は、画像入力部100が入力した画像の全画素について誤差拡散処理が終了したか否かを判定し(S616)、全画素の誤差拡散処理が終了するまでステップS601〜S615の処理を繰り返す。
【００５５】
上記のように、バッファ参照判定部310とバッファ格納判定部311は、注目画素の位置や拡散係数マトリクスの形状、領域の分割方法に基づき、誤差バッファ309のアクセスが必要か否かを判定する。誤差バッファ309のアクセスが必要な場合は、誤差バッファ309におけるアクセス位置を算出して、拡散誤差を誤差バッファ309から読み出し、あるいは、拡散誤差を誤差バッファ309へ格納する。
【００５６】
以上のとおり、誤差バッファ制御部308は、誤差バッファ309のアクセルが必要か否かの判定結果に応じて、誤差バッファ309に対する誤差誤差の格納と参照を制御して、任意の伝播位置による誤差伝播を実現する。
【００５７】
伝播誤差に量子化誤差を選択する場合、拡散係数を乗算しないので、誤差バッファ309が格納する値は整数であるが、誤差拡散マトリクスの形状によっては複数ライン分の記憶容量を有する誤差バッファ309が必要になる。一方、伝播誤差に拡散誤差を選択する場合、拡散係数の乗算により小数部も必要になるが、誤差バッファ309には誤差拡散マトリクスの形状によらず1ライン分の記憶容量があればよい。つまり、誤差拡散マトリクスの形状によって、誤差を参照すべき位置または誤差を伝播すべき位置が1ラインの場合は、伝播誤差として量子化誤差を選択すれば誤差バッファ309の記憶容量が小さくなる。また、誤差を参照すべき位置または誤差を伝播すべき位置が複数ラインの場合は、伝播誤差として拡散誤差を選択すれば誤差バッファ309の記憶容量が小さくなる。すなわち、上述した構成は、常に誤差バッファ309の記憶容量を最小にする構成をとることができる。
【００５８】
また、誤差メモリ305を記憶容量当りのコストは高いがアクセス速度が速いSRAMで構成し、誤差バッファ309を記憶容量当りのコストは低いがアクセス速度が遅いDRAMで構成すれば、記憶デバイスの特徴に応じた最適な回路設計になる。つまり、誤差メモリ305は、分割領域内で誤差拡散処理するために、注目画素の処理時に、その周囲画素の誤差が必ず読み出され、処理によって生じた誤差が必ず格納される。一方、誤差バッファ309は、分割領域間で誤差伝播を行うための誤差伝播位置でのみアクセスされるが、伝播誤差をすべて保持すれば大きな記憶容量を必要とする。そこで、高速なアクセスが必要な誤差メモリ305にSRAMを使用し、大きな記憶容量が必要な誤差バッファ309に安価なDRAMを使用して、高速かつ低コストの処理回路を実現する。
【００５９】
上記では、第一の誤差保持部である誤差バッファ309と第二の誤差保持部である誤差メモリ305が個別の記憶デバイスとして説明したが、物理的に異なる二つの記憶デバイスを用いる必要はなく、二つの役割を果たす記憶領域が確保されていればよい。同一の記憶デバイスに上記二つの役割を担う記憶領域を確保した場合は、逐次的に誤差の格納と参照を行えばよい。また、上記二つの役割を担う記憶領域を複数の記憶領域や記憶デバイスに跨って構成する場合も、適切に誤差の格納と参照ができれば本発明が実現可能であることは言うまでもない。
【００６０】
このように、複数の領域に分割された画像を誤差拡散処理する際に、誤差バッファ309に量子化誤差または拡散誤差を格納して領域間の誤差の伝播を適切に行う。従って、領域の繋ぎ目において誤差拡散処理の連続性が損なわれ、不連続なドットパターンが生じる問題を防ぐことができる。
【実施例２】
【００６１】
以下、本発明にかかる実施例2の画像処理を説明する。なお、実施例2において、実施例1と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【００６２】
図7により実施例2における画像の分割方法、誤差拡散処理における画素の走査方法、誤差拡散マトリクスの例を説明する。実施例1においては、図2(a)に示すように、縦長の画像200をバンド状に分割した各領域を走査して誤差拡散処理する例を説明した。実施例2においては、図7(a)に示すように、画像200をタイル状に分割した各領域を、領域205、206、…、213の順に横方向（主走査方向）に走査して、図7(b)または図7(c)に示す誤差拡散マトリクスを使用して誤差拡散処理を行う。なお、図7(b)は拡散先画素から見た場合の誤差拡散マトリクスを示し、図7(c)は拡散元画素から見た誤差拡散マトリクスを示し、両者は同じ誤差拡散マトリクスを表している。
【００６３】
実施例2と実施例1は、領域の分割方法と画素の走査方向が異なる点を除いて、同一の画像処理になる。つまり、図1に示す画像処理装置の構成、図3に示す誤差拡散処理部102の構成、図4、6に示す処理フローは実施例1と同一である。
【００６４】
以下では、既に誤差拡散処理が終了したタイル（以下、既処理タイル）の誤差を参照する拡散先画素と、誤差拡散処理が未処理のタイル（以下、未処理タイル）へ誤差を伝播する拡散元画素について説明する。図8により誤差を参照すべき画素位置および誤差を伝播すべき画素位置を説明する。
【００６５】
図8(a)に示すように、各タイルが4×4画素から構成されるとする。そして、ラインL4、列R4上に位置するタイル209の注目画素700を処理する場合、注目画素700の拡散元画素は、図8(b)に示す近傍画素A、B、C、Dの四画素である。拡散元画素Aはタイル205に、拡散元画素B、Cはタイル206に、拡散元画素Dはタイル208にそれぞれ含まれ、処理中のタイル（以下、注目タイル）209には含まれない。そこで、図8(c)に示すように、既処理タイルの誤差拡散処理において発生した量子化誤差を誤差バッファ309に格納する。なお、図8(c)は量子化誤差の格納を示しているが、拡散誤差は誤差バッファ309の拡散先画素に対応する位置に格納することはいうまでもない。そして、注目画素700の誤差拡散処理において拡散元画素A、B、C、Dの量子化誤差a、b、c、d（または拡散誤差）を参照する。勿論、ラインL4または列R4上に位置する注目タイル209の画素の誤差拡散処理は、注目画素700と同様、ラインL3または列R3上に位置する画素の誤差を参照する必要がある。このように、図7(b)に示す誤差拡散マトリクスを使用する場合、伝播誤差を参照すべき画素位置は、注目タイルの先頭行および先頭列の画素位置である。
【００６６】
また、図8(d)に示すように、ラインL3、列R3上に位置するタイル205の注目画素701を処理する場合、注目画素701の拡散先画素は近傍画素E、F、G、Hの四画素である。拡散先画素Eはタイル206に、拡散先画素F、Gはタイル208に、拡散先画素Hはタイル209にそれぞれ含まれる。そこで、図8(e)に示すように、注目画素701の誤差拡散処理において発生した量子化誤差を誤差バッファ309に格納する。なお、図8(e)は量子化誤差の格納を示しているが、拡散誤差は誤差バッファ309の拡散先画素に対応する位置に格納することはいうまでもない。そして、拡散先画素E、F、G、Hの誤差拡散処理において注目画素701の量子化誤差（または拡散誤差）を参照する。勿論、注目タイル205のラインL3または列R3上に位置する画素の誤差拡散処理は、注目画素701と同様、未処理タイルのラインL4または列R4上に位置する画素に誤差を拡散する必要がある。このように、図7(c)に示す誤差拡散マトリクスを使用する場合、誤差を伝播すべき画素位置は、注目タイルの最終行および最終列の画素位置である。
【００６７】
なお、実際に誤差バッファ309に量子化誤差が格納される画素は、既処理タイルと未処理タイルの境界において、既処理タイルの最終ライン上の画素と、既処理タイルの最終列上の画素である。図9により誤差バッファ309に量子化誤差が格納される画素の一例を説明する。図9(a)において、タイル205から208が既処理タイル、タイル209から213が未処理タイルである。図9(b)は、タイル209の誤差拡散処理が終了した直後に対応し、タイル205から209が既処理タイル、タイル210から213が未処理タイルである。
【００６８】
このように、既処理タイルと未処理タイルの境界の既処理タイル側の画素の量子化誤差が誤差バッファ309に格納されている。言い替えれば、誤差バッファ309は、既処理タイルと未処理タイルの境界の画素分（図9(a)(b)では16画素分）の量子化誤差を記憶できればよいと言える。また、拡散誤差を伝播する場合は、実際に誤差バッファ309に拡散誤差が格納される画素は、既処理タイルと未処理タイルの境界において、未処理タイルの先頭ライン上の画素と、未処理タイルの先頭列上の画素である。従って、量子化誤差を伝播する場合と同様に、誤差バッファ309は、既処理タイルと未処理タイルの境界の画素分の拡散誤差を記憶できればよいと言える。
【００６９】
このように、領域の分割方法が変化し、拡散元画素または拡散先画素の位置が変化しても、既に誤差拡散処理が終了した領域と、誤差拡散処理が未処理の領域の境界の画素分の量子化誤差または拡散誤差を伝播すればよい。これは、バッファ参照判定部310とバッファ格納判定部311によって誤差バッファ309をアクセスするか否かを判定し、誤差バッファ制御部308によって誤差バッファ309と誤差メモリ305のアクセスを制御することで実現される。従って、実施例1と全く同一構成の誤差拡散処理部102でありながら、領域分割の方法が異なる場合でも、誤差拡散処理の連続性を維持することができる適切な位置における領域間の誤差伝播が可能になる。
【実施例３】
【００７０】
以下、本発明にかかる実施例3の画像処理を説明する。なお、実施例3において、実施例1、2と略同様の構成については、同一符号を付して、その詳細説明を省略する。
【００７１】
誤差拡散処理において、誤差の参照範囲を拡大すると、処理結果の画質が改善されることが知られている。しかし、誤差の参照範囲を拡大すれば、一画素を処理するための演算負荷が増大し、処理速度の低下を招く。そこで、誤差の参照範囲を調整または選択して、許容可能な画質と許容可能な処理速度のバランスをとることが望まれる。実施例3においては、ユーザの設定に応じて、領域の分割方法や誤差拡散マトリクスの形状（誤差の参照範囲）が再設定可能な誤差拡散処理を説明する。
【００７２】
［誤差拡散処理のモード］
図10によりユーザが設定可能な誤差拡散処理のモードに対する、領域の分割方法、誤差拡散マトリクス、誤差を参照すべき画素位置および誤差を伝播すべき画素位置の一例を説明する。例えばモード0は、実施例1のように、画像をバンド状に分割し、図2(b)に示す誤差拡散マトリクスを使用する。従って、一つのバンドが4ラインで構成される場合、誤差を参照すべき画素位置（以下、参照画素位置）はラインL4、誤差を伝播すべき画素位置（以下、伝播画素位置）はラインL3である。
【００７３】
モード1は、連続する二つのバンドにおいて、先に処理するバンドの末尾2ラインと次に処理するバンドの先頭2ライン（一つのバンドが5ラインで構成される場合はラインL3とL4）を重複して誤差拡散処理する。この場合、参照画素位置はラインL3、伝播画素位置はラインL2である。
【００７４】
モード2は、モード0に比べて誤差拡散マトリクスを大きくし、つまり誤差の参照範囲を上下に一行ずつ、左に一列を拡げて誤差拡散処理を行う。従って、一つのバンドが5ラインで構成される場合、参照画素位置はラインL5、伝播画素位置はラインL4である。
【００７５】
モード3は、実施例2のように、画像をタイル状に分割し、図7(b)に示す誤差拡散マトリクスを使用する。従って、一つのタイルが3×3画素で構成される場合、参照画素位置はラインL4、L8と列R4、R8、伝播画素位置はラインL3、L7と列R3、R7である。
【００７６】
なお、図10に示すモード以外にも、バンドのライン数が異なるモード、タイルの画素数が異なるモード、誤差拡散係数が異なるモードなどが設定可能である。
【００７７】
［誤差拡散処理部］
図11のブロック図により実施例3の誤差拡散処理部102の構成を説明する。
【００７８】
設定部800は、図10に示すモードに対応する設定情報を記憶するテーブルを備え、ユーザが選択したモードに応じて、領域分割部101の領域分割方法、および、乗算部306が使用する誤差拡散マトリクスを設定する。さらに、モードに応じて、参照画素位置を示すデータをレジスタ801に書き込み、伝播画素位置を示すデータをレジスタ802に書き込む。
【００７９】
バッファ参照判定部310は、注目画素のバンドまたはタイル上の位置(x, y)と、レジスタ801に書き込まれた参照画素位置を比較して、注目画素が誤差を参照すべき画素位置か否かを判定する。同様に、バッファ格納判定部311は、注目画素のバンドまたはタイル上の位置(x, y)と、レジスタ802に書き込まれた伝播画素位置を比較して、注目画素が誤差を伝播すべき画素位置か否かを判定する。
【００８０】
また、モード1のように重複処理領域がある場合、誤差拡散処理部102からすべての量子化結果が出力されないように制御してもよい。つまり、バンドの最終行付近の誤差拡散処理において重複処理領域の量子化結果を出力し、バンドの先頭行付近の誤差拡散処理において重複処理領域の量子化結果を出力しないようにしてもよい。勿論、バンドの最終行付近の誤差拡散処理において重複処理領域の量子化結果を出力せずに、バンドの先頭行付近の誤差拡散処理において重複処理領域の量子化結果を出力してもよい。
【００８１】
誤差バッファ制御部308は、設定部800から入力される重複処理領域に関する情報と、バッファ参照判定部310またはバッファ格納判定部311から入力される注目画素の位置情報に基づき、出力部803を制御する。なお、重複処理領域に関する情報とは、例えばバンドのライン数、重複処理領域のライン数などである。出力部803は、誤差バッファ制御部308の制御に従い、量子化結果を出力する・出力しないを切り替える。
【００８２】
なお、図11は、簡略化のためにレジスタ303およびセレクタ304a、304b、304cを記載せずに、量子化誤差を伝播する場合の構成を記載した。実際には、レジスタ303およびセレクタ304a、304b、304cにより量子化誤差の伝播と拡散誤差の伝播の切り換えが可能である。さらに、モードに量子化誤差の伝播と拡散誤差の伝播の切り換えを含め、設定部800によるレジスタ303の値の設定により、量子化誤差の伝播と拡散誤差の伝播の切り換えることもできる。
【００８３】
［重複処理領域がある場合の処理］
以下では、モード1のように重複処理領域がある場合の誤差拡散処理を説明する。
【００８４】
図12により画像の分割方法、誤差拡散処理における画素の走査方法、誤差拡散マトリクスの例を説明する。領域分割部101は、図12(a)に示すように、各バンドが重複処理領域を有するように入力画像200をバンド状に分割する。誤差拡散処理部102は、まずバンド215について、バンドの長手方向に直交する方向（図12(a)の下方向）に画素を走査して、図12(b)または図12(c)に示す誤差拡散マトリクスを使用して誤差拡散処理を行う。続いて、バンド216、そしてバンド217の順に画素を走査して、図12(b)または図12(c)に示す誤差拡散マトリクスを使用して誤差拡散処理を行う。なお、図2(b)および図2(c)に示す誤差拡散マトリクスを使用してもよい。
【００８５】
図12(b)は注目画素が近傍画素から受け取る誤差の比率（拡散係数）を示す。つまり、「*」で示す注目画素には、一行上の画素から7/48、二行上の画素から5/48の比率で量子化誤差が拡散される。また、一列前の五画素から（上から順に）3/48、5/48、7/48、5/48、3/48の比率で量子化誤差が拡散される。さらに、二列前の五画素から（上から順に）1/48、3/48、5/48、3/48、1/48の比率で量子化誤差が拡散される。
【００８６】
図12(c)は注目画素から近傍画素へ誤差を拡散する比率（拡散係数）を示す。つまり、「*」で示す注目画素から、一行下の画素へ7/48、二行下の画素へ5/48の比率で量子化誤差が拡散される。また、一列後の五画素へ（上から順に）3/48、5/48、7/48、5/48、3/48の比率で量子化誤差が拡散される。さらに、二列後の五画素へ（上から順に）1/48、3/48、5/48、3/48、1/48の比率で量子化誤差が拡散される。なお、図12(b)は誤差を受け取る側の画素から見た場合の誤差拡散マトリクスを示し、図12(c)は誤差を拡散する側の画素から見た誤差拡散マトリクスを示し、両者は同じ誤差拡散マトリクスを表している。
【００８７】
図13のフローチャートにより重複処理領域があり、量子化誤差を伝播する場合の誤差拡散処理例を説明する。なお、モードが選択され、設定部800によりモードに対応した設定が済んでいるものとする。
【００８８】
誤差拡散処理部102は、注目画素の値を入力する(S701)。バッファ参照判定部310は、注目画素が伝播画素位置にあるか否かを判定する(S702)。図14により誤差を伝播すべき画素位置を説明する。
【００８９】
図14(a)に示すように、各バンドが重複処理領域2ラインを含む5ラインから構成されるとする。そして、ラインL3上に位置するバンド216の注目画素1100を処理する場合、注目画素1100の拡散元画素は、図14(b)に示す近傍画素A〜Lの12画素である。ラインL1上の拡散元画素A、B、CおよびラインL2上の拡散元画素D、E、Fの六画素はバンド215に含まれ、注目バンド216には含まれない。従って、注目バンド216の処理中に誤差メモリ305に格納される量子化誤差は、拡散元画素G〜Lで生じた量子化誤差のみで、拡散元画素A〜Fで生じた量子化誤差が格納されることはない。そこで、図14(b)に示すように、前バンドの誤差拡散処理において発生した量子化誤差を誤差バッファ309に格納し、注目画素1100の誤差拡散処理において拡散元画素A〜Fの量子化誤差a〜fを参照する。
【００９０】
また、ラインL4上に位置するバンド216の注目画素1102を処理する場合、注目画素1102の拡散元画素は、図14(c)に示す近傍画素D〜Oの12画素である。ラインL2上の拡散元画素D、E、Fの三画素はバンド215に含まれ、注目バンド216には含まれない。従って、注目バンド216の処理中に誤差メモリ305に格納される量子化誤差は、拡散元画素G〜Oで生じた量子化誤差のみで、拡散元画素D〜Fで生じた量子化誤差が格納されることはない。そこで、図14(c)に示すように、注目画素1102の誤差拡散処理において誤差バッファ309に格納された拡散元画素D〜Fの量子化誤差d〜fを参照する。
【００９１】
このように、ラインL3上に位置する画素の誤差拡散処理は、注目画素1100と同様、前バンド215のラインL1、L2上に位置する画素の量子化誤差を参照する必要がある。そして、ラインL4上に位置する画素の誤差拡散処理は、注目画素1102と同様、前バンド215のラインL2上に位置する画素の量子化誤差を参照する必要がある。
【００９２】
なお、拡散元画素G、H、I、J、Mの量子化誤差は、バンド216の誤差拡散処理において誤差メモリ305に格納された量子化誤差を参照する。また、バンド215の誤差拡散処理において拡散元画素G、H、I、J、Mの量子化誤差を誤差バッファ309に格納し、バンド216の誤差拡散処理において誤差バッファ309に格納された拡散元画素G、H、I、J、Mの量子化誤差を参照することもできる。このように、図12(b)に示す誤差拡散マトリクスを使用する場合、伝播誤差を参照すべき画素位置は、注目バンドの先頭行および二行目の画素位置である。
【００９３】
注目画素が参照画素位置にある場合、誤差バッファ制御部308は、バッファ参照判定部310が出力する位置情報に基づき誤差バッファ309から量子化誤差を読み出し、位置情報と量子化誤差を乗算部306に供給する(S703)。次に、誤差バッファ制御部308は、誤差メモリ305が保持する注目画素に対する拡散元画素の量子化誤差を読み出し、拡散元画素の位置情報と量子化誤差を乗算部306に供給する(S704)。乗算部306は、位置情報に対応する図12(b)に示す拡散マトリクスの拡散係数を量子化誤差に乗じた拡散誤差を積算部307に供給する(S705)。積算部307は、乗算部306から順次入力される拡散誤差を積算する(S706)。なお、ステップS703〜S706の処理は、拡散元画素の数（図12(b)の例であれば12画素）分繰り返され、拡散誤差の積算が終了すると、積算部307は積算結果を誤差加算部300に出力する。
【００９４】
誤差加算部300は、積算部307から入力される拡散誤差の積算値と注目画素の値を加算し、加算結果を量子化部301に出力する(S707)。量子化部301は、誤差加算部300から入力される加算値を量子化する(S708)。量子化誤差算出部302は、量子化結果から誤差加算部300が出力する加算値を減算した量子化誤差を誤差メモリ305の注目画素の画素位置に対応する位置に格納する(S709)。
【００９５】
次に、バッファ格納判定部311は、注目画素が伝播画素位置にあるか否かを判定する(S710)。上述したように、図12(c)に示す誤差拡散マトリクスを使用し、バンド215が注目バンドの場合、ラインL1、L2上の画素が誤差を伝播すべき画素である。つまり、誤差を伝播すべき画素位置は、注目バンドの非重複領域の最終行とその上の行の画素位置である。
【００９６】
注目画素が伝播画素位置にある場合、誤差バッファ制御部308は、量子化誤差算出部302が出力する量子化誤差を、バッファ格納判定部311が出力する位置情報に基づき誤差バッファ309に格納する(S711)。さらに、注目画素が重複処理領域にあるか否かを判定し(S712)、重複領域にあれば量子化結果を出力するか否かを判定し(S713)、量子化結果を出力する場合は出力部803を制御して量子化結果を出力させる(S714)。次に、誤差拡散処理部102は、画像入力部100が入力した画像の全画素について誤差拡散処理が終了したか否かを判定し(S715)、全画素の誤差拡散処理が終了するまでステップS701〜S714の処理を繰り返す。
【００９７】
このように、重複処理領域がある場合の参照画素位置は領域の先頭行から始まり、重複処理領域がない場合と変わらない。しかし、重複処理領域がある場合の伝播画素位置は領域の最終行で終わる形態にはならず、領域の非重複領域の最終行で終わる形態になる。この伝播画素位置は、次バンドの処理において誤差メモリ305に量子化誤差が存在しない画素位置である。従って、重複処理領域がある場合、誤差バッファ309に格納する量子化誤差は、注目バンド内の画素位置だけでは決定することができない。本実施例では、ユーザが選択したモードに応じて、レジスタ802に書き込んだ伝播画素位置と注目画素の位置から、バッファ格納判定部311において任意の位置を伝播画素位置として判定する例を示した。誤差拡散処理の連続性を維持するには、レジスタ802に設定する伝播画素位置は、領域の分割方法、誤差拡散マトリクスの形状によって決めることが望ましい。従って、これら情報をバッファ格納判定部311に与え、伝播画素位置か否かを判定する構成によっても、適切な誤差伝播が可能である。
【００９８】
［その他の実施例］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステムあるいは装置のコンピュータ（又はCPUやMPU等）がプログラムを読み出して実行する処理である。
【図１】
0005797030.tif 000002
【図２】
0005797030.tif 000003
【図３】
0005797030.tif 000004
【図４】
0005797030.tif 000005
【図５】
0005797030.tif 000006
【図６】
0005797030.tif 000007
【図７】
0005797030.tif 000008
【図８】
0005797030.tif 000009
【図９】
0005797030.tif 000010
【図１０】
0005797030.tif 000011
【図１１】
0005797030.tif 000012
【図１２】
0005797030.tif 000013
【図１３】
0005797030.tif 000014
【図１４】
0005797030.tif 000015