説明

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

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

【図4】
image rotate

【図5】
image rotate


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