(57)【特許請求の範囲】
【請求項１】
イメージのハーフトーン化の方法であって、第１の数のビットで付与された少なくとも１つの入力明度が各ピクセルに割り当てられる、第１のピクセル配列の形でイメージを表現するソースファイル（１８）が、電子的に処理され、第２の数のビットで付与された少なくとも１つの出力明度が第２のピクセル配列の各ピクセルに割り当てられる第２のピクセル配列の形で出力ファイル（２０）を計算し、前記第２の数は第１の数未満であって、処理がグラフィックスプロセッシングユニット（ＧＰＵ）（１６）で行われ、
第１のピクセル配列がＧＰＵ（１６）の２次元入力テクスチャー（２８）にロードされ、
ハーフトーン処理が、ピクセルごとに少なくとも１つの閾値の比較を含み、
少なくとも１つの閾値マトリックスがＧＰＵ（１６）の閾値テクスチャー（３２、３４、３６、３８）にロードされることを特徴とする、方法。
【請求項２】
複数の明度が第１のピクセル配列の各ピクセルに割り当てられ、明度を入力テクスチャー（２８）に収容するために、このテクスチャーが、ピクセルごとの明度の数に対応する係数により１つの次元で拡大され、明度がこの入力テクスチャー（２８）の隣接する座標位置（ｘ、ｘ＋１、ｘ＋２）に書き込まれる、請求項１に記載の方法。
【請求項３】
明度を１つのカラーシステム（ＲＧＢ；ＢＧＲ）から別のもの（ＣＭＹＫ）に変換するステップを含み、前記ステップがＧＰＵ（１６）で行われる、請求項１または２に記載の方法。
【請求項４】
カラー変換ステップが、ＧＰＵ（１６）に格納された１次元のブラック生成テクスチャー（３０）を参照してブラックカラー成分（Ｋ）を生成するステップを含む、請求項３に記載の方法。
【請求項５】
閾値マトリックスがピクセルごとに複数の閾値（Ｔ１、Ｔ２、Ｔ３）を含む、請求項１ないし４のいずれか一項に記載の方法。
【請求項６】
ピクセルごとの閾値の数が少なくとも１つのカラーシステムでのピクセルごとの明度の数に対応し、閾値は、明度が入力テクスチャー（２８）に配列されるものと同じパターンで閾値マトリックス（３２〜３８）に配列され、その結果、入力テクスチャー（２８）からの明度のフェッチと閾値テクスチャー（３２〜３８）からの閾値のフェッチに、同じアドレス座標（ｘ、ｙ）が使用されることが可能である、請求項５に記載の方法。
【請求項７】
閾値の比較に、ステップ関数を一組の明度（Ｃ、Ｍ、Ｙ、Ｋ）と対応する閾値（ＴＣ１〜ＴＣ３、ＴＭ１〜ＴＭ３、ＴＹ１〜ＴＹ３、ＴＫ１〜ＴＫ３）に適用するステップが含まれる、請求項１ないし６のいずれか一項に記載の方法。
【請求項８】
ステップ関数が、その各成分が異なる明度で動作するベクトルのステップ関数である、請求項７に記載の方法。
【請求項９】
ｒが各ピクセルの閾値の数である場合、出力明度（ＨＣ、ＨＭ、ＨＹ、ＨＫ）は、その各成分が値「ｒ」を有する開始ベクトルで開始し、ステップ関数をｒ回、入力明度と異なる閾値の組み合わせに適用し、前記開始ベクトルからステップ関数の結果を減算することで計算される、請求項５および８に記載の方法。
【請求項１０】
フロントエンド（１０）および印刷エンジン（１２）を備えるデジタルプリンターであって、フロントエンド（１０）が請求項１ないし９のいずれか一項に記載の方法を実行するようになされていることを特徴とするデジタルプリンター。
【請求項１１】
ＣＰＵ（１４）およびＧＰＵ（１６）を有するデータ処理システムでの実行時に、ＣＰＵおよびＧＰＵが請求項１ないし９のいずれか一項に記載の方法を実行するようにさせるプログラムコードを含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、イメージのハーフトーン化の方法に関し、第１の数のビットで付与された少なくとも１つの入力明度が各ピクセルに割り当てられる、第１のピクセル配列の形でイメージを表現するソースファイルが、電子的に処理され、第２の数のビットで付与された少なくとも１つの出力明度が第２のピクセル配列の各ピクセルに割り当てられる第２のピクセル配列の形で出力ファイルを計算し、前記第２の数は第１の数未満である。
【背景技術】
【０００２】
デジタルイメージ処理および印刷の技術分野では、イメージは通常、電子ラスターイメージファイルの形で表現される。ラスターイメージはピクセルの複数の行と列に分割され、ピクセル配列の形を取る。ここで、輝度または明度を示す１つまたは複数の値がそれぞれ個々のピクセルに割り当てられる。黒と白のイメージの場合、単一の色（黒）しかないので、個々のピクセルに割り当てられた「明度」の値は、それぞれのピクセルのグレーレベルを示す。例えば、８ビットの明度では、０（白）から２５５（黒）の範囲の２５６の異なるグレーレベルを定義できる。カラーイメージの場合、各ピクセルには、割り当てられた通常３〜４の明度があり、それは例えば、ＲＧＢシステムでは赤色（Ｒ）、緑色（Ｇ）、および青色（Ｂ）で、ＣＭＹＫカラーシステムでは、シアン（Ｃ）、マゼンタ（Ｍ）、黄色（Ｙ）、および黒色（Ｋ）である。コンピュータで作成されたり、スキャナーで取り込まれたイメージでは、例えば、各明度は再度８ビットを有する場合がある。
【０００３】
しかしながら、ほとんどのデジタルプリンターは、２５６の異なるグレーレベルまたはカラーレベルを、対応する数の異なるサイズまたは密度レベルで印刷されたドットに直接変換することはできない。多くのプリンターができるのは、一定のサイズおよび密度でドットを印刷するか、印刷しないかのいずれかだけである。他のプリンターの場合、わずかな数、例えば、ピクセルおよび色ごとに４つの異なるサイズまたは密度で、ドットを生成することができる。例えば、プリンターが異なる３つのドットサイズを生成できる場合には、イメージは、ピクセル配列の形でプリンターに提示される必要があり、ここで、各明度は２ビットまでである。
【０００４】
結果的に、例えば、明度ごとにビットの数を８から２へ低減化し、一方、印刷されたイメージの光学的印象を可能な限り保持するプロセスが必要とされる。このプロセスは、ビットの低減化数が１より大きい場合には、「ハーフトーン化」または「マルチレベルハーフトーン化」と呼ばれる。
【０００５】
知られているハーフトーン化アルゴリズムには通常、閾値化ステップが含まれ、ここでは、ソースイメージのピクセルの明度が閾値または一組の閾値と比較される。例えば、明度は異なる３つの閾値と比較される場合があり、結果としての明度は、いくつの閾値が超過されるかに応じて、０、１、２、または３となる。
【０００６】
ハーフトーン処理で得られる第２のピクセル配列の明度が、異なる４つの密度値を表す、例えば２ビットというわずかな値しかない場合でも、印刷されたイメージでより多数の異なる密度値を生成することは可能である。このことは、第２のピクセル配列の明度を、異なる明度を有する隣接したピクセルの組み合わせた作用が中間の密度レベルに対応する視覚的印象になるように配列することによって達成される。一般に、このようにして得られるハーフトーンイメージの解像度は、ソースイメージの解像度より少なくなる。
【０００７】
そのようなハーフトーン処理の通常の例は、いわゆるディザー法であり、それでは、ソースイメージの明度がいくつかの隣接するピクセルをカバーする閾値マトリックス（ディザー法マトリックス）のマトリックス要素と比較される。その結果、一定の密度であるソースイメージの領域であっても、ハーフトーン処理の２ビット明度では、マトリックスの閾値の分布に応じて、特定の広がりを示すことになる。
【０００８】
知られているハーフトーン処理の別の例は、いわゆる誤差拡散で、それでは、ソースイメージの明度（８ビット）が、例えば、２ビットの出力明度で概算され、誤差が隣り合ったピクセルの出力明度を適切に計算することによって補正される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】欧州特許出願公開第０８１５４１３５号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来のプリンターの場合、ハーフトーン処理はいわゆるプリンターのフロントエンドの中央処理装置（ＣＰＵ）で行われる。しかしながら、ハーフトーン化は、とりわけ大型のフォーマットカラーイメージの場合、かなりの量の処理能力および時間を必要とするプロセスである。ＣＰＵのハーフトーン処理を高速化するためのいくつかの技術が知られているが、これらの技術は一般に、ソースイメージの特定の特性に依存しており、そのため、ハーフトーン処理が高速化される程度は、処理される特定のイメージにより異なる。その結果、プリンターの動作全体のスケジューリングに望ましい、事前に必要な処理時間を概算することは困難である。
【００１１】
より短いおよび／またはより予測可能な処理時間内に実行されることが可能なハーフトーン化方法を提供することが本発明の目的である。
【課題を解決するための手段】
【００１２】
上記の目的を達成するために、本発明による本方法は、処理がグラフィックスプロセッシングユニット（ＧＰＵ）で行われることを特徴としている。
【００１３】
今日、ＧＰＵは画面上に表示されるレンダリングイメージ向けのコンピュータシステムで使用される。ＧＰＵの技術は、主にエンターテイメント業界の主導で急速な進歩を経験しており、その結果、市販されているＧＰＵは比較的安価であるが、それにもかかわらず、イメージ処理に必要な大量のデータを処理する点で非常に強力である。特に、ＧＰＵには高度な並列アーキテクチャがあり、そのため、多数のスレッドが並行して処理されることができる。ＧＰＵの通常のタスクには、例えば、様々な視点からのシーンを表示するための座標変更、例えば、照明効果などを表現するピクセルシェーディングが含まれる。
【００１４】
これらのタスクはハーフトーン化プロセスで直面するタスクとはまったく異なっているが、同様にこれらのタスクも非常に効率的なやり方で行うために、使用可能なＧＰＵはプログラムされるようにすることができることになる。
【００１５】
１つのスレッドが同時に処理される別のスレッドで得られる結果に依存していないという意味で、スレッドが互いに独立していることが並列処理の前提条件である。誤差拡散に基づくハーフトーン化プロセスでは、誤差の伝搬が一般的に直近のピクセルに限定されることができる場合には、この状態は少なくとも、十分な距離、隔てられているピクセルで実現される。閾値マトリックスに基づくハーフトーン化プロセスでは、異なるピクセルを処理するスレッドは、この意味で互いに独立しており、その結果、並列度の度合いはＧＰＵの能力によってのみ限定される。いずれの場合でも、イメージのピクセルの総数およびＧＰＵの能力が知られている場合、処理されるイメージの内容に関係なく、ハーフトーン処理に必要とされる時間を概算することが常に可能になる。
【００１６】
本発明はさらに、本発明による方法を実装するプリンターおよびコンピュータプログラム製品にも関する。
【００１７】
本発明のより具体的な光学的機能は、従属請求項で示される。
【００１８】
好適な実施形態はこれから、次の図面に関連して説明される。
【図面の簡単な説明】
【００１９】
【図１】本発明による方法を行うようになされたプリンターのブロック図である。
【図２】プリンターのＣＰＵ上で実行するＧＰＵ処理ドライバーの流れ図である。
【図３】タイリング手順を例示する図である。
【図４】ＧＰＵのタイルのピクセルの並行処理の構造を例示する図である。
【図５】ＧＰＵ上で実行するカーネルの流れ図である。
【図６】異なる１つのタイプの入力データに対して、テクスチャーから明度をフェッチするステップを例示する図である。
【図７】異なる１つのタイプの入力データに対して、テクスチャーから明度をフェッチするステップを例示する図である。
【図８】異なる１つのタイプの入力データに対して、テクスチャーから明度をフェッチするステップを例示する図である。
【図９】複数の閾値マトリックスを含むテクスチャーを例示する図である。
【図１０】閾値マトリックスでイメージをタイリングするためのスキームを例示する図である。
【図１１】カーネルで実行される閾値化ステップを例示する図である。
【図１２】閾値化ステップで使用されるステップ関数を例示する図である。
【発明を実施するための形態】
【００２０】
図１に略示されているプリンターは、フロントエンド１０および印刷エンジン１２を備えている。フロントエンド１０には、プリンターに供給される電子印刷データを、印刷エンジン１２を使用して印刷されるのに適切なフォーマットに変換するタスクがある。当該分野で一般的に知られているように、フロントエンド１０は、ＣＰＵ１４のほか、プログラムコードとデータを格納するためのメモリー空間も備え、さらに、ここではそのどちらも示していないが、入力および制御手段も備えている。
【００２１】
示されている実施形態の場合、フロントエンド１０は、ディスプレイ画面でイメージを表現するため、現代のパーソナルコンピュータ、ゲームコンソール、またはワークステーションで通常使用されるタイプのグラフィックスプロセッシングユニット（ＧＰＵ）１６を備えている。ＧＰＵ１６は、別個の集積回路で形成されることも、同じ基板にＣＰＵ１４および他の回路そしてメモリーも一体化されることも可能である。
【００２２】
図１ではさらに、フロントエンド１０で受領され処理されるイメージデータを含むソースファイル１８も示している。例として、ソースファイルにエンコードされたイメージはカラーイメージで、カラーはＲＧＢまたはＣＭＹＫなどのよく使用される色空間で指定されるものとする。ソースファイルの色空間は、プリンターで使用される色空間とは異なる場合がある。そのため、例えば、欧州特許出願公開第０８１５４１３５号明細書に記述されているように、フロントエンド１０は、ソースファイル１８の色空間を印刷エンジン１２の色空間に適合させるための適切な色管理アルゴリズムを行うことができる。
【００２３】
例として、ここでは、ソースファイル１８の各ピクセルの色は、それぞれが８ビットの幅を有する３つまたは４つの明度で定義されるものとする。マルチレベルハーフトーンプロセスは、ソースファイルによって表現されるピクセル配列を、各ピクセルの色が４つの明度Ｃ、Ｍ、Ｙ、Ｋによって定義され、それぞれの幅が２ビットのみである、ピクセル配列に変換するために適用されるものである。したがって、各明度は、印刷エンジン１２が再生できる異なる４つのレベルであるものとする。このプロセスの結果は、印刷エンジン１２に送られることができる出力ファイル２０である。
【００２４】
ここに記述されている例では、閾値アルゴリズムがハーフトーン化に使用されている。さらに、説明を簡単にするために、ソースファイル１８および出力ファイル２０で表現されるピクセル配列は同一の形状およびサイズであるものとし、そのため、ソースファイルのピクセルと出力ファイルのピクセル間には一対一の対応関係が存在し、ソースファイルの各ピクセルは、ピクセル配列の特定の領域をカバーする、閾値マトリックスで付与された閾値と比較される。
【００２５】
ハーフトーン化の目的のために、ＣＰＵ１４はＧＰＵ処理ドライバー２２と呼ばれる特定のソフトウェアを実行して、ＧＰＵ１６のパラメータを設定し、それからＧＰＵ１６で実行されるいわゆるカーネル、すなわちプログラムを呼び出す。ＧＰＵ１６の処理パート２４には、カーネルで指定された命令を同時に、多数のデータオブジェクトに適用するいくつかのマルチプロセッサが含まれ、現在の例の場合、これらデータオブジェクトには、ソースファイルの全部または少なくとも多数のピクセルが並列スレッドで処理されるようなソースファイルの個々のピクセルのデータが含まれる。
【００２６】
さらにＧＰＵ１６には、いわゆるテクスチャーを格納するために使用される、いくつかの固定メモリー、すなわち固定サイズの複数のメモリーを収容するように構成されることができるメモリーパート２６が含まれる。テクスチャーは、ＣＰＵ上で処理されるデータ配列と同様の１、２、または３次元データ配列であるが、データ配列の要素が浮動小数点インデックスで指定される場合のある特定の機能を伴う。このことは、プロセッサパート２４がテクスチャーに格納された不連続データ間を補間するための強力なプロセスを提供するために起きる可能性がある。
【００２７】
示されている例では、テクスチャーは、ソースファイルで表現される入力イメージ（入力ピクセル配列）を格納する入力テクスチャー２８、ＲＧＢカラーをＣＭＹＫカラーに変換するために必要とされるブラック生成テーブル３０、４色Ｃ、Ｍ、Ｙ、Ｋのそれぞれにつき１つの、４つの閾値テクスチャー３２、３４、３６、３８、および必要に応じて、出力ピクセル配列が出力ファイル２０としてフロントエンドのシステムメモリーに転送される前に、出力ピクセル配列をバッファリングするための出力テクスチャー４０を備えている。代替形態として、出力ファイルを生成するために、カーネルが直接結果をシステムメモリーに返すこともできる。ダウンロードおよびアップロード手順を高速化するために、直接アクセスメモリー（ＤＭＡ）が使用されることが好適である。
【００２８】
ＧＰＵ処理ドライバー２２の機能については、図２を参照してこれから説明される。
【００２９】
第１ステップＳ１では、ドライバーは処理されるソースイメージのサイズをチェックし、ＧＰＵ１６の容量、特にストレージ容量が１つのバッチでイメージ全体を処理するのに十分かどうかを判定する。十分ではない場合、イメージは複数のタイルに分割され、次いで、ＧＰＵ１６により順々に処理されることになる。図３は、イメージ全体を表し、各タイルが特定の幅Ｗと特定の高さＨを有する、いくつかのタイル４４に分割される、ピクセル配列４２の一部を例示している。
【００３０】
ステップＳ２では、ドライバーはＧＰＵ１６のいくつかのパラメータを設定する。これには、例えば、ソースファイル１８で使用されるカラーシステムを識別すること、ＧＰＵをそのカラーシステムに設定すること、ＲＧＢカラーからＣＭＹＫカラーへの変換のために下色除去（ＵＣＲ）係数を指定すること、テクスチャーおよびそのサイズを指定すること、タイプを指定することなどが含まれる。
【００３１】
ステップＳ３では、ソースファイル、閾値マトリックス、およびブラック生成テーブルのデータを含むデータ配列が対応するテクスチャー２８〜３８にバインドされ、その結果、データは直ちにＧＰＵのテクスチャーにアップロードされることができる。
【００３２】
ステップＳ４では、ピクセル配列のＸ方向とＹ方向でブロックのピクセルの数を示すことによってブロックサイズが定義される。ブロックの概念は、ＧＰＵ１６のメモリー階層構造に関係している。各スレッドには、専用のローカルメモリー、同じブロックのすべてのスレッドから可視可能な共有メモリー、およびグローバルメモリーがある。ブロックサイズは、使用可能なメモリーの最適な使用法およびスレッドの最適なメモリーアクセスを考慮して選択される。ブロックは、ＸおよびＹ方向に延びるグリッドに配置される。
【００３３】
ステップＳ５では、グリッドサイズ、すなわち、Ｘ方向およびＹ方向のブロックの数がタイル４４の幅Ｗおよび高さＨ、ならびにステップＳ４で定義されたブロックサイズに基づき計算され、その結果、グリッドはタイル全体をカバーする。
【００３４】
図４は、ブロック４６のオーバーレイグリッドとともにタイル４４の左上隅を示している。この例では、ブロックサイズは１６ｘ４である。各ブロック４６は、一組のＩＤ（Ｂｌｏｃｋ＿ＩＤ＿Ｘ、Ｂｌｏｃｋ＿ＩＤ＿Ｙ）で識別される。同様に、ブロック内のスレッド４８は一組のスレッドＩＤ（Ｔｈｒｅａｄ＿ＩＤ＿Ｘ、Ｔｈｒｅａｄ＿ＩＤ＿Ｙ）で識別される。したがって例えば、図４でハッチングされて示されているスレッド４８はＢｌｏｃｋ＿ＩＤ＿Ｘ＝１、Ｂｌｏｃｋ＿ＩＤ＿Ｙ＝０、Ｔｈｒｅａｄ＿ＩＤ＿Ｘ＝３、およびＴｈｒｅａｄ＿ＩＤ＿Ｙ＝２で識別される。
【００３５】
図２の次のステップはステップＳ６で、ここでは、ＧＰＵカーネルが呼び出されて実行され、それについては、図５に関連して以下で説明される。
【００３６】
イメージ全体がタイルに分割されており、その結果、Ｓ６ではイメージの単一のハーフトーン処理済みタイルとなっている場合には、ステップＳ６の次にステップＳ７が続き、ここでは、カーネルから返された結果が正しいタイル位置の出力ファイル２０に貼り付けられ、その結果、出力イメージ全体は、すべてのタイルが図２で示されている仕方で処理されると直ぐに完成される。
【００３７】
図５では、ステップＳ６で呼び出され、ＧＰＵ１６によって実行されるカーネルの基本的なステップを示している。図５で示される動作は、タイル４４の内、ＧＰＵ１６が同時に処理できるだけのスレッド、理想的にはすべてのスレッド（すなわち、すべてのピクセル）に当てはまる。
【００３８】
ステップＳ６１は、タイル４４を基準としたピクセル位置（ｉｘ、ｉｙ）および入力テクスチャー２８の座標位置（Ｘ、Ｙ）の計算するための機能を果たす。ピクセル位置（ｉｘ、ｉｙ）は整数で付与され、次のように計算される。
ｉｘ＝Ｂｌｏｃｋ＿ＩＤ＿Ｘ＊Ｂｌｏｃｋ＿Ｓｉｚｅ＿Ｘ＋Ｔｈｒｅａｄ＿ＩＤ＿Ｘ
ｉｙ＝Ｂｌｏｃｋ＿ＩＤ＿Ｙ＊Ｂｌｏｃｋ＿Ｓｉｚｅ＿Ｙ＋Ｔｈｒｅａｄ＿ＩＤ＿Ｙ
ここで、Ｂｌｏｃｋ＿Ｓｉｚｅ＿ＸとＢｌｏｃｋ＿Ｓｉｚｅ＿Ｙは、ＸおよびＹ方向のブロック４６の寸法である。したがって、図４のハッチングされたピクセル４８の場合、その結果は、ｉｘ＝１＊１６＋３＝１９、およびｉｙ＝０＊４＋２＝２である。図４で確認することができるように、（ｉｘ、ｉｙ）は、タイルの左上隅からピクセルを計数することにより、ピクセルまたはスレッドの位置を示している。
【００３９】
入力テクスチャー２８を基準としたピクセルの座標の計算は、ソースファイルのカラーシステムおよび入力テクスチャー２８でどのように明度が編成されるかの方法で異なる。
【００４０】
図６では、ＲＧＢカラーシステムのイメージデータを使ってロードされる入力テクスチャー２８の一部を示している。ピクセル位置ｉｘ＝０およびｉｙ＝０の明度Ｒ０、０、Ｇ０、０、およびＢ０、０は、ライン０（すなわち、Ｙ座標の位置０）の最初の３つのｘ座標位置０、１、および２を占める。同様に、他のすべてのピクセルの３つの明度は、ｘ方向の隣接する３つの座標位置に付与される。図６ではさらに、ピクセル位置（ｉｘ、ｉｙ）のスレッドがテクスチャー座標（ｘ、ｙ）上にどのようにマッピングされるかも例示しており、次のとおりである。
ｘ＝３＊ｉｘ＋０．５
ｙ＝ｉｙ＋０．５
【００４１】
「０．５」の加算で、データがテクスチャーのそれぞれのセルの中心からサンプリングされることを確実にする。
【００４２】
図５のステップＳ６２では、図６の式（Ｉ）で例示されているように、明度が入力テクスチャー２８からフェッチされる。この式のｔｅｘｉ（ｘ、ｙ）は、入力テクスチャー２８の座標位置（ｘ、ｙ）から明度をフェッチする関数である。３つの明度（Ｒ、Ｇ、Ｂ）で３つのベクトルを形成し、その成分は入力テクスチャー２８のそれぞれ、座標位置ｘ、ｘ＋１、およびｘ＋２から読み取られる。
【００４３】
図７は、図６に類似した図で、入力テクスチャー２８のデータが、イメージ処理でよく使用される別のシステムである、ＢＧＲカラーシステムの場合を例示している。この場合、各ピクセルの明度Ｂ０、０、Ｇ０、０、Ｒ０、０が入力テクスチャーの隣り合った３つのｘ座標位置に反対の順序で書き込まれる。ステップＳ６２でデータがテクスチャーから読み取られると、そのデータは、図７の式（ＩＩ）で示されているように、ベクトル（Ｒ、Ｇ、Ｂ）の成分がｘ座標位置から読み取られる順序を反転することによって、ＲＧＢシステムに変換される。
【００４４】
図８では、入力テクスチャー２８のデータがＣＭＹＫカラーシステムである場合を例示している。この場合、テクスチャーは、ピクセルごとに４つの明度Ｃ、Ｍ、Ｙ、およびＫを収容するために、係数４でｘ方向に並べられる。したがって明度は、図８の式（ＩＩＩ）で示されているように、テクスチャーから読み取られる４つのベクトル（Ｃ、Ｍ、Ｙ、Ｋ）を形成する。
【００４５】
入力テクスチャー２８のデータがＲＧＢまたはＢＧＲカラーシステムの場合、図５のステップＳ６３でＣＭＹＫシステムに変換する必要がある。この変換は、よく知られているやり方で行われる。例えば、明度が８ビットの単語で付与されている場合には、シアンの明度Ｃを取得するために、最大値２５５からＢを減じる必要がある。明度ＭおよびＹは、同じ方法でそれぞれの補色から計算される。これらすべての減算は、単一のベクトル演算で行われることができる。次いで、ピクセルのグレー値を取得するために、その結果のベクトル（Ｃ、Ｍ、Ｙ）の３つの成分の最小値が検索される。次いで、対応するＫ値（ブラック）がブラック生成テクスチャー３０で調べられる。最終的に、明度Ｃ、Ｍ、およびＹが、Ｋ値（下色除去）の特定のパーセント（ＵＣＲ係数）だけ低減化される。図６の式（ＶＩ）では、これらの演算は、ベクトル（Ｃ、Ｍ、Ｙ、Ｋ）を生じさせるために、ベクトル（Ｒ、Ｇ、Ｂ）に適用される関数ｆによりまとめられており、ここで、関数ｆは、別の引数としてＵＣＲ係数を有しており、ブラック生成テクスチャー３０にバインドされている。
【００４６】
図７のようにソースデータがＢＧＲシステムの場合にも、同じ変換が行われるが、一方、データがすでにＣＭＹＫシステムの場合には（図８）、変換は必要ない。
【００４７】
図５のステップＳ６４では、ピクセルのＣＭＹＫ明度と比較されるために、閾値が閾値テクスチャー３２〜３８からフェッチされる。図９では、例えば、シアンの閾値テクスチャー３２である、閾値テクスチャーの１つの左上隅を示している。図６および図７と同様に、ピクセルごとに３つの閾値Ｔ１、Ｔ２、およびＴ３を収容するために、テクスチャーがｘ方向に係数３によって並べられる。したがって、閾値テクスチャーは、入力テクスチャー２８を指定するために図６および図７で使用されたものと同じ座標（ｘ、ｙ）によって指定されることができる。
【００４８】
しかしながら、閾値テクスチャー３２〜３８のサイズは入力テクスチャー２８のサイズより小さい。その理由は、閾値テクスチャーはイメージ全体またはタイル全体の小さな部分（マクロピクセル）のみをカバーする閾値マトリックスを表すからである。より正確には、各閾値テクスチャーは３つの閾値マトリックスまたは３つの層（それぞれ、閾値Ｔ１、Ｔ２、およびＴ３を示す）を伴う単一の閾値マトリックスを表すものである。図１０で示されているように、タイル４４は、閾値マトリックスのコピーからなる反復型のパターンにより完全にカバーされている。図１０のマトリックス要素は「Ｔ１、１、．．．Ｔｎ、１」、「Ｔ１、ｍ」、「Ｔｎ、ｍ」として示されており、ここで、「Ｔ」は閾値または図９で示されている層Ｔ１、Ｔ２、またはＴ３のいずれかを表す。反復型のパターンは、ピクセルモジュロのｉｘおよびｉｙ座標、それぞれの方向の閾値マトリックスのサイズを取り、次にテクスチャーマトリックス３２〜３８を指定するための結果を使用することにより生成されることができる。ｙ座標の場合、図１０で示しているように、タイル４４を基準として閾値マトリックスのパターンを移動するため、特定の垂直オフセットｖＯが追加される場合がある。
【００４９】
処理されるピクセルの３つの閾値Ｔ１、Ｔ２、およびＴ３をフェッチするため、図６に関連して述べられたものと同様に、閾値テクスチャーがｘ座標位置ｘ、ｘ＋１、およびｘ＋２で読み取られる。
【００５０】
４つすべての閾値テクスチャー３２〜３８も同じように指定されることができる。そのため、ステップＳ６４では最終的に、各カラー成分の３つの閾値を示す３つの４ベクトル（ＴＣ１、ＴＭ１、ＴＹ１、ＴＫ１）、（ＴＣ２、ＴＭ２、ＴＹ２、ＴＫ２）、（ＴＣ３、ＴＭ３、ＴＹ３、ＴＫ３）が生じる。
【００５１】
図５のステップＳ６５では、成分は可能性のある４つの値「０」、「１」、「２」、および「３」の内の１つのみを有する、４ベクトル（ＨＣ、ＨＭ、ＨＹ、ＨＫ）を形成するハーフトーンされた出力明度を取得するために、ピクセルのＣＭＹＫ明度が閾値と比較される。計算は図１１および図１２に示されている。図１１によると、計算は４ベクトル（３、３、３、３）から開始し、次にそれから、それぞれベクトル（Ｃ、Ｍ、Ｙ、Ｋ）と（ＴＣ１、ＴＭ１、ＴＹ１、ＴＫ１）、（Ｃ、Ｍ、Ｙ、Ｋ）と（ＴＣ２、ＴＭ２、ＴＹ２、ＴＫ２）、および（Ｃ、Ｍ、Ｙ、Ｋ）と（ＴＣ３、ＴＭ３、ＴＹ３、ＴＫ３）に適用される（４ベクトル）ステップ関数「ｓｔｅｐ」の結果を減算する。
【００５２】
ステップ関数の結果は図１２に例示されている。ステップ形状グラフ５０では、関数（この例ではＣ成分のみが示されている）の結果がどのようにピクセル位置（ｉｘ、ｉｙ）の明度Ｃに依存しているかを例示している。確認されることができるように、関数では、閾値ＴＣ１により示される位置で、ステップを値「０」から値「１」にする。ステップ関数のＭ、Ｙ、およびＫ成分も類似したやり方で構成される。
【００５３】
したがって、各ステップ関数の出力の成分は、対応する明度が閾値より大きいかどうかに応じて、「０」または「１」のいずれかの値を有している。そのような訳で、図１１で示されている３つの減算ステップは、開始ベクトル（３、３、３、３）の成分「３」が各減算ステップの１つにより低減化される場合の結果も、されない場合の結果もあり、そのため、結果は、「０」、「１」、「２」、および「３」の値の内の１つになる。結果として、ベクトル（ＨＣ、ＨＭ、ＨＹ、ＨＫ）は、タイル４４内の各ピクセルのハーフトーンプロセスの結果として取得される３つのレベルのハーフトーンベクトルである（ｉｘがＷより大きい、またはｉｙがＨより大きいピクセル位置は評価されない）。
【００５４】
ステップＳ６５で取得されたベクトル（ＨＣ、ＨＭ、ＨＹ、ＨＫ）の成分は引き続き、浮動小数点値である。これは、結果を再フォーマットするため、すなわち、４つの出力明度を単一の８ビットの単語に短縮するための最後のステップＳ６６（図５）が適用される理由である。ここで、最初の２ビットはＫ値（「０」、「１」、「２」、または「３」のいずれか）を示し、次の２ビットはＣ値を示し、次の２ビットはＭ値を示し、そして最後の２ビットはＹ値を示している。このフォーマットで、ピクセルごとの結果が出力ファイル２０にダウンロードされる。
【００５５】
上述された例では、入力ピクセル配列の各ピクセルが対応する閾値の組と直接比較されるものとしている。しかしながら変更された実施形態では、入力テクスチャーのピクセルに追加の動作を適用することも可能である。例えば、明度はマクロピクセルにより平均されることもでき、その結果、平均だけが閾値と比較される必要がある。そのような平均化手順は、ＧＰＵ１６上で容易に行われることができ、とりわけ、マクロピクセルとブロックが、同じマクロピクセルに属するスレッドも同じブロックに属するように定義される場合である。
【図１】
0005868863.tif 000002
【図２】
0005868863.tif 000003
【図３】
0005868863.tif 000004
【図４】
0005868863.tif 000005
【図５】
0005868863.tif 000006
【図６】
0005868863.tif 000007
【図７】
0005868863.tif 000008
【図８】
0005868863.tif 000009
【図９】
0005868863.tif 000010
【図１０】
0005868863.tif 000011
【図１１】
0005868863.tif 000012
【図１２】
0005868863.tif 000013