(57)【要約】【課題】演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化すること。【解決手段】画像データのＮライン（Ｎは自然数）目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定し、前記画像データのＮライン目においてｍ画素目の誤差拡散処理が終了した後に、前記画像データのＮ＋１ライン目の誤差拡散処理を開始する制御を行って前記画像データの各ラインについての誤差拡散処理を行う。【選択図】図１
2012134912.tif 000002
【特許請求の範囲】
【請求項１】
画像データを取得する画像データ取得手段と、
前記画像データのＮライン（Ｎは自然数）目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定する遅延画素数特定手段と、
前記画像データのＮライン目においてｍ画素目の誤差拡散処理が終了した後に、前記画像データのＮ＋１ライン目の誤差拡散処理を開始する制御を行って前記画像データの各ラインについての誤差拡散処理を行う誤差拡散処理手段と、
を備える画像処理装置。
【請求項２】
前記誤差拡散処理手段は、複数のプロセッサーを備えるとともに、前記Ｎライン目の誤差拡散処理と前記Ｎ＋１ライン目の誤差拡散処理とは異なるプロセッサーで実行される、
請求項１に記載の画像処理装置。
【請求項３】
前記遅延画素数特定手段は、前記Ｎライン目の誤差拡散処理が最低速で行われ、かつ、前記Ｎ＋１ライン目の誤差拡散処理が最高速で行われた場合であっても、Ｎライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が開始されないように前記ｍを特定する、
請求項１または請求項２のいずれかに記載の画像処理装置。
【請求項４】
前記遅延画素数特定手段は、前記画像データの１ライン分の画素数Ｗと、前記Ｎライン目の座標（ｉ，Ｎ）の画素（ｉは自然数）を着目画素とした場合の前記Ｎ＋１ライン目における誤差の拡散範囲が座標（ｉ−ｂ，Ｎ＋１）から座標（ｉ＋ａ，Ｎ＋１）まで（ａ，ｂは自然数）の範囲である場合におけるｂの最大値Ｌと、画素毎の誤差拡散処理の最短所要時間Ｔminと、画素毎の誤差拡散処理の最長所要時間Ｔmaxと、に基づいて、
（Ｗ−ｍ）×Ｔmax＝（Ｗ−Ｌ−１）×Ｔmin
の関係から前記ｍを特定する、
請求項１〜請求項３のいずれかに記載の画像処理装置。
【請求項５】
前記画像データ取得手段は、矩形の前記画像データを取得し、
前記誤差拡散処理手段は、前記矩形の短辺と前記ラインとを平行に定義し、前記矩形の短辺に平行な方向を前記誤差拡散処理の進行方向とする、
請求項１〜請求項４のいずれかに記載の画像処理装置。
【請求項６】
前記遅延画素数特定手段は、前記ラインを構成する画素の数が少なくなるほど前記ｍを小さくする、
請求項１〜請求項５のいずれかに記載の画像処理装置。
【請求項７】
画像データを取得する画像データ取得工程と、
前記画像データのＮライン（Ｎは自然数）目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定する遅延画素数特定工程と、
前記画像データのＮライン目においてｍ画素目の誤差拡散処理が終了した後に、前記画像データのＮ＋１ライン目の誤差拡散処理を開始する制御を行って前記画像データの各ラインについての誤差拡散処理を行う誤差拡散処理工程と、
を含む画像処理方法。
【請求項８】
画像データを取得する画像データ取得手段と、
前記画像データの隣接する２以上のラインにて構成される処理単位を当該処理単位が並ぶ順に処理対象に設定して各処理単位において画素が並ぶ順に誤差拡散処理を行う場合に、Ｎ番目（Ｎは自然数）に処理対象となる前記処理単位内に存在する画素からの誤差の拡散が未完了である画素であって、Ｎ＋１番目に処理対象となる前記処理単位内に存在する画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定する遅延画素数特定手段と、
Ｎ番目に処理対象となる前記処理単位においてｍ画素目の誤差拡散処理が終了した後に、Ｎ＋１番目に処理対象となる前記処理単位の誤差拡散処理を開始する誤差拡散処理手段と、
を備える画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、誤差拡散処理を行う画像処理装置に関する。
【背景技術】
【０００２】
誤差拡散処理は、多階調の画像データをより少ない階調で表現するために利用され、例えば、画素の階調値を２値化する場合、２値化を行った場合に生じる階調値の誤差を着目画素の周辺の画素に拡散させる処理を画像データの各画素について実行するなどして実現される。当該誤差拡散処理が画像データのライン毎に行われる場合、あるラインの一方端の画素から他方端の画素までのそれぞれを逐次着目画素として誤差を拡散させる処理を行うこととし、当該処理が１ライン目から最終ライン目まで実行されることになる。
【０００３】
この場合、Ｎライン目の着目画素の誤差は、Ｎ＋１ライン目に存在する画素にも拡散される。従って、Ｎ＋１ライン目のある画素に対するＮライン目の誤差の拡散が完了し、それ以後、当該画素に誤差が拡散される可能性がなくなるまで当該画素を着目画素としたＮ＋１ライン目の誤差拡散処理を行うことはできないという制約がある。従来、この制約下において誤差拡散処理を高速に実行するための技術が開発されており、例えば、特許文献１に開示された技術においては、隣接するラインの誤差拡散処理を第１のＣＰＵおよび第２のＣＰＵで実行する並列化を行い、Ｎ＋１ライン目の誤差拡散処理がＮライン目の誤差拡散処理を追い越さないように着目画素の位置関係を画素毎に逐次チェックしながら誤差拡散処理を並列進行させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−１２５１２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の技術においては、Ｎ＋１ライン目の誤差拡散処理がＮライン目の誤差拡散処理を追い越さないように着目画素の位置関係を画素毎に逐次チェックしている。従って、各ラインに存在する全画素について着目画素が変わるたびに当該チェックを行う必要がある。このため、当該チェックのために要する時間は無視できないほど大きく、画素数が増加するほど従来の技術による高速化の効果が減殺されてしまう。また、非常に多くの並列処理を行うプロセッサーにおいては、処理を開始する際に与えられた入力値に基づいて予め決められた処理を行って出力値を得るように演算を行う構成が採用されており、当該演算過程で処理を中断して新たな入力値を与えることができない構成となっている。従って、このようなプロセッサーを複数個用いて、着目画素が変わるたびにライン間の進捗をチェックしながらライン毎の誤差拡散処理を行う構成について完全に並列化しようとしても、一方のプロセッサーの処理の進捗を示す入力値に基づいて他方のプロセッサーの処理の進捗度合いを制御することは不可能であり、現実的には完全に並列化することは不可能である。
本発明は上記課題にかんがみてなされたもので、演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明においては、画像データのＮライン（Ｎは自然数）目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定する。さらに、画像データのＮライン目においてｍ画素目の誤差拡散処理が終了した後に、画像データのＮ＋１ライン目の誤差拡散処理を開始する。すなわち、Ｎライン目の画素からの誤差の拡散が終了していない画素についてはＮ＋１ライン目の誤差拡散が開始されないように、Ｎ＋１ライン目においてはＮライン目に対して一定の画素数ｍだけ遅延したタイミングで誤差拡散処理を開始する構成とした。
【０００７】
この構成によれば、各ラインにおいて共通の画素数ｍだけ誤差拡散処理の開始タイミングを遅延させるのみで、任意の着目画素に対する他の画素からの誤差の拡散が完了する前に当該着目画素における誤差拡散処理が開始されることがないように構成することができる。従って、各ラインに存在する全画素について着目画素が変わるたびにＮ＋１ライン目における誤差拡散処理がＮライン目における誤差拡散処理を追い越すか否かをチェックすることなく、各ラインにおける誤差拡散処理を完了することができる。従って、着目画素が変わるたびにＮ＋１ライン目における誤差拡散処理がＮライン目における誤差拡散処理を追い越すか否かをチェックする構成と比較して誤差拡散処理を高速に実行することができる。また、各ラインの誤差拡散処理を開始した後、他のラインの進捗をチェックすることなく各ラインにおける誤差拡散処理を完了することができる。従って、演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化することが可能である。
【０００８】
ここで、遅延画素数特定手段は、全ラインに共通の画素数ｍだけ誤差拡散処理の開始タイミングがずれることによって、Ｎライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保することができるｍを特定することができればよい。従って、画素数ｍはある画像データにおいて各ラインに共通の値であれば良く、画像データに応じて決定されても良いし、予め決められた固定値であっても良い。また、遅延時間はＮライン目の開始タイミングとＮ＋１ライン目の開始タイミングとの差に相当する時間であれば良く、Ｎライン目の誤差拡散処理をｍ画素分先行させることによって当該遅延時間を確保できればよい。
【０００９】
誤差拡散処理手段は、Ｎ＋１ライン目の誤差拡散処理の開始タイミングをＮライン目よりもｍ画素分遅延させることができればよい。すなわち、各ラインについて共通の遅延を設けて誤差拡散処理を開始し、誤差拡散処理を開始した後には他のラインの進捗に依存して処理を中断することなく誤差拡散処理を進行させることができればよい。誤差拡散処理としては種々の態様の処理を採用可能であり、誤差が拡散される着目画素周辺の画素の数や配置は種々の構成を採用可能である。また、画像データに応じて当該着目画素周辺の画素の数や配置が変動しても良い。
【００１０】
さらに、並列化を利用した高速化を行うための好ましい構成例として、誤差拡散処理手段が複数のプロセッサーを備える構成において、Ｎライン目の誤差拡散処理とＮ＋１ライン目の誤差拡散処理とは異なるプロセッサーで実行される構成としても良い。この構成によれば、隣接するラインの誤差拡散処理が異なるプロセッサーによって実行され、各ラインの誤差拡散処理は隣接する他のラインにおける誤差拡散処理の進捗に依存することなく進行することになる。従って、極めて高速に誤差拡散処理を実行することができる。なお、ここではプロセッサーが複数であれば良く、プロセッサーが３個以上であれば、Ｎ，Ｎ＋１，Ｎ＋２ライン目のそれぞれについての誤差拡散処理が異なるプロセッサーによって実行されるように構成してもよい。
【００１１】
さらに、画素数ｍを特定するため、各ラインにおける誤差拡散処理の速度を利用する構成としても良い。例えば、Ｎライン目の誤差拡散処理が最低速で行われ、かつ、Ｎ＋１ライン目の誤差拡散処理が最高速で行われた場合であっても、Ｎライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が開始されないようにｍを特定する構成としても良い。すなわち、Ｎライン目の誤差拡散処理が最低速で行われ、Ｎ＋１ライン目の誤差拡散処理が最高速で行われた場合に、Ｎ＋１ライン目の誤差拡散処理の進捗とＮライン目の誤差拡散処理の進捗との差が最も早期に減少していくため、この場合であっても誤差拡散処理が追いつかないような画素数ｍを特定すれば、Ｎ＋１ライン目の誤差拡散処理がＮライン目の誤差拡散処理に追いつくことを確実に防止することが可能である。
【００１２】
さらに、Ｎ＋１ライン目の誤差拡散処理がＮライン目の誤差拡散処理に追いつかないようにするための条件は、「Ｎライン目の誤差拡散処理が終了していない画素を着目画素としたときの誤差の拡散範囲に存在するＮ＋１ライン目の画素において誤差拡散処理が開始されないようにする」という条件である。そこで、誤差の拡散範囲を参照して画素数ｍを特定する構成とすることが好ましい。例えば、画像データの１ライン分の画素数Ｗと、Ｎライン目の座標（ｉ，Ｎ）の画素（ｉは自然数）を着目画素とした場合のＮ＋１ライン目における誤差の拡散範囲が座標（ｉ−ｂ，Ｎ＋１）から座標（ｉ＋ａ，Ｎ＋１）まで（ａ，ｂは自然数）の範囲である場合におけるｂの最大値Ｌと、画素毎の誤差拡散処理の最短所要時間Ｔminと、画素毎の誤差拡散処理の最長所要時間Ｔmaxと、に基づいて、（Ｗ−ｍ）×Ｔmax＝（Ｗ−Ｌ−１）×Ｔminの関係からｍを特定する構成としても良い。この構成によれば、Ｎライン目の誤差拡散処理が終了していない画素を着目画素としたときの誤差の拡散範囲に存在するＮ＋１ライン目の画素において誤差拡散処理が開始されないように画素数ｍを特定することができる。なお、誤差の拡散範囲が変動する場合にはｂが変動し、その変動範囲内でのｂの最大値がＬとなり、誤差の拡散範囲が変動しない場合にはｂと最大値Ｌとが等しくなる。
【００１３】
以上の式に示されるように、Ｎライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍは、１ラインを構成する画素数に依存し得る。そこで、矩形の画像データにおいて、矩形の短辺とラインとを平行に定義し、矩形の短辺に平行な方向を誤差拡散処理の進行方向とする構成としても良い。すなわち、長辺方向ではなく短辺方向に誤差拡散処理が進行するように構成することで、ライン間の遅延時間に相当する画素数ｍをできるだけ小さくし、長辺方向に誤差拡散処理が進行する場合よりも高速に処理が実行されるように構成する。
【００１４】
なお、この構成によれば、誤差拡散処理の進行方向が一定の方向（例えば、ｘ，ｙ軸によって構成される２次元直交空間で画像データが定義されている場合のｘ軸方向）に固定されている場合、短辺がｘ軸と平行になるように画像データを回転させることになる。また、画像データの回転が禁止されている場合、誤差拡散処理の進行方向を変更することになる。
【００１５】
さらに、画素数ｍは、ラインを構成する画素の数が少なくなるほど小さくなるように構成されていることが好ましい。すなわち、ラインを構成する画素の数が少なくなるほど、Ｎライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間も短くなる。そこで、ラインを構成する画素の数が少なくなるほど当該遅延時間を確保するための画素数ｍを小さくすればよい。なお、ラインを構成する画素の数に対応する画素数ｍの変化は線形的であっても良いし、非線形的であっても良いし、段階的であっても良く、種々の構成を採用可能である。
【００１６】
さらに、誤差拡散処理の順序としては種々の順序を採用可能であり、ライン毎にラインが延びる方向に処理を進行させる態様と異なる態様で処理を進行させる構成としても良い。例えば、２以上のラインにて構成されるブロックを処理単位とし、処理単位内で画素が並ぶ順に誤差拡散処理を行うこととし、処理単位が並ぶ順に各処理単位を逐次処理対象に設定して画像データの全体についての誤差拡散処理を行う構成を想定可能である。この場合、Ｎ番目（Ｎは自然数）に処理対象となる処理単位内に存在する画素からの誤差の拡散が未完了である画素であって、Ｎ＋１番目に処理対象となる処理単位内に存在する画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定する。そして、Ｎ番目に処理対象となる処理単位においてｍ画素目の誤差拡散処理が終了した後に、Ｎ＋１番目に処理対象となる処理単位の誤差拡散処理を開始する。
【００１７】
この構成によれば、各処理単位において共通の画素数ｍだけ誤差拡散処理の開始タイミングを遅延させるのみで、任意の着目画素に対する他の画素からの誤差の拡散が完了する前に当該着目画素における誤差拡散処理が開始されることがないように構成することができる。従って、各処理単位に存在する全画素について着目画素が変わるたびにＮ＋１番目に処理対象となる処理単位における誤差拡散処理がＮ番目に処理対象となる処理単位における誤差拡散処理を追い越すか否かをチェックすることなく、各処理単位における誤差拡散処理を完了することができる。このため、着目画素が変わるたびにＮ＋１番目に処理対象となる処理単位における誤差拡散処理がＮ番目に処理対象となる処理単位における誤差拡散処理を追い越すか否かをチェックする構成と比較して誤差拡散処理を高速に実行することができる。また、各処理単位の誤差拡散処理を開始した後、他の処理単位の進捗をチェックすることなく各処理単位における誤差拡散処理を完了することができる。従って、演算過程で処理を中断して新たな入力値を与えることができないプロセッサーを利用して誤差拡散処理を高速化することが可能である。なお、ここでは、異なる処理単位内の画素は異なるプロセッサーで誤差拡散処理がなされるように構成することが好ましい。
【００１８】
さらに、本発明のように、各ラインに共通の画素数ｍだけライン間の誤差拡散処理の開始タイミングをずらしておく手法は、プログラムや方法としても適用可能である。また、以上のような装置、プログラム、方法は、単独の装置として実現される場合もあれば、複合的な機能を有する装置において共有の部品を利用して実現される場合もあり、各種の態様を含むものである。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態にかかる画像処理装置のブロック図である。
【図２】（２Ａ），（２Ｂ），（２Ｃ）は画像データの例を示す図である。
【図３】誤差拡散処理のフローチャートである。
【発明を実施するための形態】
【００２０】
ここでは、下記の順序に従って本発明の実施の形態について説明する。
（１−１）画像処理装置の構成：
（１−２）誤差拡散処理：
（２）他の実施形態：
【００２１】
（１−１）画像処理装置の構成：
図１は、コンピューター１０を本発明にかかる画像処理装置として機能させる実施形態を示すブロック図である。コンピューター１０は、ＣＰＵ２０，ＲＡＭ３０，ＲＯＭ４０，ＨＤＤ５０，出力Ｉ／Ｆ６０を備えている。本実施形態において、ＣＰＵ２０は、複数のプロセッサー２０ａ，２０ｂ，，，２０ｎを備えており、ＣＰＵ２０は、コンピューター１０にて実行される処理の主たる制御を行いながら、画像処理等の所定単位の演算をプロセッサー２０ａ，２０ｂ，，，２０ｎに並列的に実行させることができる。なお、本実施形態におけるプロセッサー２０ａ，２０ｂ，，，２０ｎは、処理を開始する際に与えられた入力値に基づいて予め決められたプログラムに従って中断することなく演算処理を行って出力値を得るように構成されており、当該演算処理の過程で演算処理の過程で算出された値以外の新たな入力値を与えることができない構成となっている。
【００２２】
ＣＰＵ２０は、プロセッサー２０ａ，２０ｂ，，，２０ｎを適宜利用しながら、ＲＯＭ４０やＨＤＤ５０に記録されたプログラムを実行することができる。本実施形態においては、このプログラムの一つとして複数のプログラムモジュールから構成された印刷制御プログラムを実行可能であり、当該印刷制御プログラムは誤差拡散処理を実行する誤差拡散処理プログラム２１を備えている。
【００２３】
さらに、コンピューター１０は出力Ｉ／Ｆ６０を介してプリンター７０と接続されており、利用者はＣＰＵ２０に印刷制御プログラムを実行させることによって利用者所望の印刷対象をプリンター７０に印刷させることができる。本実施形態においては、ＨＤＤ５０に画像データ５０ａが記録されており、当該画像データ５０ａを印刷対象としてプリンター７０に画像を印刷させることができる。
【００２４】
印刷制御プログラムは、画像データに対して所定の画像処理を行って印刷データを生成し、当該印刷データをプリンター７０に対して出力する機能をＣＰＵ２０に実行させるプログラムである。本実施形態において、ＣＰＵ２０は、図示しないアプリケーションプログラムにより、ＨＤＤ５０に記録された印刷対象の画像データ５０ａをＲＡＭ３０に画像データ３０ａとして記録し、当該画像データ３０ａを処理対象として利用者が指示した画像処理等を実行する。また、ＣＰＵ２０は、印刷制御プログラムにより、利用者からの印刷指示を受け付け、画像データ３０ａを対象とした印刷処理を実行する。すなわち、ＣＰＵ２０は、画像データ３０ａをＲＡＭ３０から取得して各種の画像処理を行った後に印刷データをプリンター７０に対して転送して印刷を行う。
【００２５】
具体的には、ＣＰＵ２０は、必要に応じてＣＰＵ２０のキャッシュを利用しつつ、画像データ３０ａに基づいて、利用者に指示された解像度で印刷を行うために画素数を調整する補間処理や印刷結果の画質を向上するための画像処理（シャープネス強調処理やコントラスト調整処理等）等の画像調整処理を実行する。さらに、ＣＰＵ２０は、印刷制御プログラムにより、当該画像調整処理が行われた画像データに対して、表色系をＲＧＢ表色系やＹＣＣ表色系からインクの色を色成分としたインク表色系（例えば、ＣＭＹＫ表色系）に変換する色変換処理を実行する。
【００２６】
さらにＣＰＵ２０は、印刷プログラムに含まれる誤差拡散処理プログラム２１により、色変換処理後の画像データの階調数をプリンター７０の階調表現力に応じた階調数に変換する誤差拡散処理を実行する。本実施形態においては、２５６階調の画像データを２階調の画像データに変換する。なお、変換後の画像データにおける階調数はプリンター７０の階調表現力に依存しており、本実施形態においてプリンター７０は画素毎にインクを吐出しない状態とインクを吐出した状態とを形成可能であるため、誤差拡散処理後の階調数が２階調となっている。
【００２７】
さらに、ＣＰＵ２０は、印刷制御プログラムにより、誤差拡散処理後の画像データに基づいて、画素毎のインクの吐出量を特定可能な印刷データを生成し、当該印刷データをプリンター７０に対して出力する。プリンター７０においては、当該印刷データを取得すると、当該印刷データが示す吐出量でインクを吐出して各画素にインクを記録するようにキャリッジ，紙送りローラ、各ノズルのピエゾ素子を駆動して印刷媒体上に画像を印刷する。
【００２８】
（１−２）誤差拡散処理：
本実施形態においては、以上の印刷制御処理において、高速に誤差拡散処理を実行できるように誤差拡散処理プログラム２１が構成されており、以下、当該誤差拡散処理プログラム２１による処理を詳細に説明する。
【００２９】
図２Ａは、誤差拡散対象となる画像データを説明するための模式図である。本実施形態において、誤差拡散対象となる画像データは、インク表色系で表現された画像データであり、色毎に各画素の階調数が２５６階調で表現されたデータである。図２Ａにおいては、ある色の画像データにおける各画素を正方形で示している。同図２Ａに示すように、誤差拡散対象となる画像データは、横方向（ｉ軸方向）にｉm個の画素、縦方向（ｊ軸方向）にｊm個の画素が並んだ直交格子を形成しており、座標（ｉ，ｊ）によって指定される各画素について階調値が対応付けられたデータとなっている。なお、本実施形態においては、このような画像データにおいて、ｊ軸方向の座標値が同一の画素を同一ラインとみなす。
【００３０】
また、誤差拡散処理は、着目画素について比較対象となる階調値（画像データが示す階調値と拡散された誤差との和）と閾値とを比較し、階調値が閾値よりも小さい場合には誤差拡散処理後の階調値を０，階調値が閾値よりも大きい場合には誤差拡散処理後の階調値を１とする処理である。さらに、当該誤差拡散処理後の階調値と比較対象となる階調値との差分（誤差）を着目画素の周辺画素に拡散させることにより、階調数を減じることに伴って生じる誤差が蓄積することを抑制する。
【００３１】
ここで、誤差を拡散させる範囲は適宜調整可能であり、例えば、図２Ａにおいて黒色で示す座標（６，１）の画素が着目画素であり、その周辺においてハッチングで示した画素が周辺画素であるような例を想定可能である。本実施形態においては、誤差拡散処理の対象となる画像データの画素毎の階調値によって誤差の拡散範囲を変化させる方式を採用している。すなわち、画像データに応じて誤差が拡散される範囲が可変である。
【００３２】
さらに、本実施形態においては、１ラインを処理単位とし、各ライン上で横方向に並ぶ各画素を画素が並んでいる順に逐次着目画素に設定して誤差拡散処理を進行させる。すなわち、ｊ座標値をライン番号とみなした場合に同じライン番号で指定される各画素においてｉ座標値が小さい値の画素から順に着目画素に設定し、一つの画素における誤差拡散処理が終了するたびにｉ座標値を"１"大きくして新たな着目画素に設定して誤差拡散処理を行うという手順をｉ座標値がｉmになるまで繰り返す。
【００３３】
本実施形態においては、以上のようなライン毎の誤差拡散処理をライン毎に異なるプロセッサーで実行させる並列処理を行うことによって誤差拡散処理を高速に実行できるように構成している。すなわち、１ライン内に含まれる画素の誤差拡散処理を１つのプロセッサーによって実行し、かつ、Ｎライン目の誤差拡散処理とＮ＋１ライン目の誤差拡散処理とは異なるプロセッサーで実行される構成としている。なお、ここで、Ｎは自然数である。
【００３４】
但し、本実施形態のような誤差拡散処理は、Ｎライン目の画素を着目画素とした場合に算出された誤差を同一ライン上の画素のみならずＮ＋１ライン目の画素にも拡散させるため、Ｎライン目での誤差拡散処理はＮ＋１ライン目での誤差拡散処理よりも所定の画素数だけ先行して実行されなくてはならない。例えば、図２Ａに示す例において、１番目のライン上で黒色で示す座標（６，１）の画素が着目画素であり、その周辺においてハッチングで示した画素が周辺画素である場合、２番目のライン上で座標（３，２）〜座標（８，２）までの画素に誤差が拡散される。従って、座標（６，１）の画素が着目画素となっている誤差拡散処理が終了する以前において座標（２，２）よりもｉ座標値が大きい座標の画素に対する誤差の拡散は未完了であり、比較対象となる階調値は確定していない。従って、座標（６，１）の画素が着目画素となっている誤差拡散処理が終了する以前において、２番目のライン上で座標（２，２）よりもｉ座標値が大きい座標の画素に誤差拡散処理を実行することはできない。
【００３５】
そこで、誤差拡散処理の追い越し（誤差の拡散が未完了の画素に対して誤差拡散処理を実行すること）が発生しないタイミングで各ラインの誤差拡散処理が開始するように構成した。すなわち、画像データのＮライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定する。そして、画像データのＮライン目においてｍ画素目の誤差拡散処理が終了した後に、画像データのＮ＋１ライン目の誤差拡散処理を開始する構成とした。
【００３６】
なお、本実施形態において画素数ｍは各ラインについて共通の値に設定される。すなわち、本実施形態におけるプロセッサー２０ａ，２０ｂ，，，２０ｎは、処理を開始する際に与えられた入力値に基づいて予め決められたプログラムに従って演算処理を行って出力値を得るように構成されており、当該演算処理の過程で演算処理の過程で算出された値以外の新たな入力値を与えることができない構成である。従って、ライン毎に異なるプロセッサーで誤差拡散処理を実行する場合、あるラインの誤差拡散処理の進捗状況が他のラインの誤差拡散処理の進捗状況に依存するように誤差拡散処理の進捗状況を調整することはできない。
【００３７】
そこで、本実施形態においては、予め決められた画素数ｍだけＮライン目がＮ＋１ライン目に対して先行した状態でＮ＋１ライン目の誤差拡散処理を開始するように構成することで、Ｎ＋１ライン目においてＮライン目の進捗状況と無関係に誤差拡散処理を進めた場合であっても、Ｎ＋１ライン目の誤差拡散処理がＮライン目の誤差拡散処理に追いつくことがないように画素数ｍを特定する構成とした。この結果、Ｎライン目の誤差拡散処理の進捗状況をチェックする構成、例えば、着目画素が変わるたびにＮ＋１ライン目における誤差拡散処理がＮライン目における誤差拡散処理を追い越すか否かをチェックする構成と比較して誤差拡散処理を高速に実行することができる。
【００３８】
なお、本実施形態において、画素数ｍは、Ｎライン目の誤差拡散処理が最低速で行われ、かつ、Ｎ＋１ライン目の誤差拡散処理が最高速で行われた場合であっても、Ｎライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が開始されないように特定される。ここで、画素毎の誤差拡散処理の速度は誤差の拡散範囲等に依存するため、画素毎に最低速で誤差拡散処理が行われる場合と画素毎に最高速で誤差拡散処理が行われる場合とが想定可能である。そして、Ｎライン目の全画素において誤差拡散処理が最低速で行われ、Ｎ＋１ライン目の全画素において誤差拡散処理が最高速で行われた場合に、Ｎ＋１ライン目の誤差拡散処理の進捗とＮライン目の誤差拡散処理の進捗との差が最も早期に減少していく。そこで、この場合であっても誤差拡散処理が追いつかないように画素数ｍを特定すれば、Ｎ＋１ライン目の誤差拡散処理がＮライン目の誤差拡散処理に対して追いつくことを確実に防止することが可能である。
【００３９】
このような想定においては、１ラインを構成する画素の数が多くなるほどＮ＋１ライン目の誤差拡散処理がＮライン目の誤差拡散処理に追いつく可能性が高くなるため、１ラインを構成する画素の数が多くなるほどｍが大きくなり、ライン間の遅延時間も長くなる。この結果、ｍが大きくなるほど、プロセッサー２０ａ，２０ｂ，，，２０ｎの１個以上において演算を行わずに待機している期間が長くなる。そこで、本実施形態においては、画像データを回転させることによって１ラインを構成する画素の数を減少させることができる場合には、処理対象の画像データを回転させることで画素数ｍが小さくなるように構成し、誤差拡散処理の総所要時間を抑制するように構成している。
【００４０】
以上のような誤差拡散処理を実行するため、本実施形態にかかる誤差拡散処理プログラム２１は画像データ取得部２１ａと遅延画素数特定部２１ｂと誤差拡散処理部２１ｃとを備えている。画像データ取得部２１ａは、誤差拡散処理の対象となる画像データを取得する機能をＣＰＵ２０に実行させるモジュールである。また、遅延画素数特定部２１ｂは、画像データのＮライン目の画素からの誤差の拡散が未完了であるＮ＋１ライン目の画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するための画素数ｍを特定する機能をＣＰＵ２０に実行させるモジュールである。さらに、誤差拡散処理部２１ｃは、画像データのＮライン目においてｍ画素目の誤差拡散処理が終了した後に、画像データのＮ＋１ライン目の誤差拡散処理を開始する制御を行って画像データの各ラインについての誤差拡散処理を行う機能をＣＰＵ２０およびプロセッサー２０ａ，２０ｂ，，，２０ｎに実行させるモジュールである。
【００４１】
誤差拡散処理において、ＣＰＵ２０は、画像データ取得部２１ａの処理により、ＲＡＭ３０内やＣＰＵ２０のキャッシュ内に記録された誤差拡散処理対象の画像データを取得し、遅延画素数特定部２１ｂや誤差拡散処理部２１ｃ、プロセッサー２０ａ，２０ｂ，，，２０ｎに対して受け渡す。本実施形態においては、このように、画像データ取得部２１ａの処理により、ＣＰＵ２０内の演算主体に画像データが適宜受け渡される状態で、ＣＰＵ２０やプロセッサー２０ａ，２０ｂ，，，２０ｎが、図３に示すフローチャートに従って誤差拡散処理を実行する。
【００４２】
本実施形態においては、ライン毎の誤差拡散処理を開始する前に、誤差拡散処理の対象となる画像データの画素数に基づいて画素数ｍを決定する構成としており、さらに、当該画素数ｍをできるだけ小さい値としてできるだけ高速に誤差拡散処理が実行されるように画像データの向きを調整する構成を採用している。すなわち、ＣＰＵ２０は、図３に示す誤差拡散処理において、まず、誤差拡散処理部２１ｃの処理より、誤差拡散処理対象の画像データの縦方向（図２Ａに示すｊ軸方向）の画素数と横方向（図２Ａに示すｉ軸方向）の画素数を取得し、縦方向の画素数が横方向の画素数よりも少ないか否かを判定する（ステップＳ１００）。
【００４３】
そして、ステップＳ１００にて縦方向の画素数が横方向の画素数よりも少ないと判定された場合、ＣＰＵ２０は、誤差拡散処理部２１ｃの処理により、画像データを９０°回転させる（ステップＳ１０５）。ステップＳ１００にて縦方向の画素数が横方向の画素数よりも少ないと判定されない場合、ステップＳ１０５をスキップする。例えば、図２Ａに示す例において、ｊm＜ｉmの場合、画像データを９０°回転させ、ｊm≧ｉmの場合、画像データを９０°回転させない。
【００４４】
次に、ＣＰＵ２０は、遅延画素数特定部２１ｂの処理により、横方向画素数Ｗと、隣接ラインから逆方向に誤差が拡散される場合の拡散範囲の最大値Ｌと、画素毎の誤差拡散処理の最短所要時間Ｔminと、画素毎の誤差拡散処理の最長所要時間Ｔmaxとを取得する（ステップＳ１１０）。ここで、横方向画素数Ｗは、ｉ軸方向の１ラインを構成する画素の数であり、図２Ａに示す例において画像データが回転されていない場合にはＷ＝ｉm、回転された場合にはＷ＝ｊmとなる。
【００４５】
隣接ラインから逆方向に誤差が拡散される場合の拡散範囲の最大値Ｌは、誤差拡散処理のアルゴリズムによって予め決定される値である。すなわち、本実施形態において、誤差拡散処理で誤差が拡散される拡散範囲は可変の大きさであり、予め拡散範囲を特定することができる。そこで、本実施形態における誤差拡散処理において、採用され得る拡散範囲の中から、隣接ラインから誤差拡散処理の進行方向の逆方向に誤差が拡散される場合の拡散範囲を抽出し、その最大値を特定すれば、上述の最大値Ｌとなる。
【００４６】
例えば、図２Ａにおいて、座標（６，１）が着目画素である場合の誤差の拡散範囲がハッチングを付した周辺画素によって示されているが、当該周辺画素の配置は一例である。すなわち、本実施形態においては、着目画素の階調値に応じて誤差の拡散範囲が動的に変動する。このように誤差の拡散範囲は動的に変動するが、周辺画素の配置パターンは予め決められた配置パターンから選択される。従って、周辺画素の配置パターンの中から拡散範囲が最も広い配置パターンを予め特定可能である。具体的には、図２Ａに示す１ライン目の座標（６，１）の画素から２ライン目の画素に誤差が拡散される得る範囲を座標（６−ｂ，１）〜座標（６＋ａ，Ｎ＋１）（ａ，ｂは自然数）と表記した場合のｂの最大値を最大値Ｌとして特定すればよい。
【００４７】
画素毎の誤差拡散処理の最短所要時間Ｔminと、画素毎の誤差拡散処理の最長所要時間Ｔmaxとは、実測するなどして予め特定しておくことが可能である。すなわち、誤差拡散処理の画素毎の処理速度は、誤差の拡散範囲やプロセッサー２０ａ，２０ｂ，，，２０ｎの構成等に依存して変動する。そこで、誤差拡散処理が最も高速に実行される条件と最も低速に実行される条件とを設定し、それぞれの条件で誤差拡散処理の所要時間を測定すれば、画素毎の誤差拡散処理の最短所要時間Ｔminと、画素毎の誤差拡散処理の最長所要時間Ｔmaxとを特定することができる。以上のように、ステップＳ１１０においては、処理対象の画像データの大きさに依存する横方向画素数Ｗと、予め決められた最大値Ｌと、最短所要時間Ｔminと、最長所要時間Ｔmaxとを取得する。
【００４８】
次に、ＣＰＵ２０は、遅延画素数特定部２１ｂの処理により、横方向画素数Ｗと、最大値Ｌと、最短所要時間Ｔminと、最長所要時間Ｔmaxとに基づいて画素数ｍを取得する（ステップＳ１１５）。すなわち、ＣＰＵ２０は、（Ｗ−ｍ）×Ｔmax＝（Ｗ−Ｌ−１）×Ｔminの関係を満たすように画素数ｍを特定する。図２Ｂにおいては、横方向に合計Ｗ個の画素を備えるＮライン目とＮ＋１ライン目の画像データを示している。この例において、Ｎライン目のｍ画素目の処理が終了した後に、Ｎ＋１ライン目の誤差拡散処理が開始されるため、当該開始後においてＮライン目で誤差拡散処理をすべき画素数は（Ｗ−ｍ）個である。そこで、（Ｗ−ｍ）に画素毎の誤差拡散処理の最長所要時間Ｔmaxを乗じると、Ｎライン目のｍ画素目の誤差拡散処理が終了した後、Ｎライン目の最終画素における誤差拡散処理が終了するまでに最も時間を要する場合の所要時間を得ることができる。
【００４９】
一方、Ｎ＋１ライン目においては、Ｎライン目の最終画素（Ｗ画素目）の誤差拡散処理が終了するまでの間に、Ｎライン目の最終画素から逆方向に誤差が拡散される場合の拡散範囲の最大範囲の隣の画素までであれば誤差拡散処理を実行することができ、この場合の画素数は（Ｗ−Ｌ−１）個になる。そこで、（Ｗ−Ｌ−１）に画素毎の誤差拡散処理の最短所要時間Ｔminを乗じると、Ｎ＋１ライン目の誤差拡散処理が開始された後、Ｎライン目の最終画素からの誤差の拡散範囲の最大範囲の隣の画素における誤差拡散処理が終了するまでに最も短時間で処理を行った場合の所要時間を得ることができる。そこで、これらの所要時間が等しくなるように所要時間を上述の等式で結合し、当該等式を解くことで画素数ｍを特定しておけば、Ｎライン目の誤差拡散処理が最低速で行われ、Ｎ＋１ライン目の誤差拡散処理が最高速で行われた場合であっても、Ｎライン目の誤差拡散処理による誤差の拡散が未完了であるＮ＋１ライン目の画素においてＮ＋１ライン目の誤差拡散処理が開始されないようにｍを特定することができる。
【００５０】
次に、ＣＰＵ２０は、誤差拡散処理部２１ｃの処理により、各プロセッサー２０ａ，２０ｂ，，，２０ｎにライン毎の誤差拡散処理を実行させる。このため、ＣＰＵ２０は、まず、ｊ軸方向に沿ったラインの位置に対応したライン番号を示す変数Ｎを１に設定する（ステップＳ１２０）。次にＣＰＵ２０は、プロセッサー２０ａ，２０ｂ，，，２０ｎの中で、演算処理を実行していないプロセッサーを選択し、Ｎライン目の誤差拡散処理を開始させる（ステップＳ１２５）。なお、最終ラインを除く各ラインにおいては、ｍ画素目の誤差拡散処理が終了した場合にＮライン目においてｍ画素目の誤差拡散処理が終了したことを示すフラグをオンにする。
【００５１】
次に、ＣＰＵ２０は、誤差拡散処理部２１ｃの処理により、Ｎが最終ラインに相当する番号であるか否かを判定する（ステップＳ１３０）。例えば、図２Ａに示す例において画像データが回転されていない場合にはＮ＝ｊmであるか否かを判定する。画像データが回転された場合にはＮ＝ｉmであるか否かを判定する。ステップＳ１３０にて、Ｎが最終ラインに相当する番号であると判定された場合、ＣＰＵ２０による処理は終了する。この場合、各プロセッサーはステップＳ１２５にて処理が開始された誤差拡散処理を最終画素まで実行して処理を終了する。
【００５２】
一方、ステップＳ１３０にて、Ｎが最終ラインに相当する番号であると判定されない場合、ＣＰＵ２０は、誤差拡散処理部２１ｃの処理により、Ｎライン目のｍ画素目の誤差拡散処理が終了するまで待機する（ステップＳ１３５）。すなわち、ＣＰＵ２０は、上述のＮライン目においてｍ画素目の誤差拡散処理が終了したことを示すフラグを監視しており、当該フラグがオンになるまで待機する。
【００５３】
ステップＳ１３５において、Ｎライン目のｍ画素目の誤差拡散処理が終了したと判定された場合、ＣＰＵ２０は、ライン番号を示す変数Ｎをインクリメントし（ステップＳ１４０）、ステップＳ１２５以降の処理を繰り返す。この結果、隣接ライン間で画素数ｍに相当する遅延量の遅延が与えられつつプロセッサー２０ａ，２０ｂ，，，２０ｎによってライン毎の誤差拡散処理が並列的に実行されることになる。
【００５４】
（２）他の実施形態：
以上の実施形態は本発明を実施するための一例であり、各ラインに共通の画素数ｍだけライン間の誤差拡散処理の開始タイミングをずらしておくことができる限りにおいて、他にも種々の実施形態を採用可能である。例えば、誤差拡散処理後の画像データにおける階調数は２階調に限定されず、３以上の階調数としても良い。すなわち、誤差拡散処理後の画像データにおける階調数が、プリンターの階調表現力に対応していれば良く、例えば、プリンターにてインク滴の大きさを３段階に調整可能である場合、プリンターにおいて表現可能な１画素の階調数は４であるため、誤差拡散処理後の画像データの階調数を４とすればよい。
【００５５】
さらに、誤差拡散処理を実行する画像処理装置は、コンピューターによって実現される構成に限定されず、プリンターに内蔵されたＣＰＵ等によって実現されても良い。また、並列化を行うためのプロセッサーの構成も上述の実施形態に限定されず、ＣＰＵと複数のプロセッサーが別体に構成されていてもよいし、複数のプロセッサーが複数の装置に分散配置されていても良い。
【００５６】
さらに、上述の実施形態のような複数のプロセッサーがＣＰＵの制御下に置かれている構成以外にも種々の構成を採用可能であり、同一構成の複数のプロセッサーの一つが処理全体の制御を行い、他のプロセッサーが誤差拡散処理を行う構成としても良い。さらに、ＣＰＵとプロセッサーの役割分担は適宜変更可能であり、例えば、Ｎ＋１ライン目の誤差拡散処理の一環として、当該Ｎ＋１ライン目の誤差拡散処理を実行するプロセッサーがＮライン目のｍ画素目の誤差拡散処理が終了したことを示すフラグを監視する構成としても良く、種々の構成を採用可能である。すなわち、プロセッサーによってあるラインにおいて１画素目の誤差拡散処理を開始した後に他のラインの進捗に依存することなく最終画素まで誤差拡散処理を実行する構成である限りにおいて、種々の構成を採用可能である。
【００５７】
さらに、上述の実施形態においては、誤差拡散処理を実行する前に、横方向の画素数が縦方向の画素数よりも少なくなるように画像データを回転させる構成としたが、画像データを回転させることによって短縮可能な時間が少ない場合や画像データの回転に時間を要する場合には、上述のステップＳ１００，Ｓ１０５を省略しても良い。
【００５８】
さらに、誤差拡散処理は画素が並ぶ順に処理を進行させれば良く、ライン毎に誤差拡散処理を実行する構成と異なる構成を採用することも可能である。例えば、隣接する２以上のラインを処理単位とし、処理単位が並ぶ順に処理対象に設定して各処理単位において画素が並ぶ順に誤差拡散処理を行う構成に本発明を適用することも可能である。図２Ｃは、図２Ａと同様の画像データにおいて隣接する２ラインを処理単位とする場合の例を説明するための説明図である。
【００５９】
すなわち、図２Ｃに示す例においては、１ライン目と２ライン目とが一つの処理単位Ｂ1、３ライン目と４ライン目とが一つの処理単位Ｂ2、５ライン目と６ライン目とが一つの処理単位Ｂ3を構成する。以下、２個のラインが一つの処理単位とされる。そして、処理単位Ｂ1、Ｂ2、Ｂ3が並ぶ順に処理対象に設定されるため、各処理単位Ｂ1、Ｂ2、Ｂ3は上から順に処理対象となる。このような各処理単位において、画素が並ぶ順に誤差拡散処理を行って全画素を逐次着目画素に設定するためには、例えば、処理単位内において縦方向に未処理の画素が存在する間は上から下に向かって縦方向に着目画素を変化させ、縦方向に未処理の画素が存在しなくなった場合に隣接する画素のうち、処理単位内で縦方向の最も上の位置に存在する画素を着目画素とすればよい。図２Ｃに示す例の処理単位Ｂ1であれば、座標（１，１）、座標（１，２）、座標（２，１）、座標（２，２）、、、座標（ｉm，１）、座標（ｉm，２）という順で着目画素となる。
【００６０】
以上の構成においては、Ｎ番目（Ｎは自然数）に処理対象となる処理単位ＢNに存在する画素からの誤差の拡散が未完了である画素であって、Ｎ＋１番目に処理対象となる処理単位ＢN+1内に存在する画素にて誤差拡散処理が行われることを防止するための遅延時間を確保するために画素数ｍを特定する。すなわち、処理単位内の画素数Ｗと、Ｎ番目に処理対象となる処理単位からＮ＋１番目に処理対象となる処理単位に対して誤差が拡散される場合であって、誤差拡散処理の横方向の進行方向に対して逆方向に誤差が拡散される場合の拡散範囲の最大値Ｌと、画素毎の誤差拡散処理の最短所要時間Ｔminと、画素毎の誤差拡散処理の最長所要時間Ｔmaxとに基づいて、（Ｗ−ｍ）×Ｔmax＝（Ｗ−Ｌ−１）×Ｔminの関係を満たすように画素数ｍを特定する。なお、図２Ｃにおいて、座標（６，２）の画素からの誤差の拡散範囲の最大範囲が図２Ｃにハッチングを付して示す範囲である場合、誤差拡散処理の横方向の進行方向はｉ軸方向であるため、誤差拡散処理の横方向の進行方向に対して逆方向に誤差が拡散される場合の拡散範囲の最大値Ｌは３である。
【００６１】
画素数ｍが特定されれば、Ｎ番目に処理対象となる処理単位においてｍ画素目の誤差拡散処理が終了した後に、Ｎ＋１番目に処理対象となる処理単位の誤差拡散処理を開始すればよい。例えば、図２Ｃに示す例において、画素数ｍが１２である場合、処理単位Ｂ1における１２番目の画素である座標（６，２）の誤差拡散処理が終了した後に、処理単位Ｂ2の誤差拡散処理を開始する。なお、以上のような誤差拡散処理において、各処理単位内の画素は異なるプロセッサーで誤差拡散処理が行われるように構成することが好ましい。以上の構成によれば、高速に誤差拡散処理を実行することができる。
【符号の説明】
【００６２】
１０…コンピューター、２０…ＣＰＵ、２０ａ，２０ｂ，，，２０ｎ…プロセッサー、２１…誤差拡散処理プログラム、２１ａ…画像データ取得部、２１ｂ…遅延画素数特定部、２１ｃ…誤差拡散処理部、３０…ＲＡＭ、３０ａ…画像データ、４０…ＲＯＭ、５０…ＨＤＤ、５０ａ…画像データ、６０…出力Ｉ／Ｆ、７０…プリンター
【図１】
2012134912.tif 000003
【図２】
2012134912.tif 000004
【図３】
2012134912.tif 000005