(57)【特許請求の範囲】
【請求項１】
誤差拡散演算器を内蔵したデータ駆動型演算装置において、
前記誤差拡散演算器外に設けられ、ラインの上から下へ、そして左から右へ１画素ずつ演算対象画素を逐次移動させて隣接する次の演算対象画素を含む周辺画素に対して行なう前記誤差拡散演算器による誤差拡散演算処理により画素の誤差情報の格納および更新を行う誤差データ用メモリと、
前記誤差データ用メモリのアクセスを行うアクセス部とを備え、
前記誤差拡散演算器は、
前記誤差拡散演算器に内蔵され、画素の誤差情報のうち同一ラインの逐次移動させて演算対象となる周辺画素に対して拡散すべき値の格納および更新を連続して行う誤差保存用レジスタと、
第１の演算対象画素に対して、前記誤差データ用メモリから読み出された前記画素の誤差情報および前記誤差保存用レジスタの前記拡散すべき値に基いて、所定の誤差演算処理を実行するととともに前記第１の演算対象画素と同一ラインの隣接する第２の演算対象画素に対して、前記誤差データ用メモリから読み出された前記画素の誤差情報および前記第１の演算対象画素における演算結果に基いて、所定の誤差演算処理を並列処理して、次の２つずつの演算対象画素に対する所定の誤差演算処理するための拡散すべき値を前記誤差保存用レジスタに出力するとともに、次のラインの演算対象画素に対する誤差演算処理のための誤差情報を前記誤差データ用メモリに出力するための複数の演算器とを含み、
前記第１および第２の演算対象画素に対応する前記誤差情報や前記拡散すべき値を同一のパケット内に格納し、前記アクセス部と、前記誤差拡散演算器とを巡回させて演算処理を行うことを特徴とする、誤差拡散演算装置。
【請求項２】
前記誤差拡散演算器は、演算対象画素がラインの最初に位置するとき、前記誤差保存用レジスタの内容をクリアすることを特徴とする、請求項１に記載の誤差拡散演算装置。
【請求項３】
前記誤差拡散演算器は、演算対象画素が画面の最上位ラインにあるとき、前記誤差データ用メモリからの読み込みを行わないことを特徴とする、請求項１または２に記載の誤差拡散演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は誤差拡散演算装置に関し、特に、データ駆動型演算装置を用いて誤差拡散のための演算を行うような誤差拡散演算装置に関する。
【０００２】
【従来の技術】
誤差拡散は、ファクシミリ装置など、プリンタやディスプレイなどの表示装置の画像の量子化レベルが少なく、そのままの量子化レベルで画像の取込から処理，出力までを行なうと中間調を表現できないときに必要とされる技術である。言い換えれば、読込装置からの入力時よりも表示装置やプリンタなどの出力装置の方が量子化レベルが少ないときに用いられる。さらに、具体的にいえば、読込装置が多値、たとえば８ビットのＡ／Ｄ変換装置を有していても、表示装置が２値表示など、読込画像よりの量子化レベルを減少させる場合に必要な技術である。
【０００３】
このように、多値から２値に量子化レベルを減少させる場合には、多値画像の持つ中間調が失われ、連続性がなくなる可能性がある。誤差拡散は、多値の画像が持つ連続性を擬似的に表現する手法である。逆にいえば出力装置の量子化レベルが少なくても、この技術を用いることにより、擬似的な中間調を表現できるので、読込装置の量子化レベルを多くすることで、出力装置はそのままでよりよい画像を得ることができる。
【０００４】
図１０は誤差拡散の処理を説明するための図である。図１０（ａ）および（ｂ）において、マス目が各画素を表わし、◎で表わしているマス目が対象画素である。このとき、画像の上から下へ、またラインの左から右へ量子化するものとする。図１０では、斜線のマス目が量子化済みを表わしており、図１０（ａ）から（ｂ）では、１画素だけ左へ量子化が進んだことを示している。ここで説明する誤差拡散の方式は、対象画素の量子化誤差を、量子化が終わっていない周辺４画素に特定の比率ａｂｃｄを掛けて分配（＝拡散）するものである。図１０（ａ）と（ｂ）に示すように、量子化が終わった画素の誤差を、順次量子化が終わっていない画素に拡散させることにより、処理は１画素ずつ順番に行なう必要がある。すなわち、逐次処理となる。誤差拡散は各誤差に対して逐次処理を行なう必要がある上に、画像が送られてくる速度で処理を終える実時間処理が必要となる。すなわち、高速に逐次処理を行なう必要がある。これらの課題を解決するために、以下の従来例が知られている。
【０００５】
まず、第１の従来例として、特開平５−７５８６３号公報に記載されている信号処理装置がある。この信号処理装置では、隣接する画素を並列的に２値化する手段と、その誤差発生手段および誤差を平均化するフィルタを備えている。これにより、バッファメモリを削減でき、また２値化誤差のビット数を減らし、または複数画素をまとめて平均値を保存することができる。この従来例の効果は、メモリ領域の削減とともに、メモリアクセス回数を減らすことができ、高速化できることにある。しかし、問題点は誤差拡散処理のアルゴリズムを特化しているため、要求仕様とマッチしていないときは、使用できないことである。
【０００６】
第２の従来例として、特開平６−２６６３２４号公報に記載された画像処理方法および装置がある。この従来例では、走査ラインごとに２値化と誤差拡散を行ない、誤差データの次段への誤差データ格納メモリを備えることにより、複数の走査ラインごとに並列して誤差拡散命令を実行する。この例の効果は、誤差拡散の演算装置を並列に持ち、演算装置間で伝搬させる誤差データのパスを設けて並列性を確保することによりほぼ並列演算を実行できることである。しかし、問題点は、誤差拡散の演算装置を並列に持っているため、その並列個数分の回路と、演算装置間を結ぶ回路が＋αとして回路の増加につながることである。
【０００７】
第３の従来例として、特開平６−３０１３６４号公報に記載されているブロック並列誤差拡散方法と装置がある。この例では、入力画像を複数のブロックに分割してブロックごとに誤差拡散処理を行ない、ブロックの境界に対しては別途処理することにより高速の並列処理を実現しようとするものである。そして、その効果は第２の従来例と同様にして回路を並列に持っているために、回路規模に比例して演算速度を向上させることができることにある。しかし、問題点も第２の従来例と同様にして、並列個数に比例して回路規模が大きくなってしまうことである。
【０００８】
第４の従来例として、特開平７−２０８３９号公報に記載された並列誤差拡散方法および装置がある。この例では複数の誤差拡散回路を持つことにより、個々の回路の速度を上げることなく全体の速度の向上を図ろうとするものである。この例も第２および第３の従来例と同様の効果と問題点を持っている。
【０００９】
第５の従来例として、特開平８−３１７２１１号公報に記載された画像処理装置がある。この例では、１ラスタ分の画像データを取込み、周辺４画素のデータにアクセスできる１ラスタ分の個数の並列演算器で処理するものである。この演算器は、誤差拡散専用演算器でないために、この処理のために回路を増加させる必要はないものの、１ラスタ分の画像を取込み、それらを並列に処理するための回路規模が必要になってくる。
【００１０】
第６の従来例として、特開平１０−３３４２３１号公報に記載されたハーフトーン処理方法がある。この例では、各画素列を複数のセグメントに分割し、セグメントの切れ目の直前の画素にはカットフィルタ、それ以外の画素にはノーマルフィルタを用いて、これら多数のセグメントを並列して誤差拡散するものである。この技術により、画質を損なわずに画像列内の誤差拡散の並列性を達成できる。すなわち、逐次処理すべき誤差拡散を並列に処理することができる。しかし、問題点としては、この方式も他の従来例と同様にして、一連の画素をセグメントに分けてそのセグメント単位で並列に処理していることにより、並列個数に応じて回路規模が大きくなってしまうことである。
【００１１】
第７の従来例として、特開平１１−１４６２０２号公報に記載された画像処理装置および誤差拡散処理方法がある。この例では、量子化対象画素の同一ラスタの量子化誤差を、前のラスタの量子化誤差から予測演算して得ることにより、実際の直前画素の処理結果を待って量子化対象画素の処理を行なう必要がなくなり、並列処理プロセッサにより複数画素の同時処理や同一ラスタの全画素の一括処理が可能になる。
【００１２】
これらの従来例を大別すると、第１および第７の従来例のようにメモリアクセスを減らして処理の高速化を図るものと、第２〜第６の従来例のように並列処理間による処理量を増大にして高速化を図るものとに分けられる。
【００１３】
一方、上述の従来例とは別に、並列処理を行なうことから、画像処理などの大量の演算を高速に処理する情報処理装置として注目されているデータ駆動情報処理装置が提案されている。このデータ駆動型情報処理動作を含むデータ処理装置には、非同期のハンドシェイク方式を採用したデータ伝送装置が用いられている。これは、データの転送要求信号とデータの転送を許可するか否かを示す転送許可信号をお互いに送受信しながら事実的なデータ転送を行なうものである。その詳細については、本願出願人らによる特開平６−８３７３１号公報などにおいて説明されている。
【００１４】
データ駆動型情報処理装置は各演算器およびメモリなどの必要回路を含み、情報処理装置の中に演算器が設けられている。そして、データ駆動型情報処理装置では、その名が示すようにデータが演算装置内の各演算器を駆動し、処理（演算）すべきデータが各演算器に揃ったときに各演算器が処理を開始する。
【００１５】
データ駆動型情報処理装置では、データはパケットとして各演算器を流れることになる。ここでパケットとは、データとデータの識別情報などを示すタグと呼ばれる部分からなる。そして、このパケットの流れに従って演算を実行することになる。
【００１６】
図１１はデータ駆動型情報処理装置における演算器のモデルを示し、図１２はパケットのモデルを示す。
【００１７】
図１１に示すように、入力パケット１と入力パケット２の２つのパケットとして演算器に到着したデータを演算器１０１で処理し、その結果を出力パケットとして出力する。演算すべきデータが入力パケット１として演算器１０１に到着すると、その入力パケットに含まれるデータは演算器１０１内で演算相手を待ち、入力パケット２が到着して互いのパケットが演算相手として判明したときに処理を開始する。このとき、並列性の実現方法として図１２に示すように、１つのパケットに複数のデータを載せることができる。
【００１８】
次に、図１２を参照して、パケットの簡単な説明を行なう。上述の如く、パケットはタグと呼ばれる部分とデータの部分に大別することができる。タグについては、特開平６−８３７３１号公報に説明されているのでここではその詳細な説明を省略する。文字通りにパケット＝小包と考えれば、小包の中にデータを入れて、タグ＝荷札を付けて送付することになる。このとき、パケットに入れるデータが１個より複数個（図１２では４個）入れる方が効率がよくなる。具体的には、演算にかかるオーバーヘッド、たとえばパケットの転送にかかる時間やパケットを識別する機構による遅延を抑えることができる。
【００１９】
このように、パケットに入れるデータの個数を増やすことで、一種の並列処理を行ない、演算装置全体で見たときの処理効率を速くすることができる。また、データ駆動型の場合も情報処理装置内に演算器を複数個用意しておき、複数のデータ駆動型プロセッサで独立して処理を行なうことが可能であるので、演算器を複数個持てば、空いている演算器で処理を行なうことができるので、演算終了を待たずに空いている演算器で次々に処理を行ない、処理効率を上げることができる。
【００２０】
このように、データ駆動型情報処理装置の特徴である並列に高速に処理する方法について説明したが、もちろんパケットの流れを速くする方法も挙げられる。パケットの流れを速くする方法としては演算時間を短くすることで実現できる。
これは単純に回路の処理速度を上げて演算に要する時間を短くするのみでなく、演算結果の読出や書込時間なども含めて短くすることで実現できる。
【００２１】
また、誤差拡散の場合は、前の画素の処理が終わってから次の画素の処理を行なう逐次処理であることと、１画素に対しての処理が多いことにより、同様の演算器を複数個持つ方法では回路規模の増加と演算器間の誤差データの授受とそのタイミングなどの制御が複雑になるため、同一のパケットに複数のデータを持たせる方法が有利であると考えられる。
【００２２】
以上のように、誤差拡散処理にデータ駆動型の情報処理装置を使用できれば、高速処理のみならず、回路規模などにも有利な処理装置を提供することが期待できる。
【００２３】
【発明が解決しようとする課題】
しかしながら、既に述べた第１〜第７の従来例の手法を先のデータ駆動型の演算処理装置に適用しようとすると、以下の問題が発生する。
【００２４】
まず、第１の従来例では、既に述べたようにアルゴリズムを特化しており、汎用性がないため、データ駆動型の演算処理装置には適用することができない。
【００２５】
また、第２，第３および第４の従来例では、データ駆動型でもこのように演算回路を並列に持って処理する方法も実現可能であるが、パケット単位で複数のデータの処理を行なうことによる並列処理（同一パケットに複数のデータを持つ並列処理）には適用することができない。
【００２６】
第５の従来例では、誤差拡散専用演算器でないため、これを専用の誤差拡散演算器に採用すると、１ラスタ分の画像データを取込む回路規模が必要になるなど、回路規模が大きくなってしまう。また、第５の従来例では、専用回路ではないため回路規模増加の影響は少ないが、専用演算器には適用することができない。
【００２７】
第６の従来例では、問題点としてこの方式も他の従来例と同様にして、離れた画素を並列に処理する技術であり、データ駆動型に用いる隣接した画素を１個のパケットに入れる並列処理に用いることができない。
【００２８】
第７の従来例では、誤差拡散予測演算装置を備えていることを特徴しているため、第１の従来例と同様にして汎用性がなく、データ駆動型の演算装置には適用することができない。
【００２９】
データ駆動型の演算装置では、実行速度を上げるために複数のデータを単一のパケットに乗せて処理することができる。しかし、誤差拡散は、逐次処理を行なわなければならないため、並列処理には不向きである。また、第２の従来例から第６の従来例で述べられている並列処理は、第５の従来例以外は誤差演算回路を複数個持ち、それぞれブロック単位で処理しており、データ駆動型で用いるパケットに複数個乗せる方式の並列処理には適用することができない。
【００３０】
また、第５の従来例では、１ラスタ分の画素データをすべて取込み、それらを演算器を並列に使用して速度を上げる方式であり、そのままでは単純な回路規模増につながり、これも応用することができない。
【００３１】
それゆえに、この発明の主たる目的は、並列処理による高速演算処理が特徴のデータ駆動型情報処理装置に適した誤差拡散処理装置を提供することである。
【００３２】
【課題を解決するための手段】
この発明は、誤差拡散演算器を内蔵したデータ駆動型演算装置において、誤差拡散演算器外に設けられ、ラインの上から下へ、そして左から右へ１画素ずつ演算対象画素を逐次移動させて隣接する次の演算対象画素を含む周辺画素に対して行なう誤差拡散演算器による誤差拡散演算処理により画素の誤差情報の格納および更新を行う誤差データ用メモリと、誤差データ用メモリのアクセスを行うアクセス部とを備え、誤差拡散演算器は、誤差拡散演算器に内蔵され、画素の誤差情報のうち同一ラインの逐次移動させて演算対象となる周辺画素に対して拡散すべき値の格納および更新を連続して行う誤差保存用レジスタと、第１の演算対象画素に対して、誤差データ用メモリから読み出された画素の誤差情報および誤差保存用レジスタの拡散すべき値に基いて、所定の誤差演算処理を実行するととともに第１の演算対象画素と同一ラインの隣接する第２の演算対象画素に対して、誤差データ用メモリから読み出された画素の誤差情報および第１の演算対象画素における演算結果に基いて、所定の誤差演算処理を並列処理して、次の２つずつの演算対象画素に対する所定の誤差演算処理するための拡散すべき値を誤差保存用レジスタに出力するとともに、次のラインの演算対象画素に対する誤差演算処理のための誤差情報を誤差データ用メモリに出力するための複数の演算器とを含み、前記第１および第２の演算対象画素に対応する誤差情報や拡散すべき値を同一のパケット内に格納し、前記アクセス部と、誤差拡散演算器とを巡回させて演算処理を行うことを特徴とする。
【００３３】
したがって、この発明によれば、誤差拡散演算器外のメモリにアクセスすることによる速度低下を防止できる。また、誤差保存用レジスタを誤差拡散演算器内に備えることにより、データを処理する単位である１パケットに複数のデータを持つ場合にも対応できる。
【００３５】
したがって、この発明では、誤差保存用レジスタを誤差拡散演算器に内蔵することにより、擬似的な並列処理を実現できるとともに誤差拡散演算器以外の誤差データ用メモリへのアクセス回数を低減できる。また、少ないメモリ容量に誤差データを蓄えることが可能となり、メモリコストを低減できる。さらに、誤差拡散演算器外の誤差データ用メモリにアクセスすることによる速度低下を防止できる。誤差保存用レジスタを誤差拡散演算器内に備えることにより、データを処理する単位である１パケットに複数のデータを持つ場合にも対応できる。
【００３７】
この場合、複数のデータを並列処理できるので、同一のパケット内のデータブロックを増やせば、さらにデータ駆動型の演算処理装置の優位性を生かすことができる。
【００３８】
さらに、誤差拡散演算器は、演算対象画素がラインの最初に位置するとき、誤差保存用レジスタの内容をクリアすることを特徴とする。
【００３９】
さらに、誤差拡散演算器は、演算対象画素が画面の最上位ラインにあるとき、誤差データ用メモリからの読み込みを行わないことを特徴とする。
【００４０】
これらにより、演算対象が画像の端にあるときの特殊処理を容易にできる。
【００４１】
【発明の実施の形態】
図１はこの発明の一実施形態の基本的な概念図を示す図である。図１において、誤差拡散演算装置１は、データ駆動型の演算装置であり、先に説明した特開平６−８３７３１号公報に記載されているように、データの転送要求信号と、データの転送を許可するか否かを示す転送許可信号をお互いに送受信してパイプラインレジスタのパケットの保持や出力を制御する自己同期型転送制御回路や、パケットを保持するパイプラインレジスタや、パケットの入力手段としての合流部や、パケットの出力手段としての分岐部や、パイプラインレジスタ間に設置された発火制御部や、演算回路や、メモリ部や、さらに誤差保存用レジスタ２を含んで構成されている。そして、この誤差拡散演算装置１の外部には１ライン分のラインメモリで構成された誤差データ用メモリ３が設けられている。
【００４２】
このように、誤差拡散演算装置１内に誤差保存用レジスタ２を備えることにより、誤差拡散演算装置１外のメモリにアクセスする必要がなくなり、負担が軽減できる。これは処理を速くする手法のパケットの流れを速くすることに相当する。
【００４３】
誤差保存用レジスタ２が誤差拡散演算装置１内にない場合は、１個の画素について誤差拡散処理を行なうために、外部のメモリにアクセスする必要がある。このメモリアクセスは複数回の読み書きが必要になる。たとえば、具体例として、１画素の誤差を周辺４画素に拡散させる場合について考えると、当該画素からの誤差データの読込と、周辺４画素に対する誤差データの読込，演算，書込の一連の処理が必要になる。メモリのアクセスのみに着目しても、都合５回の読込と４回の書込が必要になる。これを全画素について行なわなければならず、誤差保存用レジスタ２を備えた場合の読込１回と書込１回と比較して負荷が大きいことがわかる。このアクセス回数の増加は、単にメモリの応答時間によるだけでなく、他の演算器のメモリアクセスとの調停を行なう必要もあり、アクセス回数以上の高速性に対して、さらに回路設計上の複雑さに対して影響が出る。
【００４４】
これは、今までの説明でも述べてきている方法であるが、１回の演算で複数個のデータ処理が行なえるため、誤差拡散演算装置１への入出力にかかる負荷を軽減できる。また、複数のデータを隣接する画素に限定した場合は、画素間で渡すデータの保存が不要になり、回路規模を含めたコストパフォーマンスが向上する。
【００４５】
誤差拡散演算装置１では、周辺画素の誤差データを読込んで現在の対象画素のデータに加算する。このとき、隣接画素の誤差データの読込から演算，誤差データのメモリへの書込まで同一演算装置内で処理すると、画素データのパケットが読込から書込まで同一演算装置内に留まることになり非効率となる。以下、簡単な例を挙げてその様子を説明する。
【００４６】
図２は誤差拡散演算装置による演算サイクル数を示す図である。この図２では、簡単化のため、メモリからの読出，誤差演算（誤差の足し込み，量子化，係数の掛け算など）、メモリへの書込を同じ１サイクルとしている。誤差拡散の演算を単一の演算装置で実行した場合は、メモリからの読出から演算を行なって書込までをシリアルに行なうことになり、１つの画素につき３サイクル必要になる。この場合は、４画素の処理を行なうために、４×３＝１２サイクル必要になる。
【００４７】
しかし、誤差データ用メモリへのラインメモリアクセス部を誤差拡散演算装置から分割することにより、誤差演算とラインメモリとの読出／書込処理を分離することができる。このことより、図２に示すように、４画素の処理が８サイクルで処理を完了させることのできることがわかる。図２の対象画素は、そのサイクルでメモリアクセスを行なっている隣接する画素を表わしている。
【００４８】
図２では、サイクル１では画素１に対応する誤差データのラインメモリからの読出と、サイクル２では画素１に対応する演算と、画素２に対応する誤差データのラインメモリからの読出と、サイクル３では画素１に対応する演算後のデータのラインメモリへの書込と、画素２に対応する演算が行なわれていることを示している。
【００４９】
以下、同様に処理されて８サイクルで隣接する４画素の処理が完了する。図２から明らかなように、この方式ではすべてのサイクルで読出もしくは書込のためのメモリアクセスを行なうことができ、待ち時間のために演算装置内に留まるような無駄を排除した動作を実現できる。
【００５０】
図３はこの発明の一実施形態の分離型誤差拡散演算装置を示すブロック図である。図３において、誤差拡散演算装置１ａは図１と同様にして誤差保存用レジスタ２を内蔵しており、量子化や係数をかける演算を行なう。この誤差拡散演算装置１ａとは分離してラインメモリアクセス部１ｂが設けられ、このラインメモリアクセス部１ｂによって誤差データ用メモリ（ラインメモリ）３がアクセスされる。誤差拡散を行なう演算対象画素のパケットが合流回路４を介してラインメモリアクセス部１ｂに入力されると、ラインメモリアクセス部１ｂが誤差データ用メモリ３から誤差データを取込み、そのデータを持って分岐回路５を介して誤差拡散演算装置１ａに入力される。ここで、演算対象画素の量子化と誤差の拡散、すなわち量子化誤差に係数を掛けて誤差保存用レジスタ２への保存が行なわれる。そして、量子化が終わったデータは、誤差データ用メモリ３へ保存するデータを持って再び合流回路４を介してラインメモリアクセス部１ｂに入力され、誤差データを誤差データ用メモリ３に保存し、量子化の終わったデータ（２値画素データ）が演算結果として出力される。すべてのデータは前述の図１１に示したようなパケット形式にて行なわれる。
【００５１】
対象画素がラインの最初の位置にあるときは誤差保存用レジスタ２には１ライン前の最後のデータが格納されている。このままでは、量子化の際に足し込む近傍誤差が不適切（近傍ではなく不連続な位置の誤差になっている）な値となっているため、これを０にクリアする必要がある。この機能を誤差拡散演算装置１ａに内蔵し、誤差拡散演算装置１ａの制御を容易にする。
【００５２】
この機能の実現方法として、誤差拡散演算装置１ａが自動的にラインの最初の位置にあることを検知して誤差保存用レジスタ２を０にクリアしてもよいし、別の命令として準備してもよい。前述の説明と同様にして、対象画素が画面の最上位ラインにあるときに誤差保存用レジスタ２を０にクリアするとともに、誤差データ用メモリ３から誤差データの読出を行なわない機能を準備する。さらに、最上位ラインの位置にあることを検知することで可能となる。誤差保存用レジスタ１ａが誤差データ用メモリ３に格納されている誤差データは１画面前の最下位ラインのデータであり、不連続な誤差データであるためである。
【００５３】
図４はこの発明の一実施形態における周辺４画素に誤差を拡散する例を示す図である。次に、図４を参照して、１画素ずつ処理する場合で該当画素が画像の端にない場合の手順について説明する。該当画素が多値データであり、これを量子化して誤差を求め、その誤差を周辺４画素へ拡散させる場合の手順は以下のとおりになる。
【００５４】
このとき、ラインは上から下へ、またライン上では左から右へ演算対象画素が移動するものとする。対象画素データＰｎが誤差拡散演算装置１ａに入力される。また、１ライン上の画素の誤差データＬｎが誤差拡散演算装置１ａ外になる誤差データ用メモリ３から読込まれる。誤差データ用メモリ３から読込まれた誤差データＬｎ…Ｌｎ＋ｍと誤差拡散演算装置１ａ内にある誤差保存用レジスタ２から１画素左の誤差データＸが加算器１０で順次加算され、さらに加算器７によって対象画素データＰｎ…Ｐｎ＋ｍに加算される。加算したデータをたとえば量子化回路６によって２値に量子化し、加算器９によって量子化前後の量子化誤差が求められる。この量子化誤差に対して、乗算器８によって誤差係数ａが乗算され、出力Ｘ′として誤差保存用レジスタ２の領域Ｘに格納される。また、量子化誤差に対して、乗算器１１によって誤差係数ｂが乗算され、誤差保存用レジスタ２の領域Ｙに格納されている誤差データが加算器１２によって加算され、出力Ｌ′ｎ…Ｌ´ｎ＋ｍとして誤差データ用メモリ３の領域Ｌｎに書込まれる。
【００５５】
さらに、量子化誤差に対して乗算器１３によって誤差係数ｃが乗算され、さらに加算器１４によって誤差保存用レジスタ２の領域Ｚに格納されている誤差データが加算され、出力Ｙ′として出力され、誤差保存用レジスタ２の領域Ｙに書込まれる。さらに、量子化誤差に対して、乗算器１５によって誤差係数ｄが乗算され、出力Ｚ′として誤差保存用レジスタ２の領域Ｚに格納される。
【００５６】
図５は図４の動作を説明するための図である。図５を参照して図４の動作を補足的に説明する。図５（ａ）においても、誤差拡散処理の対象画素を上から下へ、そして左から右へ逐次移動させて行なう例で示している。したがって、対象画素データはＰｎからＰｎ＋１へと移動するとともに、隣接する周辺画素に誤差を分配することになる。誤差拡散演算装置１ａ内の誤差保存用レジスタ２は、図５（ｂ）に示すように対象画素に対してレジスタＸとレジスタＹとレジスタＺの３つのレジスタを有している。ここで、図５（ｃ）に示す誤差データＰ０は係数ｂを掛け、誤差保存用レジスタ１ａのレジスタＹに格納されている値を換算した後、対象画素が次のライン（１つ下のライン）に進むまで使用しないため、誤差拡散演算装置１ａ外の誤差データ用メモリ３に誤差データＬ′ｎとして書込んで誤差データ用メモリ３内に格納される。したがって、図４に示した誤差データ用メモリ３はＬｎ，Ｌｎ＋１，…，Ｌｎ＋ｍとなっている。
【００５７】
一方、誤差データａ０は、係数ａを掛けた後、図５（ｄ）に示すように一旦誤差拡散演算装置４ａ内の誤差保存用レジスタ２のレジスタＸ内に格納され、次の対象画素Ｐｎ＋１を処理して、誤差拡散演算装置１ａの加算器７に入力する際、読出されて誤差データＸとして使用される。
【００５８】
また、誤差データｃ０は、係数ｃを掛けた後、レジスタＺに格納されている誤差データを加算してその値がレジスタＹに格納される。そして、次の対象画素Ｐｎ＋１の処理の際、レジスタＹから読出して使用される。さらに、誤差データｄ０は、係数ｄを掛けた後、レジスタＺに格納される。そして、次の対象画素Ｐｎ＋１の処理の際、レジスタＺから読出して使用される。図５では、対象画素データがＰｎ，Ｐｎ＋１，Ｐｎ＋２，…，Ｐｎ＋ｍと順次入力され、処理されていくことを示している。
【００５９】
なお、図４の右下にある誤差データについては後で詳細に説明する。
以上説明したように、対象画素を移動させて周辺画素に誤差データを拡散させる誤差拡散方式において、次の処理に必要なデータは誤差拡散演算装置１ａ内にある誤差保存用レジスタ２に格納して使用し、次のラインの処理まで不要な誤差データのみを誤差拡散演算装置１ａ外の誤差データ用メモリ３に格納することができる。したがって、誤差保存用レジスタ２に格納されるデータは次々誤差データが更新されるだけであるため、メモリ容量は少なくて済む。
【００６０】
また、誤差保存用レジスタ２としては単なる遅延素子で構成してもよく、簡単に構成でき、回路面積の増大にはつながらない。さらに、これら誤差保存用レジスタ２は対象画素がラインの最初もしくは画面の最上位ラインのときは、誤差データの不連続による不都合が発生しないように格納されているデータを０にするリセット機能を有している。また、画面の最上位ラインに対象画素が位置するとき、これを検出してラインレジスタから読出を禁止する機能、もしくは誤差データ用メモリ３に格納されているデータを０にするリセット機能を有している。
【００６１】
なお、誤差データ用メモリ３と誤差保存用レジスタ２の更新順序のみが入れ替わらなければ、この手順で演算器が動作するように設計する必要はない。誤差データ用メモリ３と誤差保存用レジスタ２のレジスタＸは計算の性格上入れ替わる心配はないので、誤差保存用レジスタ２のレジスタＹとＺの更新順序を注意して設計すればよい。
【００６２】
図６は２つの対象画素を同時に並列処理する実施形態を示す図である。図６に示した例も図４の実施形態と同様にして、誤差保存用レジスタ２としてはレジスタＸ，Ｙ，Ｚの３個を設けるだけで済み、誤差データ用メモリ３への読み書きも各画素につき１回ずつで済む。隣接した画素を同一パケットで一度に誤差拡散演算装置１ａに取込むことのできるデータ駆動型の演算装置に適した技術であることがわかる。ちなみに、それ以外の量子化器，加算器，乗算器の個数は単純に２倍になっている。すなわち、図４に示した実施形態では、量子化器が１個、加算器が５個、乗算器が５個であるのに対して、図６に示した実施形態では、量子化器が２個，加算器が１０個，乗算器が８個のみで並列化により発生する＋αもないことから、誤差保存用レジスタ２が減少する分だけ有利であることがわかる。
【００６３】
基本的には、図５に示した実施形態の回路が並列に２回路配置された構成であるので、動作は同じであり、詳細な説明は省略する。この実施形態での違いは、図４に示した実施形態では、誤差データＸ′，Ｙ′，Ｚ′が誤差保存用レジスタ２に格納されたのに対して、図６に示した実施形態ではレジスタに書込まず、そのまま次の対象画素での処理に使用していることである。そして、次の対象画素の処理が終了した後の誤差データＸ′，Ｙ′，Ｚ′を各々レジスタに書込んで格納する。したがってレジスタＸ，Ｙ，Ｚは２回ごとに更新されるだけであり、誤差保存用レジスタ２はこの並列化により２倍にする必要はなく、図４と同じ容量であり増加することはない。
【００６４】
また、前述の図１２に示したように複数のデータ、ここでは隣接する画素に対応するデータを同一のパケット（たとえばデータ１，データ２）に格納して転送して処理するデータ駆動型の演算装置の並列処理とのマッチングが取りやすく、並列処理の有利性を引出すことができる。
【００６５】
ここまで説明してきた方法は、誤差拡散の原理には忠実であるが、誤差に係数を掛けたデータを誤差データ用メモリに保存する方法のため、誤差拡散演算装置１ａが内蔵している誤差保存用レジスタ２を超える範囲の画素に誤差を拡散させる場合には使用しにくく、自由度も不足する。この欠点を回避するために、図４に示した実施形態では、敢えて別途誤差データをそのまま出力する経路を設けている。しかし、これでは誤差データそのものを記憶する機構が必要な上、使用しないときには誤差データをそのまま出力する回路が無駄になる。この欠点を回避するために、誤差データ用メモリ３に保存するデータは量子化によって発生する誤差データそのものを保存する方法が考えられる。
【００６６】
図７は量子化された画素の誤差データをそのまま誤差データ用メモリ３に保存する実施形態を示す図である。この実施形態では、画素の誤差データを対象画素データに足し込む前に、特定の係数を掛けている。この違いを図８を参照して説明する。前述の従来例で説明した図１０とこの図８とでは誤差を拡散させる演算対象画素の位置は同じであるが、図１０では量子化が終わった画素の画素データを周辺の量子化が行なわれていない画素データに足し込んでいるので、矢印の向きは演算対象画素から周辺画素の量子化が終わっていない画素に向かっている。これに対して、図８に示した実施形態では、矢印の向きは量子化が終わっている画素から演算対象画素に向いている。この方法は、図１０の矢印の向きに注意しながら、誤差データがどの画素に足し込まれているかを注目すれば置き換え可能であることがわかる。
【００６７】
図７に示した実施形態では、誤差保存用レジスタ２のレジスタＸ，Ｙ，Ｚを必要とせず、次の画素の処理への移動時間に相当する遅延量を有する遅延素子４１，４２，４３が設けられる。誤差データ用メモリ３は対象画素のあるラインの１つ前（１つ上）の画素の誤差データを格納しており、対象画素の誤差拡散処理が終了するとともに格納されているデータを更新する。
【００６８】
対象画素Ｐｎ＋１の誤差拡散処理を行なう場合、１つ前の画素Ｐｎの誤差データ（別途誤差データ用メモリの領域Ｌｎの画素Ｐｎに対応するアドレスに書込んでいる）を遅延素子４１を介して乗算器２８で係数ａを乗算し、一方対象画素Ｐｎ＋１のあるラインの１つ前（１つ上）の誤差データを格納している領域Ｌｎ＋１から順次Ｌｎ＋２，Ｌｎ＋３と転送させて読出す。
【００６９】
まず、対象画素の右上の画素Ｐ′ｎ＋２の誤差データに乗算器２９で係数ｂを乗算し、次に遅延素子４２を介して、すなわち対象画素の上の画素Ｐ′ｎ＋１の誤差データに乗算器３０で係数ｃを乗算し、続いてさらに遅延素子４３を介した、すなわち対象画素の左上の画素Ｐ′ｎの誤差データに乗算器３１で係数ｄを乗算し、これらの乗算器２８〜３１の出力を加算器１８〜２０で加算し、さらに加算器７で画素データＰｎ＋１に加算される。そして、量子化回路６に入力され、たとえば２値化することで発生した誤差データが誤差データ用メモリ３の画素Ｐｎ＋１に対応するアドレス（Ｌｎ＋１）に書込まれる。
【００７０】
以降、同様な処理を繰返すことで誤差拡散処理が行なわれる。誤差データ用メモリ３への書込および読出は対象画素１あたり各々１回であり、図４および図６に示した実施形態と比較して処理速度が遅くなることはない。また、簡単な回路構成にて実現可能であることがわかる。
【００７１】
この方式でも、画素データＰｎとＰｎ＋１を処理する２回路による並列処理は可能であり、先の図６で述べたように、同一パケット内に複数のデータ、ここでは隣接する画素に対応するデータを同一のパケット（たとえば、データ１，データ２）に格納して転送して処理するデータ駆動型の演算装置の並列処理とのマッチングが取りやすく、並列処理の有利性を引出すことができる。そして、係数を掛けたデータを格納するのではなく、直接誤差データを誤差データ用メモリ３に格納するため、後の処理の自由度が増し、対象画素の周辺４画素への拡散だけでなく他の拡散処理方式にも対応可能である。
【００７２】
図７においても、図４および図６と回路規模が変わらず、量子化器：１，加算器：５，乗算器：４で実現でき、誤差データ用メモリ３への書込は図４および図６と同様にして、各１回ずつで済み、同等の回路規模で実現できる。なお、図７では、誤差データ用メモリ３から読込んだデータをそのまま遅延させて使用しているので、デジタル信号処理でよく用いられる遅延素子になぞらえてＺで実現しいているが、実体は図４などで用いている誤差保存用レジスタ２と同じ構成で簡単に実現できる。これは、図４でも同様のことが言え、図４においても遅延素子を用いるようにしてもよく、これはＸ′とＸの間に遅延素子を入れることで実現できる。すなわち、誤差保存用レジスタ２は遅延素子で簡単に実現できる。
【００７３】
図９は誤差拡散演算装置内の誤差保存用レジスタを１次元（ライン方向のみ）で持つようにした実施形態を示すブロック図である。この実施形態も一通りではないが、図７と同様な回路で実現したものである。すなわち、これまでの実施形態では、同一ライン上では１画素分だけの拡散であったのに対して、この図９に示した実施形態では拡張性を考慮し、誤差を同一ライン方向に３画素まで拡散する例を示している。また、ラインの異なる画素からの誤差の授受は同様にデータ用メモリ３を用いれば、先に説明したように実現できる。ただし、ここでは拡張性がある場合の回路例として示しているので、ラインが異なる場合の誤差データに係数を掛けて足し込む部分は省略している。誤差データ用メモリ３への読み書きの部分に該当する画素の誤差の計算と累算機能を持たせてもよく、拡張性を重視して別の演算装置でソフトウェアで制御してもよい。
【００７４】
以下、説明を簡単にするために、誤差拡散演算装置内１ａ内の誤差保存用レジスタ２への誤差データの読出および書込についてのみ着目して説明する。この場合、対象画素Ｐｎの誤差データを乗算器２８で係数ａを乗算して次の画素Ｐｎ＋１のデータに、乗算器２９で係数ｂを乗算して画素Ｐｎ＋２のデータに、乗算器３０で係数ｃを乗算して画素Ｐｎ＋３のデータに足し込んで拡散するものであり、同一ラインの３画素に拡散した例である。
【００７５】
図９に示すように、対象画素Ｐｎの画像データが誤差拡散演算装置１ａに入力される。画素Ｐｎの画像データには、誤差保存用レジスタ２の画素Ｐｎに対応するアドレスに格納されている誤差データＬｎが読出されて加算器７で加算される。そして、量子化回路６によりたとえば２値化され、その際の加算器９で求められた誤差データは遅延素子４１により１画素分遅延されるため、乗算器２８で係数ａを乗算した値は加算器７で画素データＰｎ＋１に加算されることになる。次に、誤差データはさらに遅延素子４２により２画素分遅延されるため、乗算器２９で係数ｂを乗算した値は加算器１８で画像データＰｎ＋２に加算されることになる。次に、誤差データはさらに遅延素子４３により３画素分遅延されるため、乗算器３０は係数ｃを乗算し、その値は加算器１９で画像データＰｎ＋３に加算される。
【００７６】
また、誤差保存用レジスタ２への書込（更新）は、画素Ｐｎの量子化誤差データを遅延素子にて１画素分遅延させた誤差保存用レジスタ２の画素Ｐｎ−１の誤差データに対応するアドレス（Ｌｎ−１）に格納される。これを順次繰返すことによって、同一ラインの３画素への誤差拡散を実現できる。
【００７７】
この方式でも、画素データＰｎとＰｎ＋１を処理する２回路による並列処理が可能であり、前述の図６で説明したように同一パケット内に複数のデータ、ここでは隣接する画素に対応するデータを同一のパケット（データ１，データ２）に格納し、転送して処理するデータ駆動型の演算装置の並列処理とのマッチングが取りやすく、並列処理の有利性を引出すことができる。
【００７８】
誤差保存用レジスタ２への書込は、同一アドレスへの読み書きを避けるために１画素遅延させた誤差データを誤差保存用レジスタ２に書込む方式を示している。これは、同一アドレスへの読み書きを行なう場合は、読込終了後に書込を行なう必要があるため、回路動作の制約を避けることを意図している。逆に、このアドレスを変更するための制約が大きい場合は、遅延素子に入れる前の演算対象画素の誤差データを誤差保存用レジスタ２の同一アドレスであるＬｎに書込むことで解決できる。
【００７９】
なお、この発明では一例で示しているが、たとえば対象画素の走査方向は、左から右のみでなくてもよく、場合によっては左から右と右から左を交互または特定の周期で入れ替えてもよい。
【００８０】
さらに、ラインの最初に対象画素があるときの誤差保存用レジスタ２をクリアすることや誤差データ用メモリ３から誤差データを読出さないもしくは誤差データ用メモリをクリアにする処理も、誤差拡散演算装置１ａが自動的に行なってもよく、あるいはプログラムで明示的に行なってもよい。
【００８１】
量子化するしきい値については固定ではなく、任意に変更することも考えられる。さらに、画素によって逐次変更するような誤差拡散演算装置を設計することもできる。さらに、量子化については、２値に限らず４値の場合もあり得る。４値の量子化が用いられる例としては、６色カラーの場合が挙げられる。６色カラーの場合は、イエロー，マゼンタ，シアンの３色のうち、たとえばシアンについて濃い色と薄い色の２種類用意しておき、２ビット表示で１１，１０，０１，００として上位ビットが１のときに濃い色で印字し、下位ビットが１のときに薄い色で印字する（０のときは印字しない）。したがって、１番濃い場合は、濃いビットと薄いビットの両方で印字することにより、４種類の濃淡を表現でき、さまざまな変更に対応できる。
【００８２】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００８３】
【発明の効果】
以上のように、この発明によれば、従来ではデータ駆動型の演算器はその並列性から画像処理には有利であったが、誤差拡散のような処理は不得意な分野であったが、この発明によりデータ駆動型の演算においても、効率的に誤差拡散の演算を行なうことができるようになり、さらにデータ駆動型の演算装置の優位性を得ることができる。
【００８４】
さらに、複数の演算処理部を回路の大幅な増大もなく並列に配置することができ、また少量のメモリで誤差データを格納でき、さらにデータ駆動型の演算処理装置でのパケットの構成による処理でも、同一のパケットに複数の誤差データを格納して処理することでデータ駆動型の演算処理装置の特徴である高速処理の優位性を損なわず発揮できる。また、同一パケット内に複数のデータを格納することにより、入出力の処理速度が低減され、より高速なデータ伝送および処理に対応できる。
【００８５】
なお、上述の説明では２つの並列する演算処理ブロックにより説明したが、特に２つのブロックに限定されることなく、複数のデータを並列する処理ブロックも可能となる。これに応じて、同一のパケット内のデータブロックを増やせば、さらにデータ駆動型の演算処理装置の優位性を活かすことができる。したがって、画像処理など、大量のデータの演算の高速処理に適したデータ駆動型の演算処理装置を、誤差拡散処理に、その並列処理による高速処理を損なわずに使用することができる。
【００８６】
また、対象画素の量子化誤差データを周辺画素に拡散させる場合、次の画素処理に必要な誤差データは誤差拡散演算装置内に備えた誤差保存用レジスタに格納し、読出および更新を行なうことでメモリへのアクセス時間の短縮を可能にすることができ、パケットの流れを速くすることで、全体の処理時間の短縮化を実現できる。
【００８７】
さらに、演算装置以外のメモリへのアクセス部と、誤差保存用レジスタを設けて誤差拡散演算を行なう誤差拡散演算装置を分離することで、メモリへのアクセスのための待機時間など、パケットの処理に無駄が発生しない構成にするとともに、これら２つのブロックのデータの流れを合流部および分岐部により管理する、すなわちデータ駆動型のシステム構成に合致したものにすることができる。
【００８８】
さらに、データ駆動型の処理装置を使用できれば、高速処理のみならず、回路規模などの有利な処理装置を提供することができる。
【図面の簡単な説明】
【図１】  この発明の一実施形態の誤差拡散演算装置のブロック図である。
【図２】  この発明の一実施形態による演算サイクル数を示す図である。
【図３】  この発明の実施形態におけるの誤差拡散演算装置の概略ブロック図である。
【図４】  この発明の具体的な実施形態の誤差拡散演算装置を示す図である。
【図５】  図４の具体的な動作を説明するための図である。
【図６】  この発明の他の実施形態の誤差拡散演算装置を示すブロック図である。
【図７】  この発明のさらに他の実施形態の誤差演算装置のブロック図である。
【図８】  この発明の一実施形態における誤差拡散を説明するための図である。
【図９】  この発明のさらに他の実施形態の誤差拡散演算装置のブロック図である。
【図１０】  従来例による誤差拡散を説明するための図である。
【図１１】  従来のデータ駆動型情報処理装置のブロック図である。
【図１２】  従来のデータ駆動型情報処理装置におけるパケットのモデルを示す図である。
【符号の説明】
１，１ａ  誤差拡散演算装置、１ｂ  ラインメモリアクセス部、２  誤差保存用レジスタ、３  誤差データ用メモリ、４  合流回路、５  分岐回路、６，３２量子化回路、７，９，１０，１２，１４〜２０  加算器、８，１１，１３，１５，２１〜３１  乗算器、４１，４２，４３  遅延素子。
【図１】
0003995868.tif 000002
【図２】
0003995868.tif 000003
【図３】
0003995868.tif 000004
【図４】
0003995868.tif 000005
【図５】
0003995868.tif 000006
【図６】
0003995868.tif 000007
【図７】
0003995868.tif 000008
【図８】
0003995868.tif 000009
【図９】
0003995868.tif 000010
【図１０】
0003995868.tif 000011
【図１１】
0003995868.tif 000012
【図１２】
0003995868.tif 000013