以下に本発明の上位概念、中位概念および下位概念の理解に役立つ一実施形態を示す。なお、以下の実施形態に含まれる概念について、そのすべてが特許請求の範囲に記載されているとは限らない。ただし、これは特許発明の技術的範囲から意識的に除外したのではなく、特許発明と均等の関係にあるため特許請求の範囲には記載していない場合があることを理解していただきたい。
[第1の実施形態]
図1は、本実施形態に係る画像処理装置の例示的な構成を示すブロック図である。入力部101は、処理対象となる画像データを入力する機能を有する、たとえば、スキャナ装置などである。なお、入力部101から入力されるデータは、1画素が1以上の色データにより構成されているとともに、各色データが2値以上で表現されるものとする。すなわち、本画像処理装置では多値画像の画素データを処理するものとする。
画素データ分配部103は、入力画像データをラスタ単位で、色変換部の数に応じて概ね均等に分割し、分割した入力画像データを各色変換部107、108に与える。分割する際には、1ラスタを構成する複数の画素データを単純に画素数に応じて等分してもよいが、さらに左余白と右余白を除いた残りの画素データだけを等分すれば、さらに効率的である。
例えば、色変換部の数が2で、実際に色変換が行なわれる画素数も偶数であれば、左半分の画素データを第1色変換部107に、右半分の画素データを第2色変換部108に与えることになる。一方、画素数が奇数である場合には中央の画素の画素データをどちらかの色変換部に与えればよい。一つ程度の画素の違いであれば、処理の完了時刻に顕著なバラツキは生じないからである。
画素数確定部104は、各ラスタごとに色変換処理により生成されるラスタデータの両端において連続している白画素の数を算出する。すなわち、各色ごとに左余白となる画素数と右余白となる画素数を確定する。より具体例をあげて説明すると、色変換部107,108がRGBの画像データをCMYKのラスタデータに色変換する場合、入力画素データが白(R=G=B=最大値)でなくても、CMYKのいずれかの成分は0になることが多い。一般に、入力画素データの内容に依存して、CMYKの各色成分ごとの両端に生じる余白のサイズは顕著に異なる。よって、両端の余白をハーフトーン処理の対象から除外することで処理時間を短縮できる効果がある。
ハーフトーン手法選択部111は、各色ごとにハーフトーン手法を個別に選択する選択部である。たとえば、ユーザ等による設定指示に応じて、各色ごとに異なるハーフトーン手法を選択することができる。どの色にどのハーフトーン手法が選択されているかの情報は、処理負荷分散部106と各ハーフトーン処理部109,110に伝達される。なお、選択部111は、処理対象となる各色の成分データを分析し、好適なハーフトーン手法を動的に選択するようにしてもよい。
処理負荷算出部106は、選択部111から受信した各色の画素データに施されるハーフトーン手法に関する情報に基づいて、各色ごとのハーフトーン処理の処理負荷を算出する。なお、確定された各色の左余白および右余白の情報、処理対象となる画素の数、およびハーフトーン処理後の出力ビット数などを条件として、各色ごとのハーフトーン処理の処理負荷を算出してもよい。ハーフトーン処理の負荷を算出する方法の詳細は後述する。
色データ分配部105は、算出された処理負荷に基づいて各ハーフトーン処理部109,110の処理負荷が概ね均等となるか、または各ハーフトーン処理間の完了時刻のバラツキが最小となるように、各色ごとの画素データを各ハーフトーン処理部に割り当てる。たとえば、各ハーフトーン処理部に割り当てられる各色ごとの処理負荷の合計ができるだけ均等になるよう、各色ごとの画素データを各ハーフトーン処理部に分配する。色データ分配部105における分配方法の詳細は後述する。
各ハーフトーン処理部109、110は、分配された画素データに対して、選択部111により選択されたハーフトーン処理を施す。ハーフトーン処理後の画像データは出力部102から出力される。
図2は、本実施形態に係る各ハーフトーン手法の出力ビット数と単位画素あたりの演算量との関係を格納した例示的なテーブルを示す図である。図2を用いて、本実施形態における各色ごとの処理負荷を算出する方法について説明する。図2に示す第1のテーブルは、出力ビット数ごとの1画素あたりの演算量を保持している。処理負荷算出部106は、画像処理装置の初期化時などに設定された各色ごとのハーフトーン手法の種類を表す設定情報と、ハーフトーン処理の出力ビット数を表す設定情報とから、各色ごとの単位画素当たりの処理負荷を算出し、第2のテーブルを作成し保持する。
図3は、本実施形態に係る各色ごとの単位画素当たりの演算量を保持する例示的なテーブルを示す図である。この第2のテーブルには、各色ごとに設定されたハーフトーン手法、単位画素あたりの出力ビット数、および単位画素あたりの演算量の情報が格納されている。
ハーフトーン処理の一例としてあげられている誤差拡散2は、2色1組でハーフトーン処理を実行する誤差拡散手法である。これは、CやLCなどの1色目の画素データと共に、MやLMなどの2色目の画素データを処理するの誤差拡散手法であり、2色目の画素当たりの演算量がすべて0となる(図3参照)。画素数確定部104により確定された処理対象となるラスタデータに含まれる色変換後の各色ごとの左余白と右余白の情報が、色データ分配部105を通じて処理負荷算出部106に出力される。処理負荷算出部106は、テーブルを参照し、ハーフトーン手法ごとにあらかじめ決められているルールに従い、各色の左余白の情報と右余白の情報とから、それぞれ実左余白の右端位置と実右余白の左端位置を算出する。誤差拡散2は2色1組で処理を行う誤差拡散であるため、実左余白の右端位置は、1色目と2色目の各左余白の右端位置のうち値の小さい方となる。実右余白の左端位置は、1色目と2色目の各右余白の左端位置のうち値の大きい方となる。ここで左余白の右端位置とは左余白に隣接する非白画素の位置のことであり、右余白の左端位置とは右余白の最も左の画素の位置のことである。また、2色目の実左余白の右端位置と実右余白の左端位置はともに0となる。誤差拡散2ではこうして算出された実右余白の左端位置と実左余白の右端位置の差が、実際にハーフトーン処理される画素数となる。
一方、他のハーフトーン手法として、各色単独でハーフトーン処理を行う手法を採用する場合は、その色の左余白の右端位置、右余白の左端位置の値がそのまま実左余白の右端位置、実右余白の左端位置となる。よって該ラスタにおける各色の処理負荷Gは、次式のように実右余白の左端位置R’と実左余白の右端位置L’の差に対して画素当たりの演算量Wを乗算することにより算出できる。
G=(R’−L’)*W
なお、誤差拡散2のような複数の色を1組として処理を行うハーフトーン手法を用いない場合には、実左余白および実右余白を算出する必要がない。よって、色データ分配部105は、処理負荷算出部106に各色の実左余白と実右余白の情報を出力する代わりに、各色の右余白と左余白の情報を出力することになる。
処理負荷算出部106により算出された各色の処理負荷は、色データ分配部105に出力される。色データ分配部105は、この値に従い各色のハーフトーン処理をどのハーフトーン処理部で実行するかを決定する。図3に示した例には、各色ごとに算出された処理負荷Gも含まれている。この処理負荷に基づいて、各ハーフトーン処理部ごとにトータルでの処理負荷が概ね均等になるように各色ごとの処理担当が決定される。たとえば、Cは、第1ハーフトーン処理部が担当し、Y,K,LCは、第2ハーフトーン処理部が担当する。このように分配すると、複数のハーフトーン処理部間における処理終了時刻のバラツキを抑制できる。色データ分配部105は、決定された処理担当に対して各色の画素データを分配する。
誤差拡散2の2色目であるMはペアの他方となるCとともにハーフトーン処理され、同じく2色目のLMは、LCと共にハーフトーン処理されることが予め決まっているので、MやLMなどの2色目の画素データをハーフトーン処理部に割り当てる処理は必要がない。もちろん、どちらかのハーフトーン処理部に2色目を割り当てたとしても、結果的には処理が実行されないので、どちらかのハーフトーン処理部に2色目を割り当てるように実装しても実害はない。
なお、この図1に示す各部のすべてまたは一部をハードウエアで実現してもよいし、ソフトウェアとハードウエアリソースにより実現される機能として実現してもよい。
図4は、本実施形態に係る画像処理装置をソフトウェアにより実現する場合のハードウエア構成例を示すブロック図である。第1のCPU201および第2のCPU202は、メモリ203に記憶された制御プログラムに従って装置全体の動作を制御する演算回路である。なお、第1のCPU201および第2のCPU202は、物理的に複数のCPUにより実現してもよいし、単一のCPUによる複数スレッドの並列処理機能によって実現してもよい。入力部105は、例えば、原稿画像を読み取ることで画像データを入力するスキャナ装置、外部記憶装置205に記憶されている画像ファイルなどから画像データを入力するI/O部、LANや通信回線等を介して画像データを入力する通信回路、またはキーボードやマウスなどの各種指示入力機器を含む入力デバイスである。メモリ203は、CPU201およびCPU202により実行される、後述のフローチャートに示される処理を実行する制御プログラムを格納している。この制御プログラムが、例えばCD−ROMやFDなどの記憶媒体206に記憶されている場合は、当該制御プログラムを外部記憶装置205にインストールし、さらにメモリ203にロードして実行されてもよい。204はRAMで、CPU201およびCPU202による制御処理の実行の際にワークエリアとして使用されたり、各種データを一時的に保存したりする。出力部106は、例えば、ディスプレイなどの表示装置やプリンタなどの画像形成装置などである。外部記憶装置205は、ハードディスクドライブなどの大容量メモリを備える不揮発性の記憶装置であり、本実施形態に係る制御プログラム、各種アプリケーション・プログラムに加え、本実施形態に係る画素データなどを記憶することができる。
図5は、本実施形態に係る画像処理の例示的なフローチャートである。本フローチャートに係る処理は、実行時にメモリ203に記憶される制御プログラムにより実行される。
ステップS500において、第1のCPU201は、各色ごとに、ハーフトーン手法とハーフトーン処理の出力ビット数とを設定する。すなわち、複数あるハーフトーン手法や出力ビット数の中から、各色ごとに選択されて、設定されることになる。たとえば、入力部101に含まれるキーボード等から各色ごとにこれらの情報を設定する。CPU201は、設定された情報に基づいて図3に示したような第2のテーブルを作成する。なお、画素あたりの演算量は、選択されたハーフトーン手法とその出力ビット数とに基づいて、図2に示した第1のテーブル(たとえば、外部記憶装置205に記憶されている。)を参照することで取得できる。これらの処理は、上述の処理負荷算出部106が実行する処理に相当する。
ステップS501において、CPU201は、処理すべきラスタデータがあるかどうかを判定する。処理すべきラスタデータがあれば、ステップS502に進み、なければ本フローチャートに係る処理を終了する。
ステップS502において、CPU201は、入力部101を制御することでラスタデータを入力する。入力されたラスタデータは随時RAM204に記憶される。
ステップS503において、CPU201は、入力されたラスタデータに含まれる複数の画素データを、色変換部の数に応じて概ね均等に分割する。すなわち、CPU201は、各画素データを処理する色変換部を決定する。CPU201は、たとえば、RAM204からラスタデータを構成する画素データの数(画素数)nを読み出すとともに、色変換部の数mに相当する並列度のデータを読み出し、nをmで除算する。除算の結果、商に相当する分の画素データを各色変換部に均等に分配する。除算の結果、余りが生じたときは、第1のCPU201よりも負荷の軽い第2のCPU202に割り当てる。なお、この例では、第1の色変換部107に関する色変換処理は、CPU201が担当し、第2の色変換部107に関する色変換処理は、CPU202が担当するものとする。
ステップS504において、CPU201とCPU202は、自己に割り当てられた画素データをRAM204から読み出し、それぞれ並列して色変換処理を実行する。色変換後のデータは再度RAM204に記憶される。
ステップ505において、CPU201は、並列に実行されている複数の色変換処理がすべて終了したかどうかを判定し、すべて終了するまで待つ。並列に実行されている処理の終了通知および検出は、セマフォア、イベントフラグ、Mutex、条件変数など、並列処理において同期を取るために一般的に用いられている手法を活用することにより実現することができる。
ステップS506において、CPU201は、色変換された画素データについて各色ごとの左余白と右余白を確定し、ハーフトーン処理を行うべき画素数を各色ごと決定する。すなわち、各色ごとの画素データのうち値が0となっている範囲を調査することで左余白の右端位置および右余白の左端位置を取得できる。なお、本ステップの処理は、上述の画素数確定部104の処理に相当する。
ステップS507において、CPU201は、RAM204から第2のテーブル(図3)に格納されている各色ごとの単位画素あたりの演算量を読み出す。またCPU201は、処理対象となる各色ごとの画素数を算出する。さらに、CPU201は、単位画素あたりの演算量と処理対象となる各色ごとの画素数を乗算することで、各色ごとの処理負荷を算出する。これらの処理は上述の色データ分配部105と処理負荷算出部106の処理に相当する。
ステップS508において、CPU201は、並列にハーフトーン処理を実行する各CPUに対して、算出された各色ごとの処理負荷をできるだけ均等になるように分配する。たとえば、各色ごとの処理負荷Gを加算して総和を算出し、ハーフトーン処理の並列数で除算して商を求める。色の数に比し、通常は、ハーフトーン処理の並列数のほうが少ないことを前提とすると、各色ごとの処理負荷Gのうち、最大のものから順に、各並列処理部(CPU201,202)に割り当ててゆく。もし、各並列処理部に一つづつ担当すべき色を割り当ててもなお、担当未定の色が残っている場合は、今度は最後に割り当てられた並列処理部から最初に割り当てられた並列処理部へと逆順で処理負荷を割り当ててゆく。もし、ある処理負荷をある並列処理部に割り当ててしまうと、その並列処理部の処理負荷の総和が上述の商を超えてしまうことになる場合は、当該並列処理部を飛ばして次の並列処理部に当該処理負荷を分配する。なお、担当未定の処理負荷を、どの並列処理部に割り当てたとしても商を超えてしまう場合は、その超えてしまう分と商との差が最も小さくなるように処理負荷を分配する。このようにすると、図3に示したように各並列処理部に処理負荷を概ね均等に分配できる。
ステップS509において、各CPUは、自己に割り当てられた色の画素データを順次読み出してハーフトーン処理を実行し、ハーフトーン処理後のデータをRAM204に記憶する。このように、複数のCPUによって並列にハーフトーン処理を実行し、しかも処理負荷が均等に分配されているので、各CPUでの処理が概ね同時期に終了することになり、処理の効率が向上する。
ステップS510において、CPU201は、すべての画素についてハーフトーン処理が終了したかどうかを判定する。すなわち、並列に実行されているすべてのハーフトーン処理が終了するのを待つ。
ステップS511において、CPU201は、ハーフトーン処理済みのデータをRAM204から読み出して出力部102へ出力し、ステップS501に戻る。その後、ステップS501で処理すべきラスタデータがあるかどうかを判定し、未処理のラスタデータがなくなるまではステップS502からステップS511までの処理を繰り返し、入力画像データ全体に対して画像処理を施す。
以上説明したように本実施形態に係る発明によれば、複数色からなる画像データについて各色ごとに異なるハーフトーン手法を用いて画像処理する際に、処理負荷算出部106またはCPU201は、選択されたハーフトーン手法の画素あたりの演算量と、ハーフトーン処理後の1画素あたりの出力ビット数と、ハーフトーン処理の対象となる画素数とを条件として、各色ごとの処理負荷を算出する。そして、色データ分配部105またはCPU201は、ハーフトーン処理を並列に実行する複数の並列処理部に対して、算出された処理負荷を概ね均等となるように分配するか、または結果として各並列処理部における処理の終了時刻のバラツキが最小となるように分配する。これにより、各色ごとに異なるハーフトーン手法を自由に選択できるようにしたとしても、異なるハーフトーン処理を並列にかつ効率良く実行できるようになる。たとえば、あるハーフトーン処理部で処理が完了してから、他のハーフトーン処理部の処理が完了するまでに多大な待ち時間が発生してしまうといった非効率さを低減できよう。
[第2の実施形態]
本実施形態では、上述の第1の実施形態から、各色ごとの左余白および右余白を確定する処理(画素数確定部104、処理負荷算出部106、S506、S507)を省略することで、より簡素化を図る技術を提案する。
図6は、本実施形態に係る画像処理装置の例示的な構成を示すブロック図である。第1の実施形態において既に説明した個所については同一の参照符号を付すことで説明を省略する。第1の実施形態と比較すると、図からわかるように、画素数確定部104が省略されているとともに、処理負荷算出部106に代えてすべてのラスタデータに対して同じ処理負荷の値を出力する色分配指示部611が新たに配置されている。
すなわち、本実施形態によれば、各ラスタに含まれているハーフトーン処理される各色ごとの画素数はすべて同じであるため、各色ごとのハーフトーン手法と出力ビット数のみで各色のハーフトーン処理の処理負荷が確定することになる。よって、本実施形態では、複数あるハーフトーン処理部がそれぞれ担当することになる色は、画像データの処理を開始する前に決定されている。
図7は、本実施形態に係る画像処理の例示的なフローチャートである。なお、この処理に対応する制御プログラムは、すくなくともその実行時にはメモリ203に記憶されているものとする。また、ハードウエア構成は、図4で説明したものを使用するものとする。
ステップS700において、CPU201は、図2に示したような第1のテーブルから、各色ごとに設定されたハーフトーン手法と、ハーフトーン処理の出力ビット数とから、対応する画素当たりの演算量を読み出す。この場合、この画素あたりの演算量がそのまま処理負荷に相当することになる。なお、選択部111によって、各色ごとのハーフトーン手法と、ハーフトーン処理後の画素あたりの出力ビット数とが選択されているものとする。
そしてステップS701において、CPU201は、並列処理部の数(並列数)に応じて、各並列処理部に対して、各画素当たりの演算量ができるだけ均等になるように、各色を各並列処理部(CPU201,202)に分配する。すなわち、各色ごとのハーフトーン処理の担当を決定する。CPU201は、各色と処理担当との対応関係をRAM204に記憶する。すなわち、CPU201と、RAM204とが図6の色分配指示部611に相当する。
その後、上述のステップS501乃至S505までの色変換処理を実行する。そして、ステップS508において、各CPUは、RAM204から自己に割り当てられている色の情報を読み出し、自己が担当すべき色データを認識する。これにより、各色のデータが、複数のハーフトーン並列処理部に分配されたことになる。なお、ステップS701において、実質的に分配が済んでいるとも言える。その後、ステップS509乃至S511を実行する。
以上説明したように本実施形態によれば、複数色からなる画像データについて各色ごとに異なるハーフトーン手法を用いて画像処理する際に、色分配指示部611またはCPU201は、選択されたハーフトーン手法の画素あたりの演算量を読み出す。これは実質的に各色ごとの処理負荷に相当する。そして、色データ分配部105またはCPU201は、ハーフトーン処理を並列に実行する複数の並列処理部に対して、処理負荷としての単位画素あたりの演算量を概ね均等となるように分配するか、または結果として各並列処理部の処理がほぼ同時に終了するように分配する。これにより、各色ごとに異なるハーフトーン手法を自由に選択できるようにしたとしても、異なるハーフトーン処理を並列にかつ効率良く実行できるようになる。
[第3の実施形態]
ところで、パターン手法と誤差拡散手法とにはそれぞれに利点と欠点がある。パターン手法は、比較的に処理が簡素なため処理時間が短く、処理の並列化が容易であるという利点があるが、画質の面では誤差拡散手法に劣っている。一方、誤差拡散手法は、画質的に優れるが、処理が複雑なため処理時間が長いという欠点がある。このようにそれぞれ長所・短所を併せ持つため、画像データを構成する色ごとに、または画素ごとに、パターン手法と誤差拡散手法とを使い分けることが望ましい。つまり、色ごとに異なるハーフトーン処理を適用したり、あるいは同一の色であっても画素ごとに異なるハーフトーン処理を適用したりしてもよいのである。
例えば、画像データがCMYKの4色で構成される場合、CMYには誤差拡散手法を適用し、Kにはパターン手法を適用するが如くである。同一の色であって画素ごとに異なるハーフトーン処理を行う一例は次のとおりである。すなわち、中間調データを含まない文字や図形・グラフなどの部分には、高速に処理が可能なパターン手法を適用する。一方で、中間調データを含む写真などの部分には、なめらかな階調表現が可能な誤差拡散手法を適用する。これにより、画質と処理時間の両立を図ることができよう。
そこで、本実施形態では、画素ごとに異なるハーフトーン処理を適用する画像処理装置および画像処理方法について説明する。すべての入力画素は、いずれのタイプのハーフトーン処理を適用すべきかを表す属性(画素タイプ)をともなっているものとする。また、1つの色について、何れかのハーフトーン処理が指定される。例えば、第1のタイプによれば、CとMとに誤差拡散手法が適用され、YとKとにパターン手法で適用される。第2のタイプによれば、C、MおよびKに誤差拡散手法が適用され、Yのみにパターン手法が適用される。なお、これらは単なる一例に過ぎない。
前述の実施形態との違いは、パターンHT(ハーフトーン)バッファを新たに採用していることである。パターンHTバッファは、色変換処理後のデータを格納するバッファの1つである(第1、第2の実施形態では、通常、色変換後バッファだけが設けられる。)。そして、ハーフトーン処理としてパターン手法が適用される場合には、色変換処理とハーフトーン処理とを、このパターンHTバッファを介して連続して行う。
なお、以下の説明において、画素単位で独立して行えるハーフトーン処理のことをパターン手法のハーフトーン処理と呼ぶ。また、画素単位で独立して行えない(すなわち周囲画素の情報を必要とする)ハーフトーン処理のことを誤差拡散手法のハーフトーン処理と呼ぶ。
図8は、実施形態係る複数のバッファの関係を示す図である。具体的には、並列度を2とし、CとMとに誤差拡散手法が適用され、YとKとにパターン手法が適用される例を示している。
入力バッファ800は、処理対象の画素データを一時的に格納するバッファである。パターンHTバッファ801および802は、それぞれパターン手法のハーフトーン処理が適用される色のデータを格納するバッファである。色変換後バッファ803は、色変換後のデータを格納するバッファである。ハーフトーン後バッファ804は、ハーフトーン処理が適用されたデータを格納するバッファである。
色変換後バッファ803のサイズは、各色の1ラスタを構成する全画素のデータを格納できるだけのサイズとしている。通常は、色の数だけ用意されるが、パターン手法のハーフトーン処理しか適用され色のデータに関しては省略されてもよい。一方、パターンHTバッファ801、802のサイズは、1ラスタを構成する画素の数に依存しない一定サイズとしている。
パターンHTバッファは、色ごとに、並列度の数だけ用意される。この例では、並列度が2なので、2つ用意されている。すべての色の分だけ用意しても良いが、パターン手法が適用される色の分だけあれば十分である。
例えば、600dpiで8インチ幅の画像データを処理する場合、1ラスタの画素数は4800となる。色変換後のデータが、画素あたり2バイトとすれば、色変換後バッファ1003の1色当たりサイズは9600バイトとなる。
一方、パターンHTバッファ801、802のサイズは、画素データの画素数とは無関係に、512バイト(256画素分)など、都合の良いサイズとしてよい。そのため、1ラスタの画素数よりも遥かに小さいサイズとすることができる。
この例では、並列度を2としている。そのため、入力バッファ800の左半分のデータを色変換して生成されたYおよびKのデータ(色変換後データ)は、パターンHTバッファ801に書き出される。一方で、入力バッファ800の右半分に対応するYおよびKの色変換後データは、パターンHTバッファ802に書き出される。
ここで注目すべきことは次の点であろう。すなわち、1ラスタのデータを処理する間にパターンHTバッファ801、802の1つのアドレスは、異なる入力データに関する色変換後データを書き込むために何度も使用される。それに対して、色変換後バッファ803における1つのアドレスは、1つの入力データに対応する色変換後データを書き込むために、1度しか使用されない。
図9は、実施形態に係る画像処理装置の例示的な構成を示すブロック図である。前述の実施形態のブロック図との違いは、色変換処理しか行っていなかった第1色変換部107および第2色変換部108に代わり、第1色変換HT処理部912および第2色変換HT処理部913を採用していることである。第1色変換HT処理部912および第2色変換HT処理部913は、それぞれ色変換処理に加え、パターン手法のハーフトーン処理も実行する。
図8で説明したパターンHTバッファ801は、第1色変換HT処理部912によってのみ使用される。また、パターンHTバッファ802は、第2色変換HT処理部913によってのみ使用される。そのため、ハードウエアにより本実施形態を実現する場合、各色変換HT処理部にパターンHTバッファを内蔵することが可能となる。また、当該バッファイのサイズも比較的に小さいため、当該バッファを高速な記憶装置で実現できる利点もある。
図4のブロック図を例に説明すると、パターンHTバッファ801、802は、CPU201およびCPU202の内部にそれぞれ割り当て可能である。一方で、色変換後バッファ803は、RAM204に割り当てられることになる。
図10は、第1および第2の実施形態に係る1ラスタあたりの処理を示すフローチャートである。また、図11は、第3の実施形態に係る1ラスタあたりの処理を示すフローチャートである。これらの図を用いて、本実施形態と前述の実施形態との違いを説明する。なお、各フローチャートにおける処理の主体は、図5および図7と同様に原則としてCPU201およびCPU202であることはいうまでもない。
前述の実施形態では、入力画像データにおいて1ラスタを構成する画素のすべてに色変換処理を実行しながら、その出力結果を色変換後バッファに格納(S1000〜S1001)する。その後、色変換後バッファから色変換後データを色ごとに読み出し、読み出したデータにハーフトーン処理が実行される(S1002〜S1006)。画素単位でハーフトーン手法の切り替えを行う場合、同一タイプ画素数mが決定される(S1003)。同一タイプ画素数mとは、同じ手法のハーフトーン処理が施される画素がいくつ連続しているかを表す数である。これらm個の画素に対して、各色ごとに、指定されたハーフトーン手法が適用される(S1005〜S1006)。なお、S1000からS1001の処理は、第1色変換部107および第2色変換部108により並列に行われ、S1002からS1006までの処理が第1HT処理部109および第2HT処理部110により並列に行われる。
一方、第3の実施形態では、ステップS1100において、ハーフトーン手法選択部111は、色変換処理に先立って、処理対象となっている注目画素の画素タイプ(属性)を判別する。また、注目画素の画素タイプと同一の画素タイプを持つ画素の連続数(同一タイプ画素数m)を決定する。ステップS1101において、、ハーフトーン手法選択部111は、パターンHTバッファ801,802に書き込み可能な画素の数と、同一タイプ画素数mとを比較し、より小さい方を連続処理画素数nとする。
ステップS1102およびS1001において、注目画素からn個目の画素について画素データを色変換処理する。ステップS1103において、全色について色変換処理が終了したと判定されると、ステップS1104に進み、ハーフトーン手法選択部111は、ハーフトーン処理としてパターン手法が指定されているか否かを判定する。パターン手法が指定されていれば、ステップS1105〜S1106において、各色の色変換後データのうち、パターン手法が指定されている色の色変換後データがパターンHTバッファ801,802に先頭から順次格納されてゆく。一方で、誤差拡散手法が指定されている色のデータは、色変換後バッファ803における注目画素に対応したアドレスに格納されてゆく。そして、パターンHTバッファ801、802からn個のデータを読み出して、ハーフトーン処理を行い、その結果をハーフトーン後バッファ804に書き出す。ハーフトーン後バッファ804の書き出しアドレスは、入力画素に対応したアドレスとする。
S1002以降の処理は前述の実施形態とほぼ同じであるが、既にパターン手法のハーフトーン処理はS1106で行っている。そのため、ステップS1107において、色ごとにハーフトーン処理として誤差拡散手法が指定されているか否かを判定する。なお、色ごとにハーフトーン処理としてパターン手法が指定されているか否かを判定するようにしてもよい。判定の結果、パターン手法が指定されていれば、その色データに対するハーフトーン処理は省略し、次の色の処理へ移る。一方、誤差拡散手法が指定されていれば、ステップS1005に進む。m個の画素について誤差拡散手法によるハーフトーン処理を実行する(S1105〜S1108)。
なお、S1000からS1106までの処理が、第1色変換HT処理部912および第2色変換HT処理部913により並列に行われる。また、S1002からS1108までの処理が第1HT処理部109および第2HT処理部110により並列に行われる。
色変換後データが格納されるアドレスは、色ごとに管理される。例えば、パターン手法が適用される色については、パターンHTバッファ801,802内の領域が割り当てられる。一方、それ以外の色は、色変換後バッファ803の領域が割り当てられる。また、実行されるハーフトーン処理は、S1100において決定される。よって、あるタイプのハーフトーン処理から他のタイプのハーフトーン処理に切り替わると、(例:パターン手法から誤差拡散手法に切り替わったときなど)、書き出しアドレスも変更されることはいうまでもない。
ハーフトーン後バッファ804における同一アドレスに対する書き込みが、複数のハーフトーン処理部(例:第1色変換HT処理部912および第2色変換HT処理部913)から同時に行われること(競合すること)は防止されるべきである。そこで、各色について、1バイトあたりの画素数の最小公倍数となる位置、あるいは8の倍数の位置で画素を分割するとよい。例えば、並列度が2で、1ビットと2ビットの色があり、左余白の右端位置が11右余白の左端位置が44である場合を考慮する。個の場合、4(=8/2)の倍数である28の位置で左右に分割せずに、8(=8/1)の倍数である24の位置で左右に分割する。
画素データ分配部103において、第1色変換HT処理部912および第2色変換HT処理部913に割り当てる画素を決定する際に、パターン手法のハーフトーン処理に関する処理負荷を算出し、それを色変換処理の処理負荷に加えた上で、各色変換HT処理部912,913に割り当てる画素を決定しても良い。
しかしながら、色変換処理に比較してパターン手法のハーフトーン処理の処理負荷は問題にならない程小さいことが多い。よって、前述の実施形態のように単に画素数が均等になるように割り当てを行っても本発明の目的を達することはできる。同様に、誤差拡散手法のハーフトーン処理に比較してパターン手法のハーフトーン処理の処理負荷は問題にならない程小さいことが多い。よって、各HT処理部に割り当てる色を決定する際に、パターン手法と誤差拡散手法の両方が切り替えられて適用される色の処理負荷については、パターン手法の処理負荷を差し引いて処理負荷を算出するのではなく、すべての画素が誤差拡散手法により処理されるものとして処理負荷を算出しても特に問題にはならない。また、パターン手法のハーフトーン処理しか行われない色の処理負荷については算出する必要はない。しかしながら、前述の実施形態と同様に処理負荷を算出して、それを考慮して各HT処理部に処理を割り当てても良い。
パターンHTバッファ801、802を利用して色変換後データにパターン手法のハーフトーン処理を施す時点では、余白および左余白は確定していない。しかしすべての入力データに対して無条件にパターン手法のハーフトーン処理を施すとすると無駄なハーフトーン処理を行うことになり処理時間の増大を招く。そこで、可能な限り無駄なハーフトーン処理を行わないための工夫を行うのが望ましい。
例えば、パターンHTバッファ801、802のすべてのデータが0の場合には、ハーフトーン処理は行わず、その代わりに対応するハーフトーン後バッファ804の領域に0を書き込む処理を行えばよい。あるいは次のような処理を行うことによりさらにハーフトーン後バッファ804への不必要な書き込みを減らすことができる。色変換処理を左から行う場合には、パターンHTバッファ801、802内に0でない画素が見つかるまではハーフトーン後バッファへの書き込みは行わない。そして、0でない画素が見つかったところで、その画素位置を左余白として記録する。それ以後は、パターンHTバッファ801、802内を右から0でない画素を探索する。右からの検索で0でない画素が見つかるたびに右余白にその画素の右隣の画素位置を上書き記録し、パターンHTバッファ801、802内のすべての画素が0であった場合、ハーフトーン後バッファ804の対応する領域に0を書き込む処理をする。
さらに最適な処理としては、前述の手法においてパターンHTバッファ801、802内のすべての画素が0であった場合、ただちにハーフトーン後バッファ804の対応する領域に0を書き込むのではなく、すべての画素が0であった領域を記録しておく。そして、1ラスタの色変換が終了し、右余白が確定すると、この右余白の内側にあるすべての画素が0であった領域についてハーフトーン後バッファの対応する領域に0を書き込む処理を行うとよい。
本実施形態の前述の実施形態に対する利点は、これまでの説明により明らかなように、さらに処理時間を短縮できることにある。一般に、情報処理処理装置では、演算装置(例:CPU)の処理能力に比較して、記憶装置(例:メモリ)からのデータの書き込み、および読み出しできる能力(単位時間に書き込みおよび読み出しできるデータ量)は極めて低い。そのため処理能力を向上させることを目的として演算装置と記憶装置との間に高速記憶装置(キャッシュ)を設けることが多い。このようなキャッシュは、記憶装置よりも記憶できる容量は限られているものの記憶装置よりも高速にデータの書き込み/読み出しが可能であることはいうまでもない。ところで、パターンHTバッファ801、802は、色変換後バッファ803と比較して大幅に小さなサイズであり、かつ限られた処理により集中して使用される。そこで、このキャッシュをパターンHTバッファ801、802として使用すれば、演算装置は、記憶装置を待つことなく色変換処理からハーフトーン処理までを実行できるため、処理時間の短縮が図れるのである。
これまでの説明では、入力画像の1ラスタを単位として色変換処理に続きハーフトーン処理を行う場合について説明してきた。しかしながら、本実施形態は、複数ラスタに対して色変換およびパターン手法のハーフトーン処理を行った後で、その複数ラスタの色変換後データに対して誤差拡散手法のハーフトーン処理を行うように変形してもよい。
一括して処理を行うラスタ数をKとすると、図8に示した色変換後バッファ803およびハーフトーン後バッファ1004をそれぞれK本用意する必要がある。そして、図11に示したようにS1000からS1106までのステップをK回繰り返して行い、その後、S1002からS1108までのステップをK回繰り返して行うことになる。なお、この複数ラスタに対して色変換およびパターン手法のハーフトーン処理を行う場合でもパターンHTバッファ801、802は並列度の数だけ用意すれば良い。
前述の実施形態では、色変換およびパターン手法のハーフトーン処理を1ラスタの画素を半分に分割してそれぞれの処理部に割り当てることを一例として説明した。複数ラスタを一括処理する場合には、ラスタ単位で異なる処理部に割り当てることも可能である。一方、ハーフトーン処理の分配は、各色について、複数ラスタの処理負荷の合計を算出し、それぞれの処理部に処理負荷ができるだけ均等となるように色を割り当てる。これにより複数ラスタの一括処理を実現することができる。
本実施形態の一態様として、画素ごとにハーフトーン処理が異なることがなく、色単位でのみハーフトーン処理が異なる場合、あるいはすべての色のすべての画素にパターン手法のハーフトーン処理を施す場合も含まれることはいうまでもない。特にすべての色のすべての画素に対して画素単位で処理できるハーフトーン処理を施す場合には、第1の実施形態におけるS510のようにすべてのハーフトーン処理部の処理終了を確認する処理を省略することができる。よって、さらに処理時間を短縮することが可能である。
[他の実施形態]
なお、上述の実施形態では、ハーフトーン処理だけでなく、色変換処理についても並列に処理するものとして説明した。しかしながら、当業者であれば、第1および第2の実施形態においては色変換処理までも並列に処理する必要がないことは理解できよう。すなわち、色変換処理の並列化は単なるオプションに過ぎない。
また、上述の実施形態では、2つのハーフトーン処理部によりハーフトーン処理を並列(2重)に実行するものとして説明した。しかしながら、本発明は2重の並列化に限定されるものではなく、色変換後の色数を限度として並列度を上げられることはいうまでもない。たとえば、C,M,Y,K,Lc,Lmの6色の場合は、6重まで並列度上げることができる。
さらに、第3の実施形態では、2つの色変換ハーフトーン処理部801,802と、2つのハーフトーン処理部109、110とにより、それぞれ並列(2重)処理を実行するものとして説明した。しかしながら、本発明は2重の並列化に限定されるものではなく、より並列度を増しても良い。例えば、色変換ハーフトーン処理部については、入力画像の画像全体における総画素数を限度として並列度を増加させることができる。また、ハーフトーン処理部については、色変換後の色数を限度として並列度を増加させることができることはいうまでもない。
以上、様々な実施形態を詳述したが、本発明は、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。例えば、スキャナ、プリンタ、スキャナ、PC、複写機、複合機及びファクシミリ装置の如くである。
なお、本発明は、前述した実施形態の各機能を実現するソフトウェアプログラム(本実施形態では図5、7、10または11に示すフローチャートに対応したプログラム)を、システム若しくは装置に対して直接または遠隔から供給し、そのシステム若しくは装置に含まれるコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される。
従って、本発明の機能・処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、上記機能・処理を実現するためのコンピュータプログラム自体も本発明の一つである。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等、プログラムの形態を問わない。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などがある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明の構成要件となる場合がある。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現される。