(57)【要約】【課題】画像データをドット形成有無による表現形式のデータに迅速に変換する。【解決手段】ディザ法を用いて、画像データをドット形成の有無による表現形式のデータに変換する。変換に際しては、隣接するＮ本のラスタをラスタ群としてまとめて、該ラスタ群を構成するラスタを並行してドット列に変換していく。画像データには、周辺の画素は互いに近似した階調値を有する傾向があるので、隣接するＮ本のラスタを並行して処理すれば、キャッシュのヒット率や分岐予測の的中率が向上し、画像データの変換速度を効果的に向上させることができる。【選択図】図１
2008167468.tif 000002
【特許請求の範囲】
【請求項１】
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する画像処理装置であって、
複数の前記閾値が二次元的に配列された閾値マトリックスを記憶しておく閾値マトリックス記憶手段と、
ドットの形成有無の判断を行う対象画素を選択する対象画素選択手段と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断するドット形成判断手段と
を備え、
前記対象画素選択手段は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する手段である画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記閾値マトリックス記憶手段は、前記複数の閾値を、Ｍ行（Ｍは前記Ｎの正の倍数）×Ｌ列（Ｌは２以上の整数）のマトリックスとして記憶している手段である画像処理装置。
【請求項３】
請求項１または請求項２記載の画像処理装置であって、
前記閾値マトリックス記憶手段は、二次元的に配列された前記複数の閾値を、前記Ｎ行ずつ複数のグループにまとめ、各グループ内では、前記対象画素選択手段が前記対象画素を選択する前記所定の順番に従って、該複数の閾値を記憶している手段である画像処理装置。
【請求項４】
請求項３記載の画像処理装置であって、
前記対象画素選択手段は、前記ラスタ群に含まれる複数の画素を、縦横それぞれ所定画素数ずつの複数のブロックにまとめ、該ブロック内の各画素から前記対象画素を順次選択する手段である画像処理装置。
【請求項５】
前記対象画素選択手段がまとめる前記ブロックは、前記ラスタ群に含まれる複数の画素を、縦横Ｎ画素ずつまとめたブロックである請求項４記載の画像処理装置。
【請求項６】
Ｎ＝２である請求項５記載の画像処理装置。
【請求項７】
Ｎ＝８である請求項５記載の画像処理装置。
【請求項８】
請求項３記載の画像処理装置であって、
前記閾値マトリックス記憶手段は、前記画像データの二次元的な画素の配列よりも小さなサイズの配列を、前記閾値マトリックスとして記憶している手段であり、
前記ドット形成有無判断手段は、
前記閾値マトリックスを、前記画像データに対して縦横の方眼状に配置した状態から、前記ラスタの方向と交差する方向にＫ画素（Ｋは前記Ｎの正の倍数）ずつずらしながら配置した状態で対応付ける閾値マトリックス対応付け手段と、
前記画像データ上に対応付けられた前記閾値マトリックスから、前記対象画素に対応する位置に記憶されている閾値を、該対象画素に対応する閾値として読み出す閾値読み出し手段と
を備えている画像処理装置。
【請求項９】
請求項８記載の画像処理装置であって、
前記閾値マトリックス対応付け手段は、前記閾値マトリックスを、前記画像データに対して前記ラスタの方向と交差する方向に前記Ｎ画素ずつずらしながら配置した状態で対応付ける手段である画像処理装置。
【請求項１０】
二次元的に配列された複数の画素の各々に所定の複数色の階調値を対応付けたカラー画像データを受け取り、各画素についてのドット形成の有無を各色成分毎に判断しながら、画素の列たるラスタをドット列に変換することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する画像処理装置であって、
互いに隣接する所定のＮ本（Ｎは２以上の整数）のラスタをまとめてラスタ群を生成するラスタ群生成手段と、
前記各色成分の中から予め選択された第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する第１のデータ変換手段と、
前記各色成分から前記第１の色成分を除いた第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する第２のデータ変換手段と
を備える画像処理装置。
【請求項１１】
請求項１０記載の画像処理装置であって、
前記第１のデータ変換手段は、
複数の前記閾値が二次元的に配列された閾値マトリックスを記憶しておく閾値マトリックス記憶手段と、
ドットの形成有無の判断を行う対象画素を選択する対象画素選択手段と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断するドット形成判断手段と
を備え、
前記対象画素選択手段は、前記ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該ラスタ群を構成する各ラスタから並行して前記対象画素を選択する手段である画像処理装置。
【請求項１２】
請求項１１記載の画像処理装置であって、
前記閾値マトリックス記憶手段は、二次元的に配列された前記複数の閾値を、前記Ｎ行ずつ複数のグループにまとめ、該グループ内では、前記対象画素選択手段が前記対象画素を選択する前記所定の順番に従って、該複数の閾値を記憶している手段である画像処理装置。
【請求項１３】
請求項１２記載の画像処理装置であって、
前記対象画素選択手段は、前記ラスタ群に含まれる複数の画素を、縦横それぞれ所定画素数ずつの複数のブロックにまとめ、該ブロック内の各画素から前記対象画素を順次選択する手段である画像処理装置。
【請求項１４】
請求項１０ないし請求項１３のいずれかに記載の画像処理装置であって、
前記第２のデータ変換手段は、
前記ラスタ群の中の最後尾にある最後尾ラスタを選択し、該最後尾ラスタを構成する各画素についてドット形成の有無を判断することによって、該最後尾ラスタをドット形成の有無を表すドット列に変換する最後尾ラスタ変換手段と、
前記階調誤差を、前記最後尾ラスタを構成する各画素について算出し、該各画素の周辺にある複数の未判断の画素に拡散する第１の誤差拡散手段と、
前記最後尾ラスタに隣接するラスタ群の中の先頭位置にある先頭ラスタを選択し、該最後尾ラスタから該先頭ラスタの各画素に拡散された前記階調誤差を考慮しながら、該先頭ラスタを構成する各画素についてドット形成の有無を判断することによって、該先頭ラスタをドット形成の有無を表すドット列に変換する先頭ラスタ変換手段と、
前記先頭ラスタを構成する各画素で生じた前記階調誤差を、該各画素の周辺にある未判断の画素に拡散する第２の誤差拡散手段と、
前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散された前記階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して該残余ラスタをドット列に変換する残余ラスタ変換手段と
を備え、
前記第１の誤差拡散手段および前記第２の誤差拡散手段は、前記ドット形成の有無を判断した画素とは異なるラスタ群の画素に拡散された誤差については第１の誤差記憶部に記憶し、該ドット形成有無を判断した画素と同じラスタ群の画素に拡散された誤差については第２の誤差記憶部に記憶する手段である画像処理装置。
【請求項１５】
請求項１０ないし請求項１３のいずれかに記載の画像処理装置であって、
前記第２のデータ変換手段は、
前記ラスタ群を構成する複数の画素を、縦横それぞれ所定画素数ずつの複数の画素からなるブロックとしてまとめることにより、該ラスタ群を複数のブロックに区分するブロック形成手段と、
前記ドットの形成有無の判断を前記ブロック単位で行うことにより、前記ラスタをＮ本ずつ並行してドット列に変換するブロック単位変換手段と
を備えている画像処理装置。
【請求項１６】
請求項１０ないし請求項１５のいずれかに記載の画像処理装置であって、
前記カラー画像データは、前記画素の各々に、少なくともシアン色、マゼンタ色、イエロ色を含む各色の階調値を対応付けたデータであり、
前記第１の色成分には、少なくともイエロ色が含まれている画像処理装置。
【請求項１７】
請求項１０ないし請求項１５のいずれかに記載の画像処理装置であって、
前記カラー画像データは、前記画素の各々に、少なくともシアン色、マゼンタ色、イエロ色を含む各色の階調値を対応付けたデータであり、
前記第２の色成分には、少なくともシアン色あるいはマゼンタ色が含まれている画像処理装置。
【請求項１８】
請求項１０ないし請求項１５のいずれかに記載の画像処理装置であって、
前記カラー画像データは、前記画素の各々に、少なくともシアン色、マゼンタ色、イエロ色、ブラック色を含む各色の階調値を対応付けたデータであり、
前記第２の色成分には、少なくともブラック色が含まれている画像処理装置。
【請求項１９】
請求項１０ないし請求項１５のいずれかに記載の画像処理装置であって、
前記カラー画像データは、色相が略同一で濃度が異なる濃淡一組の色を少なくとも含んだ前記所定の複数色の階調値を、前記画素の各々に対応付けたデータであり、
前記濃淡一組の色の中の一方の色は、前記第１の色成分として選択され、他方の色は前記第２の色成分として選択されている画像処理装置。
【請求項２０】
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式の印刷データに変換し、該印刷データに基づいて印刷媒体上に画像を表現する印刷装置であって、
複数の前記閾値が二次元的に配列された閾値マトリックスを記憶しておく閾値マトリックス記憶手段と、
ドットの形成有無の判断を行う対象画素を選択する対象画素選択手段と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断するドット形成判断手段と、
前記ドット形成有無の判断結果に基づいて印刷媒体上にドットを形成するドット形成手段と
を備え、
前記対象画素選択手段は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する手段である印刷装置。
【請求項２１】
請求項２０記載の印刷装置であって、
前記閾値マトリックス記憶手段は、二次元的に配列された前記複数の閾値を、前記Ｎ行ずつ複数のグループにまとめ、各グループ内では、前記対象画素選択手段が前記対象画素を選択する前記所定の順番に従って、該複数の閾値を記憶している手段である印刷装置。
【請求項２２】
二次元的に配列された複数の画素の各々に所定の複数色の階調値を対応付けたカラー画像データを受け取り、各画素についてのドット形成の有無を各色成分毎に判断しながら、画素の列たるラスタをドット列に変換することによって、該カラー画像データをドットの形成有無による表現形式の印刷データに変換し、該印刷データに基づいて各色のドットを形成することによって印刷媒体上にカラー画像を表現する印刷装置であって、
互いに隣接する所定のＮ本（Ｎは２以上の整数）のラスタをまとめてラスタ群を生成するラスタ群生成手段と、
前記各色成分の中から予め選択された第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式の第１の印刷データに変換する第１のデータ変換手段と、
前記各色成分から前記第１の色成分を除いた第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式の第１の印刷データに変換する第２のデータ変換手段と
前記第１の印刷データおよび第２の印刷データに基づいて印刷媒体上に各色のドットを形成するドット形成手段と
を備える印刷装置。
【請求項２３】
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する画像処理方法であって、
複数の前記閾値が二次元的に配列された閾値マトリックスを予め記憶しておく第１の工程と、
ドットの形成有無の判断を行う対象画素を選択する第２の工程と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断する第３の工程と
を備え、
前記第２の工程は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する工程である画像処理方法。
【請求項２４】
請求項２３記載の画像処理方法であって、
前記第１の工程は、二次元的に配列された前記複数の閾値を、前記Ｎ行ずつ複数のグループにまとめ、各グループ内では、前記第２の工程において前記対象画素が選択される前記所定の順番に従って、該複数の閾値を記憶しておく工程である画像処理方法。
【請求項２５】
請求項２４記載の画像処理方法であって、
前記第１の工程は、前記画像データの二次元的な画素の配列よりも小さなサイズの配列を、前記閾値マトリックスとして記憶しておく工程であり、
前記第３の工程は、
前記閾値マトリックスを、前記画像データに対して縦横の方眼状に配置した状態から、前記ラスタの方向と交差する方向にＫ画素（Ｋは前記Ｎの正の倍数）ずつずらしながら配置した状態で対応付ける工程と、
前記画像データ上に対応付けられた前記閾値マトリックスから、前記対象画素に対応する位置に記憶されている閾値を、該対象画素に対応する閾値として読み出す工程と
を備えている画像処理方法。
【請求項２６】
二次元的に配列された複数の画素の各々に所定の複数色の階調値を対応付けたカラー画像データを受け取り、各画素についてのドット形成の有無を各色成分毎に判断しながら、画素の列たるラスタをドット列に変換することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する画像処理方法であって、
前記受け取ったカラー画像データを、前記各色成分の中から予め選択された第１の色成分の画像データと、該第１の色成分を除いた第２の色成分の画像データとに分離する工程と、
前記第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、隣接する前記ラスタを所定のＮ本（Ｎは２以上の整数）ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する工程と、
前記第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、隣接するラスタを前記Ｎ本ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する工程と
を備える画像処理方法。
【請求項２７】
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する方法をコンピュータを用いて実現するためのプログラムであって、
複数の前記閾値が二次元的に配列された閾値マトリックスを予め記憶しておく第１の機能と、
ドットの形成有無の判断を行う対象画素を選択する第２の機能と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断する第３の機能と
を備え、
前記第２の機能は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する機能であるプログラム。
【請求項２８】
請求項２７記載のプログラムであって、
前記第１の機能は、二次元的に配列された前記複数の閾値を、前記Ｎ行ずつ複数のグループにまとめ、各グループ内では、前記第２の機能によって前記対象画素が選択される前記所定の順番に従って、該複数の閾値を記憶しておく機能であるプログラム。
【請求項２９】
請求項２８記載のプログラムであって、
前記第１の機能は、前記画像データの二次元的な画素の配列よりも小さなサイズの配列を、前記閾値マトリックスとして記憶しておく機能であり、
前記第３の機能は、
前記閾値マトリックスを、前記画像データに対して縦横の方眼状に配置した状態から、前記ラスタの方向と交差する方向にＫ画素（Ｋは前記Ｎの正の倍数）ずつずらしながら配置した状態で対応付ける機能と、
前記画像データ上に対応付けられた前記閾値マトリックスから、前記対象画素に対応する位置に記憶されている閾値を、該対象画素に対応する閾値として読み出す機能と
を備えているプログラム。
【請求項３０】
二次元的に配列された複数の画素の各々に所定の複数色の階調値を対応付けたカラー画像データを受け取り、各画素についてのドット形成の有無を各色成分毎に判断しながら、画素の列たるラスタをドット列に変換することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する方法をコンピュータを用いて実現するためのプログラムであって、
前記受け取ったカラー画像データを、前記各色成分の中から予め選択された第１の色成分の画像データと、該第１の色成分を除いた第２の色成分の画像データとに分離する機能と、
前記第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、隣接する前記ラスタを所定のＮ本（Ｎは２以上の整数）ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する機能と、
前記第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、隣接するラスタを前記Ｎ本ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する機能と
を備えるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを変換する技術に関し、詳しくは、各画素についてドット形成の有無を判断しながら画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式の画像データに変換する技術に関する。
【背景技術】
【０００２】
印刷媒体や液晶画面といった表示媒体上にドットを形成することで画像を表現する画像表示装置は、各種画像機器の出力装置として広く使用されている。かかる画像表示装置は、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する画像を表現することが可能となっている。
【０００３】
これら画像表示装置において、画像の階調値に応じて適切な密度でドットが形成されるように、各画素についてドット形成の有無を判断する方法としては、各種の方法が提案されており、代表的な手法としては、いわゆるディザ法と呼ばれる手法と、誤差拡散法と呼ばれる手法とがある。
【０００４】
誤差拡散法は、画素にドットを形成したこと、あるいは形成しなかったことにより発生する階調表現の誤差を算出し、周辺の画素で発生した誤差を考慮しながらドット形成の有無を判断する手法である。誤差拡散法を採用すれば、周辺の画素で発生した誤差が解消されるようにドット形成の有無を判断することで、画像データを精度良く表示することが可能である。これに対してディザ法では、階調表現の誤差を算出する処理が不要であり、また、周辺の画素で発生した誤差を考慮することなくドット形成の有無を判断することができるので、誤差拡散法よりも高速な処理が可能である。このことから、画像の表示速度と表示画質とのかね合いから、表示速度を優先させる場合にはディザ法を適用することで迅速に表示することが可能となり、表示画質を優先させたい場合は誤差拡散法を適用することで良好な画質の画像を表示することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし近年では、画像データを構成する画素数は次第に増加する傾向にあり、これに伴って画像データの変換に要する時間も増加することから、ディザ法を適用した場合でも、画像を迅速に表示することが困難な場合が生じている。従って、画素数の大きな画像データであっても迅速な表示を可能とするために、より迅速な画像処理方法の開発が要請されている。
【０００６】
この発明は、従来技術における上述の課題を解決するためになされたものであり、画質の悪化を招くことなく、ドット形成有無の判断に要する時間を短縮化することによって、高画質の画像を迅速に表示可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の課題の少なくとも一部を解決するため、本発明の第１の画像処理装置は、次の構成を採用した。すなわち、
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する画像処理装置であって、
複数の前記閾値が二次元的に配列された閾値マトリックスを記憶しておく閾値マトリックス記憶手段と、
ドットの形成有無の判断を行う対象画素を選択する対象画素選択手段と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断するドット形成判断手段と
を備え、
前記対象画素選択手段は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する手段であることを要旨とする。
【０００８】
また、上記の第１の画像処理装置に対応する本発明の第１の画像処理方法は、
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する画像処理方法であって、
複数の前記閾値が二次元的に配列された閾値マトリックスを予め記憶しておく第１の工程と、
ドットの形成有無の判断を行う対象画素を選択する第２の工程と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断する第３の工程と
を備え、
前記第２の工程は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する工程であることを要旨とする。
【０００９】
かかる第１の画像処理装置および画像処理方法においては、順次選択した対象画素についてドット形成の有無を判断することにより、ラスタをドット列に変換していく。対象画素の選択に際しては、互いに隣接する所定のＮ本（Ｎは２以上の整数）のラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本のラスタを並行させながら各ラスタから対象画素を選択する。その結果、ラスタをＮ本ずつ並行してドット列に変換しながら、画像データをドットの形成有無による表現形式のデータに変換する。こうしてＮ本のラスタを並行してドット列に変換することとすれば、次の様な理由から迅速に変換することが可能となる。
【００１０】
一般に画像データは、近傍の画素間では、近似した階調値が対応付けられる傾向がある。また、隣接する複数の画素には同じ階調値が対応付けられていることも少なくない。従って、画像処理装置を用いてこのような画像データを変換する場合、画像処理装置に内蔵されたＣＰＵのキャッシュメモリを利用することで、迅速に変換することが可能である。ここでキャッシュメモリとは、ＣＰＵの直ぐ下の記憶階層に設けられた高速に読み書き可能なメモリである。ＣＰＵは内部で実行コードを次々に生成しながら処理を進めるとともに、生成した実行コードをキャッシュメモリに一時的に蓄えている。連続して処理する画素の階調値が近似していれば、先の画素の処理に使用されてキャッシュメモリ内に残っている実行コードをそのまま使用可能な場合が多くなる。キャッシュメモリ内の実行コードを使用すれば新たに実行コードを生成する必要がないので、その分だけ処理を迅速に行うことが可能である。
【００１１】
ここで、画素は二次元的に配列されているから、いずれの方向に近接する画素にも、同じように近似した階調値が対応付けられると考えられる。すなわち、ある画素に着目した場合、その画素の左右方向に近接する画素だけでなく、上下方向、あるいは斜め方向に近接する画素にも、近似した階調値が対応付けられていると考えられる。従って、ラスタを１本ずつ処理するのではなく、複数のラスタを並行して処理すれば、左右方向だけでなく縦方向あるいは斜め方向に存在する階調値の近似した画素についても連続して処理することができる。その結果、キャッシュメモリ内に残っている実行コードを効率よく使用することができるので、それだけ処理を迅速に行うことが可能となるのである。
【００１２】
また、近年では、内部でパイプライン処理を行う種々のＣＰＵが開発され多数使用されている。また、パイプライン処理を更に効率よく行うために分岐予測を行うＣＰＵも種々開発されて多数使用されている。パイプライン処理とは次のような処理である。ＣＰＵは、プログラムに記述された個々の命令を実行するに際して、次のようにいくつかの手順に分けて実行する。先ず、（１）命令を読み込んで、（２）読み込んだ命令を解釈し、（３）解釈した内容を実行して、（４）得られた結果を返すというように、１つの命令を最低でも４つの手順に分けて実行する。パイプライン処理とは、ＣＰＵ内にこれらの手順に対応した専用のユニットを設けることで、１つの命令を流れ作業的に実行する処理である。例えば、読み込んだ命令を解釈している間に次の命令を読み込んでおき、解釈した命令を実行している間に次の命令を解釈しておく。もちろん、次の命令を解釈している間にその次の命令を読み込んでおけばよい。こうして流れ作業的に処理を進めていけば、極めて迅速に命令を実行することができる。
【００１３】
パイプライン処理では、分岐命令を実行した場合、次の命令を解釈したことやその次の命令を読み込んだことが無駄になってしまうので、処理速度が低下してしまう。しかし、連続して処理する画素の階調値が近似していれば、それら画素については同様の処理が繰り返し実行され、従って、処理を切り替えるための分岐が発生する可能性が少なくなる。このため、画像処理を迅速に行うことが可能となる。
【００１４】
更に、例え、ある画素の処理中に分岐命令が発生したとしても、連続して処理する画素の階調値が近似していれば、続く画素の処理中でも同様に分岐命令が発生すると考えられるので、分岐命令は一定のパターンに従って発生することになる。この様な場合は、分岐命令の発生を高い的中率で予測することができるので、続いて行う命令を読み出して解釈する作業が無駄になることを回避して、より一層の高速処理が可能となる。
【００１５】
このことから、複数のラスタを並行して処理することとすれば、二次元的に隣接した階調値の近似する画素を連続して処理することができるので、ラスタ１本ずつ処理した場合よりもパイプライン処理の効率を向上させ、更に分岐予測の的中率を向上させることができる。その結果、画像データをドットの形成有無により表現されたデータに迅速に変換することが可能となる。
【００１６】
こうした画像処理装置においては、Ｍ行（Ｍは前記Ｎの正の倍数）×Ｌ列（Ｌは２以上の整数）のマトリックス状に前記複数の閾値を記憶しておくこととしても良い。
【００１７】
閾値マトリックスをこの様なサイズにしておけば、画像データを前記Ｎ本ずつのラスタからなるラスタ群に区分したときに、１つのラスタ群に含まれるラスタは、常に同じ閾値マトリックスに対応付けることができる。換言すれば、画像データに閾値マトリックスを対応付けたときに、ラスタ群を構成するラスタ間に、閾値マトリックスの境界が来ることがない。このため、対象画素に対応する閾値を閾値マトリックスの中から読み出す処理が複雑となることを回避して、画像処理の高速化を図ることが可能となる。
【００１８】
上述したこれら画像処理装置あるいは画像処理方法においては、次のようにして閾値マトリックスの各閾値を記憶することとしても良い。先ず、マトリックス状に配列された複数の閾値を、前記Ｎ行ずつ複数のグループにまとめる。そして、各グループ内では、前記対象画素選択手段が前記対象画素を選択する前記所定の順番に従って、該複数の閾値を記憶する。
【００１９】
こうすれば、ラスタ群を構成するＮ本のラスタから対象画素を選択する順序に合わせて、閾値マトリックスの各閾値を記憶することができる。その結果、対象画素についての画像データの階調値と、該対象画素に対応する閾値とを読み出してドット形成の有無を判断する際に、閾値に関しては記憶されている順番に従って読み出せばよい。従って、処理が簡素なものとなり、処理速度の向上を図ることが可能となる。尚、ここに言う「対象画素選択手段が対象画素を選択する所定の順番に従って、複数の閾値を記憶する」とは、対象画素が選択される順序と複数の閾値を記憶する順序とが完全に一致するものに限らず、順序が多少食い違っているようなものも含まれる。すなわち、対象画素が選択される順序と閾値が記憶される順序とが多少ずれている程度であれば、対象画素に対応する閾値を閾値マトリックスから容易に見つけ出すことができ、従って、閾値を読み出す処理を簡素なものとすることができるからである。また、閾値マトリックスの各閾値を、このように対象画素を選択する順序に従って記憶しておけば、例え画像処理を行うＣＰＵがキャッシュを内蔵していない場合や、パイプライン処理を行っていない場合であっても、処理速度を向上させることが可能となる。
【００２０】
かかる画像処理装置においては、次のようにして前記対象画素を選択することとしても良い。前記ラスタ群に含まれる複数の画素を、縦横それぞれ所定画素数ずつの複数のブロックにまとめ、該ブロック内の各画素から前記対象画素を順次選択する。
【００２１】
こうすれば、ブロック内の各画素から対象画素を選択する処理を繰り返し行うことで、ラスタ群を構成する画素から対象画素を順次選択することができる。その結果、処理を単純なものとすることができ、延いては画像処理の速度を向上させることができる。
【００２２】
また、かかるブロックは、特に縦横Ｎ画素ずつの複数の画素をまとめたブロックとすることもできる。この場合、ブロックをラスタの方向に順次移動させるだけで、ラスタ群を構成する画素から対象画素を順次選択することができるので、処理を更に単純なものとすることができる。
【００２３】
こうしたブロックは、特に縦横２画素ずつ合計４画素をまとめたブロックとすることができる。縦横２画素ずつのブロックは画素数が小さいので、処理が複雑とならず、画像処理速度を効果的に向上させることができるので好適である。
【００２４】
あるいは、縦横８画素ずつ合計６４画素をまとめてブロックとすることもできる。例えば、ＪＰＥＧ形式で圧縮された画像データを解凍すると、８画素×８画素をひとまとまりとして、各画素の階調値のデータに展開される。従って、縦横８画素ずつのブロックを構成し、かかるブロックの中から対象画素を選択すれば、展開された階調値を並べ換えることなく、そのままの順序で、画像処理を行うことができるので、処理を高速化することができる。
【００２５】
上述した画像処理装置あるいは画像処理方法においては、次のようにして、対象画素についてのドット形成有無を判断することとしても良い。先ず、画像データの二次元的な画素の配列よりも小さなサイズの配列を、前記閾値マトリックスとして記憶しておく。そして、該閾値マトリックスを、前記画像データに対して縦横の方眼状に配置した状態から、前記ラスタの方向と交差する方向にＫ画素（Ｋは前記Ｎの正の倍数）ずつずらしながら配置した状態で対応付け、画像データ上に対応付けられた該閾値マトリックスから、対象画素に対応する位置に記憶されている閾値を読み出す。こうして読み出した閾値と、対象画素の階調値とを比較することにより、ドット形成有無を判断することとしてもよい。
【００２６】
こうして、閾値マトリックスを少しずつずらしながら画像データに対応付けてやれば、ラスタ方向に同じ閾値が繰り返し使用されて、ドットの形成され方が一定のパターンで繰り返されることを回避することができる。また、閾値マトリックスのずらし量を、ラスタの方向と交差する方向にＫ画素（Ｋは前記Ｎの正の倍数）としておけば、画像データに閾値マトリックスを対応付けたときに、ラスタ群を構成するラスタ間に、閾値マトリックスの境界が来ることがない。このため、対象画素に対応する閾値を閾値マトリックスの中から読み出す処理が複雑となることを回避して、画像処理の高速化を図ることが可能となる。
【００２７】
このように閾値マトリックスをずらしながら画像データに対応付ける場合には、ずらし量を特に、ラスタ群を構成するラスタ本数と同じ値としてもよい。詳細には後述するが、こうすれば、閾値マトリックスの各閾値を読み出す処理を簡素なものとすることが可能となるので好ましい。
【００２８】
また、前述した課題の少なくとも一部を解決するため、本発明の第２の画像処理装置は、次の構成を採用した。すなわち、
二次元的に配列された複数の画素の各々に所定の複数色の階調値を対応付けたカラー画像データを受け取り、各画素についてのドット形成の有無を各色成分毎に判断しながら、画素の列たるラスタをドット列に変換することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する画像処理装置であって、
互いに隣接する所定のＮ本（Ｎは２以上の整数）のラスタをまとめてラスタ群を生成するラスタ群生成手段と、
前記各色成分の中から予め選択された第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する第１のデータ変換手段と、
前記各色成分から前記第１の色成分を除いた第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する第２のデータ変換手段と
を備えることを要旨とする。
【００２９】
かかる第２の画像処理装置に対応する本発明の第２の画像処理方法は、
二次元的に配列された複数の画素の各々に所定の複数色の階調値を対応付けたカラー画像データを受け取り、各画素についてのドット形成の有無を各色成分毎に判断しながら、画素の列たるラスタをドット列に変換することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する画像処理方法であって、
前記受け取ったカラー画像データを、前記各色成分の中から予め選択された第１の色成分の画像データと、該第１の色成分を除いた第２の色成分の画像データとに分離する工程と、
前記第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、隣接する前記ラスタを所定のＮ本（Ｎは２以上の整数）ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する工程と、
前記第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、隣接するラスタを前記Ｎ本ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する工程と
を備えることを要旨とする。
【００３０】
かかる第２の画像処理装置および画像処理方法においては、カラー画像データに含まれる所定の複数色の画像データの中、第１の色成分の画像データについては、各画素の階調値と各画素に対応付けられた所定の閾値とを比較しながら、Ｎ本のラスタを並行してドット列に変換する。また、第２の色成分の画像データについては、ドット形成の有無を判断したことにより生じた階調誤差を周辺の未判断画素に拡散しながら、Ｎ本のラスタを並行してドット列に変換していく。
【００３１】
前述したように、画像データは、近傍の画素には近似した階調値が対応付けられていることが多いので、こうして、Ｎ本のラスタを並行してドット列に変換していけば、キャッシュのヒット率や、パイプライン処理の効率、分岐予測の的中率が向上し、その結果、画像データを迅速に変換することができる。また、第１の色成分の画像データも、第２の色成分の画像データも、ともにラスタＮ本ずつ並行して処理することとすれば、これらの色成分の画像データを並行してドット列に変換することができるので、処理を不必要に複雑化させることがないので好ましい。
【００３２】
カラー画像データを扱うこうした第２の画像処理装置においては、第１の色成分の画像データを次のようにして変換することとしても良い。複数の閾値を二次元的に配列された閾値マトリックスに予め記憶しておく。そして、画像データを構成する複数のラスタの中から、互いに隣接するＮ本のラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本のラスタから並行して対象画素を選択する。こうして選択した対象画素に対応付けられた階調値と該画素に対応する閾値とを閾値マトリックスの中から読み出して、これらを比較することにより、対象画素についてのドット形成有無を判断する。
【００３３】
こうすれば、Ｎ本のラスタを並行してドット列に変換しながら、第１の色成分の画像データをドット形成有無により表現されたデータに、迅速に変換することができる。
【００３４】
かかる画像処理装置においては、前記閾値マトリックスの閾値を、Ｎ行ずつの複数のグループにまとめて、該グループ内では、対象画素を選択する所定の順番に従って記憶しておくこととしてもよい。
【００３５】
この様に閾値マトリックスの閾値を記憶しておけば、対象画素についての画像データの階調値と、該対象画素に対応する閾値とを読み出してドット形成の有無を判断する際に、閾値に関しては記憶されている順番通りに読み出せばよい。従って、処理を簡素なものとすることができるので好ましい。また、閾値マトリックスの各閾値を、こうして対象画素を選択する順番に従って記憶しておけば、画像処理を行うＣＰＵがキャッシュを内蔵しておらず、あるいはパイプライン処理を行っていない場合であっても、処理を高速化することが可能になるという利点も得られる。
【００３６】
また、対象画素は次のようにして選択してもよい。すなわち、ラスタ群に含まれる複数の画素を、縦横それぞれ所定画素数ずつの複数のブロックにまとめて、該ブロック内の各画素から対象画素を順次選択することとしてもよい。
【００３７】
こうすれば、ブロック内の各画素から対象画素を選択する処理を繰り返し行うことで、ラスタ群を構成する画素から対象画素を順次選択することができる。その結果、処理を単純なものとすることができるので好ましい。
【００３８】
上述した第２の画像処理装置においては、第２の色成分の画像データを次のようにして変換してもよい。先ず、互いに隣接した前記Ｎ本のラスタをまとめてラスタ群を生成する。そして、該ラスタ群の最後尾にある最後尾ラスタをドット列に変換し、各画素で生じた階調誤差を周辺の未判断画素に拡散する。また、最後尾ラスタに隣接したラスタ群の先頭にある先頭ラスタをドット列に変換し、各画素で生じた階調誤差を周辺の未判断画素に拡散する。更に、ラスタ群から先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散された前記階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して該残余ラスタをドット列に変換する。そして、これら階調誤差の拡散に際しては、ドット形成の有無を判断した画素と同じラスタ群の画素に拡散する誤差と、異なるラスタ群の画素に拡散する誤差とを、異なる誤差記憶部に記憶する。こうして拡散した誤差を用いて、各ラスタをドット列に変換する。
【００３９】
こうすれば、第１の色成分の画像データについてはディザ法を適用し、第２の色成分の画像データについては誤差拡散法を適用しながら、ラスタ群を構成する複数のラスタを並行してドット列に変換することができる。その結果、カラー画像データをドット形成の有無による表現形式の各色毎のデータに迅速に変換することが可能となる。
【００４０】
こうした第２の画像処理装置においては、第２の色成分の画像データを次のようにして変換しても良い。先ず、第２の色成分の画像データを、縦横それぞれ所定画素数ずつのブロックにまとめて、ラスタ群から複数のブロックを生成する。そして、ドットの形成有無の判断を該ブロック単位で行うことにより、ラスタ群を構成するＮ本のラスタを並行してドット列に変換することとしてもよい。
【００４１】
詳細には後述するが、こうしてブロック単位で処理すれば、第２の色成分の画像データについてもドット形成有無の判断を迅速に行うことができ、延いては画像データを迅速に変換することが可能となる。
【００４２】
上述した第２の画像処理装置が扱うカラー画像データが、少なくともシアン色、マゼンタ色、イエロ色を含んだ複数色の画像データから構成されたデータである場合は、少なくともイエロ色の画像データは前記第１の色成分の画像データとして変換しても良い。
【００４３】
イエロ色の画像データは、データの変換精度が多少悪化しても、画質に対する影響が比較的少ないので、イエロ色の画像データを前記第１の色成分の画像データとして変換すれば、画質を悪化させることなくカラー画像データを迅速に変換することが可能となる。
【００４４】
また、カラー画像データを扱うこうした第２の画像処理装置においては、少なくともシアン色あるいはマゼンタ色の画像データについては、前記第２の色成分の画像データとして変換することとしても良い。
【００４５】
シアン色あるいはマゼンタ色の画像データは、データの変換精度の悪化が、画質に比較的影響を与えやすい傾向にあるので、これらの画像データを前記第２の色成分の画像データとして変換すれば、画質を悪化させることなくカラー画像データを変換することができる。
【００４６】
また、カラー画像データにブラック色の画像データが含まれている場合には、ブラック色の画像データを前記第２の色成分の画像データとして変換することとしても良い。
【００４７】
ブラック色の画像データも、シアン色あるいはマゼンタ色の画像データと同様に、変換精度の悪化が、画質に比較的影響を与え易い。従って、ブラック色の画像データを前記第２の色成分の画像データとして変換すれば、画質を悪化させることなくカラー画像データを変換することができる。
【００４８】
更には、カラー画像データに、色相が略同一で濃度が異なる濃淡一組の色の画像データが含まれている場合には、これら一組の色の一方の画像データについては、前記第１の色成分の画像データとして変換し、一組の色の他方の画像データについては、前記第２の色成分の画像データとして変換することとしてもよい。例えば、カラー画像データ中に、シアン色と濃度の薄いシアン色たる淡シアン色とからなる一組の色についての画像データが含まれている場合は、次のようにして変換する。すなわち、シアン色の画像データを第１の色成分として変換した場合は、淡シアン色の画像データは第２の色成分として変換し、逆に、シアン色の画像データを第２の色成分として変換した場合は、淡シアン色の画像データは第１の色成分として変換する。またカラー画像データ中に、マゼンタ色と濃度の薄いマゼンタ色たる淡マゼンタ色の一組の色についての画像データが含まれている場合についても同様に、一方を第１の色成分の画像データとして変換した場合は、他方を第２の色成分の画像データとして変換する。
【００４９】
一般に、カラー画像データ中に色相が略同一で濃度の異なる一組の色の画像データが含まれている場合、これら濃淡の画像データが画質に与える影響の大きさは互いに異なっており、一方が画質への影響が大きい場合には他方は画質への影響が少ない関係にある。経験上、これら一組の色の濃淡差が大きい場合には、濃い色の画像データが画質に与える影響が大きく、逆に一組の色の濃度差が小さい場合には、淡い色の画像データが画質に与える影響が大きくなることが知られている。従って、これら濃淡一組の色の画像データの中、画質に与える影響の少ない方の画像データを第１の色成分の画像データとして変換し、画質に与える影響の大きい方の画像データを第２の画像データとして変換すれば、画質を悪化させることなくカラー画像データを迅速に変換することができる。
【００５０】
また、上述した第１の画像処理装置および第２の画像処理装置はいずれも、印刷媒体上にドットを形成して画像を表現する印刷装置に、好適に適用することができる。
【００５１】
すなわち、上述した第１の画像処理装置あるいは第２の画像処理装置においては、二次元的に配列された複数の画素の各々に階調値が対応付けられた画像データを受け取り、該画像データに所定の画像処理を施すことによって、ドット形成の有無による表現形式にデータに変換する。そして変換に際しては、複数のラスタを並行してドット列に変換することで、画像データを迅速に変換することができる。従って、これら第１の画像処理装置、あるいは第２の画像処理装置を適用して画像データに画像処理を施せば、画像データをドット形成の有無による表現形式のデータに迅速に変換することができ、延いては画像を迅速に印刷することが可能となる。
【００５２】
また、本発明は、上述した第１の画像処理方法、あるいは第２の画像処理方法を実現するプログラムをコンピュータに読み込ませ、コンピュータを用いて実現することも可能である。従って、本発明は次のようなコンピュータプログラムとしての態様も含んでいる。すなわち、上述の第１の画像処理方法に対応するプログラムは、
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する方法をコンピュータを用いて実現するためのプログラムであって、
複数の前記閾値が二次元的に配列された閾値マトリックスを予め記憶しておく第１の機能と、
ドットの形成有無の判断を行う対象画素を選択する第２の機能と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断する第３の機能と
を備え、
前記第２の機能は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する機能であることを要旨とする。
【００５３】
また、上述の第２の画像処理方法に対応するプログラムは、
二次元的に配列された複数の画素の各々に所定の複数色の階調値を対応付けたカラー画像データを受け取り、各画素についてのドット形成の有無を各色成分毎に判断しながら、画素の列たるラスタをドット列に変換することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する方法をコンピュータを用いて実現するためのプログラムであって、
前記受け取ったカラー画像データを、前記各色成分の中から予め選択された第１の色成分の画像データと、該第１の色成分を除いた第２の色成分の画像データとに分離する機能と、
前記第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、隣接する前記ラスタを所定のＮ本（Ｎは２以上の整数）ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する機能と、
前記第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、隣接するラスタを前記Ｎ本ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する機能と
を備えることを要旨とする。
【００５４】
これらのプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現すれば、二次元的に配列された複数の画素に階調値を対応付けた画像データを、ドット形成の有無による表現形式のデータに迅速に変換することが可能となる。
【００５５】
更には、これらのプログラムをコンピュータで読み取り可能に記録媒体上に記録しておき、これら記録媒体上のプログラムを読み込ませることで、コンピュータを用いて実現することも可能である。従って、本発明は上述したプログラムを、コンピュータで読み取り可能に記録した記録媒体としての態様を取ることも可能である。
【００５６】
［発明の他の態様］
本発明は、次のような態様として把握することも可能である。すなわち、
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する画像処理装置であって、
複数の前記閾値が二次元的に配列された閾値マトリックスを記憶しておく閾値マトリックス記憶手段と、
ドットの形成有無の判断を行う対象画素を選択する対象画素選択手段と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断するドット形成判断手段と
を備え、
前記対象画素選択手段は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する手段であり、
前記ドット形成判断手段は、パイプライン処理を行いながら前記対象画素についてのドット形成有無を判断する手段である画像処理装置として把握することができる。
【００５７】
あるいは、本発明を次のような態様として把握することも可能である。すなわち、
二次元的に配列された複数の画素の各々に階調値を対応付けた画像データを受け取り、各画素の階調値と所定の閾値とを比較してドットの形成有無を判断しながら該画素の列たるラスタをドット列に変換することによって、該画像データをドットの形成有無による表現形式のデータに変換する画像処理装置であって、
複数の前記閾値が二次元的に配列された閾値マトリックスを記憶しておく閾値マトリックス記憶手段と、
ドットの形成有無の判断を行う対象画素を選択する対象画素選択手段と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断するドット形成判断手段と
を備え、
前記対象画素選択手段は、互いに隣接する所定のＮ本（Ｎは２以上の整数）の前記ラスタをラスタ群としてまとめ、該ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該Ｎ本の各ラスタから並行して前記対象画素を選択する手段であり、
前記ドット形成判断手段は、前記対象画素についてのドット形成有無を判断するに際して発生する中間的な情報を、該判断のための命令が記憶されるメインメモリよりも高速に読み書き可能なキャッシュメモリに一時的に蓄えながら、前記ドット形成有無を判断する手段である画像処理装置として把握することができる。
【発明を実施するための最良の形態】
【００５８】
本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って以下に説明する。
Ａ．発明の概要：
Ｂ．第１実施例：
Ｂ−１．装置構成：
Ｂ−２．画像データ変換処理の概要：
Ｂ−３．第１実施例の階調数変換処理：
Ｂ−４．変形例：
Ｃ．第２実施例：
Ｃ−１．第２実施例の階調数変換処理における閾値の格納方法：
Ｃ−２．第２実施例の階調数変換処理：
Ｃ−３．変形例：
Ｄ．第３実施例：
Ｄ−１．第３実施例の階調数変換処理：
Ｄ−２．変形例：
【００５９】
Ａ．発明の概要：
図１を参照しながら、本発明の概要について説明する。図１は、印刷システムを例にとって、本発明の概要を概念的に示した説明図である。本印刷システムは、本発明の画像処理装置１０と、プリンタ２０とから構成されている。画像処理装置１０は、画像データを受け取って所定の画像処理を施した後、ドットの形成有無による表現形式の印刷データに変換して、プリンタ２０に出力する。図中には、画像処理装置１０が画像データに画像処理を施してデータを変換する処理の概要が、フローチャートの形式で示されている。画像処理装置１０に供給される画像データは、二次元的に配列された複数の画素の各々に階調値が対応づけられた形式で表現されている。こうした画像データは、デジタルカメラやカラースキャナなどの画像機器で撮影した画像や、各種のアプリケーションプログラムを用いてコンピュータ上で作成した画像に所定の変換を施すことによって、生成することができる。
【００６０】
画像処理装置１０はこうした画像データを受け取ると、大まかには次のような流れで画像処理を施していく。先ず、画像データの中からドット形成の有無を判断しようとする画素（対称画素）を選択し（ステップＳ１０）、対称画素に対応づけられた階調値と、該対象画素に所定の方法で対応付けられた閾値とを読み出す（ステップＳ２０）。閾値の値は、マトリックス状に複数の閾値が予め記憶されている。本明細書では、閾値を記憶しているこうしたマトリックスを閾値マトリックスと呼ぶ。図１には、一例として縦横６個ずつの合計３６個の閾値が記憶された閾値マトリックスが表示されているが、もちろん閾値マトリックスには、より多数の閾値を記憶しておくことが可能である。ステップＳ２０では、画像データ上に閾値マトリックスを重ねたときに、対称画素に相当する位置に記憶されている閾値を、その対象画素に対応付けられた閾値として読み出す。
【００６１】
図１の中で「対称画素選択」と表示した枠内には、画像データ上に閾値マトリックスを重ねている様子を概念的に示している。表示中の細い破線は、二次元的に配列された複数の画素を示しており、太い破線は閾値マトリックスを示している。通常、閾値マトリックスの大きさは、画像データの大きさよりも小さいので、閾値マトリックスは位置を移動させながら繰り返して使用される。こうして閾値を読み出したら、対象画素の階調値と比較することにより、対象画素についてのドット形成の有無を判断する（ステップＳ３０）。次いで、画像データを構成する全ての画素についてドット形成有無の判断を行ったか否かを判断し（ステップＳ４０）、全ての画素について判断を完了するまで、上述した一連の処理を繰り返し行う。
【００６２】
ここで、本発明の画像処理装置１０では、画像データを迅速に変換するために、対象画素を所定の方法で順次選択していく。図中の「対象画素選択」と表示した枠内には、対象画素を選択する様子が例示されている。説明の都合上、二次元的に配列された複数の画素の中の画素列をラスタと呼び、画像データは複数本のラスタが集まって構成されているものと考える。また、これらラスタには符番が付されており、「ラスタ１」，「ラスタ２」・・・と、それぞれのラスタを識別するものとする。
【００６３】
対象画素の選択に際しては、先ず初めに、所定本数の隣接するラスタをまとめてラスタ群を形成する。図中の例示では、ラスタ１とラスタ２、ラスタ３とラスタ４、あるいはラスタ５とラスタ６、というように２本ずつのラスタをまとめてラスタ群を形成している。すなわち、図示した例では、１つのラスタ群には、ラスタ２本分に相当する複数の画素が含まれていることになる。次いで、ラスタ群を構成するこれら複数の画素の中から、所定の順番に従って順次、対象画素を選択していく。図中の例示に従って説明すると、先ず初めに、ラスタ１の左端の画素を対象画素として選択し、次いでラスタ２の左端の画素を選択する。その次は、ラスタ１の左から２番目の画素を選択し、続いてラスタ２の左から２番目の画素を選択する。こうして、ラスタ１とラスタ２とから、交互に対象画素を選択していく。図中で、ラスタ１およびラスタ２の上を左端から右方向に向かってジグザグ状に進む実線は、これら２つのラスタから交互に対象画素が選択される様子を模式的に表したものである。このように、２つのラスタから交互に対象画素を選択しながらドット形成の有無を判断することで、ラスタ１およびラスタ２が並行してドット列に変換されることになる。
【００６４】
以上のようにしてラスタ１およびラスタ２の全画素について、ドット形成の有無を判断したら、今度はラスタ３およびラスタ４の画素から対象画素を選択する。すなわち、ラスタ３の左端の画素を対象画素として選択し、次いでラスタ４の左端の画素、ラスタ３の左から２番目の画素、ラスタ４の左から２番目の画素というように、ラスタ３およびラスタ４の画素を交互に対象画素として選択していく。図中でラスタ２の直ぐ下に、右側からラスタ３の左端の画素に向かう太い破線の矢印は、ラスタ１およびラスタ２の処理が終了して、ラスタ３およびラスタ４の処理に移ったことを模式的に示している。そして、ラスタ３およびラスタ４の画素を交互に選択しながら、全て画素についてドット形成の有無を判断したら、今度はラスタ５およびラスタ６の画素から対象画素を選択する。ラスタ５およびラスタ６の処理を終了したら、その次はラスタ７およびラスタ８、というようにラスタ群毎に複数のラスタを並行してドット列に変換していく。
【００６５】
尚、以上の説明では、それぞれのラスタ群は２本のラスタから構成されているものとして説明したが、より多数のラスタから構成することも可能である。また、ラスタ群を構成する各画素を順次、対象画素として選択する順序は、以上に説明したものに限られず、ラスタ群を構成するラスタが並行してドット列に変換されるような順序であれば、種々の順序とすることができる。
【００６６】
このようにラスタ群を構成する複数のラスタを並行してドット列に変換することとすれば、次のような種々の理由から迅速に変換することが可能である。
【００６７】
一般に画像データは、近傍の画素間には近似した階調値が対応付けられる傾向がある。複数の画素について連続してドット形成の有無を判断する場合、これらの画素が互いに近似した階調値を有していれば、判断を行うためにＣＰＵが内部で生成する実行コードがキャッシュメモリに残っている可能性が高くなる。実行コードが残っていれば、ＣＰＵはキャッシュメモリから実行コードを読み出して処理を進めることができるので、実行コードを生成する必要が無くなり、その分だけ処理を迅速化することが可能となる。尚、このように必要な実行コードあるいはデータなどがキャッシュメモリに残っている確率は、キャッシュのヒット率と呼ばれることがある。ここで、画素は二次元的に配列されているから、縦横斜めのいずれの方向に近接する画素にも同様に近似した階調値が対応付けられている可能性が高い。例えば、図１に示されたラスタ１の左端の画素を例にとって説明すれば、この画素の周辺の画素、すなわちラスタ１の左端から２番目の画素、ラスタ２の左端あるいは左端から２番目の画素はいずれも、ラスタ１の左端にある画素と近似した階調値が対応付けられている可能性が高い。従って、ラスタ１およびラスタ２の画素から交互に対象画素を選択してドット形成有無を判断して行けば、二次元的に広がる画素の中から階調値の近似した画素を連続して処理することができるので、その分だけキャッシュのヒット率を向上させて、処理を迅速化することが可能となる。
【００６８】
また、画像処理を行うＣＰＵがパイプライン処理、あるいはパイプライン処理の分岐予測を行っている場合は、次のような理由から、複数のラスタを並行して処理することでより一層の迅速化を実現することができる。階調値が近似した画素を連続して処理する場合、同様な処理が繰り返される可能性が高くなる。例えば、連続して処理する画素の階調値が充分に低い場合は、いずれの画素についてもドットを形成しないと判断される可能性が高くなる。すなわち、これらの画素を処理している間は、ＣＰＵの内部では同様な処理が連続して行われる可能性が高くなる。このため、パイプライン処理の効率や分岐予測の的中率が向上し、その結果、処理を高速化することができる。上述したように、複数のラスタを並行して処理してやれば、縦横斜め方向に近接した画素を連続して処理することができるので、ラスタ１本ずつドット列に変換する場合よりも、階調値が近似した画素を連続して処理することができる。その結果、パイプライン処理の効率や分岐予測の的中率を向上させることができ、その分だけ処理を迅速化することが可能となる。
【００６９】
本発明の画像処理装置には、種々の態様が存在している。以下では、これら各種の態様について、実施例を用いて詳細に説明する。
【００７０】
Ｂ．第１実施例：
Ｂ−１．装置構成：
図２は、第１実施例の画像処理装置としてのコンピュータ１００の構成を示す説明図である。コンピュータ１００は、ＣＰＵ１０２を中心に、ＲＯＭ１０４やＲＡＭ１０６などを、バス１１６で互いに接続して構成された周知のコンピュータである。また、ＣＰＵ１０２にはキャッシュメモリが内蔵されており、ＲＯＭ１０４やＲＡＭ１０６などから情報を読み出す際には、先ずキャッシュメモリにアクセスして、必要な情報が残っていればキャッシュメモリから読み出すことで、処理の高速化を図っている。更に、ＣＰＵ１０２の内部では、いわゆるパイプライン処理と呼ばれる並列演算方式により処理の高速化が図られており、パイプライン処理を効果的に機能させるために分岐予測制御も行われている。
【００７１】
コンピュータ１００には、フレキシブルディスク１２４やコンパクトディスク１２６のデータを読み込むためのディスクコントローラＤＤＣ１０９や、周辺機器とデータの授受を行うための周辺機器インターフェースＰ−Ｉ／Ｆ１０８、ＣＲＴ１１４を駆動するためのビデオインターフェースＶ−Ｉ／Ｆ１１２等が接続されている。Ｐ−Ｉ／Ｆ１０８には、後述するカラープリンタ２００や、ハードディスク１１８等が接続されている。また、デジタルカメラ１２０や、カラースキャナ１２２等をＰ−Ｉ／Ｆ１０８に接続すれば、デジタルカメラ１２０やカラースキャナ１２２で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードＮＩＣ１１０を装着すれば、コンピュータ１００を通信回線３００に接続して、通信回線に接続された記憶装置３１０に記憶されているデータを取得することもできる。
【００７２】
図３は、第１実施例の画像処理装置に組み合わせて使用されるカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料濃度の低いシアン（淡シアン）インクと染料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。更には、明度の低い（暗い）イエロ（ダークイエロ）インクを加えた合計７色のインクドットを形成可能なインクジェットプリンタを用いても良い。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインク，淡シアンインク，淡マゼンタインク，ダークイエロインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインク，ＬＣインク，ＬＭインク，ＤＹインクと略称するものとする。
【００７３】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０とから構成されている。
【００７４】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。キャリッジ２４０にインクカートリッジ２４２，２４３を装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の底面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。図４は、印字ヘッド２４１の底面に、複数のノズルＮｚが設けられている様子を示す説明図である。図示されてるように、印字ヘッド２４１の底面には各色のインク吐出用ヘッド毎に、複数のノズルＮｚが一定のノズルピッチｋで千鳥状に２列に配列されている。
【００７５】
図３に示した制御回路２６０は、ＣＰＵ２６１とＲＯＭ２６２とＲＡＭ２６３等から構成されており、キャリッジモータ２３０と紙送りモータ２３５の動作を制御することによってキャリッジ２４０の主走査と副走査とを制御するとともに、コンピュータ１００から供給される印刷データに基づいて、各色毎のインク吐出用ヘッドを駆動し適切なタイミングでインク滴を吐出する。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００７６】
尚、各色のインク吐出用ヘッドを駆動してインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。また、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
【００７７】
更には、インク吐出ヘッドから吐出するインク滴の大きさを制御したり、あるいは微細なインク滴を複数個吐出して、吐出するインク滴の数を制御するといった方法を用いて、印刷用紙上に形成されるインクドットの大きさを制御な可能なプリンタ、いわゆるバリアブルドットプリンタを用いることも可能である。
【００７８】
Ｂ−２．画像データ変換処理の概要：
図５は、第１実施例の画像処理装置としてのコンピュータ１００が、受け取った画像データに所定の画像処理を加えることにより、該画像データを印刷データに変換する処理の流れを示すフローチャートである。かかる処理は、コンピュータ１００のオペレーティングシステムがプリンタドライバを起動することによって開始され、ＣＰＵ１０２の機能を用いて実行される。以下、図５に従って、第１実施例の画像データ変換処理について簡単に説明する。
【００７９】
プリンタドライバは、画像データ変換処理を開始すると、先ず初めに、カラー画像データの読み込みを開始する（ステップＳ１００）。ここで読み込まれるカラー画像データは、二次元的に配列された複数の画素に、赤色（Ｒ），緑色（Ｇ），青色（Ｂ）の各色についての階調値が対応付けられたいわゆるＲＧＢ画像データである。
【００８０】
次いで、取り込んだ画像データの解像度を、カラープリンタ２００が印刷するための解像度に変換する（ステップＳ１０２）。カラー画像データの解像度が印刷解像度よりも低い場合は、補間演算を行うことで隣接画像データ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は、一定の割合でデータを間引くことによって画像データの解像度を印刷解像度に変換する。また簡便には、補間演算を行う代わりに、隣接する画素の間に、いずれかの画素と同じ階調値の画素を新たに生成することもできる。
【００８１】
こうして解像度を変換すると、カラー画像データの色変換処理を行う（ステップＳ１０４）。色変換処理とは、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されているＲＧＢ画像データを、Ｃ，Ｍ，Ｙ，Ｋなどのカラープリンタ２００で使用する各色の階調値の組み合わせによって表現された画像データに変換する処理である。色変換処理は、色変換テーブル（ＬＵＴ）と呼ばれる３次元の数表を参照することで迅速に行うことができる。
【００８２】
色変換処理を終了すると、次は階調数変換処理を開始する（ステップＳ１０６）。階調数変換処理とは次のような処理である。色変換処理によって得られた画像データは、Ｃ，Ｍ，Ｙ，Ｋの各色毎に２５６階調の階調幅を持つデータとなっている。これに対し、第１実施例のカラープリンタ２００では、「ドットを形成する」，「ドットを形成しない」のいずれかの状態しか採り得ない。すなわち、本実施例のカラープリンタ２００は局所的には２階調しか表現し得ない。そこで、２５６階調を有する画像データを、カラープリンタ２００が表現可能な２階調で表現された画像データに変換する必要がある。このような階調数の変換を行う処理が階調数変換処理である。
【００８３】
第１実施例の階調数変換処理では、いわゆるディザ法と呼ばれる手法を用いて処理を行う。ディザ法とは、画素の階調値と、その画素に対応付けられた閾値とを比較して、階調値の方が大きければその画素にドットを形成すると判断し、階調値の方が小さければドットを形成しないと判断することによって、画像データをドット形成の有無による表現形式のデータに変換する手法である。ディザ法では、画素に対応付けられる複数の閾値は、マトリックス状に配列した状態で記憶されており、ドット形成の有無を判断しようとする画素の画像データ中での位置に応じて、マトリックス中の適切な閾値が対応付けられている。本明細書では、こうした複数の閾値を記録したマトリックスを閾値マトリックスと呼ぶことにする。
【００８４】
図６（ａ）は、閾値マトリックスの一部を拡大して、複数の閾値が記憶されている様子を例示した説明図である。例示の閾値マトリックスには、縦横それぞれ６４画素の正方形のマトリックスに合計４０９６画素分の閾値が記憶されている。もちろん、閾値マトリックスの大きさはこれに限らず、必要に応じて種々の大きさとすることができる。また、必ずしも正方形のマトリックスに限らず、例えば縦横の画素数の異なるマトリックスとすることも可能である。尚、図６（ａ）に示すような大きな閾値マトリックスを用いたのでは説明が煩雑になってしまうので、以下では、閾値マトリックスは図６（ｂ）に示すような小さなマトリックスであるものとして説明する。
【００８５】
図７は、画像データに閾値マトリックスを適用して、画素毎にドット形成の有無を判断している様子を概念的に示した説明図である。図７で細い破線で示された矩形は、１つ１つが画素を表している。画像データは、二次元的に配列された複数の画素の各々に階調値が対応付けられた形式で表現されている。説明を簡単にするために、ここでは全ての画素に、階調値６４が対応付けられているものとする。図７（ａ）は、こうした画像データに閾値マトリックスを適用した様子を模式的に示している。図７（ａ）では、閾値マトリックスを太い実線で表している。前述したように閾値マトリックスのそれぞれのマス目には、予め閾値が記憶されている。図７（ａ）に示すように、画像データの上に閾値マトリックスを重ねることにより、画像データを構成する各画素と、閾値マトリックスの各マス目とを対応付けることができる。
【００８６】
ディザ法では、こうして画像データの画素と閾値マトリックスのマス目とを対応付けた後、各画素の階調値と、各マス目に記憶されている閾値とを比較する。そして、画素の階調値の方が大きい画素にはドットを形成すると判断し、そうでない画素にはドットを形成しないと判断する。ここでは、全ての画素には階調値６４が記憶されているものとしているから、閾値マトリックスに記憶された閾値が６３以下の画素については「ドットを形成する」と判断され、閾値が６４以上の画素については「ドットを形成しない」と判断されることになる。図７（ａ）では、ドットを形成すると判断された画素には、ハッチングを付して表示している。
【００８７】
画像データは非常に多くの画素から構成されているので、通常は閾値マトリックスよりも大きなサイズとなっている。従って、全ての画素についてのドット形成有無を判断するために、閾値マトリックスの位置を画像データに対して移動させながら、同じマトリックスを繰り返し使用する。図７（ｂ）は、こうして全ての画素についてドット形成の有無を判断した結果を示している。以上のようにしてドット形成の有無を判断することにより、画像データの階調値に応じた適切な比率で、しかも各ドットを互いに分散させた状態で形成することができる。例えば、ここでは画像データの階調値は６４であるとしており、これは、フルスケールの階調値２５６に対して約１／４に相当する。これに対応して図７（ｂ）では、全画素の約１／４の画素にドットが形成されている。ドットが形成される密度は、画像データの階調値が大きくなれば高くなり、階調値が小さくなればそれに連れて低くなる。この様に、ディザ法では閾値マトリックスの適切な閾値を設定してやることにより、画像データの階調値に応じて適切な密度でドットを形成することができる。
【００８８】
以上の説明では、あたかも閾値マトリックス内の全画素についてドット形成の有無を判断し、その後、閾値マトリックスの位置をずらしてマトリックスを新たな画素に対応付けて、これら画素についてのドット形成有無を判断するかのように説明した。しかし、これは説明の都合上の理由によるものであり、実際には、閾値マトリックス毎にドット形成有無を判断するのではなく、ラスタ単位でドット形成の有無を判断している。すなわち、１本のラスタ上を左端から右方向の進みながらドット形成の有無を判断し、ラスタ上の全画素について判断を終了したら、下のラスタの処理を開始する。このように、実際には、ラスタ１本ずつドット形成の有無を判断していた。これに対して、本実施例の階調数変換処理では、複数のラスタのドット形成の有無を並行して判断することにより、迅速な処理が可能となっている。複数ラスタのドット形成有無の判断を並行して行う方法については、後ほど詳述する。
【００８９】
図５に示した画像データ変換処理では、以上のようにして階調数変換処理を終了した後、インターレース処理を開始する（図５のステップＳ１０８）。インターレース処理は、ドット形成の有無による表現形式に変換された画像データを、ドットの形成順序を考慮しながらカラープリンタ２００に転送すべき順序に並び換える処理である。プリンタドライバは、インターレース処理を行って得られた画像データを、最終的に印刷データとしてカラープリンタ２００に出力する（ステップＳ１１０）。カラープリンタ２００は、こうして供給された印刷データに従って印刷媒体上に各色のインクドットを形成する。その結果、画像データに対応したカラー画像が印刷媒体上に印刷される。
【００９０】
以下では、第１実施例の階調数変換処理において、複数のラスタについて並行してドット形成の有無を判断することにより、画像データの階調数を迅速に変換する処理について説明する。
【００９１】
Ｂ−３．第１実施例の階調数変換処理：
図８は、第１実施例の階調数変換処理の流れを示すフローチャートである。かかる処理は、コンピュータ１００のプリンタドライバが、図５に示した画像データ変換処理の中で行う処理である。尚、図８に示した処理は、Ｃ，Ｍ，Ｙ，Ｋの各色毎に行われるが、説明が煩雑なることを避けるために、以下では特に色を特定することなく説明する。また、図９は、プリンタドライバが第１実施例の階調数変換処理に従って、ドット形成の有無を判断している様子を概念的に示した説明図である。以下、図９を参照しながら、図８のフローチャートに従って説明する。
【００９２】
プリンタドライバは、階調数変換処理を開始すると先ず初めに、所定本数の隣接するラスタをまとめてラスタ群を形成する処理を行う（ステップＳ２００）。ここでは、ラスタを２本ずつまとめてラスタ群を形成するものとする。もちろん、２本に限らず、より多数のラスタをラスタ群としてまとめることとしても良い。図９では、画像の一番上にある「ラスタ１」とその下にある「ラスタ２」とにハッチングを施すことによって、これらラスタをラスタ群としてまとめていることを表している。
【００９３】
次いで、ラスタ群に含まれている複数の画素の中から、ドット形成の有無を判断しようとする対象画素を１つ選択する（ステップＳ２０２）。初めは、画像データの一番左上にある画素、すなわちラスタ１の左端の画素を対象画素として選択する。図９では、この画素は、［１］と符番して表示されている。
【００９４】
その後、選択した対象画素の階調値Ｄｔを読み込み（ステップＳ２０４）、次いで対象画素に対応する閾値ｔｈを閾値マトリックスから読み込む処理を行う（ステップＳ２０６）。ここで、対象画素に対応する閾値とは、図７（ａ）を用いて前述したように、画像データ上に閾値マトリックスを重ねたときに、対象画素に重なるような位置の、閾値マトリックスのマス目に記憶されている閾値である。図９中に太い破線で示した矩形は、画像データの上に閾値マトリックスが重ねられている様子を模式的に表したものである。
【００９５】
こうして対象画素の階調値Ｄｔと、対応する閾値ｔｈとを読み出したら、これらの大小関係を比較する（ステップＳ２０８）。そして、階調値Ｄｔの方が大きい場合は（ステップＳ２０８：ｙｅｓ）、対象画素にドットを形成すると判断して、ドット形成の有無の判断結果を示す変数Ｄｒに、ドットを形成することを意味する値「１」を書き込む（ステップＳ２１０）。逆に、閾値ｔｈの方が大きい場合は、判断結果を示す変数Ｄｒに、ドットを形成しないことを意味する値「０」を書き込む処理を行う（ステップＳ２１２）。
【００９６】
以上のようにして、選択した対象画素についてのドット形成の有無を判断したら、ラスタ群に含まれる全ての画素を対象画素として選択したか否かを判断する（ステップＳ２１４）。ここでは、未だ、図９中で「１」と符番した画素しか処理しておらず、ラスタ群には未処理の画素が多数残っている。そこで、ステップＳ２１４の処理においては「ｎｏ」と判断し、ステップＳ２０２に戻って、新たな対象画素を選択する。
【００９７】
新たな対象画素は、ラスタ群に含まれる各ラスタから順次、対象画素が選択されるように、所定の規則に従って行われる。ここでは、次のような規則に従って対象画素を選択するものとする。
<<規則１>>：  対象画素が奇数番目のラスタ上にあるときは、対象画素の直ぐ下にある画素を新たな対象画素として選択する。すなわち、左右方向には画素位置を変更することなく、ラスタの番号を１つだけインクリメントさせる。
<<規則２>>：  対象画素が偶数番目のラスタ上にあるときは、対象画素の直ぐ右上にある画素を新たな対象画素として選択する。すなわち、ラスタ番号を１つだけデクリメントするとともに、画素位置を示す番号は１つだけインクリメントさせる。
【００９８】
この様な規則に従って新たな対象画素を選択する結果、図９で［１］と符番した画素の次には、図中で［２］と符番した画素が新たな対象画素として選択されることになる。こうして選択した符番［２］の画素について、上述した様にステップＳ２０４ないしステップＳ２１４の処理を行った後、再びステップＳ２０２に戻って、次の対象画素を選択する。上述した規則に従えば、符番［２］の画素の次には、符番［３］の画素が新たな対象画素として選択される。以下、同様にして、符番［４］の画素、符番［５］の画素、符番［６］の画素と順次、対象画素が選択されて、それぞれの画素についてドット形成の有無が判断されていく。
【００９９】
また、図９に示すように、符番［１２］の画素について判断した時点で、閾値マトリックスの右端に達してしまうので、符番［１３］の画素についてドット形成の有無を判断する際には、閾値マトリックスを右方向に移動させればよい。図９に示した矢印は、閾値マトリックスを移動させる様子を模式的に表現したものである。
【０１００】
以上のようにして、ラスタ群に含まれる複数の画素から、所定の順序に従って、対象画素を順次選択しながらドット形成の有無を判断していく。こうすれば、ラスタ１およびラスタ２を並行させながら、ドット形成の有無を判断することができる。
【０１０１】
こうしてラスタ１およびラスタ２に含まれる全ての画素についてドット形成の有無を判断したら、すなわち図８のステップＳ２１４において「ｙｅｓ」と判断されたら、今度は、画像データに含まれる全てのラスタの処理を終了したか否かを判断する（ステップＳ２１６）。ここでは、ラスタ１およびラスタ２の２つのラスタしか処理しておらず、未だ多数のラスタが未処理のまま残っているので、ステップＳ２１６では「ｎｏ」と判断され、ステップＳ２００に戻って、ラスタ３およびラスタ４を新たなラスタ群を生成する処理を行う。こうして生成した新たなラスタ群についても、同様にして対象画素を選択することにより、ラスタ３およびラスタ４を並行しながらドット形成の有無を判断していく。そして、ラスタ３およびラスタ４について全ての画素について判断を終了したら、今度はラスタ５およびラスタ６を新たなラスタ群として生成し、これらラスタについてドット形成の有無を判断する。画像データに含まれるラスタを全て処理してしまう迄、以上のような一連の処理を繰り返す。そして、全ラスタの処理を終了したら（図８のステップＳ２１６：ｙｅｓ）、図８に示した第１実施例の階調数変換処理を抜けた後、図５の画像データ変換処理に復帰する。
【０１０２】
以上に説明したように、第１実施例の階調数変換処理によれば、ラスタ群としてまとめられた２本のラスタについて、並行してドット形成の有無を判断することができる。前述したように、画像データ中の近接した画素には、互いに近似した階調値が対応付けられる傾向にあるから、こうして複数のラスタを並行して処理すれば、キャッシュのヒット率、パイプライン処理の効率、あるいは分岐予測の的中率が向上するので、階調数変換処理を迅速に行うことができる。その結果、画像データをドット形成有無による表現形式のデータに迅速に変換することができるので、画像を速やかに印刷することが可能となる。
【０１０３】
Ｂ−４．変形例：
以上に説明した第１実施例では、ラスタを２本ずつ、ラスタ群としてまとめるものとして説明したが、２本ではなくより多数のラスタをラスタ群としてまとめることとしても良い。
【０１０４】
図１０（ａ）は、一例として、ラスタ３本ずつをラスタ群としてまとめている様子を示している。図中で、太い破線で示した矩形は、３本のラスタをラスタ群としてまとめた様子を模式的に示したものである。このように３本のラスタをラスタ群としてまとめた場合も、所定の規則に従って、これらのラスタから対象画素を順次選択してやればよい。こうすれば、これら複数のラスタを並行させてドット形成の有無を判断することができる。例えば、対象画素の番号を３で割ったときの余りに着目して、次のような規則に基づいて対象画素を選択することができる。
<<規則３>>：  対象画素があるラスタの番号が３で割り切れない場合は、左右方向には画素位置を変更することなく、ラスタの番号を１つだけインクリメントさせる。
<<規則４>>：  対象画素があるラスタの番号が３で割り切れる場合は、ラスタ番号を２つだけデクリメントするとともに、画素位置を示す番号は１つだけインクリメントさせる。
この様な規則に基づいて対象画素を順次選択していけば、図１０（ａ）に矢印で示したように、符番［１］の画素、符番［２］の画素、符番［３］の画素、符番［４］の画素と順番に対象画素を選択して、これら画素について順次ドット形成の有無を判断することができる。
【０１０５】
また、ラスタ群を構成する複数の画素から対象画素を選択する方法は、上述したものに限られず種々の方法を適用することが可能である。例えば、図１０（ｂ）に矢印で示したように、ラスタ群を斜め方向に横切るようにして順次、対象画素を選択することとしても良い。
【０１０６】
あるいは、ラスタ群を小さなブロックに区分けし、それぞれのブロックを構成する画素を、所定の順番で順次選択することとしても良い。例えば、図１０（ｃ）に示した例では、２本のラスタからなるラスタ群を、縦横２画素ずつ合計４画素からなる矩形の小さなブロックに区分けし、各ブロック内の画素を所定の順序で選択する。図１０（ｃ）に即して説明すると、初めに［１］と符番された画素を選択し、次に右隣の［２］と符番された画素を選択する。その次は、符番［１］の画素の真下にある［３］と符番された画素を選択し、最後は、その右隣にある［４］と符番された画素を選択する。こうして各ブロック毎にブロック内の画素を順番に選択しても良い。
【０１０７】
また、この様にして各ブロック内の画素を選択すれば、ブロック内で最初に選択した符番［１］からの距離にほぼ対応して、ブロック内の画素を順次選択することができる。画素間の距離が近いほど、近似した階調値が対応付けられている可能性が高くなることから、距離にほぼ対応するようにして画素を順次選択してやれば、キャッシュのヒット率、パイプライン処理の効率、あるいは分岐予測の的中率を向上させることができ、延いては階調数変換処理を高速化することが可能となる。
【０１０８】
また、図１０（ｃ）に示した例示では、初めにラスタ１の画素（図中で［１］および［２］と符番した画素）を全て選択し、その後、ラスタ２の画素（図中で［３］および［４］と符番した画素）を全て選択している。このように、ラスタ群が小さなブロックに区分けされている場合は、ブロック内ではラスタ単位で対象画素を選択することとしてもよい。この様にしても全体として見れば、ラスタ群を構成するラスタを並行して処理することが可能である。
【０１０９】
Ｃ．第２実施例：
上述したように、複数のラスタをラスタ群としてまとめ、各ラスタから対称画素を所定の順序で選択しながら階調数変換処理を行う場合には、画素を選択する順序を考慮しながら閾値マトリックスの閾値を格納することで、処理の高速化を図ることが可能である。以下では、こうした第２実施例の階調数変換処理について説明する。
【０１１０】
Ｃ−１．第２実施例の階調数変換処理における閾値の格納方法：
説明の便宜上、閾値マトリックスを構成する各マス目を、次の様に符番する。例えば、閾値（ｍ，ｎ）は、閾値マトリックスのｍ行ｎ列目のマス目に記憶されている閾値を示すものとする。こうして各マス目を識別することにより、閾値マトリックスに記憶されている複数の閾値を識別することが可能となる。図１１は、閾値マトリックスに記憶されている各閾値がこのようにして符番され、識別されている様子を表した説明図である。
【０１１１】
第２実施例の階調数変換処理では、各ラスタから対称画素を選択する順序を考慮して、閾値マトリックスの各閾値を格納する。以下では、対称画素を図９に示した順序で選択する場合を例にとって、第２実施例の階調数変換処理について説明する。前述したように、図９に示した例では、ラスタ２本ずつをまとめてラスタ群を構成し、対称画素が奇数番目のラスタ上にあるときは、対称画素の直ぐ下の画素を新たな対称画素として選択し（前述の規則１を参照）、対称画素が偶数番目のラスタ上にあるときは、対称画素の直ぐ斜め右上の画素を新たな対称画素として選択する（前述の規則２を参照）。
【０１１２】
対称画素をこのような順序で選択することに対応して、第２実施例では、閾値マトリックスの閾値を次のような順番で格納する。先ず、閾値マトリックスの１行目と２行目とを組にする。便宜上、以下ではこの組を「ユニットＡ」と呼ぶことにする。これは、対称画素の選択に際して、隣接するラスタを２本ずつまとめてラスタ群を形成することに対応している。
【０１１３】
そして、先ず初めに、閾値マトリックスの１行１列目のマス目に記憶されている閾値（１，１）を記憶し、次いでその真下のマス目に記憶されている閾値（２，１）を記録する。これは、対称画素を選択する際の上述した<<規則１>>、すなわち、対称画素が奇数番目のラスタ上にあるときは、直ぐ下の画素を新たな対称画素として選択することに対応している。またハードウェア上では、このことは、コンピュータ１００のＲＯＭ１０４、あるいはＲＡＭ１０６の所定のアドレスに閾値（１，１）が記憶され、その次のアドレスに閾値（２，１）が記憶されることに相当する。
【０１１４】
次いで、２行１列目のマス目の直ぐ右上のマス目に記憶されている閾値（１，２）を記憶する。これは、対称画素を選択する際の上述した<<規則２>>、すなわち、対称画素が偶数番目のラスタ上にあるときは、直ぐ右上の画素を新たな対称画素として選択することに対応している。ハードウェア上では、閾値（２，１）が記憶されているアドレスの次のアドレスに、閾値（１，２）が記憶されることになる。
【０１１５】
閾値（２，１）を記憶したら、再び規則１に対応して直ぐ下のマス目の閾値（１，２）を記憶し、次いで規則２の対応させて閾値（２，２）を記憶する。以下、同様にして、閾値（１，３）、閾値（２，３）、閾値（１，４）と順次記憶していく。こうして、閾値マトリックスの１行目および２行目（すなわちユニットＡ）に含まれている閾値をすべて記憶したら、今度は３行目の閾値と４行目の閾値とをまとめて「ユニットＢ」を形成する。そして、ユニットＢに含まれる閾値についても、規則１および規則２に対応させた順序で順次記憶していく。すなわち、先ず初めにユニットＢの左上隅のマス目に記憶されている閾値（３，１）を記憶し、次いで、その真下のマス目の閾値（４，１）を記憶する。更に直ぐ右上のマス目の閾値（３，２）を記憶し、以下同様に、閾値（４，２）、閾値（３，３）と順次記憶していく。こうして、ユニットＢに含まれるすべての閾値を記憶し終わったら、今度は、閾値マトリックスの５行目の閾値および６行目の閾値を「ユニットＣ」としてまとめ、ユニットＣに含まれる閾値も同様にして順次記憶していく。
【０１１６】
図１２（ａ）は、このように閾値マトリックスを２行ずつの３つのユニットに区分けし、ユニット内では規則１および規則２を反映させながら、閾値を順次記憶する様子を模式的に示した説明図である。図中でカギ括弧内に示した数字は、閾値が記憶される番数を示している。例えば、閾値マトリックスのマス目に示された［５］という表示は、そのマス目の閾値が、すべての閾値の中で５番目に記憶されることを示している。図１２（ｂ）は、コンピュータ１００のＲＯＭ１０４あるいはＲＡＭ１０６上で、これら閾値が連続したアドレスに順次記憶されている様子を模式的に示している。
【０１１７】
Ｃ−２．第２実施例の階調数変換処理：
このように、複数のラスタをラスタ群としてまとめ、各ラスタを並行させながら画像データの階調数を変換する場合には、各ラスタから対称画素を選択する順序を考慮しながら閾値マトリックスの閾値を格納することで、階調数変換処理を迅速に行うことができる。以下では、図８および図９を流用しながら第２実施例の階調数変換処理について説明する。
【０１１８】
図８のフローチャートを用いて前述したように、第２実施例の階調数変換処理においても、先ず初めに隣接する所定のＮ本のラスタをラスタ群としてまとめる（図８のステップＳ２００相当）。そして、ラスタ群を構成する複数の画素の中から、所定の順番に従って対称画素を順次選択し、対称画素の階調値と閾値とを比較して対称画素にドットを形成するか否かを判断する処理を、繰り返し行う（図８のステップＳ２０２ないしステップＳ２１４相当）。ラスタ群に含まれるすべての画素についてドット形成の有無を判断したら（ステップＳ２１４：ｙｅｓに相当）、新たなラスタ群を生成して（ステップＳ２００相当）、新たなラスタ群の各画素について同様の処理を繰り返す。こうして画像データに含まれるすべてのラスタについて処理を完了するまで、同様の処理を繰り返す。
【０１１９】
一例として、隣接するラスタを２本ずつラスタ群としてまとめ、前述した規則１および規則２に従って、ラスタ群に含まれる複数の画素から対称画素を順次選択した場合は、図９に模式的に示すようにして階調数変換処理が行われる。すなわち、先ず初めに、ラスタ１の左端の画素（図９中で［１］と符番された画素）について階調値と閾値とが読み出され、これらの大小関係に基づいてドットを形成するか否かが判断される。次いで、図９中で［２］と符番された画素について階調値と閾値とが読み出され、ドット形成の有無が判断される。以下、同様にして［３］、［４］、［５］と符番された画素について、それぞれ階調値と閾値とが読み出されてドット形成有無が判断される。
【０１２０】
ここで画像データは、実際にはコンピュータ１００のＲＡＭ１０６上に記憶されているから、符番［１］の画素、符番［２］の画素、符番［３］の画素と階調値を読み出すためには、ＣＰＵ１０２は階調値を読み出す度にアドレス計算を行って、ＲＡＭ１０６上でこれら画素の階調値が記憶されているアドレス値を算出する必要がある。これに対して、閾値については、対象画素が選択される順序を考慮して予め記憶されているから、閾値を読み出すために複雑なアドレス計算を行う必要がない。例えば、図９に示す順序で対象画素が選択されることを考慮して、図１２に示したように閾値マトリックスの各閾値を記憶しておけば、図９上で符番［１］の閾値が記憶されているアドレスを求めてやれば、それ以降はアドレス値を１つずつインクリメントするだけで、符番［２］から符番［１２］までの画素の閾値を順次読み出すことができる。すなわち、図１２に示したユニットＡの閾値を先頭から順番に読み出すだけで、各画素に対応した閾値を読み出すことができる。
【０１２１】
また、符番［１３］の画素については、前述したように閾値マトリックスの位置を画像データに対してラスタ方向に移動させる結果、符番［１］の画素と同じ閾値が使用される。従って、符番［１３］の画素の閾値は、符番［１］についての閾値が記憶されているアドレスから読み出せばよい。それ以降は同様にして、アドレス値を１つずつインクリメントしながら、ユニットＡの閾値を順番に読み出すことで、符番［１４］から符番［２４］までの画素の閾値を順次読み出すことができる。これ以降の画素についても全く同様にして閾値を読み出すことができ、結局、ラスタ１およびラスタ２からなるラスタ群を処理している間は、ユニットＡの閾値を繰り返し読み出すだけで各画素についての閾値を読み出すことができる。
【０１２２】
ラスタ１およびラスタ２に含まれる画素をすべて処理したら、今度はラスタ３およびラスタ４をラスタ群としてまとめ、対象画素を順次選択して、各画素の階調値と閾値とを読み出しながらドット形成の有無を判断する。ここで、対象画素の閾値は、図１２を用いて前述した閾値マトリックスのユニットＢの閾値を繰り返し読み出すだけでよい。ラスタ３およびラスタ４の画素をすべて処理したら、今度はラスタ５およびラスタ６をラスタ群としてまとめ、今度は閾値マトリックスのユニットＣの閾値を繰り返し読み出しながら、各画素についての階調数変換処理を行う。こうして、ラスタ５およびラスタ６についての処理を終了したら、ラスタ７およびラスタ８をラスタ群としてまとめて、再びユニットＡの閾値を繰り返し読み出しながら各画素についての階調数変換処理を行う。以降のラスタにつても全く同様にして、閾値マトリックスの各ユニットから、繰り返し閾値を読み出して行けばよい。
【０１２３】
図１３は、コンピュータ１００のＲＯＭ１０４あるいはＲＡＭ１０６上に記憶されている閾値マトリックスの閾値を、ユニット毎に繰り返し読み出している様子を模式的に示した説明図である。図示するように、閾値マトリックスの閾値は、ユニットＡ、ユニットＢ、ユニットＣの各ユニットに分けて記憶されており、そして各ユニット内では各閾値は、階調数変換処理中で対象画素を選択する順序を考慮した所定の順番で、連続したアドレスに記憶されている。
【０１２４】
コンピュータ１００のプリンタドライバが、ラスタ１およびラスタ２のラスタ群の階調数変換処理を行っている間は、図１３の細い実線の矢印で示したように、ユニットＡ内に記憶されている閾値を順番に繰り返し読み出して使用する。階調数変換処理を行うラスタ群が、ラスタ３およびラスタ４からなるラスタ群に移った場合は、図中に細い破線の矢印で示したように、ユニットＢ内に記憶されている閾値を順番に繰り返し読み出して使用し、処理するラスタ群が、ラスタ５およびラスタ６からなるラスタ群に移った場合は、図中に細い一点鎖線の矢印で示したように、ユニットＣ内に記憶されている閾値を順番に繰り返し読み出して使用する。次いで、処理するラスタ群がラスタ７およびラスタ８からなるラスタ群に移った場合には、図中に太い実線の矢印で示したように、再び先頭のアドレス値に戻って、ユニットＡ内に記憶されている閾値を順番に繰り返し読み出して使用する。以降、画像データに含まれる全画素について階調数変換処理を終了するまで、同様にしてユニット内の閾値を読み出していけばよい。
【０１２５】
以上に説明したように、第２実施例の階調数変換処理においては、対象画素を選択する順序を考慮して、閾値マトリックスの各閾値を適切な順番で記憶しておく。こうすることで、ドット形成有無を判断するに際して、対象画素に対応する閾値を読み出すための複雑なアドレス計算を行うことなく、閾値を読み出してドット形成有無を判断することが可能となる。そのため、第２実施例の階調数変換処理では、迅速な変換を行うことが可能となっている。
【０１２６】
以上の説明では、対象画素を図９に示した順番で選択する場合、すなわち、ラスタを２本ずつまとめてラスタ群を構成し、前述した<<規則１>>および<<規則２>>に従って、対象画素を順次選択する場合を例にとって説明した。もちろん、ラスタ群を構成するラスタの本数や、対象画素を選択する順番が異なれば、これに応じて閾値マトリックスの各閾値を記憶する順序も異なったものとなる。
【０１２７】
例えば、対象画素を選択する順番が、図１０（ｂ）に示すようなものである場合は、閾値マトリックスの閾値は、図１４（ａ）に示す順序で記憶しておけばよい。すなわち、図１０（ｂ）において３本のラスタでラスタ群を構成していることに対応して、閾値マトリックスを３行ずつの２つのユニットにまとめる。そして、対象画素を選択する順序に合わせて、ユニットを斜めに横切るような順番で各閾値を記憶すればよい。ここで、図１４中でカギ括弧内に示した数字は、閾値を記憶する順番を示している。また、対象画素を図１０（ｃ）に示すような順番で選択している場合は、図１４（ｂ）に示すように、閾値マトリックスを２行ずつユニットにまとめて、対象画素を選択する順序に合わせて各閾値を記憶しておけばよい。
【０１２８】
また、以上の説明では、対象画素を選択する順序と、各閾値を記憶する順序とが完全に一致する場合について説明しているが、これらの順番は必ずしも完全に一致している必要はなく、多少であれば、順番にずれが生じていても構わない。例えば、対象画素を選択する順番が、図１０（ｃ）に示すようなものである場合に、閾値マトリックスの各閾値を、図１２（ａ）に示す順番で記憶しておくこととしても良い。図１０（ｃ）と図１２（ａ）とを比較すれば明らかなように、対象画素を選択する順番と閾値を記憶する順番とは、符番［２］の画素と符番［３］の画素との間で順番が入れ替わった関係にある。同様に、符番［６］の画素と符番［７］の画素とについても順番が入れ替わっている。このように、符番の数字を４で割ったときに余りが２となる画素と、余りが３となる画素とで、対象画素を選択する順番と閾値を記憶する順番とが入れ替わっているが、その他の画素については一致している。この様な場合、閾値マトリックスに閾値が記憶される順序が、対象画素を選択する順序と完全には一致していないにもかかわらず、複雑なアドレス計算を行うことなく閾値を読み出すことが可能である。例えば、対象画素の順番を４で割ったときに余りが２になれば、一つ後ろの順番の閾値を読み出し、また、対象画素の順番を４で割ったときに余りが３になれば、一つ前の順番の閾値を読み出すことによって、対象画素に対応する閾値を簡便に読み出すことができる。あるいは、１つ１つの閾値を順番に読み出すのではなく、例えば４つずつまとめて読み出しておき、これらの４つの閾値の中から適切な閾値を選択することとしても良い。いずれにしても、閾値マトリックスに閾値を記憶する順番は、対象画素を選択する順番を考慮した順番であれば足り、閾値を記憶する順番と対象画素を選択する順番とは完全には一致している必要はない。
【０１２９】
このように、第２実施例の階調数変換処理においては、ラスタ群に含まれる複数の画素の中から対象画素を選択する順序を考慮しながら、閾値マトリックスの各閾値を適切な順番で格納しておく。こうすれば、複雑なアドレス計算を行うことなく、対応する閾値を次々と読み出すことが可能となり、階調数変換処理を迅速に行うことができる。
【０１３０】
また、第２実施例の階調数変換処理においては、前述した第１実施例と同様に、複数のラスタをラスタ群としてまとめ、対象画素を所定の順序で選択することで、各ラスタを並行して処理している。このため、第１実施例と同様に、キャッシュのヒット率や、パイプライン処理の効率、分岐予測の的中率が向上するので、このことによる処理速度の高速化も図ることができる。
【０１３１】
もっとも、こうしたキャッシュのヒット率や、パイプライン処理の効率、分岐予測の的中率が向上する現象は、画像データ中で近接した画素の階調値には互いに近似した値となる傾向があるという事実によるものである。従って、ラスタ群を構成するラスタの本数があまりに多くなると、ラスタ群内の画素についても互いの階調値が近似した値を取らなくなるので、キャッシュのヒット率や、パイプライン処理の効率、分岐予測の的中率が向上する度合いは小さくなり、処理速度を高速化できる程度も少なくなってしまう。しかし、第２実施例の階調数変換処理のように、対象画素を選択する順序を考慮して閾値マトリックスの各閾値を格納しておけば、例えキャッシュのヒット率や、パイプライン処理の効率、分岐予測の的中率を向上させることができない場合でも、依然として迅速に階調数変換処理を行うことができる。
【０１３２】
更に、第２実施例の階調数変換処理は、次のような場合にも処理速度を効果的に向上させることができる。例えば、ＪＰＥＧ形式で圧縮された画像データを解凍する場合は、ラスタ１本ずつ解凍されるのではなく、８画素×８画素をひとまとまりとして、各画素の階調値のデータに展開される。従って、こうして展開された階調値をラスタの順番に並べ換えることなく、そのままの順序で、換言すれば、これらひとかたまりのデータを８行８列の複数の画素に展開した順序のまま、各画素についての階調数変換処理を行えば、処理を高速化することができる。このとき、これら８行８列をひとまとまりとする複数の画素には、毎回同じ順序で階調値が展開される。従って、第２の階調数変換処理においては、これら複数の画素に階調値が順次展開される順番を考慮して、閾値マトリックスの各閾値を適切な順番で格納しておけば、処理速度の更なる向上を図ることができる。具体的には、閾値マトリックスを８行ずつのユニットにまとめ、各ユニット内を更に８行８列のブロックに区分する。そして、ブロック内の閾値を、圧縮された画像データが展開される順序に従って記憶してやる。こうすれば、各画素に展開されたデータをそのままの順序で階調数変換処理を行う際に、複雑なアドレス計算を行うことなく閾値を読み出すことができるので、処理をより一層迅速に行うことが可能となる。
【０１３３】
以上の説明は、画像データがＪＰＥＧ形式で圧縮されている場合を例に取って説明したが、同様の理由で処理の高速化が可能なケースは他にも種々存在する。例えば、画像データの解像度に対してプリンタの印刷解像度の方が高いために、補間演算を行って１画素の画像データから、縦方向にｎ画素、横方向にｍ画素分の画像データを生成する場合には、これらｎ行ｍ列の複数の画素をひとまとまりとして処理してやることで処理の迅速化を図ることができ、閾値マトリックスの各閾値をこれらの画素を処理する順序を考慮して記憶してやれば、処理速度をより一層迅速化することが可能となる。
【０１３４】
Ｃ−３．変形例：
前述したように、閾値マトリックスのサイズは画像データのサイズよりも小さいので、すべての画素についてドット形成の有無を判断するために、閾値マトリックスは画像データに対して位置を移動させながら繰り返し使用される。上述した各種の実施例では、閾値マトリックスをいずれもラスタに沿った方向に移動させている。このように移動させた場合、一つのラスタに着目すると、閾値マトリックスの同じ部分の閾値が繰り返し使用されることになる。このため、画像データによっては同一ラスタ内のドット形成に一定のパターンが発生が生じることになる。これは、特にラスタごとにばらつき要素を有する出力機器、例えばラスタを任意のノズルを用いて印画するのではなく、結果として特定のラスタを特定のノズルの組合せを用いて印画するシリアル走査のインクジェットプリンタなどに出力した場合、特定のノズルのドット着弾位置にばらつきがあると、それがラスタ方向の一定のパターンと重なって、出力画質を悪化させてしまうことがあった。このような問題の発生を回避するためには、画像データに対して閾値マトリックスを移動させる際に、ラスタの方向に完全に一致させて移動させるのではなく、ラスタ方向に対して少し傾きを持たせて移動させることが効果的である。こうすれば、ひとつのラスタに着目した場合、閾値マトリックスの位置を移動させる度に、マトリックス中の少しずつ異なる部分に記憶された閾値が使用されることになる。従って、ドットの形成に一定のパターンが発生することを確実に回避することが可能である。
【０１３５】
上述した第２実施例の階調数変換処理では、閾値マトリックスを複数のユニットに区分けし、各ユニットに含まれる閾値を適切な順序で記憶しているが、閾値マトリックスを移動させる度に、マトリックスをラスタと交差する方向にもずらすこととして、このずらし量を適切な値に設定することで、階調数変換処理をより一層迅速に行うことが可能である。以下では、こうした第２実施例の変形例について説明する。
【０１３６】
図１５（ａ）は、閾値マトリックスを画像データに対して相対的に移動させながら、１つのマトリックスを繰り返し用いて階調数変換処理を行う様子を示している。図中に、細い破線で示した小さな矩形は画素を模式的に示したものであり、太い破線は閾値マトリックスを模式的に示している。また、ここでは、ラスタ群は２本のラスタによって構成され、ラスタを２本ずつ並行させながら階調数変換処理を行うものとする。図１５（ａ）中で、ラスタ１およびラスタ２に付したハッチングは、これらラスタをラスタ群としてまとめて階調数変換処理を行っていることを表したものである。
【０１３７】
図１５（ａ）に示した階調数変換処理では、閾値マトリックスをラスタに沿って移動させる際に、ラスタと交差する方向にもラスタ２本分だけずらしながら移動させる。より一般的に表現すれば、ラスタ群を構成するラスタ本数をＮ本としたときに、ラスタの上方向あるいは下方向に、Ｎの整数倍に相当するラスタ本数だけずらしながら閾値マトリックスを移動させる。図１５（ａ）中に示した矢印は、ラスタ２本分ずつずらしながら閾値マトリックスを移動させている様子を模式的に表したものであり、これは、特にラスタ群を構成するラスタの本数と、閾値マトリックスのずらし量（閾値マトリックスがずれていくラスタ本数）とが一致している場合を例示している。このように、閾値マトリックスのずらし量を、ラスタ群を構成するラスタ本数の整数倍としておけば、階調数変換処理を迅速に行うことが可能である。以下では、図１５の例示を参照しながらこの理由について説明する。
【０１３８】
前述したように、第２実施例の階調数変換処理では、閾値マトリックスの閾値は、対象画素を選択する順序を考慮して、ユニット毎に適切な順序で記憶されている。ここでは、図１５（ｂ）に示すように、ユニットＡないしユニットＣの３つのユニットに区分されて、コンピュータ１００のメモリ上の連続したアドレスに記憶されている。
【０１３９】
画像データの階調数変換処理を開始すると、先ず初めは、閾値マトリックスのユニットＡに含まれる閾値を読み出しながら、各画素についてのドット形成の有無を判断する。ユニットＡの閾値はドット形成の有無を判断する順序を考慮して予め適切な順序で記憶されているから、アドレス値を１つずつインクリメントさせながら読み出すだけで適切な閾値を順次読み出すことができる。
【０１４０】
ユニットＡ内の閾値を全て読み出してしまっても、処理中のラスタには未処理の画素が残っているから、閾値マトリックスを画像データに対して移動させて、これらの画素についてドット形成有無を判断する処理を継続する。ここで、図１５（ａ）に示すように、閾値マトリックスをラスタ方向に移動させるに際して、ラスタと交差する方向にラスタ２本分だけずれた位置に移動させる。閾値マトリックスのずらし量をラスタ２本分としているのは、ラスタ群が２本のラスタから構成されていることに対応する。こうして閾値マトリックスをずらしてやれば、処理中のラスタ群に対応するユニットがずれるので、続く画素のドット形成有無を判断するために読み出す閾値は、ユニットＢの中から読み出すことになる。ここで、ユニットＢ内の閾値についても、ドット形成の有無を判断する順序を考慮して予め適切な順序で記憶されているから、アドレス値を１つずつインクリメントさせるだけで適切な閾値を順次読み出すことができる。
【０１４１】
こうしてユニットＢ内の閾値を全て読み出したら、図１５（ａ）に示すように、再び閾値マトリックスを画像データに対して移動させる。このとき、ラスタと交差する方向にラスタ２本分だけずらした状態で移動させる。こうして閾値マトリックスをずらすことにより、続く画素のドット形成有無を判断するために読み出す閾値は、ユニットＣに含まれている閾値となる。ユニットＣ内の閾値を全て読み出したら、再び閾値マトリックスを移動させ、今度はユニットＡ内の閾値を読み出しながらドット形成有無の判断を継続する。
【０１４２】
図１６は、上述したように、閾値マトリックスを画像データに対して移動させる際に、ラスタ群を構成するラスタ本数と同じ本数だけ、ラスタと交差する方向にずらしながら閾値マトリックスを移動させることによって、閾値が読み出されるユニットが順次切り変わる様子を模式的に示した説明図である。
【０１４３】
先頭のラスタ群を処理する場合には、図１６の最上段に示されているように、初めにユニットＡから閾値が読み出され、次いでユニットＢから、その次はユニットＣから閾値が読み出され、以降はユニットＡ，ユニットＢ，ユニットＣの順番で次々と閾値が読み出される。ここで、前述したように各ユニット内では閾値は連続したアドレスに記憶されているから、ユニットＢをユニットＡにマージした状態で、すなわちユニットＡの最後尾アドレスに続けてユニットＢを記憶し、更にユニットＣをユニットＢにマージした状態で記憶しておけば、アドレス値を１つずつインクリメントさせるだけで、閾値マトリックスに記憶されている全ての閾値を連続して読み出すことができる。
【０１４４】
こうして処理中のラスタ群の全画素の処理を終了し、新たなラスタ群の処理を開始したら、今度は、図１６の上から２段目に示されているように、ユニットＢの先頭アドレスからアドレス値を１つずつインクリメントさせながら、次々と閾値を読み出してやる。図中で、最上段から２段目に向かって表示されている破線の矢印は、最初のラスタ群の処理が終了して、次のラスタ群の処理に移ったことを模式的に示したものである。２つ目のラスタ群の処理を終了したら、今度は、ユニットＣの先頭アドレスからアドレス値を１つずつインクリメントさせながら、次々と閾値を読み出してやればよい。３つ目のラスタ群の処理を終了したら、再びユニットＡに戻って、ユニットＡの先頭アドレスから順番に閾値を読み出してやる。以降、画像データの全ての画素についてのドット形成有無を判断してしまうまで、同様の処理を繰り返す。
【０１４５】
以上に説明したように、閾値マトリックスを画像データに対して移動させる際に、上述したようにラスタと交差する方向に、ラスタ群を構成するラスタ本数と同じだけずらしながら移動させれば、複雑なアドレス計算を行うことなく適切な閾値を順次読み出すことができるので、階調数変換処理を迅速に行うことが可能となる。
【０１４６】
尚、以上の説明においては、閾値マトリックスは、画像データに対して上方向に、ラスタ群と同じラスタ数だけずらすものとしているが、これに限らず、例えば画像データに対して下方向にずらした場合でも、あるいはラスタ群を構成するラスタ本数の整数倍だけずらした場合でも、階調数変換処理を高速化することができる。以下では、このような場合について説明する。
【０１４７】
図１７は、ラスタ群を構成するラスタ本数の２倍に相当するラスタ数だけ、すなわちラスタ４本分だけ、閾値マトリックスをずらしながら移動させた場合を例示した説明図である。図１７（ａ）は、画像データに対して閾値マトリックスを移動させながら、ドット形成有無を判断しようとする画素（対象画素）と閾値マトリックスに記憶されている閾値とを対応付けている様子を模式的に示している。また、図１７（ｂ）は、閾値マトリックスを移動させるに伴って、閾値を読み出すユニットが次々と切り変わる様子を模式的に示している。図示されているように、先頭のラスタ群を処理する場合は、ユニットＡの閾値が読み出され、ユニットＡの閾値を全て読み出してしまうと今度はユニットＣの閾値が読み出される。ユニットＣの閾値を全て読み出してしまうと、再びユニットＡに戻って先頭の閾値から順番に読み出していく。以降、先頭のラスタ群の全ての画素についての処理を終了するまで、ユニットＡ、ユニットＣの順番で繰り返し閾値を読み出しながらドット形成の有無を判断する。
【０１４８】
先頭のラスタ群を全て処理してしまうと、次のラスタ群については、今度はユニットＢ、ユニットＡの順番で繰り返し閾値を読み出しながらドット形成の有無を判断する。そして、３つ目のラスタ群については、ユニットＣ、ユニットＢの順番で繰り返し閾値を読み出しながらドット形成の有無を判断していく。以降、画像データの全ての画素についての処理を終了するまで、同様にして次々と閾値を読み出しながらドット形成の有無を判断していけばよい。
【０１４９】
結局、図１７に示すようにして閾値マトリックスをずらしてやれば、少なくともユニット内では連続したアドレス値に記憶されている閾値を順番に読み出してやればよく、複雑なアドレス計算が不要となるので、階調数変換処理を迅速に行うことができる。また、各ユニットを読み出す順番も、１つのラスタ群を処理している間は、同じパターンで繰り返し読み出せばよいので、複雑なアドレス計算は不要である。以上では、閾値マトリックスを移動させる際に、ラスタ群を構成するラスタ本数の２倍に相当する本数だけずらした場合について説明したが、一般に、閾値マトリックスのずらし量を、ラスタ群を構成するラスタ本数の整数倍としておけば、全く同様のことが成り立ち、従って階調数変換処理を高速化することが可能となる。
【０１５０】
Ｄ．第３実施例：
上述した各種の実施例では、いわゆるディザ法と呼ばれる手法を用いて階調数変換処理を行ったが、階調数変換を行う代表的な手法には、いわゆる誤差拡散法と呼ばれる手法も存在する。以下に説明する第３実施例では、ディザ法と誤差拡散法とを組み合わせて階調数変換処理を行う。
【０１５１】
Ｄ−１．第３実施例の階調数変換処理：
初めに、ディザ法と誤差拡散法とを組み合わせて階調数変換処理を行う際の基本的な考え方について、図１８を用いて説明する。カラー画像データは、通常、各色の画像データが組み合わされて表現されている。図１８に示した例では、カラー画像データは、シアン（Ｃ）色の画像データと、マゼンタ（Ｍ）色の画像データと、イエロ（Ｙ）色の画像データと、ブラック（Ｋ）色の画像データの組み合わせとして表現されている。ディザ法と誤差拡散法とを組み合わせて使用する場合は、これらの手法を色毎に使い分けて適用する。ここで、ディザ法は誤差拡散法に比べて迅速に処理することができるという利点があるが、その反面、誤差拡散法に比べると画質が劣る場合がある。そこで、比較的画質への影響が少ない色の画像データについてはディザ法を用いて階調数変換処理を行い、その他の色の画像データについては誤差拡散法を用いて階調数変換処理を行うものとする。
【０１５２】
図１８（ｂ）は、対象画素からＣ，Ｍ，Ｙ，Ｋ各色の画像データを読み出している様子を概念的に示した説明図である。図中で細い波線で示した小さな矩形は画素を模式的に表したものであり、対象画素にはハッチングを付して表示している。Ｃ，Ｍ，Ｙ，Ｋ各色の画像データの中では、Ｙ色が最も画質への影響が少ない画像データである。そこで、以下に説明する第３実施例では、Ｙ色の画像データについてはディザ法を用いて階調数変換処理を行い、他の色の画像データについては誤差拡散法を用いて階調数変換処理を行う。
【０１５３】
図１９は、第３実施例の階調数変換処理において、Ｃ，Ｍ，Ｙ，Ｋの各色毎にディザ法と誤差拡散法とを使い分けながらドット形成の有無を判断する処理の流れを示すフローチャートである。かかる処理は、図５に示した画像データ変換処理中でコンピュータ１００のＣＰＵ１０２の機能を利用して、プリンタドライバによって実行される。
【０１５４】
第３実施例の階調数変換処理を開始すると、先ず初めに所定本数の隣接するラスタをまとめてラスタ群を形成する処理を行う（ステップＳ３００）。次いで、ラスタ群を構成する複数の画素の中から、ドット形成の有無を判断しようとする対象画素を１つ選択する（ステップＳ３０２）。そして、対象画素に対応付けて記憶されているＣ，Ｍ，Ｙ，Ｋ各色の画像データを読み込む処理を行う（ステップＳ３０４）。尚、ここでは画像データがＣ，Ｍ，Ｙ，Ｋの各色データの組合せによって構成されているものとして説明しているが、カラー画像データに、例えば淡シアン（ＬＣ）や淡マゼンタ（ＬＭ）などの他色の画像データが含まれている場合には、これら各色の画像データも同時に読み込んでやる。また、これら各色の画像データは、コンピュータ１００のメモリ上の連続したアドレスに記憶しておくこととしても良いが、各色の画像データ毎に異なる領域に記憶しておくことも可能である。
【０１５５】
こうして各色の画像データを読み込んだら、Ｙの画像データか否かを判断する（ステップＳ３０６）。かかる判断は、例えば対象画像について画像データを読み込んだ順番に基づいて判断したり、あるいは画像データに予め識別用のデータを付加しておき、この識別用のデータに基づいて判断することができる。そして、Ｙの画像データである場合は（ステップＳ３０６：ｙｅｓ）、ディザ法を適用して対象画素についてのドット形成の有無を判断し（ステップＳ３０８）、Ｙの画像データでない場合には（ステップＳ３０６：ｎｏ）誤差拡散法を適用してドット形成の有無を判断する（ステップＳ３０８）。これら処理の詳細については後述する。尚、各色の画像データに、ＬＣあるいはＬＭの画像データが含まれている場合には、Ｙの画像データに加えて、これらＬＣ，ＬＭの画像データについても、ディザ法を適用してドット形成有無を判断する。
【０１５６】
対象画素についてのドット形成の有無を判断したら、処理中のラスタ群に含まれる全ての画素についてのドット形成有無を判断したか否かを判断し（ステップＳ３１２）、未処理の画素が残っていれば（ステップＳ３１２：ｎｏ）、ステップＳ３０２に戻って続く一連の処理を繰り返す。ラスタ群内の全画素について判断を終了したら（ステップＳ３１２：ｙｅｓ）、今度は、画像データに含まれる全てのラスタについての処理を終了したか否かを判断する（ステップＳ３１４）。そして、未だ処理していないラスタが残っている場合は、ステップＳ３００に戻って新たなラスタ群を生成し、かかるラスタ群について上述した一連の処理を行う。こうして全てのラスタについての処理を終了したら、第３実施例の階調数変換処理を抜けて、図５に示した画像データ変換処理に復帰する。
【０１５７】
図２０は第３実施例の階調数変換処理中で、ディザ法を適用して対象画素についてのドット形成の有無を判断する処理の流れを示したフローチャートである。また、図２１は、第３実施例の階調数変換処理中で、対象画素を選択しながらドット形成の有無を判断している様子を模式的に示した説明図である。図２１中でカギ括弧の中に示した数字は、対象画素を選択する順番を示している。図２１では、隣接するラスタを２本ずつまとめてラスタ群を構成している。以下、図２１を参照しながら、図２０のフローチャートに従って説明する。
【０１５８】
ディザ法を適用してドット形成の有無を判断する処理では、処理中の対象画素に対応した閾値ｔｈを閾値マトリックスから読み込む処理を行う（ステップＳ３３０）。閾値ｔｈを読み込む処理は、前述の各種実施例において説明したいずれかの方法を適用することができる。ここでは、詳細な説明は省略するが、例えば次のようにして閾値を読み込む。一例として、図２１中で［１］と符番した画素が対象画素として選択されている場合は、画像データに閾値マトリックスを重ねた時に、かかる画素の位置に来るマス目を閾値マトリックスの中から選択し、該マス目に記憶されている閾値を読み込めばよい。
【０１５９】
次いで、ステップＳ３３０において読み込んだ閾値ｔｈと、対象画素の画像データ（ここではＹの画像データ）とについて、階調値の大きさを比較する。対象画素の画像データは、図１９に示した階調数変換処理中でステップＳ３０４において既に読み込まれている。そして、画像データの方が大きければ（ステップＳ３３２：ｙｅｓ）対象画素にドットを形成すると判断し、ドット形成の有無の判断結果を示す変数Ｄｒに、ドットを形成することを意味する値「１」を書き込む（ステップＳ３３４）。逆に、閾値ｔｈの方が大きい場合は、判断結果を示す変数Ｄｒに、ドットを形成しないことを意味する値「０」を書き込む処理を行う（ステップＳ３３６）。以上のようにしてドット形成の有無を判断したら、ディザ法によるドット形成有無の判断処理を抜けて、図１９に示した階調数変換処理に復帰する。こうして、階調数変換処理で選択した対象画素を処理していく。その結果、Ｙの画像データについてはディザ法を適用しながら、図２１に示すように複数のラスタを並行させてドット形成有無を判断することができる。
【０１６０】
Ｙ以外の画像データについては、誤差拡散法を用いてドット形成の有無を判断する。ここで、対象画素は図２１に示した順序で選択されるものとしているから、誤差拡散法によるドット形成有無の判断も、図２１に示した順序で行う。以下、誤差拡散法を適用して対象画素についてのドット形成有無を判断する処理について説明する。
【０１６１】
図２２は、誤差拡散法を適用してドット形成有無を判断する処理の流れを示すフローチャートである。尚、かかる処理はＣ，Ｍ，Ｋの各色毎に行われるが、説明が煩雑となることを避けるために、以下では色を特定せず説明する。
【０１６２】
誤差拡散法による処理を開始すると、先ず初めに、対象画素に拡散されている拡散誤差ｅｒを読み込む処理を行う（ステップＳ３６０）。周知のように誤差拡散法では、ある画素についてドットを形成したこと、あるいはドットを形成しなかったことにより、その画素で発生した階調表現の誤差（階調誤差）を周辺の未処理の画素に対応付けて拡散しておく。そして、新たな画素についてのドット形成有無を判断するに際しては、周辺の画素から、その画素に対応付けて拡散された誤差を考慮して、誤差が解消されるようにドット形成の有無を判断する。ステップＳ３６０では、既にドット形成有無を判断した画素から対象画素に向かって拡散されてきた誤差（拡散誤差ｅｒ）を読み込む処理を行う。階調表現の誤差を拡散する処理については後述する。
【０１６３】
次いで、読み込んだ拡散誤差ｅｒと対象画素の画像データＤｔとを加算することにより、補正データＤｃを算出する（ステップＳ３６２）。そして、得られた補正データＤｃと所定の閾値ｔｈerとの大小関係を判断する（ステップＳ３６４）。閾値ｔｈerは予め適切な値が設定されている。補正データＤｃの方が閾値ｔｈerより大きいと判断された場合は（ステップＳ３６４：ｙｅｓ）、対象画素にドットを形成すると判断し、判断結果を示す変数Ｄｒにドットを形成することを意味する値「１」を書き込む（ステップＳ３６６）。逆に、補正データＤｃの方が閾値ｔｈerより小さい場合は、判断結果を示す変数Ｄｒに、ドットを形成しないことを意味する値「０」を書き込む処理を行う（ステップＳ３６８）。
【０１６４】
こうして対象画素についてドット形成するか否かを判断したら、かかる判断によって生じた階調表現の誤差（階調誤差）を算出した後、得られた階調誤差を周辺の未判断の画素に拡散する処理を行う（ステップＳ３７０）。階調誤差は、ドット形成有無を判断した結果として対象画素に表現される階調値（この階調値を結果値と呼ぶ）を、対象画素の階調値から減算することによって算出する。例えば、対象画素にドットを形成しないと判断した場合は、その画素にはドットが形成されないから、結果値は階調値「０」となる。また、対象画素にドットを形成すると判断した場合は、実際にドットを形成したときにその画素が表現する階調値（通常は、階調値「２５５」）となる。従って、対象画素の階調値から、これらの結果値を減算することで階調誤差を求めることができる。
【０１６５】
こうして算出した階調誤差は、所定の重みを付けて周辺の画素に分配される。図２３は、誤差を分配する際に用いられる重み係数を例示した説明図である。図中の小さな矩形は画素を示している。また、＊印が記載された画素は対象画素を示し、各矩形の中に示された数値は重み係数を示している。例えば、図２３（ａ）に示した例では、対象画素の右隣の画素には重み係数１／４を用いて階調誤差が分配される。換言すれば、対象画素で生じた階調誤差の１／４の階調値が、右隣の画素に分配される。同様に、対象画素の右下、真下、左下にあるそれぞれの画素にも、階調誤差の１／４の階調値がそれぞれ分配される。また、対象画素の上側あるいは左隣の画素は既にドット形成の有無が判断されているので、これらの画素には誤差は分配しない。このように、図２３（ａ）に示した重み係数を用いて階調誤差を拡散すれば、各画素に階調誤差を分配する結果、対象画素の周辺にある４つの未判断画素に、対象画素で生じた階調誤差が１／４ずつ分配されることになる。尚、本明細書中では、「階調誤差を分配する」とは、階調誤差に所定の重み係数を乗算した階調値を、ある画素に対応付けられたメモリ上に加算することを意味するものとする。「階調誤差を拡散する」とは、複数の画素に階調誤差を分配することを意味するものとする。また、周辺の画素から階調誤差が分配された結果、ある画素に対応付けて蓄積されている誤差を「拡散誤差」と呼ぶものとする。
【０１６６】
階調誤差を拡散させるために用いる重み係数は、図２３（ａ）に例示したものに限らず、良好な画質が得られるように、例えば、図２３（ｂ）に示すような種々の重み係数を用いることができる。こうして対象画素で生じた階調誤差を周辺に未判断画素に拡散したら（図２２のステップＳ３７０）、図２２に示した誤差拡散法によるドット形成判断処理を抜けて、図１９に示す第３実施例の階調数変換処理に復帰する。
【０１６７】
以上に説明したように、第３実施例の階調数変換処理においては、カラー画像データを構成する各色のデータについての階調数変換処理を行うに際して、色の違いによる画質への影響の違いを考慮して、ディザ法と誤差拡散法とを適切に使い分けながら階調数変換処理を行う。そして、ディザ法を適用して階調数変換処理を行う場合には、隣接する複数本のラスタをラスタ群としてまとめ、かかるラスタについて並行して階調数変換処理を行うことにより、処理の高速化を図ることが可能である。
【０１６８】
また、第３実施例の階調数変換処理においては、ディザ法による判断を、複数ラスタを並行させながら行うことに対応して、誤差拡散法による判断も複数ラスタを並行させて行うことになる。この結果、誤差拡散法による処理も高速化することができるので、ディザ法における処理の高速化と併せて、全体の階調数変換処理をより一層高速化することができる。以下では、複数のラスタを並行させて処理することで、誤差拡散法によるドット形成有無の判断を迅速に行うことができる理由について説明する。
【０１６９】
ここでは、２本のラスタでラスタ群を構成し、ラスタ群に含まれる画素の中から図２１に示した順番で対象画素を選択するものとして説明する。図２４は、ラスタ３およびラスタ４に含まれる画素から対象画素を順次選択して、ドット形成の有無を判断している様子を示した説明図である。図中の小さな矩形は画素を示し、画素中のカギ括弧の中に記載した数字は、ラスタ群中でその画素を処理する順番を示している。
【０１７０】
図２４（ａ）はラスタ群の中で最初に選択した対象画素（図中で［１］と符番した画素）から、周辺の画素に階調誤差を拡散している様子を模式的に示している。図中の実線の矢印は、所定の重み係数に従って階調誤差が周辺の画素に分配されている様子を模式的に表している。尚、ここでは図２３（ａ）に示した重み係数に従って誤差を拡散するものとする。符番［１］の画素で生じた階調誤差を拡散したら、右隣にある符番［２］の画素についてドット形成の有無を判断する処理を開始する。すなわち、符番［２］の画素に対応付けて記憶されている拡散誤差を読み出して補正データを算出し、所定の閾値と比較することによってドット形成の有無を判断する。そして判断に伴って生じた階調誤差を算出したら、得られた階調誤差を周辺の未判断画素に拡散する。図２４（ｂ）は、符番［２］で生じた階調誤差を周辺の画素に拡散している様子を模式的に示している。尚、図２４（ｂ）では、既にドット形成有無を判断済みの画素を、ハッチングを付して表示している。
【０１７１】
次いで、符番［３］の画素についてのドット形成有無を判断する。かかる判断に際しては、周辺の画素から符番［３］の画素に分配されてきた拡散誤差を読み出して、符番［３］についての補正データを算出することによってドット形成の有無を判断する。ここで、図２４（ｃ）から明らかなように、符番［３］の画素に分配される階調誤差は、符番［１］の画素からの誤差と符番［２］の画素からの誤差だけである。符番［２］の画素から分配されてきた誤差は、直前の処理で算出したばかりであり、符番［１］の画素から分配されてきた誤差についても、その前の処理で算出したばかりである。従って、これらの誤差はいずれもコンピュータ１００のキャッシュメモリに残っているので、極めて高速に読み出すことができる。こうして誤差を高速に読み出すことができれば、補正データを迅速に算出して符番［３］についてのドット形成有無の判断を迅速に行うことができる。尚、ここでは符番［１］あるいは符番［２］から分配されてきた誤差の値を、キャッシュメモリから読み出すものとして説明したが、分配された誤差を読み出すのではなく、これら画素で発生した階調誤差をキャッシュメモリから読み出して、符番［３］に分配される誤差を算出するものとしても良い。これらの処理は実質的には等価な処理と考えることができる。
【０１７２】
以上の説明は、符番［３］の画素についてのドット形成有無を判断する場合について説明したが、符番［２］の画素について判断する場合にも、同様の理由により、処理を高速化することが可能である。すなわち、符番［２］の画素についてドット形成有無を判断する際には、符番［２］の画素に対応付けて蓄積されている拡散誤差をメモリから読み出して、補正データを算出する。符番［２］の画素に蓄積される拡散誤差には、符番［１］の画素を含む複数の画素からの誤差も蓄積されるが、符番［１］の画素からの誤差は直前の処理で算出されている。従ってこの誤差については、符番［２］に対応付けて既にメモリ上に蓄積されている拡散誤差に加算するのではなく、メモリ上に一時的に蓄えておいてもよい。そして、符番［１］からの誤差が未だ分配されていない拡散誤差をメモリから読み出して、一時的に蓄えておいた誤差とＣＰＵ１０２上で加算することにより、符番［２］についての拡散誤差を算出することとしても良い。こうすれば、符番［１］の画素から符番［２］の画素に分配される誤差を、符番［２］の画素に対応付けられたメモリに既に蓄積されている拡散誤差に加算する処理が不要となるので、ドット形成の有無を判断する処理を迅速に行うことが可能となる。
【０１７３】
尚、こうして他の画素からの誤差と加算されることなく、単独でメモリ上に蓄えられる誤差は、あくまでも一時的に蓄えられるものであって、ほどなくドット形成有無の判断に使用される。従って、これら誤差が多数蓄えられることはないので、これらの誤差は、レジスタなどの高速に読み書き可能なメモリに蓄えておくことができる。こうして高速に読み書き可能なメモリに蓄えることとすれば、ドット形成の有無を判断する処理をより一層迅速に行うことが可能となる。
【０１７４】
また、図２４（ａ）で符番［２］の画素からの誤差を分配する画素はいずれも、程なくドット形成の有無を判断する画素である。従って、これらの誤差については、周辺画素に対応付けられたメモリ上に蓄積するのではなく、誤差のまま、メモリ上に一時的に蓄えておくこととしても良い。こうすれば、上述した説明と同様の理由により、ドット形成有無を判断する処理をより一層迅速に行うことが可能となる。
【０１７５】
一方、符番［３］の画素で生じた階調誤差は、図２４（ｃ）に示すように、ラスタ４の画素とラスタ５の画素とに拡散される。ここでは、ラスタ２本ずつ、すなわちラスタ３とラスタ４とを並行して処理するものとしているから、ラスタ５に含まれる画素については、しばらくの間はドット形成の有無が判断されることはない。従って、符番［３］の画素からラスタ５の画素に分配される誤差は、これら画素に対応付けられたメモリに分配しておく。これら画素に、他の画素からの誤差が分配されてきたときには、既に蓄えられている誤差に加算した値をメモリに蓄えておけばよい。図２４中の実線の矢印は、誤差を画素に対応付けて分配するのではなく、誤差の値を一時的にメモリに蓄えることを示し、白抜きの矢印は、誤差を周辺の未判断画素に対応付けてメモリ上に分配することを示している。
【０１７６】
符番［３］の画素についての処理が終了したら、今度は符番［４］の画素についての処理を開始する。処理に際しては、符番［４］に対応付けて記憶されている画像データおよび拡散誤差をメモリから読み出す。そして、左隣の画素（符番［２］の画素）からの誤差を加算することによって補正データを算出し、得られた補正データと所定の閾値との大小関係に基づいてドット形成の有無を判断する。次いで、判断によって発生した階調誤差と所定の重み係数とに基づいて、各画素に分配すべき誤差を算出し、得られた誤差をメモリ上に一時的に記憶しておく。こうして、符番［４］の画素についての処理が終了したら、続く、符番［５］以降の画素についても同様の処理を繰り返す。
【０１７７】
このように、第３実施例の階調数変換処理では、ラスタ群を構成する複数本のラスタを並行して処理することにより、ディザ法を適用した処理の高速化を図ることが可能なだけではなく、誤差拡散法を適用してドット形成の有無を判断する処理も高速化することが可能である。
【０１７８】
Ｄ−２．変形例：
上述した第３実施例の階調数変換処理では、ラスタ群を構成する複数のラスタを並行して処理することで、ディザ法を適用した処理も、誤差拡散法を適用した処理も、いずれについても処理速度を向上させることが可能である。もっとも、ラスタ群に含まれる複数のラスタを並行して処理する方法は、上述した方法に限られるものではない。以下に説明する変形例では、ラスタ群を複数のブロックに区分けして、ブロック毎にドット形成有無を判断することにより、複数本のラスタを並行して処理している。こうすることによっても、階調数変換処理の高速化を図ることが可能である。図２５は、第３実施例の変形例としての階調数変換処理の流れを示すフローチャートである。また、図２６は、変形例の階調数変換処理が画像データをドット形成有無による表現形式のデータに変換している様子を例示した説明図である。以下、図２６を参照しながら、図２５に示すフローチャートに従って説明する。
【０１７９】
第３実施例の変形例の階調数変換処理を開始すると、先ず初めに隣接するＮ本のラスタをまとめてラスタ群を生成する（ステップＳ４００）。図２６では、ラスタ群が２本のラスタによって構成されているものとして、ラスタ１およびラスタ２の２本のラスタをラスタ群としてまとめた様子を示している。
【０１８０】
次いで、ラスタ群中の画素を、隣接する所定数ずつまとめて複数のブロックに区分し、ドット形成の有無を判断しようとする処理ブロックを設定する（ステップＳ４０２）。ブロックは、図２６中では太い破線で示した矩形によって表されている。図示した例では、ラスタ群は、縦横２画素ずつ合計４つの画素からなる複数のブロックに区分されている。ステップＳ４０２では、こうして区分された複数のブロックの中から一番左端のブロックを、ドット形成の有無を判断するブロック（すなわち、処理ブロック）として設定する。
【０１８１】
こうして設定した処理ブロックに含まれる各画素から、Ｃ，Ｍ，Ｙ，Ｋ各色の画像データを読み込む（ステップＳ４０４）。すなわち、図２６に示した例では、図中で［１］と符番した画素、および［２］と符番した画素、［３］と符番した画素、［４］と符番した画素の合計４つの画素について、各色の画像データを読み込む。次いで、画像データがＹ色の画像データか否かを判断し（ステップＳ４０６）、Ｙ色の画像データであれば（ステップＳ４０６：ｙｅｓ）、ディザ法を適用することにより処理ブロック内の各画素についてのドット形成有無の判断を判断する（ステップＳ４０８）。すなわち、処理ブロックに含まれる４つの画素を、図２６中に符番された番号の若い画素から順番に、ディザ法を適用してドット形成の有無を判断していけばよい。ドット形成の有無を判断するための具体的な方法には上述した各種実施例の方法を適用することができる。処理の詳細については、先に行った説明と重複するので、ここでは説明を省略する。
【０１８２】
ステップＳ４０６において、画像データがＹ色の画像データではない場合は（ステップＳ４０６：ｎｏ）、誤差拡散法を適用しながらブロック単位でドット形成の有無を判断する（ステップＳ４１０）。かかる処理の詳細については後述する。
【０１８３】
こうして処理ブロックについてのドット形成の有無を判断したら、処理中のラスタ群に含まれるすべての画素について処理を終了したか否かを判断する（ステップＳ４１２）。そして、ラスタ群に未処理の画素が残っていると判断された場合には、ステップＳ４０２に戻って、すべての画素の処理を終了するまで続く一連の処理を繰り返し行う。ラスタ群の全ての画素を処理していると判断された場合は（ステップＳ４１２：ｙｅｓ）、今度は、画像データに含まれる全てのラスタについての処理を終了したか否かを判断する（ステップＳ４１４）。そして、未処理のラスタが残っている場合には（ステップＳ４１４：ｎｏ）、ステップＳ４００に戻って、続く一連の処理を行う。画像データに含まれる全てのラスタについて処理を終了したと判断した場合は（ステップＳ４１４：ｙｅｓ）、図２５に示した変形例の階調数変換処理を終了して、図５の画像データ変換処理に復帰する。
【０１８４】
以下では、ステップＳ４１０の処理、すなわち誤差拡散法を適用しながら処理ブロック内の各画素について、ドット形成の有無を判断する処理について説明する。尚、以下に説明する処理は、Ｃ，Ｍ，Ｋ各色の画像データについても全く同様に行われる。
【０１８５】
図２７は、誤差拡散法を適用しながら、処理ブロック内の各画素についてのドット形成有無を判断する処理の流れを示すフローチャートである。処理を開始すると、先ず初めに、処理ブロックに含まれる各画素についての階調値の総和Ｓを算出する（ステップＳ４５０）。処理ブロック内の各画素についての階調値は、図２５を用いて前述した第３実施例の変形例の階調数変換処理中で既に読み込まれている。
【０１８６】
次いで、処理ブロック内の各画素に対応付けて記憶されている拡散誤差ｅｒを読み込む処理を行う（ステップＳ４５２）。例えば、図２６に示したブロックの中で、先頭のブロックについて処理している場合は、符番［１］ないし符番［４］の各画素に向かって分配されてきた拡散誤差ｅｒを読み出してやる。
【０１８７】
こうして読み出した各画素の拡散誤差ｅｒと先に算出しておいた総和Ｓとを加算することにより、処理ブロックについての補正データＢｘを算出する（ステップＳ４５４）。そして、得られた補正データＢｘと所定の閾値ｔｈ1 とを比較する（ステップＳ４５６）。補正データＢｘの方が閾値ｔｈ1 よりも小さい場合は、その処理ブロックの画素にはいずれもドットを形成しないと判断する（ステップＳ４５８）。
【０１８８】
一方、ステップＳ４５６において、補正データＢｘが閾値ｔｈ1 よりも大きいと判断された場合には、更に所定の閾値ｔｈ2 との比較を行う（ステップＳ４６０）。ここで、閾値ｔｈ2 と閾値ｔｈ1 とは、ｔｈ1 ＜ｔｈ2 の関係が成り立つように設定されている。補正データＢｘの値が閾値ｔｈ2 よりは小さい場合、すなわち、閾値ｔｈ1 よりは大きいが閾値ｔｈ2 よりは小さい場合（ステップＳ４６０：ｎｏ）は、処理ブロックに含まれる画素の中の１つの画素にのみ、ドットを形成すると判断する（ステップＳ４６２）。
【０１８９】
図２８は、処理ブロックに含まれる４つの画素の中の１画素にのみ、ドットを形成している様子を示している。処理ブロック中の１画素にのみドットを形成する方法は、図２８に示した４通りの方法がある。本実施例ではステップＳ４６２の処理において、処理ブロック中の１画素にのみドットを形成する場合は、これら４通りの中から毎回ランダムに選択した位置の画素にドットを形成するものとする。もちろん、毎回同じ位置の画素にドットを形成することとしても良いし、あるいは、処理ブロックに含まれる画素の中で、階調値の最も大きな画素にドットを形成するものとしても良い。
【０１９０】
以上のようにして、処理ブロックに含まれる画素にドットを形成しないと判断したか（ステップＳ４５８）、あるいは１つの画素にのみドットを形成すると判断したら（ステップＳ４６２）、こうした判断によって処理ブロックに生じた階調表現の誤差を算出する（ステップＳ４６４）。処理ブロックで生じた階調誤差は、その処理ブロックの補正データＢｘの階調値から、そのブロックについての結果値を減算することで算出することができる。ここで、処理ブロックについての結果値とは、そのブロックを構成する各画素についての結果値（ドットが形成されたこと、あるいは形成されなかったことによって、画素に表現される階調値）の総和値である。
【０１９１】
例えば、処理ブロック内のいずれの画素にもドットを形成しない場合（ステップＳ４５８の場合）は、各画素の結果値はいずれも「０」であるから、その着目ブロックの結果値も「０」となる。従って、処理ブロックでは、補正データＢｘの階調値がそのまま階調誤差として発生する。同様に、処理ブロック内の１画素にのみドットが形成される場合（ステップＳ４６２の場合）は、処理ブロックの結果値は、ドットが形成される画素についての結果値となる。従って、補正データＢｘからドットを形成した画素の結果値を減算すれば、その処理ブロックでの階調誤差を算出することができる。
【０１９２】
こうして処理ブロックに発生した階調誤差を算出したら、この誤差を周辺の画素に拡散する処理を行う（ステップＳ４６６）。図２９は、処理ブロックで生じた階調誤差を周辺の未判断画素に拡散させる様子を概念的に示した説明図である。図中にハッチングを付して示した大きな矩形は、階調誤差が発生した処理ブロックを示しており、処理ブロックの周囲に実線で示した小さな矩形は階調誤差を分配する周辺画素を示している。例えば、階調誤差を処理ブロックに隣接する画素に拡散する場合は、図２９（ａ）に各画素に記載した重み係数を用いて各画素に誤差を分配する。また、処理ブロックの周辺の画素に均等に誤差が拡散されるように、図２９（ｂ）に例示するような重み係数を用いても良い。
【０１９３】
尚、図２９（ａ）中に細い破線で示した大きな矩形は、処理ブロックに隣接した周辺のブロックを示している。図２９（ａ）に示した例では、処理ブロックで生じた階調誤差が、隣接する周辺のブロックに均等に分配されるように、各画素の重み係数が定められている。重み係数をこのように設定しておけば、各ブロックには均等に誤差を分配することができるので、比較的良好な画質を簡便に得ることができる。もちろん、隣接するブロック内の一部の画素に誤差を分配した場合、誤差が分配された画素では誤差が分配されない画素と比べてドットの形成のされ方が異なることが予想される。しかし、図２７に示したフローチャートからも明らかなように、処理ブロックで発生した階調誤差をまとめて拡散するのは、画像データの階調値が小さい領域、換言すれば、ドットがまばらにしか形成されない領域である。この様な領域では、ブロック内の各画素でドットの形成のされ方が多少異なったとしても、画質に大きな影響を与えることはない。
【０１９４】
尚、図２９に示した重み係数は例示であり、従って、得られた画像を確認しながら、各画素への重み係数を修正していくことで、より良好な画質を得ることができるのは言うまでもない。
【０１９５】
図２７のステップＳ４６０において、処理ブロックの補正データＢｘが所定の閾値ｔｈ2 よりも大きいと判断された場合は（ステップＳ４６０：ｙｅｓ）、誤差拡散法を適用しながら処理ブロック内の各画素毎にドットの形成の有無を判断する処理を行う（ステップＳ４６８）。図３０を参照しながら、かかる処理の内容について説明する。
【０１９６】
図３０は、誤差拡散法を適用して階調誤差を周辺の画素に拡散しながら、処理ブロック内の画素毎にドット形成の有無を判断する様子を模式的に示した説明図である。図２６に太い破線の矩形で示した各ブロック毎にかかる処理を行うことで、各画素についてドット形成の有無を判断することができる。説明を一般化するために、以下では、処理ブロック中の左上の画素を画素Ｐａ、右上の画素を画素Ｐｂ、左下の画素を画素Ｐｃ、右下の画素を画素Ｐｄと呼ぶことにする。従って、画素Ｐａは、図２６中でそれぞれ符番［１］，［５］，［９］…が付された画素に相当する。同様に、画素Ｐｂは、図２６中でそれぞれ符番［２］，［６］，［１０］…が付された画素に相当し、画素Ｐｃは符番［３］，［７］，［１１］…が付された画素に、画素Ｐｄは符番［４］，［８］，［１２］…が付された画素に相当している。
【０１９７】
図３０中で、破線で示した大きな矩形は処理ブロックを示し、処理ブロック中に実線で示した小さな矩形は、ブロック内の各画素を示している。図３０（ａ）は、画素Ｐａについてドット形成有無を判断することによって生じた階調誤差ＥＲａを周辺の未判断画素に拡散している様子を模式的に示している。ここでは、ブロック毎に処理を行うものとしているから、処理ブロックの左側の画素は、既にドット形成の有無を判断済みである。図３０では、ドット形成有無を判断済みの画素にハッチングを付して表示している。そこで、図３０（ａ）に示すように、画素Ｐａで生じた階調誤差ＥＲａは、処理ブロック内の３つの画素に所定の重み係数で拡散させる。図３１は、階調誤差を換算させるための重み係数を例示した説明図である。図中に示した＊印は、ドット形成有無を判断したことにより階調誤差が生じた画素を示しており、周辺の画素内の数値は、その画素に誤差を分配するための重み係数を示している。
【０１９８】
画素Ｐａで生じた階調誤差に、図３１（ａ）に示した重み係数を乗算することにより、処理ブロック内の各画素に分配すべき誤差を算出することができる。ここで、誤差を分配すべき各画素は、ほどなくドット形成有無を判断される画素であるから、これら誤差はメモリ上に一時記憶しておく。図３０中で、画素から隣接する画素に向かう実線の矢印は、算出した誤差を周辺の画素に分配してメモリ上で蓄積するのではなく、誤差そのものを一時的に記憶しておくことを表している。
【０１９９】
画素Ｐａに続いて、画素Ｐｂのドット形成有無を判断する。判断に際しては、画素Ｐｂの画像データと、画素Ｐｂに対応付けて記憶されている拡散誤差と、メモリ上に一時的に蓄えておいた誤差（画素Ｐａの階調誤差ＥＲａに所定の重み係数を乗算した階調値）とを読み出し、これらを加算して補正データを算出する。こうして得られた補正データと所定の閾値とを比較することによって、画素Ｐｂについてのドット形成有無を判断することができる。次いで、ドット形成の判断結果に応じて画素Ｐｂで生じた階調誤差ＥＲｂを算出し、図３１（ｂ）に示した重み係数を用いて周辺の未判断画素に分配すべき誤差を算出する。こうして得られた誤差を分配すべき画素も、ほどなくドット形成有無を判断する画素であると考えられる。そこで、得られた誤差はいずれもメモリ上の一時的に蓄えておく。尚、図３１（ｂ）に示した重み係数は、誤差拡散法をブロック単位で行うことを考慮して、処理中のブロック外の画素よりもブロック内の画素により多くの誤差が分配されるように設定されている。もちろん、周辺の画素に均等に誤差が分配されるような重み係数としても良い。
【０２００】
ここで、画素Ｐｂから右隣の画素、および右下の画素に分配される誤差を、メモリ上に一時的に記憶している理由について補足して説明する。図２７を用いて説明したように、処理ブロックについてのドット形成有無の判断を、画素毎に行うか、それとも図２８を用いて説明したように、ブロックをまとめて行うかは、処理ブロックの補正データの階調値によって決定される。従って、処理ブロックの右隣のブロックについては、必ずしも画素毎にドット形成有無を判断するとは限らない。すなわち、画素Ｐｂから右隣の画素あるいは右下の画素に分配される誤差が、程なく使用されるのは、右隣のブロックも画素毎にドット形成有無が判断される場合である。しかし画像データは、ほとんどの場合、近傍の画素ではほぼ同じ様な階調値を取るから、処理中のブロックを画素毎に判断していれば、右隣のブロックについてもかなりの高い確率で画素毎に判断すると考えることができる。そうであれば、画素Ｐｂから右隣の画素および右下の画素に分配すべき誤差も、一時的にメモリ上に蓄えておくことで、ドット形成有無を判断する処理を高速化することが可能である。この様なことを考慮して、ここでは、画素Ｐｂから周辺画素に分配すべき誤差は、メモリ上に一時的に蓄えることとしている。そして、仮に右隣のブロックが、ブロックをまとめてドット形成有無が判断される場合は、メモリ上に一時的に蓄えておいた誤差をこれらの画素に分配してやればよい。また、より簡便には、一時的に蓄えた誤差をこれらの画素に分配することなく、処理を行うこととしてもよい。ブロック全体としてドット形成有無を判断する領域では、ドットがまばらに形成されるから、隣接するブロックからの誤差の拡散を省略したとしても、これによる影響は限定的であり、処理を簡素なものとすることで、処理速度の更なる向上を図ることができる。
【０２０１】
以上のようにして、画素Ｐｂについての処理を終了したら、画素Ｐｃについての処理を開始する。画素Ｐｃについても同様にしてドット形成の有無を判断し、判断によって生じた階調誤差ＥＲｃを算出する。次いで、図３１（ｃ）に示した重み係数に従って、周辺の各画素に分配すべき誤差を算出する。画素Ｐｃからの誤差を拡散する場合、処理中のブロック内の画素は右隣の画素Ｐｄしか存在しない。そこで、画素Ｐｃの階調誤差の拡散には、周辺の画素に誤差が均等に分配されるような図３１（ｃ）に示す重み係数を使用している。もちろん、処理中のブロック内の画素に、より多くの誤差が分配されるように設定された重み係数を用いても良い。
【０２０２】
画素Ｐｃの周辺画素の中で、右隣にある画素Ｐｄについては、直ぐ後にドット形成有無が判断される。これに対して、他の画素、すなわち左下の画素、真下の画素、右下の画素についてのドット形成有無の判断は、処理中のラスタ群に含まれる全ての画素についての判断を終了した後になる。そこで、画素Ｐｃから右隣の画素に分配すべき誤差については、メモリ上の一時的に記憶しておき、その他の誤差については、それぞれの画素に分配する。すなわち、メモリ上の所定のアドレスに各画素に対応付けて記憶しておき、他の画素からの誤差が分配されてきた場合は、既に記憶されている誤差に加えて、誤差を蓄積していく。前述したように、図３０中で、画素から隣接する画素に向かう実線の矢印は、算出した誤差を一時的に蓄えておくことを示しているが、これに対して、画素から隣接する画素に向かう白抜きの矢印は、誤差を一時的に記憶するのではなく、これら画素に分配することを表している。
【０２０３】
こうして画素Ｐｃについての処理を終了したら、画素Ｐｄについてのドット形成の有無を判断する。図３０に示した例では、画素Ｐｄには分配される誤差は、画素Ｐａないし画素Ｐｃの３つ画素からの誤差のみであり、これら誤差は前述したようにメモリ上に一時的に記憶されている。従って、画素Ｐｄについての判断に際しては、画素Ｐｄの画像データを読み出して、メモリ上に一時的に蓄えておいた誤差を加算することによって補正データを算出することができる。こうすれば、画素Ｐｄに対応付けて記憶されている拡散誤差をメモリ上から読み出す処理が不要となるので、補正データを迅速に算出することができ、延いては、ドット形成有無の判断を迅速に行うことができる。また、一時的に蓄えておく誤差は、データ数が限られており、従ってレジスタなどの高速に読み書き可能なメモリに蓄えておくことができる。こうすれば、より一層の高速化を図ることができる。更に、これら誤差を意図的にレジスタを記憶するのではなく、一般的なメモリ上に記憶する場合でも、実際には、これら誤差はキャッシュメモリから読み出される可能性が高く、従って通常は迅速に読み出すことができる。このため、補正データを迅速に算出することができ、延いてはドット形成有無を判断する処理を高速化することが可能となる。
【０２０４】
画素Ｐｄについてのドット形成有無を判断したら、判断によって生じた階調誤差ＥＲｄを算出し、周辺の画素に分配する処理を行う。図３０（ｄ）は、画素Ｐｄで生じた階調誤差ＥＲｄを拡散する様子を模式的に示している。各画素へ分配すべき誤差は、図３０（ｃ）に示した重み係数を用いて算出する。そして、画素Ｐｄの左下、真下、右下の各画素へは、算出したそれぞれの誤差を分散させ、画素Ｐｄの右隣の画素へ分配すべき誤差は、メモリ上に一時的に蓄えておく。
【０２０５】
尚、図３０（ｄ）に示されているように、画素Ｐｄに右上にも未判断画素が存在している。そこで、画素Ｐｄで生じた階調誤差を、右上の画素にも分配することとしても良い。このように、右上の画素にも誤差を拡散すれば、画質を効果的に改善できる場合がある。図３１（ｄ）は、このような場合に使用される重み係数の設定を例示している。画素Ｐｄの右上の画素は、画素Ｐｄに続いてドット形成有無を判断する画素であるから、この画素への誤差はメモリ上に一時的に記憶しておく。図３０（ｄ）中で画素Ｐｄから右上の画素に向かう破線の矢印は、この画素への誤差をメモリ上に一時的に蓄えることを表している。
【０２０６】
図２７に示したステップＳ４６８では、以上の様にして、誤差拡散法を適用しながら処理ブロック内の各画素毎にドットの形成の有無を判断する処理を行う。こうして、処理ブロック内の全ての画素についてのドット形成の有無を判断したら、図２７のフローチャートに示した処理を抜けて、図２５に示した第３実施例の変形例の階調数変換処理に復帰する。階調数変換処理では、処理中のラスタ群の全画素についての処理を終了したか否かを判断し（図２５のステップＳ４１２）、未処理の画素が残っていれば、処理ブロックを１ブロックだけ右方向に移動させて、続く一連の処理を繰り返す。
【０２０７】
以上に説明したように、第３実施例の変形例の階調数変換処理では、ラスタ群を複数のブロックに区分けして、ブロック毎にドット形成有無を判断する。こうすれば、ラスタ群内の複数のラスタを並行して処理することに加えて、ブロック内の各画素を一括してドット形成有無を判断することで、階調数変換処理の高速化を図ることができる。例えば、処理しようとするブロックの補正データに応じて、ブロック内の画素を区別することなく、ドット形成有無を判断してやれば、処理を迅速化することが可能である。
【０２０８】
尚、以上の説明では、処理ブロックについての補正データＢｘを算出し、得られた補正データＢｘと所定の閾値とを比較することによって、該ブロックについての処理方法を使い分けるものとしたが、簡便には、ブロック内の総和Ｓに基づいて判断することとしても良い。こうすれば、補正データを算出することなくドット形成有無を判断することができるので、処理を高速化することができる。
【０２０９】
また、上述した説明では、ブロックは縦横２画素ずつ合計４画素から構成されているものとしたが、ブロックの構成は、必要に応じて種々の構成とすることができる。例えば、より多くの画素によって構成しても良く、また縦方向と横方向とで画素数を異ならせても良い。
【０２１０】
更に、ブロック内で、各画素を処理する順番についても、上述した順番に限らず必要に応じて適切な順番とすることができる。
【０２１１】
また、階調誤差を拡散する範囲も、図２９あるいは図３１に例示したものに限られず、より遠方の画素に拡散させることとしても良い。
【０２１２】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。例えば、上述の機能を実現するソフトウェアプログラム（アプリケーションプログラム）を、通信回線を介してコンピュータシステムのメインメモリまたは外部記憶装置に供給し実行するものであってもよい。もちろん、ＣＤ−ＲＯＭやフレキシブルディスクに記憶されたソフトウェアプログラムを読み込んで実行するものであっても構わない。
【０２１３】
また、上述した各種実施例では、階調数変換処理を含む画像データ変換処理はコンピュータ内で実行されるものとして説明したが、画像データ変換処理の一部あるいは全部をプリンタ側、あるいは専用の画像処理装置を用いて実行するものであっても構わない。
【０２１４】
更には、画像表示装置は、必ずしも印刷媒体上にインクドットを形成して画像を印刷する印刷装置に限定されるものではない。例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置に対しても、本発明を効果的に適用することが可能である。
【図面の簡単な説明】
【０２１５】
【図１】印刷システムを例にとって本発明の画像処理装置の概要を示す説明図である。
【図２】本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。
【図３】本実施例の画像処理装置に組み合わせて用いられるプリンタの概略構成図である。
【図４】プリンタの印字ヘッドの底面に複数のノズルが設けられている様子を示す説明図である。
【図５】本実施例の画像処理装置で行われる画像データ変換処理の流れを示すフローチャートである。
【図６】画像データ変換処理中で用いられる閾値マトリックスを例示した説明図である。
【図７】閾値マトリックスに記憶された閾値を画像データに対応付けてドット形成有無を判断している様子を示す説明図である。
【図８】第１実施例の階調数変換処理において複数本のラスタを並行させながらドット形成有無を判断する処理の流れを示すフローチャートである。
【図９】第１実施例の階調数変換処理において複数本のラスタを並行させながらドット形成有無を判断している様子を模式的に示した説明図である。
【図１０】第１実施例の階調数変換処理の各種変形例において、複数本のラスタを並行させながらドット形成の有無を判断している様子を示す説明図である。
【図１１】閾値マトリックスを構成する各マス目の表示方法を示す説明図である。
【図１２】第２実施例の階調数変換処理において閾値マトリックスの閾値が、対称画素を選択する順序を考慮して格納されている様子を概念的に示した説明図である。
【図１３】第２実施例の階調数変換処理において閾値マトリックスから閾値を読み出している様子を模式的に示した説明図である。
【図１４】対象画素を選択する順序に応じて閾値マトリックスの閾値が適切な順序で記憶されている様子を示す説明図である。
【図１５】第２実施例の変形例において、閾値マトリックスを、ラスタ群に含まれるラスタ数と同じラスタ数だけずらしながら、画像データに対応付けている様子を示す説明図である。
【図１６】閾値マトリックスを、ラスタ群に含まれるラスタ数と同じラスタ数だけずらしながら対応付けたときに、閾値マトリックスから閾値が読み出される様子を示す説明図である。
【図１７】第２実施例の他の変形例において、閾値マトリックスを、ラスタ群に含まれるラスタ数の整数倍のラスタ数だけずらしながら、画像データに対応付けている様子を示す説明図である。
【図１８】ディザ法と誤差拡散法とを組み合わせて階調数変換処理を行う際の基本的な考え方を示す説明図である。
【図１９】ディザ法と誤差拡散法とを切り換えながら処理を行う第３実施例の階調数変換処理の流れを示すフローチャートである。
【図２０】第３実施例の階調数変換処理中でディザ法を適用してドット形成有無を判断する処理の流れを示すフローチャートである。
【図２１】第３実施例の階調数変換処理において複数本のラスタを並行させながらドット形成の有無を判断している様子を模式的に示した説明図である。
【図２２】第３実施例の階調数変換処理中で誤差拡散法を適用してドット形成有無を判断する処理の流れを示すフローチャートである。
【図２３】誤差拡散法において階調誤差を周辺の未判断画素へ拡散するために用いられる重み係数を例示した説明図である。
【図２４】第３実施例の階調数変換処理において複数本のラスタを並行させながら、誤差拡散法を適用してドット形成の有無を判断している様子を模式的に示す説明図である。
【図２５】ラスタ群を複数のブロックに区分して処理を行う第３実施例の変形例の階調数変換処理の流れを示したフローチャートである。
【図２６】第３実施例の変形例においてラスタ群が複数のブロックに区分されている様子を模式的に示した説明図である。
【図２７】第３実施例の変形例の階調数変換処理において、誤差拡散法を用いてブロック毎にドット形成有無を判断する処理の流れを示すフローチャートである。
【図２８】第３実施例の変形例の階調数変換処理において、ブロックをまとめてドット形成有無を判断する様子を示す説明図である。
【図２９】第３実施例の変形例の階調数変換処理において、ブロックで発生した階調誤差を周辺画素に拡散するための重み係数を例示した説明図である。
【図３０】第３実施例の変形例の階調数変換処理において、誤差拡散法を適用しながらブロック毎にドット形成有無を判断している様子を示す説明図である。
【図３１】第３実施例の変形例の階調数変換処理において、ブロック内の各画素で生じた階調誤差を周辺画素に拡散するための重み係数を例示した説明図である。
【符号の説明】
【０２１６】
１０…画像処理装置
２０…プリンタ
１００…コンピュータ
１０２…ＣＰＵ
１０４…ＲＯＭ
１０６…ＲＡＭ
１０８…周辺機器インターフェースＰ−Ｉ／Ｆ
１０９…ディスクコントローラＤＤＣ
１１０…ネットワークインターフェースカードＮＩＣ
１１２…ビデオインターフェースＶ−Ｉ／Ｆ
１１４…ＣＲＴ
１１６…バス
１１８…ハードディスク
１２０…デジタルカメラ
１２２…カラースキャナ
１２４…フレキシブルディスク
１２６…コンパクトディスク
２００…カラープリンタ
２３０…キャリッジモータ
２３５…紙送りモータ
２３６…プラテン
２４０…キャリッジ
２４１…印字ヘッド
２４２，２４３…インクカートリッジ
２４４…インク吐出用ヘッド
２６０…制御回路
２６１…ＣＰＵ
２６２…ＲＯＭ
２６３…ＲＡＭ
３００…通信回線
３１０…記憶装置
【図１】
2008167468.tif 000003
【図２】
2008167468.tif 000004
【図３】
2008167468.tif 000005
【図４】
2008167468.tif 000006
【図５】
2008167468.tif 000007
【図６】
2008167468.tif 000008
【図７】
2008167468.tif 000009
【図８】
2008167468.tif 000010
【図９】
2008167468.tif 000011
【図１０】
2008167468.tif 000012
【図１１】
2008167468.tif 000013
【図１２】
2008167468.tif 000014
【図１３】
2008167468.tif 000015
【図１４】
2008167468.tif 000016
【図１５】
2008167468.tif 000017
【図１６】
2008167468.tif 000018
【図１７】
2008167468.tif 000019
【図１８】
2008167468.tif 000020
【図１９】
2008167468.tif 000021
【図２０】
2008167468.tif 000022
【図２１】
2008167468.tif 000023
【図２２】
2008167468.tif 000024
【図２３】
2008167468.tif 000025
【図２４】
2008167468.tif 000026
【図２５】
2008167468.tif 000027
【図２６】
2008167468.tif 000028
【図２７】
2008167468.tif 000029
【図２８】
2008167468.tif 000030
【図２９】
2008167468.tif 000031
【図３０】
2008167468.tif 000032
【図３１】
2008167468.tif 000033
【手続補正書】
【提出日】平成20年2月27日(2008.2.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
カラー画像データを構成する各画素についてのドット形成の有無を各色成分毎に判断することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する画像処理装置であって、
画素の列であるラスタであって互いに隣接する所定のＮ本（Ｎは２以上の整数）のラスタをまとめてラスタ群を生成するラスタ群生成手段と、
前記各色成分の中から予め選択された第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する第１のデータ変換手段と、
前記各色成分から前記第１の色成分を除いた第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する第２のデータ変換手段と
を備え、
前記第１，第２のデータ変換手段は、前記各変換処理に伴う処理を、キャッシュ、パイプライン処理の少なくとも一方を実装するコンピュータの処理として実施する画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記第１のデータ変換手段は、
複数の前記閾値が二次元的に配列された閾値マトリックスを記憶しておく閾値マトリックス記憶手段と、
ドットの形成有無の判断を行う対象画素を選択する対象画素選択手段と、
前記対象画素に対応する閾値を前記閾値マトリックスの中から読み出して、該対象画素に対応付けられた前記階調値と比較することにより、該対象画素についてのドット形成有無を判断するドット形成判断手段と
を備え、
前記対象画素選択手段は、前記ラスタ群に含まれる各画素を所定の順番に従って順次選択することにより、該ラスタ群を構成する各ラスタから並行して前記対象画素を選択する手段である画像処理装置。
【請求項３】
請求項２記載の画像処理装置であって、
前記閾値マトリックス記憶手段は、二次元的に配列された前記複数の閾値を、前記Ｎ行ずつ複数のグループにまとめ、該グループ内では、前記対象画素選択手段が前記対象画素を選択する前記所定の順番に従って、該複数の閾値を記憶している手段である画像処理装置。
【請求項４】
請求項３記載の画像処理装置であって、
前記対象画素選択手段は、前記ラスタ群に含まれる複数の画素を、縦横それぞれ所定画素数ずつの複数のブロックにまとめ、該ブロック内の各画素から前記対象画素を順次選択する手段である画像処理装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載の画像処理装置であって、
前記第２のデータ変換手段は、
前記ラスタ群の中の最後尾にある最後尾ラスタを選択し、該最後尾ラスタを構成する各画素についてドット形成の有無を判断することによって、該最後尾ラスタをドット形成の有無を表すドット列に変換する最後尾ラスタ変換手段と、
前記階調誤差を、前記最後尾ラスタを構成する各画素について算出し、該各画素の周辺にある複数の未判断の画素に拡散する第１の誤差拡散手段と、
前記最後尾ラスタに隣接するラスタ群の中の先頭位置にある先頭ラスタを選択し、該最後尾ラスタから該先頭ラスタの各画素に拡散された前記階調誤差を考慮しながら、該先頭ラスタを構成する各画素についてドット形成の有無を判断することによって、該先頭ラスタをドット形成の有無を表すドット列に変換する先頭ラスタ変換手段と、
前記先頭ラスタを構成する各画素で生じた前記階調誤差を、該各画素の周辺にある未判断の画素に拡散する第２の誤差拡散手段と、
前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散された前記階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して該残余ラスタをドット列に変換する残余ラスタ変換手段と
を備え、
前記第１の誤差拡散手段および前記第２の誤差拡散手段は、前記ドット形成の有無を判断した画素とは異なるラスタ群の画素に拡散された誤差については第１の誤差記憶部に記憶し、該ドット形成有無を判断した画素と同じラスタ群の画素に拡散された誤差については第２の誤差記憶部に記憶する手段である画像処理装置。
【請求項６】
請求項１ないし請求項４のいずれかに記載の画像処理装置であって、
前記第２のデータ変換手段は、
前記ラスタ群を構成する複数の画素を、縦横それぞれ所定画素数ずつの複数の画素からなるブロックとしてまとめることにより、該ラスタ群を複数のブロックに区分するブロック形成手段と、
前記ドットの形成有無の判断を前記ブロック単位で行うことにより、前記ラスタをＮ本ずつ並行してドット列に変換するブロック単位変換手段と
を備えている画像処理装置。
【請求項７】
請求項１ないし請求項６のいずれかに記載の画像処理装置であって、
前記カラー画像データは、前記画素の各々に、少なくともシアン色、マゼンタ色、イエロ色を含む各色の階調値を対応付けたデータであり、
前記第１の色成分には、少なくともイエロ色が含まれている画像処理装置。
【請求項８】
請求項１ないし請求項６のいずれかに記載の画像処理装置であって、
前記カラー画像データは、前記画素の各々に、少なくともシアン色、マゼンタ色、イエロ色を含む各色の階調値を対応付けたデータであり、
前記第２の色成分には、少なくともシアン色あるいはマゼンタ色が含まれている画像処理装置。
【請求項９】
請求項１ないし請求項６のいずれかに記載の画像処理装置であって、
前記カラー画像データは、前記画素の各々に、少なくともシアン色、マゼンタ色、イエロ色、ブラック色を含む各色の階調値を対応付けたデータであり、
前記第２の色成分には、少なくともブラック色が含まれている画像処理装置。
【請求項１０】
請求項１ないし請求項６のいずれかに記載の画像処理装置であって、
前記カラー画像データは、色相が略同一で濃度が異なる濃淡一組の色を少なくとも含んだ前記所定の複数色の階調値を、前記画素の各々に対応付けたデータであり、
前記濃淡一組の色の中の一方の色は、前記第１の色成分として選択され、他方の色は前記第２の色成分として選択されている画像処理装置。
【請求項１１】
カラー画像データを構成する各画素についてのドット形成の有無を各色成分毎に判断することによって、該カラー画像データをドットの形成有無による表現形式の印刷データに変換し、該印刷データに基づいて各色のドットを形成することによって印刷媒体上にカラー画像を表現する印刷装置であって、
画素の列であるラスタであって互いに隣接する所定のＮ本（Ｎは２以上の整数）のラスタをまとめてラスタ群を生成するラスタ群生成手段と、
前記各色成分の中から予め選択された第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式の第１の印刷データに変換する第１のデータ変換手段と、
前記各色成分から前記第１の色成分を除いた第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、前記ラスタ群を構成する前記Ｎ本のラスタを並行してドット列に変換することにより、ドットの形成有無による表現形式の第１の印刷データに変換する第２のデータ変換手段と
前記第１の印刷データおよび第２の印刷データに基づいて印刷媒体上に各色のドットを形成するドット形成手段と
を備え、
前記第１，第２のデータ変換手段は、前記各変換処理に伴う処理を、キャッシュ、パイプライン処理の少なくとも一方を実装するコンピュータの処理として実施する印刷装置。
【請求項１２】
カラー画像データを構成する各画素についてのドット形成の有無を各色成分毎に判断することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する画像処理方法であって、
前記受け取ったカラー画像データを、前記各色成分の中から予め選択された第１の色成分の画像データと、該第１の色成分を除いた第２の色成分の画像データとに分離する工程（Ａ）と、
前記第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、画素の列であるラスタのうち隣接するラスタを所定のＮ本（Ｎは２以上の整数）ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する工程（Ｂ）と、
前記第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、隣接するラスタを前記Ｎ本ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する工程（Ｃ）と
を備え、
前記工程（Ｂ）、（Ｃ）は、前記各変換処理に伴う処理を、キャッシュ、パイプライン処理の少なくとも一方を実装するコンピュータの処理として実施される画像処理方法。
【請求項１３】
カラー画像データを構成する各画素についてのドット形成の有無を各色成分毎に判断することによって、該カラー画像データをドットの形成有無による表現形式の各色のデータに変換する方法をコンピュータを用いて実現するためのプログラムであって、
前記受け取ったカラー画像データを、前記各色成分の中から予め選択された第１の色成分の画像データと、該第１の色成分を除いた第２の色成分の画像データとに分離する機能（Ａ）と、
前記第１の色成分の画像データについては、各画素の前記階調値と各画素に対応付けられた所定の閾値とを比較しながら、画素の列であるラスタのうち隣接するラスタを所定のＮ本（Ｎは２以上の整数）ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する機能（Ｂ）と、
前記第２の色成分の画像データについては、ドット形成の有無を判断したことで判断した画素で生じた階調誤差を周辺の未判断画素に拡散するとともに、周辺の判断済みの画素から拡散されてきた階調誤差を解消するようにドット形成の有無を判断しながら、隣接するラスタを前記Ｎ本ずつ並行してドット列に変換することにより、ドットの形成有無による表現形式のデータに変換する機能（Ｃ）と
を備え、
前記機能（Ｂ）、（Ｃ）は、前記各変換処理に伴う処理を、キャッシュ、パイプライン処理の少なくとも一方を実装するコンピュータの処理として実現されるプログラム。