説明

画像処理装置、画像処理方法および画像処理プログラム

【課題】演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化すること。
【解決手段】画像データのNライン(Nは自然数)目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定し、前記画像データのNライン目においてm画素目の誤差拡散処理が終了した後に、前記画像データのN+1ライン目の誤差拡散処理を開始する制御を行って前記画像データの各ラインについての誤差拡散処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、誤差拡散処理を行う画像処理装置に関する。
【背景技術】
【0002】
誤差拡散処理は、多階調の画像データをより少ない階調で表現するために利用され、例えば、画素の階調値を2値化する場合、2値化を行った場合に生じる階調値の誤差を着目画素の周辺の画素に拡散させる処理を画像データの各画素について実行するなどして実現される。当該誤差拡散処理が画像データのライン毎に行われる場合、あるラインの一方端の画素から他方端の画素までのそれぞれを逐次着目画素として誤差を拡散させる処理を行うこととし、当該処理が1ライン目から最終ライン目まで実行されることになる。
【0003】
この場合、Nライン目の着目画素の誤差は、N+1ライン目に存在する画素にも拡散される。従って、N+1ライン目のある画素に対するNライン目の誤差の拡散が完了し、それ以後、当該画素に誤差が拡散される可能性がなくなるまで当該画素を着目画素としたN+1ライン目の誤差拡散処理を行うことはできないという制約がある。従来、この制約下において誤差拡散処理を高速に実行するための技術が開発されており、例えば、特許文献1に開示された技術においては、隣接するラインの誤差拡散処理を第1のCPUおよび第2のCPUで実行する並列化を行い、N+1ライン目の誤差拡散処理がNライン目の誤差拡散処理を追い越さないように着目画素の位置関係を画素毎に逐次チェックしながら誤差拡散処理を並列進行させる技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2000−125122号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1の技術においては、N+1ライン目の誤差拡散処理がNライン目の誤差拡散処理を追い越さないように着目画素の位置関係を画素毎に逐次チェックしている。従って、各ラインに存在する全画素について着目画素が変わるたびに当該チェックを行う必要がある。このため、当該チェックのために要する時間は無視できないほど大きく、画素数が増加するほど従来の技術による高速化の効果が減殺されてしまう。また、非常に多くの並列処理を行うプロセッサーにおいては、処理を開始する際に与えられた入力値に基づいて予め決められた処理を行って出力値を得るように演算を行う構成が採用されており、当該演算過程で処理を中断して新たな入力値を与えることができない構成となっている。従って、このようなプロセッサーを複数個用いて、着目画素が変わるたびにライン間の進捗をチェックしながらライン毎の誤差拡散処理を行う構成について完全に並列化しようとしても、一方のプロセッサーの処理の進捗を示す入力値に基づいて他方のプロセッサーの処理の進捗度合いを制御することは不可能であり、現実的には完全に並列化することは不可能である。
本発明は上記課題にかんがみてなされたもので、演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【0006】
上記目的を達成するため、本発明においては、画像データのNライン(Nは自然数)目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定する。さらに、画像データのNライン目においてm画素目の誤差拡散処理が終了した後に、画像データのN+1ライン目の誤差拡散処理を開始する。すなわち、Nライン目の画素からの誤差の拡散が終了していない画素についてはN+1ライン目の誤差拡散が開始されないように、N+1ライン目においてはNライン目に対して一定の画素数mだけ遅延したタイミングで誤差拡散処理を開始する構成とした。
【0007】
この構成によれば、各ラインにおいて共通の画素数mだけ誤差拡散処理の開始タイミングを遅延させるのみで、任意の着目画素に対する他の画素からの誤差の拡散が完了する前に当該着目画素における誤差拡散処理が開始されることがないように構成することができる。従って、各ラインに存在する全画素について着目画素が変わるたびにN+1ライン目における誤差拡散処理がNライン目における誤差拡散処理を追い越すか否かをチェックすることなく、各ラインにおける誤差拡散処理を完了することができる。従って、着目画素が変わるたびにN+1ライン目における誤差拡散処理がNライン目における誤差拡散処理を追い越すか否かをチェックする構成と比較して誤差拡散処理を高速に実行することができる。また、各ラインの誤差拡散処理を開始した後、他のラインの進捗をチェックすることなく各ラインにおける誤差拡散処理を完了することができる。従って、演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化することが可能である。
【0008】
ここで、遅延画素数特定手段は、全ラインに共通の画素数mだけ誤差拡散処理の開始タイミングがずれることによって、Nライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保することができるmを特定することができればよい。従って、画素数mはある画像データにおいて各ラインに共通の値であれば良く、画像データに応じて決定されても良いし、予め決められた固定値であっても良い。また、遅延時間はNライン目の開始タイミングとN+1ライン目の開始タイミングとの差に相当する時間であれば良く、Nライン目の誤差拡散処理をm画素分先行させることによって当該遅延時間を確保できればよい。
【0009】
誤差拡散処理手段は、N+1ライン目の誤差拡散処理の開始タイミングをNライン目よりもm画素分遅延させることができればよい。すなわち、各ラインについて共通の遅延を設けて誤差拡散処理を開始し、誤差拡散処理を開始した後には他のラインの進捗に依存して処理を中断することなく誤差拡散処理を進行させることができればよい。誤差拡散処理としては種々の態様の処理を採用可能であり、誤差が拡散される着目画素周辺の画素の数や配置は種々の構成を採用可能である。また、画像データに応じて当該着目画素周辺の画素の数や配置が変動しても良い。
【0010】
さらに、並列化を利用した高速化を行うための好ましい構成例として、誤差拡散処理手段が複数のプロセッサーを備える構成において、Nライン目の誤差拡散処理とN+1ライン目の誤差拡散処理とは異なるプロセッサーで実行される構成としても良い。この構成によれば、隣接するラインの誤差拡散処理が異なるプロセッサーによって実行され、各ラインの誤差拡散処理は隣接する他のラインにおける誤差拡散処理の進捗に依存することなく進行することになる。従って、極めて高速に誤差拡散処理を実行することができる。なお、ここではプロセッサーが複数であれば良く、プロセッサーが3個以上であれば、N,N+1,N+2ライン目のそれぞれについての誤差拡散処理が異なるプロセッサーによって実行されるように構成してもよい。
【0011】
さらに、画素数mを特定するため、各ラインにおける誤差拡散処理の速度を利用する構成としても良い。例えば、Nライン目の誤差拡散処理が最低速で行われ、かつ、N+1ライン目の誤差拡散処理が最高速で行われた場合であっても、Nライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が開始されないようにmを特定する構成としても良い。すなわち、Nライン目の誤差拡散処理が最低速で行われ、N+1ライン目の誤差拡散処理が最高速で行われた場合に、N+1ライン目の誤差拡散処理の進捗とNライン目の誤差拡散処理の進捗との差が最も早期に減少していくため、この場合であっても誤差拡散処理が追いつかないような画素数mを特定すれば、N+1ライン目の誤差拡散処理がNライン目の誤差拡散処理に追いつくことを確実に防止することが可能である。
【0012】
さらに、N+1ライン目の誤差拡散処理がNライン目の誤差拡散処理に追いつかないようにするための条件は、「Nライン目の誤差拡散処理が終了していない画素を着目画素としたときの誤差の拡散範囲に存在するN+1ライン目の画素において誤差拡散処理が開始されないようにする」という条件である。そこで、誤差の拡散範囲を参照して画素数mを特定する構成とすることが好ましい。例えば、画像データの1ライン分の画素数Wと、Nライン目の座標(i,N)の画素(iは自然数)を着目画素とした場合のN+1ライン目における誤差の拡散範囲が座標(i−b,N+1)から座標(i+a,N+1)まで(a,bは自然数)の範囲である場合におけるbの最大値Lと、画素毎の誤差拡散処理の最短所要時間Tminと、画素毎の誤差拡散処理の最長所要時間Tmaxと、に基づいて、(W−m)×Tmax=(W−L−1)×Tminの関係からmを特定する構成としても良い。この構成によれば、Nライン目の誤差拡散処理が終了していない画素を着目画素としたときの誤差の拡散範囲に存在するN+1ライン目の画素において誤差拡散処理が開始されないように画素数mを特定することができる。なお、誤差の拡散範囲が変動する場合にはbが変動し、その変動範囲内でのbの最大値がLとなり、誤差の拡散範囲が変動しない場合にはbと最大値Lとが等しくなる。
【0013】
以上の式に示されるように、Nライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mは、1ラインを構成する画素数に依存し得る。そこで、矩形の画像データにおいて、矩形の短辺とラインとを平行に定義し、矩形の短辺に平行な方向を誤差拡散処理の進行方向とする構成としても良い。すなわち、長辺方向ではなく短辺方向に誤差拡散処理が進行するように構成することで、ライン間の遅延時間に相当する画素数mをできるだけ小さくし、長辺方向に誤差拡散処理が進行する場合よりも高速に処理が実行されるように構成する。
【0014】
なお、この構成によれば、誤差拡散処理の進行方向が一定の方向(例えば、x,y軸によって構成される2次元直交空間で画像データが定義されている場合のx軸方向)に固定されている場合、短辺がx軸と平行になるように画像データを回転させることになる。また、画像データの回転が禁止されている場合、誤差拡散処理の進行方向を変更することになる。
【0015】
さらに、画素数mは、ラインを構成する画素の数が少なくなるほど小さくなるように構成されていることが好ましい。すなわち、ラインを構成する画素の数が少なくなるほど、Nライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間も短くなる。そこで、ラインを構成する画素の数が少なくなるほど当該遅延時間を確保するための画素数mを小さくすればよい。なお、ラインを構成する画素の数に対応する画素数mの変化は線形的であっても良いし、非線形的であっても良いし、段階的であっても良く、種々の構成を採用可能である。
【0016】
さらに、誤差拡散処理の順序としては種々の順序を採用可能であり、ライン毎にラインが延びる方向に処理を進行させる態様と異なる態様で処理を進行させる構成としても良い。例えば、2以上のラインにて構成されるブロックを処理単位とし、処理単位内で画素が並ぶ順に誤差拡散処理を行うこととし、処理単位が並ぶ順に各処理単位を逐次処理対象に設定して画像データの全体についての誤差拡散処理を行う構成を想定可能である。この場合、N番目(Nは自然数)に処理対象となる処理単位内に存在する画素からの誤差の拡散が未完了である画素であって、N+1番目に処理対象となる処理単位内に存在する画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定する。そして、N番目に処理対象となる処理単位においてm画素目の誤差拡散処理が終了した後に、N+1番目に処理対象となる処理単位の誤差拡散処理を開始する。
【0017】
この構成によれば、各処理単位において共通の画素数mだけ誤差拡散処理の開始タイミングを遅延させるのみで、任意の着目画素に対する他の画素からの誤差の拡散が完了する前に当該着目画素における誤差拡散処理が開始されることがないように構成することができる。従って、各処理単位に存在する全画素について着目画素が変わるたびにN+1番目に処理対象となる処理単位における誤差拡散処理がN番目に処理対象となる処理単位における誤差拡散処理を追い越すか否かをチェックすることなく、各処理単位における誤差拡散処理を完了することができる。このため、着目画素が変わるたびにN+1番目に処理対象となる処理単位における誤差拡散処理がN番目に処理対象となる処理単位における誤差拡散処理を追い越すか否かをチェックする構成と比較して誤差拡散処理を高速に実行することができる。また、各処理単位の誤差拡散処理を開始した後、他の処理単位の進捗をチェックすることなく各処理単位における誤差拡散処理を完了することができる。従って、演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化することが可能である。なお、ここでは、異なる処理単位内の画素は異なるプロセッサーで誤差拡散処理がなされるように構成することが好ましい。
【0018】
さらに、本発明のように、各ラインに共通の画素数mだけライン間の誤差拡散処理の開始タイミングをずらしておく手法は、プログラムや方法としても適用可能である。また、以上のような装置、プログラム、方法は、単独の装置として実現される場合もあれば、複合的な機能を有する装置において共有の部品を利用して実現される場合もあり、各種の態様を含むものである。
【図面の簡単な説明】
【0019】
【図1】本発明の実施形態にかかる画像処理装置のブロック図である。
【図2】(2A),(2B),(2C)は画像データの例を示す図である。
【図3】誤差拡散処理のフローチャートである。
【発明を実施するための形態】
【0020】
ここでは、下記の順序に従って本発明の実施の形態について説明する。
(1−1)画像処理装置の構成:
(1−2)誤差拡散処理:
(2)他の実施形態:
【0021】
(1−1)画像処理装置の構成:
図1は、コンピューター10を本発明にかかる画像処理装置として機能させる実施形態を示すブロック図である。コンピューター10は、CPU20,RAM30,ROM40,HDD50,出力I/F60を備えている。本実施形態において、CPU20は、複数のプロセッサー20a,20b,,,20nを備えており、CPU20は、コンピューター10にて実行される処理の主たる制御を行いながら、画像処理等の所定単位の演算をプロセッサー20a,20b,,,20nに並列的に実行させることができる。なお、本実施形態におけるプロセッサー20a,20b,,,20nは、処理を開始する際に与えられた入力値に基づいて予め決められたプログラムに従って中断することなく演算処理を行って出力値を得るように構成されており、当該演算処理の過程で演算処理の過程で算出された値以外の新たな入力値を与えることができない構成となっている。
【0022】
CPU20は、プロセッサー20a,20b,,,20nを適宜利用しながら、ROM40やHDD50に記録されたプログラムを実行することができる。本実施形態においては、このプログラムの一つとして複数のプログラムモジュールから構成された印刷制御プログラムを実行可能であり、当該印刷制御プログラムは誤差拡散処理を実行する誤差拡散処理プログラム21を備えている。
【0023】
さらに、コンピューター10は出力I/F60を介してプリンター70と接続されており、利用者はCPU20に印刷制御プログラムを実行させることによって利用者所望の印刷対象をプリンター70に印刷させることができる。本実施形態においては、HDD50に画像データ50aが記録されており、当該画像データ50aを印刷対象としてプリンター70に画像を印刷させることができる。
【0024】
印刷制御プログラムは、画像データに対して所定の画像処理を行って印刷データを生成し、当該印刷データをプリンター70に対して出力する機能をCPU20に実行させるプログラムである。本実施形態において、CPU20は、図示しないアプリケーションプログラムにより、HDD50に記録された印刷対象の画像データ50aをRAM30に画像データ30aとして記録し、当該画像データ30aを処理対象として利用者が指示した画像処理等を実行する。また、CPU20は、印刷制御プログラムにより、利用者からの印刷指示を受け付け、画像データ30aを対象とした印刷処理を実行する。すなわち、CPU20は、画像データ30aをRAM30から取得して各種の画像処理を行った後に印刷データをプリンター70に対して転送して印刷を行う。
【0025】
具体的には、CPU20は、必要に応じてCPU20のキャッシュを利用しつつ、画像データ30aに基づいて、利用者に指示された解像度で印刷を行うために画素数を調整する補間処理や印刷結果の画質を向上するための画像処理(シャープネス強調処理やコントラスト調整処理等)等の画像調整処理を実行する。さらに、CPU20は、印刷制御プログラムにより、当該画像調整処理が行われた画像データに対して、表色系をRGB表色系やYCC表色系からインクの色を色成分としたインク表色系(例えば、CMYK表色系)に変換する色変換処理を実行する。
【0026】
さらにCPU20は、印刷プログラムに含まれる誤差拡散処理プログラム21により、色変換処理後の画像データの階調数をプリンター70の階調表現力に応じた階調数に変換する誤差拡散処理を実行する。本実施形態においては、256階調の画像データを2階調の画像データに変換する。なお、変換後の画像データにおける階調数はプリンター70の階調表現力に依存しており、本実施形態においてプリンター70は画素毎にインクを吐出しない状態とインクを吐出した状態とを形成可能であるため、誤差拡散処理後の階調数が2階調となっている。
【0027】
さらに、CPU20は、印刷制御プログラムにより、誤差拡散処理後の画像データに基づいて、画素毎のインクの吐出量を特定可能な印刷データを生成し、当該印刷データをプリンター70に対して出力する。プリンター70においては、当該印刷データを取得すると、当該印刷データが示す吐出量でインクを吐出して各画素にインクを記録するようにキャリッジ,紙送りローラ、各ノズルのピエゾ素子を駆動して印刷媒体上に画像を印刷する。
【0028】
(1−2)誤差拡散処理:
本実施形態においては、以上の印刷制御処理において、高速に誤差拡散処理を実行できるように誤差拡散処理プログラム21が構成されており、以下、当該誤差拡散処理プログラム21による処理を詳細に説明する。
【0029】
図2Aは、誤差拡散対象となる画像データを説明するための模式図である。本実施形態において、誤差拡散対象となる画像データは、インク表色系で表現された画像データであり、色毎に各画素の階調数が256階調で表現されたデータである。図2Aにおいては、ある色の画像データにおける各画素を正方形で示している。同図2Aに示すように、誤差拡散対象となる画像データは、横方向(i軸方向)にim個の画素、縦方向(j軸方向)にjm個の画素が並んだ直交格子を形成しており、座標(i,j)によって指定される各画素について階調値が対応付けられたデータとなっている。なお、本実施形態においては、このような画像データにおいて、j軸方向の座標値が同一の画素を同一ラインとみなす。
【0030】
また、誤差拡散処理は、着目画素について比較対象となる階調値(画像データが示す階調値と拡散された誤差との和)と閾値とを比較し、階調値が閾値よりも小さい場合には誤差拡散処理後の階調値を0,階調値が閾値よりも大きい場合には誤差拡散処理後の階調値を1とする処理である。さらに、当該誤差拡散処理後の階調値と比較対象となる階調値との差分(誤差)を着目画素の周辺画素に拡散させることにより、階調数を減じることに伴って生じる誤差が蓄積することを抑制する。
【0031】
ここで、誤差を拡散させる範囲は適宜調整可能であり、例えば、図2Aにおいて黒色で示す座標(6,1)の画素が着目画素であり、その周辺においてハッチングで示した画素が周辺画素であるような例を想定可能である。本実施形態においては、誤差拡散処理の対象となる画像データの画素毎の階調値によって誤差の拡散範囲を変化させる方式を採用している。すなわち、画像データに応じて誤差が拡散される範囲が可変である。
【0032】
さらに、本実施形態においては、1ラインを処理単位とし、各ライン上で横方向に並ぶ各画素を画素が並んでいる順に逐次着目画素に設定して誤差拡散処理を進行させる。すなわち、j座標値をライン番号とみなした場合に同じライン番号で指定される各画素においてi座標値が小さい値の画素から順に着目画素に設定し、一つの画素における誤差拡散処理が終了するたびにi座標値を"1"大きくして新たな着目画素に設定して誤差拡散処理を行うという手順をi座標値がimになるまで繰り返す。
【0033】
本実施形態においては、以上のようなライン毎の誤差拡散処理をライン毎に異なるプロセッサーで実行させる並列処理を行うことによって誤差拡散処理を高速に実行できるように構成している。すなわち、1ライン内に含まれる画素の誤差拡散処理を1つのプロセッサーによって実行し、かつ、Nライン目の誤差拡散処理とN+1ライン目の誤差拡散処理とは異なるプロセッサーで実行される構成としている。なお、ここで、Nは自然数である。
【0034】
但し、本実施形態のような誤差拡散処理は、Nライン目の画素を着目画素とした場合に算出された誤差を同一ライン上の画素のみならずN+1ライン目の画素にも拡散させるため、Nライン目での誤差拡散処理はN+1ライン目での誤差拡散処理よりも所定の画素数だけ先行して実行されなくてはならない。例えば、図2Aに示す例において、1番目のライン上で黒色で示す座標(6,1)の画素が着目画素であり、その周辺においてハッチングで示した画素が周辺画素である場合、2番目のライン上で座標(3,2)〜座標(8,2)までの画素に誤差が拡散される。従って、座標(6,1)の画素が着目画素となっている誤差拡散処理が終了する以前において座標(2,2)よりもi座標値が大きい座標の画素に対する誤差の拡散は未完了であり、比較対象となる階調値は確定していない。従って、座標(6,1)の画素が着目画素となっている誤差拡散処理が終了する以前において、2番目のライン上で座標(2,2)よりもi座標値が大きい座標の画素に誤差拡散処理を実行することはできない。
【0035】
そこで、誤差拡散処理の追い越し(誤差の拡散が未完了の画素に対して誤差拡散処理を実行すること)が発生しないタイミングで各ラインの誤差拡散処理が開始するように構成した。すなわち、画像データのNライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定する。そして、画像データのNライン目においてm画素目の誤差拡散処理が終了した後に、画像データのN+1ライン目の誤差拡散処理を開始する構成とした。
【0036】
なお、本実施形態において画素数mは各ラインについて共通の値に設定される。すなわち、本実施形態におけるプロセッサー20a,20b,,,20nは、処理を開始する際に与えられた入力値に基づいて予め決められたプログラムに従って演算処理を行って出力値を得るように構成されており、当該演算処理の過程で演算処理の過程で算出された値以外の新たな入力値を与えることができない構成である。従って、ライン毎に異なるプロセッサーで誤差拡散処理を実行する場合、あるラインの誤差拡散処理の進捗状況が他のラインの誤差拡散処理の進捗状況に依存するように誤差拡散処理の進捗状況を調整することはできない。
【0037】
そこで、本実施形態においては、予め決められた画素数mだけNライン目がN+1ライン目に対して先行した状態でN+1ライン目の誤差拡散処理を開始するように構成することで、N+1ライン目においてNライン目の進捗状況と無関係に誤差拡散処理を進めた場合であっても、N+1ライン目の誤差拡散処理がNライン目の誤差拡散処理に追いつくことがないように画素数mを特定する構成とした。この結果、Nライン目の誤差拡散処理の進捗状況をチェックする構成、例えば、着目画素が変わるたびにN+1ライン目における誤差拡散処理がNライン目における誤差拡散処理を追い越すか否かをチェックする構成と比較して誤差拡散処理を高速に実行することができる。
【0038】
なお、本実施形態において、画素数mは、Nライン目の誤差拡散処理が最低速で行われ、かつ、N+1ライン目の誤差拡散処理が最高速で行われた場合であっても、Nライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が開始されないように特定される。ここで、画素毎の誤差拡散処理の速度は誤差の拡散範囲等に依存するため、画素毎に最低速で誤差拡散処理が行われる場合と画素毎に最高速で誤差拡散処理が行われる場合とが想定可能である。そして、Nライン目の全画素において誤差拡散処理が最低速で行われ、N+1ライン目の全画素において誤差拡散処理が最高速で行われた場合に、N+1ライン目の誤差拡散処理の進捗とNライン目の誤差拡散処理の進捗との差が最も早期に減少していく。そこで、この場合であっても誤差拡散処理が追いつかないように画素数mを特定すれば、N+1ライン目の誤差拡散処理がNライン目の誤差拡散処理に対して追いつくことを確実に防止することが可能である。
【0039】
このような想定においては、1ラインを構成する画素の数が多くなるほどN+1ライン目の誤差拡散処理がNライン目の誤差拡散処理に追いつく可能性が高くなるため、1ラインを構成する画素の数が多くなるほどmが大きくなり、ライン間の遅延時間も長くなる。この結果、mが大きくなるほど、プロセッサー20a,20b,,,20nの1個以上において演算を行わずに待機している期間が長くなる。そこで、本実施形態においては、画像データを回転させることによって1ラインを構成する画素の数を減少させることができる場合には、処理対象の画像データを回転させることで画素数mが小さくなるように構成し、誤差拡散処理の総所要時間を抑制するように構成している。
【0040】
以上のような誤差拡散処理を実行するため、本実施形態にかかる誤差拡散処理プログラム21は画像データ取得部21aと遅延画素数特定部21bと誤差拡散処理部21cとを備えている。画像データ取得部21aは、誤差拡散処理の対象となる画像データを取得する機能をCPU20に実行させるモジュールである。また、遅延画素数特定部21bは、画像データのNライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定する機能をCPU20に実行させるモジュールである。さらに、誤差拡散処理部21cは、画像データのNライン目においてm画素目の誤差拡散処理が終了した後に、画像データのN+1ライン目の誤差拡散処理を開始する制御を行って画像データの各ラインについての誤差拡散処理を行う機能をCPU20およびプロセッサー20a,20b,,,20nに実行させるモジュールである。
【0041】
誤差拡散処理において、CPU20は、画像データ取得部21aの処理により、RAM30内やCPU20のキャッシュ内に記録された誤差拡散処理対象の画像データを取得し、遅延画素数特定部21bや誤差拡散処理部21c、プロセッサー20a,20b,,,20nに対して受け渡す。本実施形態においては、このように、画像データ取得部21aの処理により、CPU20内の演算主体に画像データが適宜受け渡される状態で、CPU20やプロセッサー20a,20b,,,20nが、図3に示すフローチャートに従って誤差拡散処理を実行する。
【0042】
本実施形態においては、ライン毎の誤差拡散処理を開始する前に、誤差拡散処理の対象となる画像データの画素数に基づいて画素数mを決定する構成としており、さらに、当該画素数mをできるだけ小さい値としてできるだけ高速に誤差拡散処理が実行されるように画像データの向きを調整する構成を採用している。すなわち、CPU20は、図3に示す誤差拡散処理において、まず、誤差拡散処理部21cの処理より、誤差拡散処理対象の画像データの縦方向(図2Aに示すj軸方向)の画素数と横方向(図2Aに示すi軸方向)の画素数を取得し、縦方向の画素数が横方向の画素数よりも少ないか否かを判定する(ステップS100)。
【0043】
そして、ステップS100にて縦方向の画素数が横方向の画素数よりも少ないと判定された場合、CPU20は、誤差拡散処理部21cの処理により、画像データを90°回転させる(ステップS105)。ステップS100にて縦方向の画素数が横方向の画素数よりも少ないと判定されない場合、ステップS105をスキップする。例えば、図2Aに示す例において、jm<imの場合、画像データを90°回転させ、jm≧imの場合、画像データを90°回転させない。
【0044】
次に、CPU20は、遅延画素数特定部21bの処理により、横方向画素数Wと、隣接ラインから逆方向に誤差が拡散される場合の拡散範囲の最大値Lと、画素毎の誤差拡散処理の最短所要時間Tminと、画素毎の誤差拡散処理の最長所要時間Tmaxとを取得する(ステップS110)。ここで、横方向画素数Wは、i軸方向の1ラインを構成する画素の数であり、図2Aに示す例において画像データが回転されていない場合にはW=im、回転された場合にはW=jmとなる。
【0045】
隣接ラインから逆方向に誤差が拡散される場合の拡散範囲の最大値Lは、誤差拡散処理のアルゴリズムによって予め決定される値である。すなわち、本実施形態において、誤差拡散処理で誤差が拡散される拡散範囲は可変の大きさであり、予め拡散範囲を特定することができる。そこで、本実施形態における誤差拡散処理において、採用され得る拡散範囲の中から、隣接ラインから誤差拡散処理の進行方向の逆方向に誤差が拡散される場合の拡散範囲を抽出し、その最大値を特定すれば、上述の最大値Lとなる。
【0046】
例えば、図2Aにおいて、座標(6,1)が着目画素である場合の誤差の拡散範囲がハッチングを付した周辺画素によって示されているが、当該周辺画素の配置は一例である。すなわち、本実施形態においては、着目画素の階調値に応じて誤差の拡散範囲が動的に変動する。このように誤差の拡散範囲は動的に変動するが、周辺画素の配置パターンは予め決められた配置パターンから選択される。従って、周辺画素の配置パターンの中から拡散範囲が最も広い配置パターンを予め特定可能である。具体的には、図2Aに示す1ライン目の座標(6,1)の画素から2ライン目の画素に誤差が拡散される得る範囲を座標(6−b,1)〜座標(6+a,N+1)(a,bは自然数)と表記した場合のbの最大値を最大値Lとして特定すればよい。
【0047】
画素毎の誤差拡散処理の最短所要時間Tminと、画素毎の誤差拡散処理の最長所要時間Tmaxとは、実測するなどして予め特定しておくことが可能である。すなわち、誤差拡散処理の画素毎の処理速度は、誤差の拡散範囲やプロセッサー20a,20b,,,20nの構成等に依存して変動する。そこで、誤差拡散処理が最も高速に実行される条件と最も低速に実行される条件とを設定し、それぞれの条件で誤差拡散処理の所要時間を測定すれば、画素毎の誤差拡散処理の最短所要時間Tminと、画素毎の誤差拡散処理の最長所要時間Tmaxとを特定することができる。以上のように、ステップS110においては、処理対象の画像データの大きさに依存する横方向画素数Wと、予め決められた最大値Lと、最短所要時間Tminと、最長所要時間Tmaxとを取得する。
【0048】
次に、CPU20は、遅延画素数特定部21bの処理により、横方向画素数Wと、最大値Lと、最短所要時間Tminと、最長所要時間Tmaxとに基づいて画素数mを取得する(ステップS115)。すなわち、CPU20は、(W−m)×Tmax=(W−L−1)×Tminの関係を満たすように画素数mを特定する。図2Bにおいては、横方向に合計W個の画素を備えるNライン目とN+1ライン目の画像データを示している。この例において、Nライン目のm画素目の処理が終了した後に、N+1ライン目の誤差拡散処理が開始されるため、当該開始後においてNライン目で誤差拡散処理をすべき画素数は(W−m)個である。そこで、(W−m)に画素毎の誤差拡散処理の最長所要時間Tmaxを乗じると、Nライン目のm画素目の誤差拡散処理が終了した後、Nライン目の最終画素における誤差拡散処理が終了するまでに最も時間を要する場合の所要時間を得ることができる。
【0049】
一方、N+1ライン目においては、Nライン目の最終画素(W画素目)の誤差拡散処理が終了するまでの間に、Nライン目の最終画素から逆方向に誤差が拡散される場合の拡散範囲の最大範囲の隣の画素までであれば誤差拡散処理を実行することができ、この場合の画素数は(W−L−1)個になる。そこで、(W−L−1)に画素毎の誤差拡散処理の最短所要時間Tminを乗じると、N+1ライン目の誤差拡散処理が開始された後、Nライン目の最終画素からの誤差の拡散範囲の最大範囲の隣の画素における誤差拡散処理が終了するまでに最も短時間で処理を行った場合の所要時間を得ることができる。そこで、これらの所要時間が等しくなるように所要時間を上述の等式で結合し、当該等式を解くことで画素数mを特定しておけば、Nライン目の誤差拡散処理が最低速で行われ、N+1ライン目の誤差拡散処理が最高速で行われた場合であっても、Nライン目の誤差拡散処理による誤差の拡散が未完了であるN+1ライン目の画素においてN+1ライン目の誤差拡散処理が開始されないようにmを特定することができる。
【0050】
次に、CPU20は、誤差拡散処理部21cの処理により、各プロセッサー20a,20b,,,20nにライン毎の誤差拡散処理を実行させる。このため、CPU20は、まず、j軸方向に沿ったラインの位置に対応したライン番号を示す変数Nを1に設定する(ステップS120)。次にCPU20は、プロセッサー20a,20b,,,20nの中で、演算処理を実行していないプロセッサーを選択し、Nライン目の誤差拡散処理を開始させる(ステップS125)。なお、最終ラインを除く各ラインにおいては、m画素目の誤差拡散処理が終了した場合にNライン目においてm画素目の誤差拡散処理が終了したことを示すフラグをオンにする。
【0051】
次に、CPU20は、誤差拡散処理部21cの処理により、Nが最終ラインに相当する番号であるか否かを判定する(ステップS130)。例えば、図2Aに示す例において画像データが回転されていない場合にはN=jmであるか否かを判定する。画像データが回転された場合にはN=imであるか否かを判定する。ステップS130にて、Nが最終ラインに相当する番号であると判定された場合、CPU20による処理は終了する。この場合、各プロセッサーはステップS125にて処理が開始された誤差拡散処理を最終画素まで実行して処理を終了する。
【0052】
一方、ステップS130にて、Nが最終ラインに相当する番号であると判定されない場合、CPU20は、誤差拡散処理部21cの処理により、Nライン目のm画素目の誤差拡散処理が終了するまで待機する(ステップS135)。すなわち、CPU20は、上述のNライン目においてm画素目の誤差拡散処理が終了したことを示すフラグを監視しており、当該フラグがオンになるまで待機する。
【0053】
ステップS135において、Nライン目のm画素目の誤差拡散処理が終了したと判定された場合、CPU20は、ライン番号を示す変数Nをインクリメントし(ステップS140)、ステップS125以降の処理を繰り返す。この結果、隣接ライン間で画素数mに相当する遅延量の遅延が与えられつつプロセッサー20a,20b,,,20nによってライン毎の誤差拡散処理が並列的に実行されることになる。
【0054】
(2)他の実施形態:
以上の実施形態は本発明を実施するための一例であり、各ラインに共通の画素数mだけライン間の誤差拡散処理の開始タイミングをずらしておくことができる限りにおいて、他にも種々の実施形態を採用可能である。例えば、誤差拡散処理後の画像データにおける階調数は2階調に限定されず、3以上の階調数としても良い。すなわち、誤差拡散処理後の画像データにおける階調数が、プリンターの階調表現力に対応していれば良く、例えば、プリンターにてインク滴の大きさを3段階に調整可能である場合、プリンターにおいて表現可能な1画素の階調数は4であるため、誤差拡散処理後の画像データの階調数を4とすればよい。
【0055】
さらに、誤差拡散処理を実行する画像処理装置は、コンピューターによって実現される構成に限定されず、プリンターに内蔵されたCPU等によって実現されても良い。また、並列化を行うためのプロセッサーの構成も上述の実施形態に限定されず、CPUと複数のプロセッサーが別体に構成されていてもよいし、複数のプロセッサーが複数の装置に分散配置されていても良い。
【0056】
さらに、上述の実施形態のような複数のプロセッサーがCPUの制御下に置かれている構成以外にも種々の構成を採用可能であり、同一構成の複数のプロセッサーの一つが処理全体の制御を行い、他のプロセッサーが誤差拡散処理を行う構成としても良い。さらに、CPUとプロセッサーの役割分担は適宜変更可能であり、例えば、N+1ライン目の誤差拡散処理の一環として、当該N+1ライン目の誤差拡散処理を実行するプロセッサーがNライン目のm画素目の誤差拡散処理が終了したことを示すフラグを監視する構成としても良く、種々の構成を採用可能である。すなわち、プロセッサーによってあるラインにおいて1画素目の誤差拡散処理を開始した後に他のラインの進捗に依存することなく最終画素まで誤差拡散処理を実行する構成である限りにおいて、種々の構成を採用可能である。
【0057】
さらに、上述の実施形態においては、誤差拡散処理を実行する前に、横方向の画素数が縦方向の画素数よりも少なくなるように画像データを回転させる構成としたが、画像データを回転させることによって短縮可能な時間が少ない場合や画像データの回転に時間を要する場合には、上述のステップS100,S105を省略しても良い。
【0058】
さらに、誤差拡散処理は画素が並ぶ順に処理を進行させれば良く、ライン毎に誤差拡散処理を実行する構成と異なる構成を採用することも可能である。例えば、隣接する2以上のラインを処理単位とし、処理単位が並ぶ順に処理対象に設定して各処理単位において画素が並ぶ順に誤差拡散処理を行う構成に本発明を適用することも可能である。図2Cは、図2Aと同様の画像データにおいて隣接する2ラインを処理単位とする場合の例を説明するための説明図である。
【0059】
すなわち、図2Cに示す例においては、1ライン目と2ライン目とが一つの処理単位B1、3ライン目と4ライン目とが一つの処理単位B2、5ライン目と6ライン目とが一つの処理単位B3を構成する。以下、2個のラインが一つの処理単位とされる。そして、処理単位B1、B2、B3が並ぶ順に処理対象に設定されるため、各処理単位B1、B2、B3は上から順に処理対象となる。このような各処理単位において、画素が並ぶ順に誤差拡散処理を行って全画素を逐次着目画素に設定するためには、例えば、処理単位内において縦方向に未処理の画素が存在する間は上から下に向かって縦方向に着目画素を変化させ、縦方向に未処理の画素が存在しなくなった場合に隣接する画素のうち、処理単位内で縦方向の最も上の位置に存在する画素を着目画素とすればよい。図2Cに示す例の処理単位B1であれば、座標(1,1)、座標(1,2)、座標(2,1)、座標(2,2)、、、座標(im,1)、座標(im,2)という順で着目画素となる。
【0060】
以上の構成においては、N番目(Nは自然数)に処理対象となる処理単位BNに存在する画素からの誤差の拡散が未完了である画素であって、N+1番目に処理対象となる処理単位BN+1内に存在する画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するために画素数mを特定する。すなわち、処理単位内の画素数Wと、N番目に処理対象となる処理単位からN+1番目に処理対象となる処理単位に対して誤差が拡散される場合であって、誤差拡散処理の横方向の進行方向に対して逆方向に誤差が拡散される場合の拡散範囲の最大値Lと、画素毎の誤差拡散処理の最短所要時間Tminと、画素毎の誤差拡散処理の最長所要時間Tmaxとに基づいて、(W−m)×Tmax=(W−L−1)×Tminの関係を満たすように画素数mを特定する。なお、図2Cにおいて、座標(6,2)の画素からの誤差の拡散範囲の最大範囲が図2Cにハッチングを付して示す範囲である場合、誤差拡散処理の横方向の進行方向はi軸方向であるため、誤差拡散処理の横方向の進行方向に対して逆方向に誤差が拡散される場合の拡散範囲の最大値Lは3である。
【0061】
画素数mが特定されれば、N番目に処理対象となる処理単位においてm画素目の誤差拡散処理が終了した後に、N+1番目に処理対象となる処理単位の誤差拡散処理を開始すればよい。例えば、図2Cに示す例において、画素数mが12である場合、処理単位B1における12番目の画素である座標(6,2)の誤差拡散処理が終了した後に、処理単位B2の誤差拡散処理を開始する。なお、以上のような誤差拡散処理において、各処理単位内の画素は異なるプロセッサーで誤差拡散処理が行われるように構成することが好ましい。以上の構成によれば、高速に誤差拡散処理を実行することができる。
【符号の説明】
【0062】
10…コンピューター、20…CPU、20a,20b,,,20n…プロセッサー、21…誤差拡散処理プログラム、21a…画像データ取得部、21b…遅延画素数特定部、21c…誤差拡散処理部、30…RAM、30a…画像データ、40…ROM、50…HDD、50a…画像データ、60…出力I/F、70…プリンター

【特許請求の範囲】
【請求項1】
画像データを取得する画像データ取得手段と、
前記画像データのNライン(Nは自然数)目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定する遅延画素数特定手段と、
前記画像データのNライン目においてm画素目の誤差拡散処理が終了した後に、前記画像データのN+1ライン目の誤差拡散処理を開始する制御を行って前記画像データの各ラインについての誤差拡散処理を行う誤差拡散処理手段と、
を備える画像処理装置。
【請求項2】
前記誤差拡散処理手段は、複数のプロセッサーを備えるとともに、前記Nライン目の誤差拡散処理と前記N+1ライン目の誤差拡散処理とは異なるプロセッサーで実行される、
請求項1に記載の画像処理装置。
【請求項3】
前記遅延画素数特定手段は、前記Nライン目の誤差拡散処理が最低速で行われ、かつ、前記N+1ライン目の誤差拡散処理が最高速で行われた場合であっても、Nライン目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が開始されないように前記mを特定する、
請求項1または請求項2のいずれかに記載の画像処理装置。
【請求項4】
前記遅延画素数特定手段は、前記画像データの1ライン分の画素数Wと、前記Nライン目の座標(i,N)の画素(iは自然数)を着目画素とした場合の前記N+1ライン目における誤差の拡散範囲が座標(i−b,N+1)から座標(i+a,N+1)まで(a,bは自然数)の範囲である場合におけるbの最大値Lと、画素毎の誤差拡散処理の最短所要時間Tminと、画素毎の誤差拡散処理の最長所要時間Tmaxと、に基づいて、
(W−m)×Tmax=(W−L−1)×Tmin
の関係から前記mを特定する、
請求項1〜請求項3のいずれかに記載の画像処理装置。
【請求項5】
前記画像データ取得手段は、矩形の前記画像データを取得し、
前記誤差拡散処理手段は、前記矩形の短辺と前記ラインとを平行に定義し、前記矩形の短辺に平行な方向を前記誤差拡散処理の進行方向とする、
請求項1〜請求項4のいずれかに記載の画像処理装置。
【請求項6】
前記遅延画素数特定手段は、前記ラインを構成する画素の数が少なくなるほど前記mを小さくする、
請求項1〜請求項5のいずれかに記載の画像処理装置。
【請求項7】
画像データを取得する画像データ取得工程と、
前記画像データのNライン(Nは自然数)目の画素からの誤差の拡散が未完了であるN+1ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定する遅延画素数特定工程と、
前記画像データのNライン目においてm画素目の誤差拡散処理が終了した後に、前記画像データのN+1ライン目の誤差拡散処理を開始する制御を行って前記画像データの各ラインについての誤差拡散処理を行う誤差拡散処理工程と、
を含む画像処理方法。
【請求項8】
画像データを取得する画像データ取得手段と、
前記画像データの隣接する2以上のラインにて構成される処理単位を当該処理単位が並ぶ順に処理対象に設定して各処理単位において画素が並ぶ順に誤差拡散処理を行う場合に、N番目(Nは自然数)に処理対象となる前記処理単位内に存在する画素からの誤差の拡散が未完了である画素であって、N+1番目に処理対象となる前記処理単位内に存在する画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数mを特定する遅延画素数特定手段と、
N番目に処理対象となる前記処理単位においてm画素目の誤差拡散処理が終了した後に、N+1番目に処理対象となる前記処理単位の誤差拡散処理を開始する誤差拡散処理手段と、
を備える画像処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate


【公開番号】特開2012−134912(P2012−134912A)
【公開日】平成24年7月12日(2012.7.12)
【国際特許分類】
【出願番号】特願2010−287191(P2010−287191)
【出願日】平成22年12月24日(2010.12.24)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】