(57)【要約】【課題】任意のバンド領域に対して同じ処理モジュール群を用いて並列にデータ処理を行う。【解決手段】処理画素とは異なる参照画素についての処理結果を参照して、処理画素についての処理結果を生成するＮ個の処理モジュールを備える。Ｎ個の処理モジュールは、互いに異なる処理画素についての処理結果を並列に生成する。Ｎ個の処理モジュールは、処理結果を転送可能なように接続されている。入力画像中の処理領域の第１の画素ラインに含まれる連続したＮ個の画素についての処理結果は、所定の順序で互いに異なる処理モジュールにより逐次生成される。Ｎ個の処理モジュールのそれぞれは、第１の画素ラインに含まれる第１の画素についての処理結果を生成すると、次に、第１の画素ラインとは異なる処理領域の第２の画素ラインに含まれ、第１の画素についての処理結果が生成されたことに応じて処理が可能になった第２の画素についての処理結果を生成する。【選択図】図１
2019169131.tif 000002
【特許請求の範囲】
【請求項１】
入力画像に対して画像処理を行う画像処理装置であって、
処理画素とは異なる参照画素についての処理結果を参照して、前記処理画素についての処理結果を生成するＮ個の処理モジュールを備え、
前記Ｎ個の処理モジュールは、互いに異なる処理画素についての処理結果を並列に生成し、
前記Ｎ個の処理モジュールは、前記処理結果を転送可能なように接続されており、
入力画像中の処理領域の第１の画素ラインに含まれる連続したＮ個の画素についての処理結果は、所定の順序で互いに異なる前記処理モジュールにより逐次生成され、
前記Ｎ個の処理モジュールのそれぞれは、第１の画素ラインに含まれる第１の画素についての処理結果を生成すると、次に、前記第１の画素ラインとは異なる前記処理領域の第２の画素ラインに含まれ、前記第１の画素についての処理結果が生成されたことに応じて処理が可能になった第２の画素についての処理結果を生成する
ことを特徴とする画像処理装置。
【請求項２】
前記Ｎ個の処理モジュールに対し、処理を行うタイミングで前記処理画素の処理に必要な画素データを供給する供給手段をさらに備えることを特徴とする、請求項１に記載の画像処理装置。
【請求項３】
前記供給手段は、前記第１の画素ラインに含まれる連続するＮ個の処理画素の画素データを、前記所定の順序で前記Ｎ個の処理モジュールに逐次供給し、前記第１の画素についての処理が完了した処理モジュールに対して前記第２の画素の画素データを供給することを特徴とする、請求項２に記載の画像処理装置。
【請求項４】
前記処理領域はＭ行の画素ラインを有し、
前記供給手段は、１つの前記処理モジュールに対し、１番目の画素ラインにある処理画素の画素データから、Ｍ番目の画素ラインにある処理画素の画素データまでを順に供給した後、１番目の画素ラインにある処理画素の画素データを供給することを特徴とする、請求項２又は３に記載の画像処理装置。
【請求項５】
前記Ｎ個の処理モジュールは同じ構成を有することを特徴とする、請求項１から３のいずれか１項に記載の画像処理装置。
【請求項６】
前記Ｎ個の処理モジュールが、前記入力画像の１つの色についての画像処理を並列に行う第１の動作モードと、
前記Ｎ個の処理モジュールのうちの第１のグループが、前記入力画像の第１の色についての画像処理を並列に行い、前記Ｎ個の処理モジュールのうちの第２のグループが、前記入力画像の第２の色についての画像処理を並列に行う、第２の動作モードと、
を有することを特徴とする、請求項１から５のいずれか１項に記載の画像処理装置。
【請求項７】
前記Ｎ個の処理モジュールが前記入力画像の色数Ｌに応じてＬ個のグループに分類され、それぞれのグループに含まれる前記処理モジュールが前記処理結果を転送可能なように接続されるように、前記Ｎ個の処理モジュールの間の接続を制御する経路制御手段をさらに備えることを特徴とする、請求項１又は６に記載の画像処理装置。
【請求項８】
前記処理領域はＭ行（Ｍ＞Ｎ）の画素ラインを有し、前記Ｎ個の処理モジュールは、１行目の画素ラインの処理が終了する前に、Ｍ行目の画素ラインの処理を開始することを特徴とする、請求項１から７のいずれか１項に記載の画像処理装置。
【請求項９】
前記第１の画素ラインに含まれる連続したＮ個の画素についての処理結果は、前記所定の順序で互いに異なる前記処理モジュールにより連続した処理サイクルにおいて生成されることを特徴とする、請求項１から８のいずれか１項に記載の画像処理装置。
【請求項１０】
第１の処理モジュールは、複数の前記参照画素のうち１つについての処理結果を、前記第１の処理モジュールの処理結果を格納する第１の処理モジュールのメモリから取得し、複数の前記参照画素のうち他の１つについての処理結果を、第１の処理モジュールとは異なる第２の処理モジュールから取得することを特徴とする、請求項１から９のいずれか１項に記載の画像処理装置。
【請求項１１】
前記第１の画素と前記第２の画素との相対位置は、前記第１の画素の位置にかかわらず同じであることを特徴とする、請求項１から１０のいずれか１項に記載の画像処理装置。
【請求項１２】
前記第１の画素の位置がｉ行ｊ列である場合、前記第２の画素の位置はｉ＋１行ｊ−ａ列であり、ａは参照画素の位置によって定まる任意の整数であることを特徴とする、請求項１１に記載の画像処理装置。
【請求項１３】
前記参照画素は、前記処理画素より上の画素ラインにあるか、又は前記処理画素と同じ画素ラインの前記処理画素より左側にあることを特徴とする、請求項１から１２のいずれか１項に記載の画像処理装置。
【請求項１４】
入力画像に対して画像処理を行う画像処理装置であって、
処理画素とは異なる参照画素についての処理結果を参照して、前記処理画素についての処理結果を生成するＮ個の処理モジュールを備え、
前記Ｎ個の処理モジュールは、互いに異なる処理画素についての処理結果を並列に生成し、
前記Ｎ個の処理モジュールは、前記処理結果を転送可能なように接続されており、
前記Ｎ個のモジュールのそれぞれは、参照画素についての処理結果を、処理画素にかかわらず同じ処理モジュールから取得する
ことを特徴とする画像処理装置。
【請求項１５】
入力画像に対して画像処理を行う画像処理装置であって、
処理画素とは異なる参照画素についての処理結果を参照して、前記処理画素についての処理結果を生成するＮ個の処理モジュールを備え、
前記Ｎ個の処理モジュールは、互いに異なる処理画素についての処理結果を並列に生成し、
前記Ｎ個の処理モジュールは、前記処理結果を転送可能なようにリング状に接続されている
ことを特徴とする画像処理装置。
【請求項１６】
入力画像に対して画像処理を行う画像処理方法であって、
処理画素とは異なる参照画素についての処理結果を参照して、前記処理画素についての処理結果を生成するＮ個の処理モジュールであって、前記処理結果を転送可能なように接続されている前記Ｎ個の処理モジュールが、互いに異なる処理画素についての処理結果を並列に生成する工程を含み、
前記工程は、
互いに異なる前記処理モジュールが、入力画像中の処理領域の第１の画素ラインに含まれる連続したＮ個の画素についての処理結果を逐次生成することと、
前記Ｎ個の処理モジュールのそれぞれが、第１の画素ラインに含まれる第１の画素についての処理結果を生成し、次に、前記第１の画素ラインとは異なる前記処理領域の第２の画素ラインに含まれ、前記第１の画素についての処理結果が生成されたことに応じて処理が可能になった第２の画素についての処理結果を生成することと、
を含むことを特徴とする、画像処理方法。
【請求項１７】
リカレントニューラルネットワークを用いて順次入力されるデータ群に対する処理を行うデータ処理装置であって、
前記リカレントニューラルネットワークを構成する隠れ層に対応する演算を行うことで、前記隠れ層の出力結果及び再帰的に参照される中間データをそれぞれが繰り返し生成する、複数の演算ユニットを備え、
前記複数の演算ユニットのうちの１つの演算ユニットが、同じ隠れ層についての中間データを再帰的に参照しながら隠れ層に対応する演算を行い、かつ前記演算により生成された前記隠れ層の前記出力結果を異なる演算ユニットに転送することにより、前記複数の演算ユニットは前記リカレントニューラルネットワークを用いた前記データ群に対する処理を行う
ことを特徴とする、データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置及びデータ処理方法に関し、例えば、フィードバックループを含むデータ処理を並列に実行可能なデータ処理装置及びデータ処理方法に関する。
【背景技術】
【０００２】
画像データ等のデジタルデータ量の増加に対応してデータ処理の高速化が求められている。このような高速化の手法として、並列処理がある。一方、データ処理としては、あるデータの処理結果が次のデータの処理に反映される処理、すなわちフィードバックループを持つ処理が存在する。このような処理においては、あるデータの処理を行うために必要な情報の伝搬を待つ必要がある。さらに、伝搬元の情報もさらなる伝搬元の情報を反映するため、データ間に依存関係が存在する。このため、並列化による高速化は困難であった。
【０００３】
特許文献１は、フィードバック処理の一種である誤差拡散処理を並列化する方法が開示されている。特許文献１の手法では、それぞれの画素ラインに異なる演算部が割り当てられ、１つの演算部はＸ方向に並んだ画素を順に処理する。それぞれの演算部が、他の画素から拡散される濃度誤差が確定した画素を処理するように、処理タイミングをずらすことで、並列化が実現されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−１２５１２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
画像処理において、画像を複数の分割データ群（バンド領域）に分割し、それぞれのバンド領域について左側から順に処理を行う方法がよく用いられる。一方、特許文献１の手法では、高さが演算部の数に等しいバンド領域を処理することはできるが、高さが演算部の数とは異なるバンド領域を処理することは困難である。例えば、演算部の数に対して画素ラインの数が多い場合、演算部が割り当てられない画素ラインについて誤差を伝搬しながら並列処理する必要が生じるが、これは困難である。
【０００６】
本発明は、任意の分割データ群に対して同じ処理モジュール群を用いて並列にデータ処理を行うことを目的とする。
【課題を解決するための手段】
【０００７】
本発明の目的を達成するために、例えば、本発明のデータ処理装置は以下の構成を備える。すなわち、
入力画像に対して画像処理を行う画像処理装置であって、
処理画素とは異なる参照画素についての処理結果を参照して、前記処理画素についての処理結果を生成するＮ個の処理モジュールを備え、
前記Ｎ個の処理モジュールは、互いに異なる処理画素についての処理結果を並列に生成し、
前記Ｎ個の処理モジュールは、前記処理結果を転送可能なように接続されており、
入力画像中の処理領域の第１の画素ラインに含まれる連続したＮ個の画素についての処理結果は、所定の順序で互いに異なる前記処理モジュールにより逐次生成され、
前記Ｎ個の処理モジュールのそれぞれは、第１の画素ラインに含まれる第１の画素についての処理結果を生成すると、次に、前記第１の画素ラインとは異なる前記処理領域の第２の画素ラインに含まれ、前記第１の画素についての処理結果が生成されたことに応じて処理が可能になった第２の画素についての処理結果を生成する
ことを特徴とする画像処理装置。
【発明の効果】
【０００８】
任意の分割データ群に対して同じ処理モジュール群を用いて並列にデータ処理を行うことができる。
【図面の簡単な説明】
【０００９】
【図１】実施形態１，３に係る画像処理装置の構成例を示すブロック図。
【図２】実施形態１に係るライン数４及び５のバンド領域を示す図。
【図３】誤差拡散処理における参照画素と拡散係数の例を示す図。
【図４】実施形態１に係る画像処理部の構成例を示すブロック図。
【図５】実施形態１に係るライン数４のバンド領域の処理を説明する図。
【図６】実施形態３における画像処理を説明する図。
【図７】実施形態２に係る画像処理装置の構成例を示すブロック図。
【図８】実施形態１に係るライン遅延回路の構成を説明する図。
【図９】実施形態１，２に係るモジュール遅延回路の構成を説明する図。
【図１０】実施形態１，２に係るモジュール遅延解消回路の構成を説明する図。
【図１１】実施形態１に係るライン遅延解消回路の構成を説明する図。
【図１２】実施形態１における画像処理フローの一例を示す図。
【図１３】実施形態１，２における画像処理部の接続関係の一例を示す図。
【図１４】実施形態２におけるデータ転送経路を説明する図。
【図１５】実施形態１に係るライン数５のバンド領域の処理を説明する図。
【図１６】実施形態２におけるバンド領域の処理を説明する図。
【図１７】実施形態３における画像処理を説明する図。
【図１８】実施形態３における画像処理を説明する図。
【図１９】実施形態２に係るライン遅延回路の構成を説明する図。
【図２０】各実施形態で使用可能なコンピュータの基本構成を示す図。
【図２１】実施形態４に係るリアルタイム機械翻訳システムの概念図。
【図２２】リカレントニューラルネットワークの構成の一例を示す図。
【図２３】実施形態４に係るデータ処理装置の構成例を示すブロック図。
【図２４】実施形態４に係る処理部の構成例を示すブロック図。
【図２５】実施形態４におけるデータ処理動作を説明する図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施例を図面に基づいて説明する。ただし、本発明の範囲は以下の実施例に限定されるものではない。
【００１１】
［実施形態１］
実施形態１に係る画像処理装置は、入力画像に対して画像処理を行う。本実施形態に係る画像処理装置は、複数の画像処理部（処理モジュール）を備える。本実施形態において、画像処理装置はＮ個の画像処理部を備えるものとする。Ｎ個の画像処理部は、処理対象とする画素（以降、処理画素）に対して同様の画像処理を実行するものであり、それぞれの画像処理部は、処理画素とは異なる参照画素についての処理結果を参照して、処理画素についての処理結果を生成する。以下では、画像処理装置がＪ値画像をＩ値画像（Ｉ＜Ｊ）に変換する誤差拡散処理を行う場合について説明する。誤差拡散処理は、フィードバックループが用いられる処理の１つである。すなわち、処理画素についての処理結果（量子化結果）を得るためには、参照画素についての処理結果（量子化誤差又は拡散誤差）を参照する必要がある。また、本実施形態に係る画像処理装置は、複数の処理画素について並列に処理を行い、すなわち、複数の画像処理部は、互いに異なる処理画素についての処理結果を並列に生成する。以下で、画素ライン又はラインとは、主走査方向に並ぶ画素列のことを指し、データ列とも呼ばれる。
【００１２】
図１は、実施形態１に係る画像処理装置１９０の機能構成例を示すブロック図である。画像処理装置１９０は、画像入力部１００、画像供給部１０１、画像出力部１０３、及び画像処理部１１０〜１１３を備える。
【００１３】
画像入力部１００は入力画像のデータを取得する。本実施形態において、入力画像のデータは、Ｊ値画像のデータである。画像入力部１００は、例えば、スキャナ若しくはデジタルカメラ等の画像取得装置、又はハードディスク等の記録媒体から、入力画像のデータを取得する。そして、画像入力部１００は、入力画像中の処理領域のデータを読み出し、画像供給部１０１に提供する。本実施形態において、入力画像は複数の処理領域に分割され、それぞれの処理領域について処理が行われる。以下では、それぞれの処理領域をバンド領域と呼ぶ。
【００１４】
バンド領域の大きさは特に限定されない。一実施形態において、入力画像は所定の主走査方向画素数及び副走査方向画素数を有する矩形領域に分割される。ここで、バンド領域の主走査方向画素数は、入力画像の主走査方向画素数と同じでありうる。また、一実施形態において、バンド領域の主走査方向画素数は副走査方向画素数より大きい。本実施形態において、主走査方向は横方向であり、副走査方向は縦方向である。
【００１５】
画像供給部１０１は、複数の画像処理部に対し、処理を行うタイミングで処理画素の処理に必要な画素データを供給する。例えば、画像供給部１０１は、画像入力部１００から取得したバンド領域の画像データを画像処理部１１０〜１１３に供給できる。この際に、画像供給部１０１は、画像処理部１１０〜１１３が並列処理可能なように、バンド領域のＪ値の画素データを画像処理部１１０〜１１３に供給できる。
【００１６】
画像処理部１１０〜１１３は、画像供給部１０１から取得したＪ値の画素データに対して誤差拡散処理を行うことにより、Ｉ値の画素データを生成する。後述するように、複数の画像処理部は、処理結果を転送可能なように接続されている。複数の画像処理部間の接続方法は特に限定されず、例えば１つの画像処理部が他の全ての画像処理部と接続されていてもよい。一方、図１３（Ｅ）を参照して後述するように、参照画素の位置に応じて、処理結果の転送が不要である画像処理部間には接続が存在しなくてもよい。
【００１７】
本実施形態において、複数の画像処理部はリング状に接続されている。すなわち、画像処理部１１０と画像処理部１１１との接続、画像処理部１１１と画像処理部１１２との接続、画像処理部１１２と画像処理部１１３との接続との接続に加えて、画像処理部１１３と画像処理部１１０との接続が存在する。言い換えれば、ある画像処理部から、他の全ての画像処理部を１回ずつ通って、元の画像処理部に戻る接続経路が存在する。後述するように、一実施形態において、入力画像中の処理領域の第１の画素ラインに含まれる連続したＮ個の画素についての処理結果は、所定の順序で互いに異なる画像処理部により逐次生成される。ここで、所定の順序でリング状に接続された画像処理部を用いることにより、第１の方向（主走査方向）への拡散誤差の伝播を容易に行うことができる。
【００１８】
画像出力部１０３は、画像処理部１１０〜１１３から取得した画素データを用いて、Ｉ値の画像データを生成する。画像出力部１０３は、画像処理部１１０〜１１３で処理された画素データを、各ライン間の処理遅延を解消しながらメモリ（例えばＤＲＡＭ）に記録することにより、メモリにＩ値の画像データを出力することができる。
【００１９】
以下、画像処理装置１９０が行う処理について詳しく説明する。まず、誤差拡散処理について説明する。誤差拡散処理とは、処理画素の入力階調値と、処理画素の量子化結果である量子化代表値との差（量子化誤差）を、処理画素の近傍にある未処理の画素に所定の比率で拡散する処理を逐次的に行う画像処理である。図３は、誤差拡散処理の一例における、処理画素、参照画素、及び拡散係数の関係を示す。
【００２０】
誤差拡散処理においては、参照画素における量子化誤差に拡散係数を乗じて算出される拡散誤差が、処理画素に伝播される。拡散係数は、処理画素と参照画素との間の相対的な位置に応じた重みである。誤差拡散処理を行うためには、処理済みの画素の拡散誤差が参照画素に伝播されるのを待つ必要がある。誤差拡散処理のように、他の画素についての処理結果を参照して処理が行われる場合には、画素間の依存関係を考慮して処理の順序を決める必要がある。
【００２１】
例えば、図３に示す誤差拡散処理を行う場合、処理画素３０５の処理を行って画素値を決定するためには、参照画素である画素３０１〜３０４の処理が全て完了している必要がある。そして、処理画素３０５の処理が完了すると、処理画素３０５を参照画素として用いて処理が行われる次の画素に拡散誤差が伝搬される。そして、全ての参照画素からの拡散誤差が確定している画素が、次に処理される。
【００２２】
図４は、画像処理部１１０の詳細な構成を示すブロック図である。画像処理部１１１〜１１３も、画像処理部１１０と同様の構成をとることができる。すなわち、複数の画像処理部は同じ構成を有していてもよい。画像処理部１１０は、補正部４００、量子化部４０１、誤差算出部４０２、誤差メモリ４０３、及び拡散フィルタ４０４を有する。このように、複数の画像処理部のそれぞれは処理モジュールとして構成され、それぞれ処理部（補正部４００、量子化部４０１、誤差算出部４０２、及び拡散フィルタ４０４）とメモリ（誤差メモリ４０３）とを有している。画像処理部１１０〜１１３の物理的な構成は特に限定さない。例えば、画像処理部１１０は、補正部４００、量子化部４０１、誤差算出部４０２、及び拡散フィルタ４０４の機能を実現する回路又はプロセッサのような処理ユニットと、誤差メモリ４０３として働くメモリと、を備えていてもよい。
【００２３】
補正部４００は、入力されるＪ値の画素データに対し、後述する参照画素からの拡散誤差の累積値（補正値）を加算する。Ｊ値の画素データは、例えば、１画素８ビット（２５６階調）で表現される画素データであってもよい。
【００２４】
量子化部４０１、補正部４００で補正されたＪ値の画素データを、Ｉ値の画素データに量子化する。例えば、量子化部４０１は、Ｊ値の画素データを、濃度値０又は濃度値２５５に対応する２値の階調値に量子化する。誤差算出部４０２は、補正部４００で補正されたＪ値の画素データと、量子化部４０１で量子化されたＩ値の画素データと、の誤差を算出する。
【００２５】
誤差メモリ４０３は、誤差算出部４０２が算出した量子化誤差を保持する。誤差メモリ４０３は、他の画像処理部１１１〜１１３から転送された、参照画素の量子化誤差を保持することもできる。また、誤差算出部４０２が算出した量子化誤差を、誤差メモリ４０３から他の画像処理部１１１〜１１３に転送することもできる。拡散フィルタ４０４は、誤差算出部４０２又は誤差メモリ４０３から送られる参照画素の量子化誤差に、拡散係数を乗じて拡散誤差を算出する。また、拡散フィルタ４０４は、処理画素に対する拡散誤差の累積値を算出し、この累積値を補正部４００に出力する。
【００２６】
このように、画像処理部１１０は、入力されるＪ値の画素データと、参照画素の拡散誤差とを用いて、Ｊ値の画素データを量子化し、量子化誤差から拡散誤差を算出し伝搬することが可能である。なお、誤差メモリ４０３は、参照画素の量子化誤差の代わりに、参照画素の拡散誤差を保持してもよい。
【００２７】
もっとも、画像処理部１１０〜１１３の構成は上記のものには限られない。参照画素からの量子化誤差又は拡散誤差を受け取ることができ、処理画素の画素値を量子化して量子化誤差を算出し、この量子化誤差又は拡散誤差を転送することができる、任意の構成を有する処理部を用いることができる。
【００２８】
（ライン数４のバンド領域に対する処理例）
以下、具体的な処理例として、画像入力部１００が入力画像から読み出したライン数４のバンド領域に対する誤差拡散処理について説明する。この例では、この処理例では、４つの画像処理部１１０〜１１３を用いて並列数４の並列処理が行われる。また、第１の方向に連続する並列数に等しい数の画素に対しては、異なる画像処理部１１０〜１１３が処理（量子化処理）を行う。一方で、画像処理部が処理画素に対する処理を行った結果、処理画素から第２の方向に現れた処理可能な画素に対しては、同じ画像処理部が処理を行う。１つの画像処理部は、第２の方向に位置する画素を処理することを繰り返す。そして、この画像処理部は、最後のデータ列（この例ではバンド領域に含まれる４列目のデータ列）の画素に対する処理を行うと、次に最初のデータ列（この例ではバンド領域に含まれる１列目のデータ列）にある、処理可能な画素に対する処理を行う。以下の説明において、第１の方向は主走査方向である。また、第２の方向は、参照画素の位置に応じて定めることができる。
【００２９】
図５（Ａ）を参照して、この処理順序について説明する。以下の処理例では、図３に示されるとおり、処理画素の左上、上、右上、及び左に隣接する画素が、参照画素として用いられる。したがって、処理可能な画素とは、処理画素の左上、上、右上、及び左に隣接する画素の処理が終わっている（すなわち量子化値及び量子化誤差が計算されている）画素である。このように、一実施形態において、参照画素は、処理画素より上の画素ラインにあるか、又は処理画素と同じ画素ラインの処理画素より左側にある。
【００３０】
サイクルＣ１において、処理可能な画素は、処理開始位置の画素５１１のみである。したがって、画像処理部１１０は、処理開始位置の画素５１１を処理する。すると、全ての参照画素の処理が完了している画素５１２が、処理可能な画素となる。ここで、画素５１２は、処理された画素５１１から第１の方向（主走査方向）に位置している。画素５１１と画素５１２とは第１の方向に連続しているため、画素５１１を処理した画像処理部１１０とは異なる画像処理部、例えば画像処理部１１０の次の画像処理部１１１によって、サイクルＣ２において処理される。なお、画素５１２の誤差参照範囲には、画素が存在しない領域があるが、ここでは、この領域には処理が完了した画素が存在し、この画素からの拡散誤差はないものとして扱われる。しかしながら、例えば別のバンドからの拡散誤差が伝播される場合、この拡散誤差を考慮して処理を行ってもよい。
【００３１】
サイクルＣ２において、画像処理部１１１によって画素５１２が処理され、その結果画素５１３及び画素５２１が処理可能な画素となる。画素５１３は、処理された画素５１２から第１の方向に位置している。画素５１１〜５１３は第１の方向に連続しているため、これらを処理した画像処理部１１０〜１１１とは異なる画像処理部、例えば画像処理部１１１の次の画像処理部１１２によって、サイクルＣ３において処理される。
【００３２】
一方、画素５２１は、処理された画素５１２から第１の方向とは異なる第２の方向に位置している。このため、画素５２１は、サイクルＣ２において画素５２１の参照画素の処理を完了した画像処理部１１１によって、サイクルＣ３において処理される。このように、この処理例において第２の方向は、画素５１２から画素５２１の方向、すなわち下に１ライン、左に１画素進む方向に決まる。以降の処理サイクルにおいて、画像処理部１１１は、第２の方向に向かって４つのデータ列の画素を順次処理する。すなわち、画像処理部１１１は、次のサイクルにおいて、前のサイクルで処理した画素から所定の相対位置にある画素（この例では下に１ライン及び左に１画素）を処理する。（もっとも、画素５３１の１画素左、及び画素５４１の２画素左に画素は存在しないので、これらの画素に対する処理タイミングにおいては、画像処理部１１１は待機を行う。）
【００３３】
４つのデータ列の画素を処理した画像処理部は、１番目のデータ列の処理可能な画素を次に処理し、さらに第２の方向に向かって４つのデータ列の画素を順次処理することを繰り返す。図５（Ｂ）は、このような構成において、各サイクルＣ１〜Ｃ７において各画像処理部１１０〜１１３が処理する画素を示す。サイクルＣ１〜Ｃ６までは、画像処理部は、処理の対象となる処理画素が存在しないために処理を行わないことがある。この場合には、画像処理部は誤差を伝搬しなくてもよい。サイクルＣ７以降は、各画像処理部は処理の対象となる処理画素を有しており、同時に４つの画素が処理画素となる。
【００３４】
本実施形態の構成によれば、複数の画像処理部による同時並列処理の対象となる画素は、同じライン上には存在しない。また、複数の画素を同時に処理した結果現れる複数の処理可能な画素は、複数の画素のそれぞれから第２の方向の所定の相対位置にあるため、やはり同じライン上には存在しない。このように、参照範囲に示される依存関係のために、同時に現れる処理可能な画素はそれぞれ異なる高さ方向にある。また、図３に示される参照範囲を用いる場合、同時に現れる処理可能な画素は、横方向の位置が異なるし、斜め方向（下に１ライン及び左に１画素ずつ進む方向）の位置も異なる。これは、各画像処理部が、縦方向、横方向、及び斜め方向の位置が互いに異なる複数の画素を処理し、その次は第２の方向の所定の相対位置に現れる処理可能な画素を処理する、という、第２の方向への規則的な走査を行っているためである。このような構成を有するために、複数の画像処理部１１０〜１１３はそれぞれ１つの画素を同時に処理できる。
【００３５】
また、第２の方向に向かってそれぞれの（例えばＭ個の）データ列にあるそれぞれの（例えばＭ個の）画素の処理を行った後、処理部は１番目のデータ列の処理可能な画素を次に処理する。このような走査を行うことで、順に配置された異なる複数の画像処理部１１０〜１１３のそれぞれは、第１の方向に連続する複数の画素のそれぞれに対応し、対応する画素の処理を行う。そして、末尾の画像処理部１１３が処理した画素と、第１の方向に連続する画素は、先頭の画像処理部１１０が処理するという、ループ状の処理が行われる。この構成により、データ列の長さが変わったとしても、またバンド領域に含まれるデータ列の数が変わったとしても、処理を行う画像処理部の依存関係は変わらない。すなわち、１つの画像処理部が１つの画素の処理を行う際に、この画素の参照画素の処理を行った画像処理部は決まっているため、接続された特定の画像処理部から量子化誤差又は拡散誤差を取得することにより、この画素の処理を行うことができる。このように、画像処理部間の接続関係が処理の途中で切り替わることがないため、同じ構成を用いて並列処理を行うことができる。
【００３６】
次に、画像供給部１０１が画像処理部１１０〜１１３に画素データを供給する方法について説明する。図２は、処理の対象となるバンド領域２３０及びバンド領域１４３０を示す。バンド領域２３０及びバンド領域１４３０には、各処理画素が処理される処理サイクルが数値で示されている。また、画素データの供給先となる画像処理部が背景パターンとして図示されている。
【００３７】
画像供給部１０１は、ライン遅延回路８００及びモジュール遅延回路９００を有している。まず、図８を参照して、ライン遅延回路８００を説明する。この処理例において、ライン遅延回路８００はバッファ８４１〜８６２を備える。バンド領域２３０には、入力データ列８０１〜８０４が含まれている。ライン遅延回路８００は、所定の数の画素についての画素データを、各入力データ列８０１〜８０４から順次取得する。この処理例では、ライン遅延回路８００は１サイクルに４画素の画素データを取得する。ここでは、１サイクルで取得される画素データに対応する画素の数は、並列数と同じであり、４である。すなわち、ライン遅延回路８００は、入力データ列８０１〜８０４まで順に４画素ずつ画素データを取得した後、さらに入力データ列８０１〜８０４まで順に４画素ずつ未取得の画素データを取得する処理を繰り返す。
【００３８】
そして、画像供給部１０１は、取得した画素データをモジュール遅延回路９００へと転送する。ここで、上のデータ列と比較して、下に隣接するデータ列には１画素分の遅延が付加されるように、ライン間遅延を加えてから、ライン遅延回路８００は画素データをモジュール遅延回路９００へと転送する。すなわち、あるサイクルにおいて、上のラインの第１の横位置から右に連続する所定個数の画素の画素データが、ライン遅延回路８００から出力される。そして、次のサイクルでは、隣接する下のラインの、第１の横位置よりも左側にある第２の横位置から右に連続する所定個数の画素の画素データが、ライン遅延回路８００から出力される。このように、第１の横位置よりも第２の横位置の方が左側となるように、隣接するラインの画素データを転送することを、ここではライン間遅延を加えるという。
【００３９】
以下、具体的な処理の一例を説明する。１列目の入力データ列８０１に対してライン間遅延は挿入されない。サイクルＣ０において、ライン遅延回路８００は入力データ列８０１から４画素の画素データ８１１を取得し、バッファ８４１〜８４４に格納する。ここで、取得した画素データ８１１に含まれる各画素の画素データは、左側の画素の画素データが前方のバッファに格納されるように、降順に格納される。例えば、画素データ８１１のうち、一番左の画素の画素データはバッファ８４４に格納され、一番右の画素の画素データはバッファ８４１に格納される。後述するように、ライン遅延回路８００内のバッファに含まれるデータに対してはシフト動作が行われ、ここではシフト方向にあるバッファを前方のバッファと呼ぶ。そして、サイクルＣ１において、バッファ８４１〜８４４に格納された４画素の画素データは、画素データ８３１としてモジュール遅延回路９００に出力される。
【００４０】
次に、入力データ列８０２の処理について説明する。入力データ列８０２には、入力データ列８０１との間のライン間遅延が１画素分挿入される。サイクルＣ１において、ライン遅延回路８００は、入力データ列８０２から４画素の画素データ８１２を取得し、バッファ８４５〜８４８に降順に格納する。サイクルＣ２において、バッファ８４６〜８４９に格納された４画素の画素データは、画素データ８３２としてモジュール遅延回路９００に出力される。バッファ８４５は４段のバッファにより構成される。バッファ８４５は、格納した画素データを次の画素データ８１６が取得されるサイクルＣ５の前まで保持する。そして、サイクルＣ５で次の４画素の画素データ８１６がバッファ８４５〜８４８に格納される際に、バッファ８４５の画素データはバッファ８４９に格納される。言い換えれば、バッファ８４５の画素データは、バッファ８４９へとシフトされる。次のサイクルＣ６において、バッファ８４６〜８４９に格納された４画素の画素データは画素データ８３２としてモジュール遅延回路９００に出力される。
【００４１】
入力データ列８０３の処理は、入力データ列８０３に入力データ列８０２とのライン間遅延が１画素分挿入されることを除き、入力データ列８０２の処理と同様である。すなわち、サイクルＣ２において、ライン遅延回路８００は、入力データ列８０３から画素データ８１３を取得してバッファ８５０〜８５３に格納する。サイクルＣ３において、バッファ８５２〜８５５に格納された画素データ８３３はモジュール遅延回路９００に出力される。また、サイクルＣ６で画素データ８１７がバッファ８５０〜８５３に格納される際に、バッファ８５０及びバッファ８５１の画素データはバッファ８５４及びバッファ８５５にシフトされて格納される。サイクルＣ７において、同様に画素データ８３３はモジュール遅延回路９００に出力される。
【００４２】
入力データ列８０４の処理も、入力データ列８０４に入力データ列８０３とのライン間遅延が１画素分挿入されることを除き、入力データ列８０３の処理と同様である。すなわち、サイクルＣ３において入力データ列８０４からの画素データ８１４がバッファ８５６〜８５９に格納され、サイクルＣ４においてバッファ８５９〜８６２に格納された画素データ８３４はモジュール遅延回路９００に出力される。サイクルＣ７において画素データ８１８がバッファ８５６〜８５９に格納される際に、バッファ８５６〜８６８の画素データはバッファ８６０〜８６２にシフトされて格納される。サイクルＣ８において、画素データ８３４はモジュール遅延回路９００に出力される。
【００４３】
この処理例では、ライン間遅延は１ラインにつき１画素である。これは、第２の方向への第１の画素と第２の画素との間の相対位置を反映している。すなわち、１つの画像処理部は、第１の画素ラインの第１の画素と、第１の画素ラインの下にある第２の画素ラインの第２の画素と、を順に処理する。ここで、第２の画素は第１の画素よりも列位置が１画素左にあるため、第１の画素データを処理したサイクルの次のサイクルで第２の画素データが入力されるように、第２の画素ラインからの入力データ列にはライン間遅延が１画素分挿入される。一方、行う画像処理の内容によっては、タイミング制約を緩和するためにライン間遅延を増加させてもよい。一方、ライン間遅延を増加させると、参照画素の処理結果（例えば量子化誤差又は拡散誤差）を保持する期間（サイクル数）が長くなるため、回路中に必要な誤差バッファの数が増加するかもしれない。
【００４４】
次にモジュール遅延回路９００について図９を参照して説明する。上記の説明からわかるように、モジュール遅延回路９００には、１サイクルにつき、第１の方向に連続する４つの画素の画素データが入力される。モジュール遅延回路９００は、これら４つの画素の画素データを、それぞれ、画像処理部１１０〜１１３に転送する。この際、モジュール遅延回路９００は、画像処理部１１０〜１１３が順に処理を行うのに合わせて、モジュール間遅延を付加して転送を行う。この処理例では、モジュール間遅延は１サイクルである。すなわち、モジュール遅延回路９００は、４つの画素の画素データが入力されると、１つ目の画素データを同じサイクルにおいて画像処理部１１０に転送し、２つ目の画素データを次のサイクルにおいて画像処理部１１１に転送する。また、モジュール遅延回路９００は、３つ目の画素データをその次のサイクルにおいて画像処理部１１２に転送し、４つ目の画素データをさらに次のサイクルにおいて画像処理部１１３に転送する。このようにモジュール間遅延を付加するために、モジュール遅延回路９００は、バッファ９１１〜９１６を有している。
【００４５】
モジュール遅延回路９００の処理をさらに詳細に説明する。サイクルＣ１では、４画素の画素データ８３１がライン遅延回路８００から入力される。バッファ８４１〜８４３に格納されていた画素データは、それぞれバッファ９１３〜９１１に格納される。バッファ９１１〜９１３は、それぞれ画像処理部１１１〜１１３へ転送される画素データを格納する。このように、左側の画素の画素データは、後側の画像処理部へと転送される。また、バッファ８４４に格納されていた画素データは、モジュール遅延回路９００内のバッファには格納されず、サイクルＣ１において画像処理部１１０に出力される。
【００４６】
サイクルＣ２では、同様に４画素の画素データ８３２がライン遅延回路８００から入力される。バッファ８４６〜８４８に格納されていた画素は、それぞれバッファ９１３〜９１１に格納される。バッファ８４９に格納されていた画素データは、モジュール遅延回路９００内のバッファには格納されず、サイクルＣ２において画像処理部１１０に出力される。バッファ９１１に格納されていた画素データは画像処理部１１１に出力される。また、バッファ９１２及びバッファ９１３に格納されていた画素データはそれぞれバッファ９１４及びバッファ９１５に格納される。
【００４７】
サイクルＣ３でも同様に、画素データ８３３がライン遅延回路８００から入力されて、バッファ８５５に格納されていた画素データは画像処理部１１０に出力され、バッファ８５２〜８５４に格納されていた画素データはバッファ９１３〜９１１に格納される。また、バッファ９１１及びバッファ９１４に格納されていた画素データは画像処理部１１１及び画像処理部１１２に出力される。バッファ９１２、バッファ９１３、及びバッファ９１５に格納されていた画素データは、それぞれバッファ９１４、バッファ９１５、及びバッファ９１６に転送される。
【００４８】
サイクルＣ４でも同様に、画素データ８３４がライン遅延回路８００から入力されて、バッファ８６２に格納されていた画素データは画像処理部１１０に出力され、バッファ８５９〜８６１に格納されていた画素データはバッファ９１３〜９１１に格納される。また、バッファ９１１、バッファ９１４、及びバッファ９１６に格納されていた画素データは画像処理部１１１、画像処理部１１２、及び画像処理部１１３に出力される。バッファ９１２、バッファ９１３、及びバッファ９１５に格納されていた画素データは、それぞれバッファ９１４、バッファ９１５、及びバッファ９１６に転送される。
【００４９】
サイクルＣ５以降も同様の動作が行われる。このように、画像供給部１０１は、第１の方向に連続する並列数分の画素の画素データを、それぞれを、１サイクルおきに画像処理部１１０〜１１３に供給する。このような動作により、画像供給部１０１は、バンド領域２３０内の画素データを、図２に示す通りの画像処理部１１０〜１１３へと所定の順序で供給できる。
【００５０】
画像出力部１０３は、画像処理部１１０〜１１３の処理により得られた画素データのライン間遅延及びモジュール間遅延を解消し、メモリ（ＤＲＡＭ等）に出力する。画像出力部１０３は、画像供給部１０１が与えたライン間遅延とモジュール間遅延が解消されるように、画素データの出力タイミングに遅延を与える。以下の構成は一例にすぎず、遅延の解消にはどのような構成を用いてもよい。
【００５１】
画像出力部１０３は、モジュール遅延解消回路１０００と、ライン遅延解消回路１１００とを備える。図１０（Ａ）を参照して、モジュール遅延解消回路１０００を説明する。モジュール遅延解消回路１０００は、第１の方向に連続する並列数分の画素の画素データに対し、それぞれ遅延を加える。こうして、モジュール遅延回路９００が画像処理部１１０〜１１３に画素データを供給する際に加えられた遅延差が解消される。その結果、第１の方向に連続する並列数分の画素の画素データが、モジュール遅延解消回路１０００からライン遅延解消回路１１００へと同じタイミングで転送される。この動作のために、モジュール遅延解消回路１０００は、図１０（Ａ）に示すように、バッファ１０１１〜１０１６を有している。そして、第１の方向に連続する並列数分の画素の画素データのうち、先のサイクルで処理された画素データは、後のサイクルで処理された画素データよりも１サイクル長く保持されてから出力される。
【００５２】
モジュール遅延解消回路１０００には、１サイクルに４画素の画素データ、すなわち画像処理部１１０〜１１３のそれぞれから１画素の画素データが入力される。画像処理部１１０からバッファ１０１１に入力された画素データは、バッファ１０１４及びバッファ１０１６を介して３サイクル後にライン遅延解消回路１１００に出力される。同様に、画像処理部１１１からバッファ１０１２に入力された画素データは、バッファ１０１５を介して２サイクル後にライン遅延解消回路１１００に出力される。画像処理部１１２からバッファ１０１３に入力された画素データは、１サイクル後にライン遅延解消回路１１００に出力される。画像処理部１１３からモジュール遅延解消回路１０００に入力された画素データは、遅延なしにライン遅延解消回路１１００に出力される。
【００５３】
サイクルＣ１〜Ｃ８においてモジュール遅延解消回路１０００からライン遅延解消回路１１００に出力される画素データ１０２１〜１０２８を図１０（Ｂ）に示す。このように、サイクルＣ１でモジュール遅延回路９００に転送された４画素の画素データ８３１は、処理後、サイクルＣ４で遅延差が解消されてモジュール遅延解消回路１０００から画素データ１０２４として出力される。画素データ１０２１〜１０２３は、モジュール遅延回路９００とモジュール遅延解消回路１０００により加えられた３サイクル分の遅延を表し、これらに対するライン遅延解消回路１１００による処理は不要である。
【００５４】
図１１を参照して、ライン遅延解消回路１１００について説明する。ライン遅延解消回路１１００は、モジュール遅延解消回路１０００から入力された画素データのライン間遅延差を解消する。すなわち、ライン遅延解消回路１１００は、下のデータ列と比較して、上に隣接するデータ列には１画素分の遅延が付加されるように、ライン間遅延を加えてから、画素データを出力する。そのための具体的な構成は、ライン遅延回路８００と同様でありうる。
【００５５】
すなわち、ライン遅延解消回路１１００は、バッファ１１４１〜１１６２を有している。ライン遅延解消回路１１００には、図１０（Ｂ）に示されるように１サイクルに４画素の画素データがモジュール遅延解消回路１０００から入力される。画素データ１０２４は、バッファ１１４４〜１１４１に降順に入力される。例えば、画素データ１０２４のうち、一番左の画素の画素データはバッファ１１４４に格納され、一番右の画素の画素データはバッファ１１４１に格納される。入力された画素データには、３画素分のライン間遅延が付けられて、メモリ（例えばＤＲＡＭ）に出力される。すなわち、バッファ１１４４に入力された画素データは、次のサイクルで出力される。また、バッファ１１４３〜バッファ１１４１に入力された画素データは、入力から４サイクル後にバッファ１１４７〜１１４５へとシフトされ、入力から５サイクル後に出力される。
【００５６】
同様に、画素データ１０２５はバッファ１１５１〜１１４８に降順に入力され、２画素分のライン遅延が付けられてメモリに出力される。画素データ１０２６はバッファ１１５７〜１１５４に降順に入力され、１画素分のライン遅延が付けられてメモリに出力される。画素データ１０２７はバッファ１１５９〜１１６２に降順に入力され、ライン遅延を付加されずにメモリに出力される。
【００５７】
ここでは画素データ１０２７までの処理を説明した。以降、ライン遅延解消回路１１００に入力される画素データは、順に３画素、２画素、１画素、０画素の遅延が付けられ、ライン遅延解消回路１１００から出力される。ライン遅延解消回路１１００からメモリへは降順に並んだ画素データが出力されるため、昇順になるように変換されてメモリに格納される。以上の処理により、サイクルＣ５〜Ｃ８では入力データ列８０１〜８０４のそれぞれの１画素目の処理結果である画素データが出力され、サイクルＣ９〜Ｃ１２では入力データ列８０１〜８０４のそれぞれの２〜５画素目の処理結果である画素データが出力される。
【００５８】
こうして、画像出力部１０３には、バンド領域２３０の各画素についての処理結果である画素データが蓄積され、結果としてバンド領域２３０の誤差拡散結果が得られる。以上のように、画像出力部１０３はモジュール遅延解消回路１０００及びライン遅延解消回路１１００を備える。そして、画像出力部１０３は、画像供給部１０１が加えたライン間遅延及びモジュール間遅延による遅延差がなくなるように遅延を加えてから画素データを出力する。
【００５９】
（ライン数５のバンド領域に対する処理例）
以下、別の具体的な処理例として、画像入力部１００が入力画像から読み出したライン数５のバンド領域に対する誤差拡散処理について説明する。誤差拡散処理における参照画素及び拡散係数は図３に示した通りである。
【００６０】
各画素の画素データを処理する画像処理部１１０〜１１３の決定方法は、ライン数４のバンド領域に対する処理の場合と同様である。この処理例で、画像処理部は、５番目のデータ列の画素を処理した後、１番目のデータ列の処理可能な画素を処理する。この処理順のイメージ図を図１５（Ａ）に示す。
【００６１】
図１５（Ａ）を参照して、この例における処理順序について説明する。サイクルＣ１において、処理可能な画素は処理開始位置の画素１５１１のみであり、画像処理部１１０は画素１５１１を処理する。すると、全ての参照画素の処理が完了している画素１５１２が処理可能な画素となる。画素１５１２は、処理された画素１５１１から主走査方向に位置しているため、次の画像処理部１１１によってサイクルＣ２において処理される。
【００６２】
サイクルＣ２において、画像処理部１１１によって画素１５１２が処理され、その結果画素１５１３及び画素１５２１が処理可能な画素となる。主走査方向に位置する画素１５１３は次の画像処理部１１２によってサイクルＣ３において処理される。一方、主走査方向とは異なる第２の方向に位置する画素１５２１は、サイクルＣ２において参照画素の処理を完了させた画像処理部１１１により、サイクルＣ３において処理される。このように、第２の方向は、画素１５１２から画素１５２１の方向、すなわち下に１データ列、左に１画素進む方向に決まる。
【００６３】
画素１５２１は、画像処理部１１０又は画像処理部１１３が処理してもよい。しかしながらこの場合、画像処理部１１０は、サイクルＣ１で画素１５１１を処理し、サイクルＣ２では待機してから、サイクルＣ３で画素１５２１を処理することになる。画像処理部１１１が画素１５２１を処理することにより、並列化による処理高速化の効果が向上する。また、画像処理部１１３が画素１５２１を処理する場合、サイクルＣ１における画素１５１１の拡散誤差をサイクルＣ３まで保持する必要があり、より長いサイクルの間誤差を保持する必要があるため、回路中の拡散誤差を保持するバッファが増加する。画像処理部１１１が画素１５２１を処理することにより、拡散誤差を保持するバッファの数を減らすことができる。
【００６４】
サイクルＣ４以降も、画像処理部１１０〜１１３は同様の処理を行う。図１５（Ｂ）は、このような構成において、各サイクルＣ１〜Ｃ９において各画像処理部１１０〜１１３が処理する画素を示す。ライン数４の場合と同様、サイクルＣ１〜Ｃ８までは処理を行わない画像処理部が存在するが、サイクルＣ９以降は、４つの画素の画素データが画像処理部１１０〜１１３で同時に処理される。
【００６５】
この処理例でも、画像処理部は、第２の方向に向かってそれぞれの（例えばＭ個の）データ列にあるそれぞれの（例えばＭ個の）画素の処理を行った後、処理部は１番目のデータ列の処理可能な画素を次に処理する。この処理例でも、画像処理部間の接続関係はライン数４のバンド領域に対する処理と同じであるから、ライン数４のバンド領域に対する処理と同じ回路構成の画像処理部１１０〜１１３を用いることができる。
【００６６】
次に、画像供給部１０１が画像処理部１１０〜１１３に画素データを供給する方法について説明する。ここでは、画像入力部１００が図２（Ｂ）に示すライン数５のバンド領域１４３０を読み出したときの処理について説明する。図２（Ｂ）は、各処理サイクルにおける、処理画素（処理される処理サイクルが数値で示されている）及び画素データの供給先となる画像処理部を示す。
【００６７】
画像供給部１０１は、ライン遅延回路及びモジュール遅延回路を有している。この処理例ではバンド領域のライン数が５なので、ライン遅延回路は最大４画素のライン間遅延を付加可能である。この処理例におけるライン遅延回路の構成は、この点を除き、ライン遅延回路８００と同様であり、詳しい説明は省略する。すなわち、ライン遅延回路は、１番目のデータ列からの画素データはそのまま出力し、２〜５番目のデータ列からの画素データは１〜４画素分のライン間遅延を付加してから出力する。
【００６８】
モジュール遅延回路の構成はバンド領域のライン数が４の場合と同様であり、詳しい説明は省略する。すなわち、ライン遅延回路から入力された４画素分の画素データのうち、１番目の画素データはすぐに画像処理部１１０に入力される。また、２〜４番目の画素データは、１〜３サイクル後に画像処理部１１１〜１１３に入力される。
【００６９】
このように、画像供給部１０１は、ライン遅延回路とモジュール遅延回路とを用いることで、画像処理部１１０〜１１３へと、図２（Ｂ）に示す順序で画素データを供給することができる。
【００７０】
画像出力部１０３は、バンド領域のライン数４の場合と同様に、画像処理部１１０〜１１３の処理により得られた画素データのライン間遅延及びモジュール間遅延を解消し、メモリ（ＤＲＡＭ等）に出力する。画像出力部１０３は、モジュール遅延解消回路と、ライン遅延解消回路とを備える。モジュール遅延解消回路の構成はライン数４の場合と同様であり、詳しい説明は省略する。すなわち、モジュール遅延解消回路は、同じサイクルで画像処理部１１０〜１１２から入力された画素データを、３〜１サイクル後にライン遅延解消回路に出力するとともに、画像処理部１１３から入力された画素データはそのままライン遅延解消回路に出力する。サイクルＣ１〜Ｃ１０においてモジュール遅延解消回路からライン遅延解消回路に出力される画素データ１０２３〜１０４０を図１０（Ｃ）に示す。バンド領域のライン数が４の場合と同様、モジュール遅延回路により付加された遅延差が解消されていることがわかる。
【００７１】
ライン遅延解消回路の構成は、バンド領域のライン数が５なので、最大４画素のライン間遅延を付加可能な点を除き、ライン遅延解消回路１１００と同様であり、詳しい説明は省略する。すなわち、ライン遅延解消回路は、画素データ１０３５〜１０３９（それぞれ１番目から５番目のデータ列に対応）のそれぞれに対して４〜０画素分のライン遅延を付加してメモリ（例えばＤＲＡＭ）に出力する。以降も、各データ列についての４画素の画素データがライン遅延回路に入力され、４〜０画素の遅延が付加されてメモリに出力される処理が繰り返される。
【００７２】
（実施形態１における動作）
実施形態１における動作を、図１２のフローチャートに沿って説明する。ステップＳ１２００において、画像入力部１００はバンド領域のデータを読み出す。ステップＳ１２０１において、画像供給部１０１は画像入力部１００から４画素ずつＪ値の画素データを取得する。そして、画像供給部１０１は、取得した画素データに、上記のようにライン遅延及びモジュール間遅延を付加して画像処理部１１０〜１１３に出力する。
【００７３】
既に説明したように、画像処理部１１０〜１１３による画素の処理順序は決まっている。すなわち、処理領域の第１の画素ラインに含まれる連続したＮ個の画素についての処理結果は、所定の順序で互いに異なる画像処理部により逐次生成される。例えば、第１の方向（主走査方向）に連続する並列数に等しい数の画素に対しては、異なる画像処理部１１０〜１１３が処理（量子化処理）を行う。また、第１の画素ラインに含まれる連続したＮ個の画素についての処理結果は、所定の順序で互いに異なる画像処理部により連続した処理サイクルにおいて生成される。なお、上記の処理例において、１つの画像処理部は、１つの画素ラインに含まれる画素のみを処理するのではなく、１〜Ｍ番目の画素ラインのそれぞれに含まれる画素を少なくとも１つずつ処理する。
【００７４】
また、複数の画像処理部のそれぞれは、第１の画素ラインに含まれる第１の画素についての処理結果を生成すると、次に、第２の画素についての処理結果を生成する。この第２の画素は、第１の画素ラインとは異なる処理領域の第２の画素ラインに含まれ、第１の画素についての処理結果が生成されたことに応じて処理が可能になった画素である。例えば、画像処理部が処理画素に対する処理を行った結果、処理画素から第２の方向に現れた処理可能な画素に対しては、同じ画像処理部が処理を行う。１つの画像処理部は、第２の方向に位置する画素を処理することを繰り返し、Ｍ番目の画素ラインにある画素に対する処理を行うと、次に１番目の画素ラインにある処理可能な画素に対する処理を行う。ここで、処理領域はＭ行の画素ラインを有しているものとする。
【００７５】
また、第２の画素は、第１の画素から第２の方向の所定の相対位置にある画素でありうる。すなわち、第１の画素と第２の画素との相対位置は、参照画素の位置に依存する一方で、第１の画素の位置にかかわらず同じでありうる。例えば、第１の画素の位置がｉ行ｊ列である場合、第２の画素の位置はｉ＋１行ｊ−ａ列でありうる。ここで、ａは参照画素の位置によって定まる任意の整数（正の整数、負の整数、又はゼロ）である。例えば、図３に示す参照画素が用いられる場合において、ａは１である。
【００７６】
一方で、処理領域がＭ行（Ｍ＞Ｎ）の画素ラインを有している場合に、Ｎ個の画像処理部は、１行目の画素ラインの処理が全て終了する前に、Ｍ行目の画素ラインの処理を開始する。すなわち、本実施形態において、バンド領域の処理は左から右に向けて完了する。
【００７７】
画像供給部１０１は、上記のような処理が実現できるように、複数の画像処理部に画素データを供給する。例えば、画像供給部１０１は、第１の画素ラインに含まれる連続するＮ個の処理画素の画素データを、所定の順序でＮ個の画像処理部に逐次供給することができる。また、画像供給部１０１は、第１の画素についての処理が完了した画像処理部に対して第２の画素の画素データを供給することができる。さらに、画像供給部１０１は、１つの画像処理部に対し、１番目の画素ラインにある処理画素の画素データから、Ｍ番目の画素ラインにある処理画素の画素データまでを順に供給した後、１番目の画素ラインにある処理画素の画素データを供給することができる。
【００７８】
ステップＳ１２０２において、画像処理部１１０〜１１３は誤差拡散処理を行う。また、ステップＳ１２０３において、画像処理部１１０〜１１３は拡散誤差の伝搬を行う。本実施形態では、画像処理部１１０が処理画素を処理する際に、それぞれの参照画素を処理した画像処理部は固定される。すなわち、図１３（Ａ）に示されるように、処理画素の左上の画素は画像処理部１１２により処理され、処理画素の上及び左の画素は画像処理部１１３により処理され、処理画素の右上の画素は画像処理部１１０により処理されている。これは、画像処理部１１０〜１１３による、第１の方向に連続する画素の処理順序と、第２の方向に連続する画素の処理順序とが決まっているからである。すなわち、これは、第１の方向（主走査方向）に連続する４画素はそれぞれ画像処理部１１０〜１１３が処理し、第２の方向（左下方向）に連続する画素は同じ画像処理部が処理するためである。これは、図１３（Ｂ）〜（Ｄ）に示されるように、画像処理部１１１〜１１３が処理画素を処理する際にも同様である。また、この関係は、ライン数にかかわらず（例えばライン数が４であっても５であっても）一定である。
【００７９】
このように、本実施形態において、処理画素を処理する画像処理部と、参照画素を処理した（すなわち誤差を伝搬する）画像処理部との、相対位置は固定されている。したがって、参照画素を処理した画像処理部から、処理画素を処理する画像処理部へと、拡散誤差を伝播できるように、各処理部間を接続することにより、誤差伝播処理が可能となる。この接続関係は、処理の途中で変更する必要はないし、処理領域の大きさ（例えば高さ又は長さ）を変えた場合にも変更する必要はない。図１３（Ｅ）に、画像処理部１１０〜１１３の間の接続関係の一例を示す。
【００８０】
なお、参照される処理結果（例えば量子化誤差又は拡散誤差）は、処理画素を処理する画像処理部が保持してもよいし、参照画素を処理した画像処理部が保持してもよい。いずれの場合でも、参照される処理結果は、所望のタイミングで参照画素を処理した画像処理部から処理画素を処理する画像処理部へと転送できる。一実施形態において、第１の画像処理部は、複数の参照画素のうち１つについての処理結果を、第１の画像処理部の処理結果を格納する第１の画像処理部のメモリ（例えば誤差メモリ４０３）から取得する。例えば、第１の画像処理部が、上記のように第１の画素の次に第２の画素を処理する際に、参照画素である第１の画素の処理結果は第１の画像処理部のメモリに格納されている。また、第１の画像処理部は、複数の参照画素のうち他の１つについての処理結果を、第１の画像処理部とは異なる第２の画像処理部から取得することができる。上記のとおり、処理結果の取得元となる画像処理部は決まっている。
【００８１】
なお、処理画素を処理する画像処理部と、参照画素を処理した画像処理部とを直接接続する必要はない。例えば、図１３（Ｅ）の例において、画像処理部１１１は、画像処理部１１３の処理結果（例えば量子化誤差又は拡散誤差）を、画像処理部１１０を介して受け取ってもよい。すなわち、一実施形態において、複数の画像処理部はリング状に直列に接続され、それぞれの画像処理部が接続される他の画像処理部は２つのみであってもよい。
【００８２】
ステップＳ１２０４において、画像処理部１１０〜１１３はＩ値の画素データを出力する。ステップＳ１２０５において、画像出力部１０３は出力されたＩ値の画素データの遅延差を解消し、メモリに記録する。ステップＳ１２０６において、画像供給部１０１は、全画素について処理を行ったかどうかを判定する。全画素について処理が行われていない場合、処理はステップＳ１２０１に戻り、全画素の処理が完了するまで走査が繰り返される。全画素について処理が行われると、図１２の処理は終了する。
【００８３】
以上の説明では、バンド領域のライン数が異なる場合、異なる構成のライン遅延回路及びライン遅延解消回路が用いられた。しかしながら、ライン数にかかわらず、同じ構成のライン遅延回路及びライン遅延解消回路を用いてもよい。例えば、説明したライン数５の場合のライン遅延回路及びライン遅延解消回路を用いて、ライン数４の場合の処理を行うことができる。この場合、ライン遅延回路及びライン遅延解消回路のうち、４画素分のライン間遅延を付加する部分は使用されない。
【００８４】
また、画像入力部１００、画像供給部１０１、画像出力部１０３は、及び後述する経路制御部２００２は、ハードウェア回路であってもよいが、ソフトウェアにより実現されてもよい。すなわち、これらの処理部のうち少なくとも一部が、コンピュータにより実現されてもよい。図２０はこれらの処理部を実現できるコンピュータの基本構成を示す図である。図２０においてプロセッサ２１１０は、例えばＣＰＵであり、コンピュータ全体の動作をコントロールする。メモリ２１２０は、例えばＲＡＭであり、プログラム及びデータ等を一時的に記憶する。コンピュータが読み取り可能な記憶媒体２１３０は、例えばハードディスク又はＣＤ−ＲＯＭ等であり、プログラム及びデータ等を長期的に記憶する。本実施形態においては、記憶媒体２１３０が格納している、各部の機能を実現するプログラムが、メモリ２１２０へと読み出される。そして、プロセッサ２１１０が、メモリ２１２０上のプログラムに従って動作することにより、各部の機能が実現される。図２０において、入力インタフェース２１４０は外部の装置から情報を取得するためのインタフェースである。また、出力インタフェース２１５０は外部の装置へと情報を出力するためのインタフェースである。バス２１６０は、上述の各部を接続し、データのやりとりを可能とする。
【００８５】
このように、本実施形態によれば、バンド領域のライン数又は長さが異なる場合であっても、それぞれの画像処理部が処理する画素を切り替える必要が無い。また、バンド領域のライン数又は長さが異なる場合であっても、それぞれの画像処理部は同様の処理を行えばよいため、同じ構成の画像処理部を用いることができる。このため、バンド領域のライン数及び長さに関わらず、同様の構成の画像処理部を用いて、並列処理が可能である。とりわけ、本実施形態において、複数の画像処理部のそれぞれは、参照画素についての処理結果を、処理画素にかかわらず、またバンド領域のライン数にかかわらず、同じ画像処理部から取得することができる。このため、バンド領域のライン数が変化しても、画像処理部の処理及び画像処理部間の接続を変更することなく、並列な画像処理を行うことができる。
【００８６】
［実施形態２］
実施形態２では、入力画像の色数に応じて並列数を切り替える構成について説明する。実施形態２でも、画像処理装置がＪ値画像をＩ値画像（Ｉ＜Ｊ）に変換する誤差拡散処理を行う場合について説明する。以下の説明でも、図３に示す参照画素及び拡散係数が用いられる。
【００８７】
本実施形態に係る画像処理装置は、実施形態１と同様の４つの画像処理部１１０〜１１３を備える。そして、本実施形態においては、入力画像の色数に応じて、動作モードが切り替えられる。例えば、画像処理装置は、Ｎ個の画像処理部が、入力画像の１つの色についての画像処理を並列に行う第１の動作モードで動作することができる。一例として、入力画像の色数が１の場合、４つの画像処理部が並列に処理を行うことができる。また、画像処理装置は、第２の動作モードで動作することができる。第２の動作モードにおいては、Ｎ個の画像処理部のうちの第１のグループが、入力画像の第１の色についての画像処理を並列に行い、Ｎ個の画像処理部のうちの第２のグループが、入力画像の第２の色についての画像処理を並列に行う。一例として、入力画像の色数が２の場合、それぞれの色の画素データを２つの画像処理部が並列に処理することができる。さらに、入力画像の色数が１の場合、それぞれの色の画素データを１つの画像処理部で処理することができる。
【００８８】
一実施形態においては、入力画像の色数Ｌに応じて、Ｎ個の画像処理部はＬ個のグループに分類される。ここで、それぞれのグループには同じ数の画像処理部が含まれてもよく、その数はＮ／Ｌ個であってもよい。そして、それぞれのグループに含まれる画像処理部が処理結果を転送可能なように、それぞれのグループに含まれる画像処理部を接続することができる。この接続を介して、画像処理部は処理結果を転送することができる。後述するとおり、このような接続が可能なように、データ転送経路は経路制御部２００２によって制御されてもよい。
【００８９】
図７は、本実施形態に係る画像処理装置１９５の構成例を示すブロック図である。画像入力部１００、画像供給部１０１、画像処理部１１０〜１１３、及び画像出力部１０３の構成は実施形態１と同様であり、以下では異なる点について説明する。画像処理装置１９５は、さらにデータ転送経路２００１を有しており、画像処理部１１０〜１１３はデータ転送経路２００１を介して拡散誤差を伝播することができる。
【００９０】
（入力画像の色数が２の場合）
まず、入力画像の色数が２であり、それぞれの色の画素データを２つの画像処理部が並列に処理する構成について説明する。以下では、入力画像の各画素が、シアン画素データとマゼンタ画素データを有している場合について説明する。シアン画素データとマゼンタ画素データのそれぞれは、Ｊ値のデータである。
【００９１】
画像入力部１００は、入力画像のうち、それぞれの色についてのバンド領域を読み出す。例えば、図１６（Ａ）に示すように、画像入力部１００は、シアンのバンド領域２２１０とマゼンタのバンド領域２２００とを読み出すことができる。
【００９２】
画像供給部１０１は、ライン遅延回路２３００及びモジュール遅延回路９００を備える。図１９は、入力画像の色数が２の場合のライン遅延回路２３００の構成例を示す。ライン遅延回路２３００は、バッファ２３４１〜２３６８を有している。
【００９３】
ライン遅延回路２３００は、図１６（Ｂ）に示すように、２つのシアン画素及び２つのマゼンタ画素の画素データを取得する。ライン遅延回路２３００は、最初のサイクルでは、図１６（Ａ）の斜線で示される、１番目のデータ列の左端の２つの画素の画素データを取得することができる。また、ライン遅延回路２３００は、次のサイクルでは、２番目のデータ列の左端の２つの画素の画素データを取得することができる。そして、ライン遅延回路２３００は、最後のデータ列の画素データを取得すると、再度１番目のデータ列の未取得の画素データを取得する動作を繰り返すことができる。この取得処理は、４つではなく２つの連続する画素の画素データが取得される点を除き、ライン遅延回路８００と同様である。
【００９４】
ライン遅延回路２３００は、こうして取得した画素データ２２３０〜２２３３に対してライン間遅延を与える。この処理例では、それぞれの色ごとにライン間遅延が与えられる。このため、ライン遅延回路２３００は、それぞれの色ごとに保持用のバッファと出力用のバッファを有している。例えば、ライン遅延回路２３００は、２番目のデータ列からの入力データ２２３１に対して１画素のライン間遅延を与えるために、保持用のバッファ２３４５，２３４８及び出力用のバッファ２３４６，２３４７，２３４９，２３５０を有する。このような構成により、バッファ２３４５に保持されたシアン画素データと、バッファ２３４８に保持されたマゼンタ画素データとを同時に、次に入力される同じ２番目のデータ列からの画素データとともに出力できる。このように、色数に応じた数の遅延用のバッファ及び保持用のバッファをライン遅延回路２３００に設けることで、所望のライン間遅延を与えることが可能となる。
【００９５】
モジュール遅延回路９００の構成は実施形態１と同様であり、その説明を省略する。モジュール遅延回路９００に入力される画素データ２２３０には、マゼンタ２画素の画素データとシアン２画素の画素データが並んでいる。そして、この画素データ２２３０にはモジュール間遅延が付加されて画像処理部１１０〜１１３に入力される。よって、マゼンタの画素データは、シアンの画素データに対し、２サイクル遅延して画像処理部で処理される。もっとも、色間の遅延差が生じないように、同じ色の画素データ間にのみモジュール間遅延を付加してもよい。例えばバッファ９１２，９１４，９１５，９１６を用いず、バッファ９１１，９１３を有するモジュール遅延回路を用いることができる。この場合、マゼンタの画素データとシアンの画素データの間にモジュール間遅延は付加されない。
【００９６】
データ転送経路２００１の詳細な構成を図１４に示す。データ転送経路２００１は、経路制御部２００２、セレクタ２００３〜２００６、及び経路２０１０〜２０１７を有している。経路２０１０〜２０１７は、画像処理部１１０〜１１３の間での拡散誤差の伝播経路である。経路制御部２００２は、これらの経路２０１０〜２０１７を通るデータ転送を制御する。
【００９７】
例えば、入力画像の色数が１の場合、経路制御部２００２は、セレクタ２００３〜２００６を１に設定し、画像処理部１１０〜１１３の間の全ての経路を有効にすることができる。この状態においては、４つの画像処理部１１０〜１１３が１つの色の画素データを並列に処理することができる。なお、図１４には、この場合に画像処理部１１０〜１１３の全ての組み合わせの間に経路が存在することが示されている。しかしながら、冗長な経路を減らすため、図１３に示されるように、処理画素と参照画素との関係から必要な経路のみ設けてもよい。
【００９８】
入力画像の色数が２の場合、経路制御部２００２は、セレクタ２００３〜２００６を０に設定することができる。この場合、画像処理部１１０と画像処理部１１１との間の経路、及び画像処理部１１２と画像処理部１１３との間の経路は有効であるが、画像処理部間の他の経路は有効ではない。この状態においては、２つの画像処理部が１つの色の画素データを並列に処理することができる。
【００９９】
画像出力部１０３は、画像処理部１１０〜１１３が処理した画素データについて、ライン間遅延とモジュール間遅延とを解消して、色ごとにメモリ（例えばＤＲＡＭ）に出力する。画像出力部１０３は、実施形態１と同様の方法で、画像供給部１０１で与えたライン間遅延及びモジュール間遅延による遅延差がなくなるように、遅延を与えることができる。
【０１００】
実施形態２における画像処理装置１９５の動作を、図１２のフローチャートに沿って説明する。ステップＳ１２００において、まず、データ転送経路２００１の経路が設定される。経路は、入力画像の色数と画像処理部の数の組み合わせに応じて決定される。
【０１０１】
例えば、入力画像の色数が１の場合には、上述したように経路制御部２００２による経路の制御が行われる。この場合、以降の処理は実施形態１と同様に行うことができるため、説明を省略する。
【０１０２】
また、入力画像の色数が４の場合には、それぞれの色の画素データが１つの画像処理部で処理される。経路制御部２００２は、１つの画像処理部が１つの色の画素データを処理するように、画像処理部間の経路を制御する。この場合、画像処理部間の接続は必要ない。以降は、それぞれの画像処理部が各色の画素データに対して逐次処理を行えばよいため、処理の説明は省略する。
【０１０３】
入力画像の色数が２の場合には、上述したように経路制御部２００２による経路の制御が行われる。以下では、この場合の処理について説明する。ステップＳ１２００において、画像入力部はさらに、図１６（Ａ）に示されるように、各色の処理領域を読み出す。
【０１０４】
ステップＳ１２０１において、画像供給部１０１は画像入力部１００から、図１６（Ｂ）に示されるように４画素の画素データを取得し、ライン間遅延とモジュール間遅延とを与えて画像処理部に出力する。この例でも、図３に示す参照画素を用いて誤差拡散処理が行われるため、実施形態１と同様にライン間遅延は１画素であり、モジュール間遅延は１サイクルである。ライン間遅延は、上述のように色ごとに与えることができる。
【０１０５】
実施形態１と同様に、ステップＳ１２０２において画像処理部１１０〜１１３は誤差拡散処理を行い、ステップＳ１２０３において画像処理部１１０〜１１３は拡散誤差の伝搬を行う。本実施例では、ステップＳ１２００のように、色数と画像処理部の数との関係に応じて接続の経路が設定され、拡散誤差の伝搬が行われる。画像処理部間の接続関係は、実施形態１で述べたように、バンド領域の高さ又は長さを変更した場合でも変更する必要はない。
【０１０６】
ステップＳ１２０４において画像処理部１１０〜１１３はＩ値の画素データを出力する。ステップＳ１２０５において画像出力部１０３は、Ｉ値の画素データの遅延差を解消し、色毎にメモリに記録する。ステップＳ１２０６の処理は、実施形態１と同様である。
【０１０７】
このように、本実施形態によれば、異なる色数の入力画像のそれぞれに対する並列処理が可能となる。また、データ転送経路２００１を切り替えることによって、色数に応じた並列処理の制御が可能となる。
【０１０８】
［実施形態３］
本発明に係る画像処理装置が行う処理は、誤差拡散処理には限られない。例えば、本発明に係る画像処理装置は、フィードバックを用いた処理を行うことができる。その一例として、実施形態３に係る画像処理装置は、画像データ中の水平線又は垂直線を検出する処理を並列に行う。本実施形態の処理は、図１に示す画像処理装置１９０が実現可能であり、その詳細な説明は省略する。
【０１０９】
まず、画像処理部１１０〜１１３が実施する水平線又は垂直線の検出処理を、図６を参照して説明する。図６（Ａ）は、書類イメージ６１０と、書類イメージ６１０に対する図、水平線、及び垂直線の検出結果６２０を示す。この処理は、例えば、書類に対するＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅｃｏｇｎｉｔｉｏｎ）処理の前処理として適用することができ、図表の罫線又は枠線を抽出することができる。この処理を用いて、書類イメージ６１０中の図表領域を特定し、又は罫線を削除することにより、ＯＣＲの精度向上が期待できる。
【０１１０】
水平線又は垂直線の検出処理は、図６（Ｂ）のフローに従って実現することができる。まず、図６（Ｃ）に示すように処理画素を中心とした３画素×３画素の画素データに対して、垂直線成分抽出フィルタ及び水平線成分抽出フィルタが適用される。図６（Ｄ）は垂直線成分抽出フィルタのフィルタ係数の例を、図６（Ｅ）は水平線成分抽出フィルタのフィルタ係数の例を、それぞれ示す。垂直線成分抽出フィルタを適用することにより垂直線成分が抽出され、水平線成分抽出フィルタを適用することにより水平線成分が抽出される。
【０１１１】
抽出された各成分を用いて、垂直線判定及び水平線判定が行われる。垂直線判定は、図６（Ｆ）に示すように、閾値ＴＨｖと垂直線成分との比較によって行うことができる。例えば、垂直線成分が閾値ＴＨｖ以上の場合には、処理画素の位置に垂直線があると判定することができる。また、垂直線成分が閾値ＴＨｖより小さい場合には、処理画素の位置に垂直線はないと判定することができる。同様に、水平線判定は、図６（Ｇ）に示すように、閾値ＴＨｈと水平線成分との比較によって行うことができる。例えば、水平線成分が閾値ＴＨｈ以上の場合には、処理画素の位置に水平線があると判定することができる。また、水平線成分が閾値ＴＨｈより小さい場合には、処理画素の位置に水平線はないと判定することができる。
【０１１２】
ここで、垂直線及び水平線の判定基準となる閾値ＴＨｖ及びＴＨｈの大きさは、フィードバック制御により調整することができる。例えば、隣接画素の判定結果と同一の判定結果が出やすくなるように、隣接画素の判定結果に応じて、閾値を変更することができる。一例として、既に検出処理が完了している、処理画素から垂直方向にある近傍画素に垂直線があると判定された場合、閾値ＴＨｖを小さくし、処理画素に垂直線があると判定されやすくすることができる。同様に、既に検出処理が完了している、処理画素から水平方向にある近傍画素に水平線があると判定された場合、閾値ＴＨｈを小さくし、処理画素に水平線があると判定されやすくすることができる。
【０１１３】
画像データを、ラスタ処理順（左から右に、かつ上から下に走査）に処理する場合には、図６（Ｈ）に＊印で示す処理画素に対する判定を、上に隣接する画素の垂直線判定結果と、左に隣接する画素の水平線判定結果とを参照して行うことができる。画像処理部１１０〜１１３を用いて以下のように並列処理する場合であって、ある画像処理部が処理画素に対する判定を行う場合、上に隣接する画素についての垂直線判定結果はこの画像処理部が保持しており、判定のために参照することができる。一方、左に隣接する画素についての水平線判定結果は、他の画像処理部が保持しており、画像処理部間で転送することにより判定のために参照することができる。隣接画素の水平線判定結果が確定するタイミングと、処理画素の水平線判定結果を参照するタイミングの差を解消するため、隣接画素の水平線判定結果を、隣接画素を処理した画像処理部が保持してもよいし、処理画素を処理する画像処理部が保持してもよい。この点も、実施形態１と同様である。
【０１１４】
画像処理部１１０〜１１３には、実施形態１と同様に、処理領域３１００の各画素を処理できる。以下、図１７（Ａ）を参照して並列処理方法の一例について説明する。図１７（Ａ）は、画像入力部１００によって読み出された処理領域３１００を示す。説明のために、処理領域３１００には、データ列番号Ｌ０〜Ｌ７及び画素番号Ｐ０〜Ｐ１５を付与している。
【０１１５】
サイクルＣ１で画像処理部１１０は、データ列番号Ｌ０で画素番号Ｐ０（以下、「データ列番号：画素番号」と表現）の処理画素（Ｌ０：Ｐ０）を処理する。この結果、主走査方向にある処理画素（Ｌ０：Ｐ１）と、主走査方向とは異なる第２の方向にある処理画素（Ｌ１：Ｐ０）が処理可能になる。ここで、第２の方向は、下に１画素進む方向に決まる。
【０１１６】
サイクルＣ２で、画像処理部１１１は、主走査方向にある処理画素（Ｌ０：Ｐ１）を処理する。また、画像処理部１１０は、第２の方向にある処理画素（Ｌ１：Ｐ０）を処理する。サイクルＣ３以降の処理も、実施形態１と同様である。
【０１１７】
画像供給部１０１は、画像処理部１１０〜１１３が判定処理を並列に実施するように、画像処理部１１０〜１１３に画素データを供給する。図１７（Ａ）には、画像処理部１１０に画素データが提供される画素群を示している。画像処理部１１０により処理される処理画素は斜線で示されている。また、処理画素近傍の３画素×３画素の画素群が網点で示されている。画像供給部１０１は画像処理部１１０に斜線及び網点の画素の画素データを供給し、画像処理部１１０は斜線の処理画素についての処理結果を得る。
【０１１８】
画素データは、同一画素番号の画素であれば上から下の順に画像処理部１１０へと供給される。例えば、画像供給部１０１は３画素×３画素の画素群３２００の画素データを画像処理部１１０に供給し、画像処理部１１０は処理画素（Ｌ３：Ｐ８）の処理結果を得る。次に、画像供給部１０１は画素群３２０１の画素データを画像処理部１１０に供給し、画像処理部１１０は処理画素（Ｌ４：Ｐ８）の処理結果を得る。また、画像供給部１０１は、画素群３２０２のように処理領域下端の処理画素に対応する画素群の画素データを供給した後は、この処理画素の右列の上端にある処理画素に対応する画素群３２０３の画素データを供給する。なお、画素群３２０２及び画素群３２０３のように処理領域の上下端にある処理画素に対応する画素群は、処理領域外の画素を含む。このような処理領域外の画素データとしては、所定の値が用いられてもよいし、特定のデータ列の画素データが用いられてもよい。
【０１１９】
図１７（Ｂ）〜（Ｄ）は、図１７（Ａ）と同様に、画像処理部１１１〜１１３に画素データが供給される画素群を示す。
【０１２０】
画像供給部１０１は、画像処理部１１０への画素データの供給をまず開始し、各画像処理が処理する処理画素が同一のデータ列にないように、画像処理部１１１、画像処理部１１２、及び画像処理部１１３の順に画素データの供給を開始する。図１８を参照して、画像処理部１１０〜１１３へ１画素ずつ供給タイミングをずらして画素データを供給する場合の並列処理の例を説明する。
【０１２１】
図１８は、処理領域３１００のうち、画素番号Ｐ８〜Ｐ１２の部分を示す。図１８において、網点の画素は処理済みであり、斜線の画素は処理画素である。上記説明した方法によれば、処理画素（Ｌ５：Ｐ８）、処理画素（Ｌ４：Ｐ９）、処理画素（Ｌ３：Ｐ１０）及び処理画素（Ｌ２：Ｐ１１）が、画像処理部１１０、１１１、１１２、及び１１３によって並列に処理される。
【０１２２】
図１８の矢印は、垂直線検出結果及び水平線検出結果の参照関係を示す。例えば、画像処理部１１１は、画素（Ｌ４：Ｐ８）及び画素（Ｌ３：Ｐ９）の処理結果を参照して処理画素（Ｌ４：Ｐ９）の処理を行う。また、例えば、画像処理部１１０は、処理領域の下端画素（Ｌ７：Ｐ８）を処理後、画素（Ｌ０：Ｐ１２）を処理する。この場合、画像処理部１１０は、画素（Ｌ０：Ｐ１１）の処理結果を参照して処理を行う。参照すべき処理結果は、画像処理部１１０が画素（Ｌ０：Ｐ１１）を処理した画像処理部１１３から取得して保持しておいてもよいし、画像処理部１１３が保持しておき所望のタイミングで画像処理部１１０に転送してもよい。
【０１２３】
本実施形態において、上下の画素参照関係については、各画像処理部が処理する処理画素の順番により決まる。また左右の画素参照関係については、参照される処理結果を他の画像処理部に転送することで、隣接画素の処理結果が参照可能となっている。また、各画像処理部１１０〜１１３が異なるデータ列にある処理画素を処理することにより、処理結果を転送するための時間が確保される。本実施例では、同じデータ列にある画素の画素データの供給タイミングを各画像処理部に対して１サイクルずつずらしたが、同時に処理される画素が異なるデータ列にあれば、データの供給方法は限定されない。
【０１２４】
以上の処理によって、フィードバックを用いて高精度に垂直線及び水平線を検出する処理を並列に実施することできる。本実施形態でも、実施形態１と同様、処理領域の大きさに影響を受けることなく、任意の高さＭ（Ｍ：自然数）及び任意の幅を有する処理領域に対して並列処理が可能である。
【０１２５】
［実施形態４］
本発明の一実施形態に係るデータ処理装置は、音声データ、映像データ、又は各種センサデータなどの、時系列的に入力されるデータ群に対して並列処理を行うことができる。以下では、リカレントニューラルネットワークを用いて順次入力されるデータ群に対する処理を行うデータ処理装置について説明する。実施形態４に係るデータ処理装置は、リカレントニューラルネットワークを用いるデータ処理装置の一例であり、音声データをリアルタイムに認識することにより機械翻訳を行うデータ処理装置である。
【０１２６】
図２１は、リカレントニューラルネットワークを用いた音声データのリアルタイム機械翻訳の概念図である。本実施形態において、リカレントニューラルネットワークに順次入力される入力されるデータ群は、時系列的な音声の周波数データである。時系列的な音声データに対し、フーリエ変換などの前処理を施すことにより、後段の処理において解析しやすい周波数データを得ることができる。もっとも、リカレントニューラルネットワークに入力されるデータが周波数データに限定されるわけではない。本実施形態に係るデータ処理装置は、このような前処理を行う処理部を有していてもよい。
【０１２７】
本実施形態に係るデータ処理装置は、周波数データに基づいて、音声に対応する文脈データを推定する推論処理を行う。具体的には、リカレントニューラルネットワークに周波数データが入力されると、学習済みのパラメータを用いた演算により文脈データが出力される。文脈データとは、音声によって示される内容を示すデータであり、例えば単語と単語間の関係とを示すデータであってもよい。このように推定された文脈データと、翻訳データベースとを照合することにより、音声に対応する機械翻訳結果が得られる。翻訳データベースは、例えば第１の言語の文脈データに対応する、第２の言語の文章を与えるデータベースであってもよいし、第１の言語の単語に対応する第２の言語の単語を与えるデータベースであってもよい。本実施形態に係るデータ処理装置は、このような機械翻訳処理を行う処理部を有していてもよい。
【０１２８】
図２２はリカレントニューラルネットワークの一例を示す。リカレントニューラルネットワークは、入力層、出力層、及び多段の隠れ層を有し、各層のノード（状態）がエッジで結合されているニューラルネットワークであって、ここで隠れ層のエッジは同じ層のノードに再帰的に接続されている。言い換えれば、隠れ層においては、前の層の出力結果に加えて、同じ層で生成されたデータ（中間データ）を用いて、演算が行われる。例えば、各隠れ層においては、あるデータに対する演算により得られた中間データを用いて、次のデータに対する演算を行うことができる。各ノードにおける演算及び各エッジの重みはパラメータにより表される。パラメータは、入力データに対してこのリカレントニューラルネットワークで得ることが期待される正解データを用いた学習により、事前に決定される。
【０１２９】
このようなリカレントニューラルネットワークでは、各層が時系列的に入力されるデータを再帰的に利用することで、段階的に低次の推定から高次の推定までなされるといわれている。本実施形態の場合には、音声データからアルファベット又は五十音のような発音データが推定され、発音データから単語データが推定され、単語データから文脈データが推定されるという、段階的な推定が行われると考えられる。例えば、図２１の例では、「りんごをたべる」という日本語の音声データから、「り」「ん」「ご」「を」「た」「べ」「る」という音節ごとの発音データ、及び「りんご」「を」「たべる」という単語ごとの単語データが順次得られる。そして、単語データから、「りんごをたべる」という内容を表す文脈データが得られ、この文脈データの意味を英語で表す"I eat an apple."という英文が得られる。
【０１３０】
リカレントニューラルネットワークの推定精度は、一般的に隠れ層の段数が増えるほど高まるといわれるが、リアルタイム処理を行うためには処理時間が制限される。また、言語体系に応じて最低限必要な隠れ層の段数が異なる。このため、発音される言語によって適した隠れ層の段数が異なる。そして、とりわけ隠れ層の段数が可変であり、入力される音声データの長さも可変である場合に、フィードバックループを含むリカレントニューラルネットワークにおける並列処理は困難であった。本実施形態に係るデータ処理装置は、リカレントニューラルネットワークを用いた処理を並列化し、処理時間を短縮できる。
【０１３１】
（データ処理装置の構成）
図２３は本実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、ＣＰＵ２３０１のようなプロセッサ、ＲＡＭ２３０２のようなメモリ、処理部２３０３、データ入力部２３０４、データ出力部２３０５、及びバス２３０６を備える。ＣＰＵ２３０１は、ＲＡＭ２３０２のようなメモリに格納されるコンピュータプログラムを用いて、データ処理装置全体の動作制御を行う。また、ＣＰＵ２３０１は、機械翻訳の少なくとも一部の処理を行うことができる。
【０１３２】
ＲＡＭ２３０２は、ＣＰＵ２３０１が使用するコンピュータプログラムを格納する。また、ＲＡＭ２３０２は、入出力されるデータ、及び処理中に生成される一時的なデータを記憶するための記憶領域を提供することができる。処理部２３０３は、リカレントニューラルネットワークを用いた処理を行う処理部であり、ＣＰＵ２３０１が前処理を行うことにより得られた音声データを用いて文脈データを推定する。データ入力部２３０４は、データ処理装置へのデータを取得することができ、例えば音声データをデータ処理装置に入力するためのマイク、及びユーザがデータ処理装置に指示を入力するため入力装置を含んでいてもよい。データ出力部２３０５は、データ処理装置からデータを外部に出力することができ、例えば翻訳結果を提示する表示装置を含んでいてもよい。上記の各部は、バス２３０６を介して接続されている。
【０１３３】
（処理部２３０３の構成）
図２４は処理部２３０３の構成例を示す。本実施形態に係る処理部２３０３は、データ供給部２４０１、演算ユニット２４０２，２４０３，２４０４，２４０５、及びデータ記憶部２４０６，２４０７，２４０８，２４０９を備える。
【０１３４】
データ供給部２４０１は、前処理された音声データを所望のタイミングで演算ユニット２４０２に供給する。演算ユニット２４０２〜２４０５は、リカレントニューラルネットワークを構成する隠れ層に対応する演算を行う。例えば、演算ユニット２４０２〜２４０５のそれぞれは、リカレントニューラルネットワークの隠れ層の演算、及び入力されるエッジに対する重み付けを行うことができる。そして、このような演算により、演算ユニット２４０２〜２４０５のそれぞれは、隠れ層の出力結果及び再帰的に参照される中間データを繰り返し生成する。１つの演算ユニットは、リカレントニューラルネットワークを用いた処理を行う間に複数回の演算処理を行う。また、１つの演算ユニットは、複数の隠れ層のそれぞれについての演算処理を行うことができる。すなわち、隠れ層演算ユニットは、対応する隠れ層についてのパラメータを用いて、エッジに対する重み付け及び演算を行うことができる。
【０１３５】
データ記憶部２４０６〜２４０９は、演算ユニットからの出力データをそれぞれ格納する。出力データは、所望のタイミングで次の演算ユニットへと伝搬される。また、データ記憶部２４０６〜２４０９は、隠れ層の演算に用いられる、異なる演算処理時に得られた中間データを格納することができる。この中間データも、所望のタイミングで演算ユニットに提供される。
【０１３６】
（動作説明）
最初のステップにおいて、データ入力部２３０４は、マイクなどを介して音声データを取得する。次のステップにおいて、ＣＰＵ２３０１は、音声データに対して前処理を行う。前処理は特に限定されないが、例えば、音声データに含まれるノイズの低減処理、又はフーリエ変換による周波数変換処理であってもよい。前処理の目的は、文脈データの推定精度が上がるように音声データを加工することである。
【０１３７】
次のステップにおいて、処理部２３０３は、前処理された音声データを用いて、文脈データの推定を行う。図２５は、音声データから文脈データを推定する処理のフローを説明するための図である。図２５は、８段の隠れ層を有するリカレントニューラルネットワークを用いた処理を、並列数４の処理が可能な処理部２３０３が行う場合の例を示す。
【０１３８】
図２５には、前処理された音声データが入力時刻に従って時系列上に並べられており、また各音声データに対する各演算ユニットの処理時間がマッピングされている。図２５に示すように、本実施形態に係るデータ処理装置には、音声データａ〜ｉがデータ群として順次入力される。図２５（Ａ）には、さらに音声データから文脈データが得られるまでの、演算ユニットを通るデータの流れが矢印として示されている。また、図２５（Ｂ）には、さらに演算ユニットで生成され、再帰的に参照される中間データの流れが矢印として示されている。
【０１３９】
本実施形態において、複数の演算ユニットのうちの１つの演算ユニットは、隠れ層に対応する演算を行い、演算により生成された隠れ層の出力結果を異なる演算ユニットに転送する。例えば、音声データａに対する演算ユニット２４０２による１層目の処理が完了すると、次の層で用いられる出力データはデータ記憶部２４０６を介して即座に演算ユニット２４０３に転送される。また、演算ユニット２４０３による２層目の処理が完了すると、出力データはデータ記憶部２４０７を介して演算ユニット２４０４に転送される。同様に、演算ユニット２４０４による３層目の処理が完了すると、出力データはデータ記憶部２４０８を介して演算ユニット２４０５に転送される。このようにして、演算ユニット２４０５による４層目の処理までが完了すると、出力データはデータ記憶部２４０９に格納される。この出力データは、演算ユニット２４０２によって５層目の処理を行うのに用いられるが、図２５の例においては音声データｂ，ｃ，ｄが逐次入力されてその処理が始まっているため、この出力データはデータ記憶部２４０９にて待機する。
【０１４０】
音声データｂに対しても、音声データａと同様に演算ユニット２４０２〜２４０５による１〜４層目の処理が行われ、出力データがデータ記憶部２４０９に格納される。同様に、音声データｃ及び音声データｃに対しても演算ユニット２４０２〜２４０５による処理が行われる。ここで、処理中の音声データの数が、本実施例における隠れ層演算ユニットの数４と一致する。この場合、データ記憶部２４０９に格納されている、音声データａについての演算ユニット２４０５の出力データと、１度目の処理とは異なるパラメータを用いた、演算ユニット２４０２による５層目の処理が実行される。さらに、１度目とは異なるパラメータを用いた演算ユニット２４０３〜２４０５による６〜８層目の処理が実行され、音声データａに対応する推定された文脈データａが出力される。
【０１４１】
一方、入力される音声データの個数（長さ）は不定である。このため、演算ユニットの数よりも多い数の音声データが連続して入力されることがある。例えば、図２５（Ａ）に示すように、５つの音声データｅ〜ｉが連続して入力されることがある。この場合、音声データｈが入力された時点で、処理中の音声データの数が、演算ユニットの数４に達する。この場合、音声データｅについての、演算ユニット２４０２による５層目の処理を、すぐに実行することができる。一方で、図２５（Ａ）の例では、続けて入力された音声データｉは、データ供給部２４０１に格納され、音声データｅ〜ｈの処理が完了した時点で、音声データｉに対する処理が行われている。データ供給部２４０１に格納する音声データの数は、演算ユニットの処理性能及び入力される音声データの時間分解能に基づいて決定することができる。また、図２５（Ａ）に示す例において、音声データｉについて演算ユニット２４０５による４層目の処理が完了し、データ記憶部２４０９に出力データが格納された時点では、次の音声データの入力がない。この場合、直ちに演算ユニット２４０２による、１度目とは異なるパラメータを用いた音声データｉの処理を行うことができる。
【０１４２】
このように、本実施形態においては、データ処理装置が処理中であるデータ群の数が、並列数（演算ユニットの数）に達するまでは、新たなデータが入力されると、演算ユニットはこのデータに対する１層目の処理を開始する。一方で、データ処理装置が処理中であるデータ群の数が、並列数（演算ユニットの数）に達した場合、新たなデータの処理は開始されず、演算ユニットは既に処理中のデータ群に対する各層の処理を行う。この場合、既に処理中のデータ群に対する処理が完了してから、新たなデータの処理を開始することができる。このような構成によれば、並列処理が行われる割合を増やして全体の処理時間を短縮することで、データが入力されてからニューラルネットワークからの出力が得られるまでのレイテンシを短縮することができる。
【０１４３】
また、複数の演算ユニットのうちの１つの演算ユニットは、同じ隠れ層についての中間データを再帰的に参照しながら隠れ層に対応する演算を行う。すなわち、このように音声データ入力から文脈データ推定までの処理が進行する一方で、各演算ユニットで生成され、再帰的に参照される中間データも、処理タイミングに合わせてデータ記憶部から演算ユニットに転送される。例えば、演算ユニット２４０２が音声データａの処理時に生成した中間データは、次に入力された音声データｂに対する演算ユニット２４０２の処理時に参照される。同様に、演算ユニット２４０２が音声データｄの処理時に生成した中間データは、次に入力された音声データｅに対する演算ユニット２４０２の処理時に参照される。これらの参照タイミングは、リカレントニューラルネットワークを構成する隠れ層の位置に応じて定まる。例えば、演算ユニット２４０２による音声データｄに対する１度目の処理（第１層の処理）と、音声データａに対する２度目の処理（第５層の処理）とは、リカレントニューラルネットワークの異なる隠れ層における演算に対応する。このため、演算ユニット２４０２による音声データａに対する２度目の処理は、音声データｄに対する１度目の処理の直後に行われるが、音声データｄに対する処理時に生成される中間データは参照されない。
【０１４４】
このように、各演算ユニットは、同じ隠れ層についての中間データを再帰的に参照しながら隠れ層に対応する演算を行い、かつ演算により生成された隠れ層の出力結果を異なる演算ユニットに転送する。こうして、処理部２３０３が有する複数の演算ユニットは、リカレントニューラルネットワークを用いたデータ群に対する処理を行うことができる。なお、リカレントニューラルネットワークの入力層又は出力層において演算が行われてもよい。このような演算はＣＰＵ２３０１が行ってもよいし、演算ユニット２４０２〜２４０５が中間データの参照を行わずに行ってもよい。
【０１４５】
次のステップにおいて、ＣＰＵ２３０１は、推定された文脈データを翻訳データベースと照合することで、翻訳語を生成する。データ出力部２３０５は、こうして生成された翻訳語を出力することができる。本実施形態においては、図２５（Ａ）のように、時系列的に入力される音声データに対する出力結果として、文脈データａ、文脈データｂ、文脈データｃ、及び文脈データｄなどがリアルタイムに順次得られる。このような出力結果を組み合わせて用いることで、徐々に翻訳精度を高めながら、ＣＰＵ２３０１は翻訳語を生成することができる。ＣＰＵ２３０１は、連続して得られた文脈データが異なる意味を示していると判定した場合、データ出力部２３０５に対して、これまでの翻訳語とは異なることがわかるように、翻訳語を出力するように指示することもできる。
【０１４６】
以上のように、本実施形態によれば、任意の数のデータ群に対して、リカレントニューラルネットワークを用いた処理を行う処理部による並列処理を行うことで、処理を高速化することができる。また、リカレントニューラルネットワークの隠れ層の段数は可変であってもよく、１つの演算ユニットが同じデータ群を処理する回数を変更することにより、この場合でも並列処理を用いることができる。なお、リカレントニューラルネットワークの構成は、本実施形態で説明したものに限定されない。例えば、ノードの出力結果を再帰的に使用する構成を有するニューラルネットワークを用いた処理を、本実施形態に係るデータ処理装置は行うことができる。また、各ノードに記憶セルが設けられ、再帰的にノードの出力結果を使用する、ＬＳＴＭ(Long Short Term Memory)と呼ばれるニューラルネットワークを用いた処理を、本実施形態に係るデータ処理装置が行ってもよい。
【符号の説明】
【０１４７】
１００：画像入力部、１０１：画像供給部、１０３：画像出力部、１１０〜１１３：画像処理部
【図１】
2019169131.tif 000003
【図２】
2019169131.tif 000004
【図３】
2019169131.tif 000005
【図４】
2019169131.tif 000006
【図５】
2019169131.tif 000007
【図６】
2019169131.tif 000008
【図７】
2019169131.tif 000009
【図８】
2019169131.tif 000010
【図９】
2019169131.tif 000011
【図１０】
2019169131.tif 000012
【図１１】
2019169131.tif 000013
【図１２】
2019169131.tif 000014
【図１３】
2019169131.tif 000015
【図１４】
2019169131.tif 000016
【図１５】
2019169131.tif 000017
【図１６】
2019169131.tif 000018
【図１７】
2019169131.tif 000019
【図１８】
2019169131.tif 000020
【図１９】
2019169131.tif 000021
【図２０】
2019169131.tif 000022
【図２１】
2019169131.tif 000023
【図２２】
2019169131.tif 000024
【図２３】
2019169131.tif 000025
【図２４】
2019169131.tif 000026
【図２５】
2019169131.tif 000027