(57)【要約】【課題】画像処理を効率化すること。【解決手段】  本実施の形態にかかる画像処理装置７００は、画素データを記憶するラインメモリ８１と、複数本のパイプラインと、前記ラインメモリから前記処理ユニットへのデータの読み出しを制御するラインメモリ制御回路８２と、備え、処理ユニット７０は、第１の演算を行う第１の演算子７４と、第１の演算子での演算結果に基づく第１の中間データに基づいて、第２の演算を行う第２の演算子７５であって、周囲画素を順次変えていったときの第１の中間データに応じて、第２の中間データを算出する第２の演算子７５と、第１の中間データに基づいて、第３の演算を行う第３の演算子７６ａ、７６ｂであって、周囲画素を順次変えていったときの第１の中間データに応じて、第３の中間データを算出する第３の演算子７６ａ、７６ｂと、第３の中間データを遅延する７８ａ、７８ｂと、を備えている。【選択図】図１２
2017174291.tif 000002
【特許請求の範囲】
【請求項１】
第１の画像、及び第２の画像に含まれる画素データを記憶するラインメモリと、
並列に配置された複数本のパイプラインであって、それぞれが前記画素データに対してパイプライン処理を行う複数段の処理ユニットを有する複数本のパイプラインと、
前記ラインメモリから前記処理ユニットへのデータの読み出しを制御するラインメモリ制御回路と、備え、
前記処理ユニットは、
前記第１の画像の対象画素に対応する対象画素データと、前記第２の画像において前記対象画素の周囲画素に対応する周囲画素データとに基づいて、第１の演算を行う第１の演算子と、
前記第１の演算子での演算結果に基づく第１の中間データに基づいて、第２の演算を行う第２の演算子であって、前記周囲画素を順次変えていったときの前記第１の中間データに応じて、第２の中間データを算出する第２の演算子と、
前記第１の中間データに基づいて、第３の演算を行う第３の演算子であって、前記周囲画素を順次変えていったときの前記第１の中間データに応じて、第３の中間データを算出する第３の演算子と、
前記周囲画素を順次変えていったときの前記第２の中間データを保持するレジスタと、
前記第３の演算子からの前記第３の中間データを遅延する遅延素子と、を備えた画像処理装置。
【請求項２】
複数本のパイプラインには、第１のパイプラインと第２のパイプラインとが含まれており、
前記第１のパイプラインの前記処理ユニットに設けられた前記遅延素子で遅延された第３の中間データが、前記第２のパイプラインに含まれる前記処理ユニットの前記第３の演算子に入力され、
前記第３の演算子が前記第１の演算子からの第１の中間データと前記遅延素子からの第３の中間データとに基づいて、前記第３の演算を行う請求項１に記載の画像処理装置。
【請求項３】
前記第３の演算子において、前記対象画素と、前記対象画素から伝播方向にずれた参照画素とについて、前記第３の演算を行い、
前記第２のパイプラインの処理ユニットの対象画素が、前記第１のパイプラインの処理ユニットにおける対象画素に対して、伝播方向と逆方向にずれている請求項２に記載の画像処理装置。
【請求項４】
前記処理ユニットは、前記対象画素データに対する演算を行って、複数の選択候補を算出し、前記複数の選択候補の中から選択された１つを出力画素データとする請求項１に記載の画像処理装置。
【請求項５】
前記ラインメモリは、容量の異なる複数のラインを備えている請求項１に記載の画像処理装置。
【請求項６】
前記レジスタは、保持した前記第２の中間データを前記第２の演算子に入力し、
前記第２の演算子が前記第１の中間データ及び前記第２の中間データに基づいて、第２の演算を行う請求項１に記載の画像処理装置。
【請求項７】
前記遅延素子における遅延量を調整する遅延帳制御回路を備える請求項１に記載の画像処理装置。
【請求項８】
前記第１の画像と前記第２の画像が、ステレオカメラで取得されたステレオ画像である請求項１に記載の画像処理装置。
【請求項９】
１つのカメラが異なるタイミングで取得した２つの画像が前記第１の画像と前記第２の画像となっている請求項１に記載の画像処理装置。
【請求項１０】
請求項１に記載の画像処理装置と、
前記第１及び第２の画像を撮像する、少なくとも一つのカメラと、
前記画像処理装置での処理結果を用いて、車を制御する制御部と、を備えた自動車制御装置。
【請求項１１】
第１の画像、及び第２の画像に含まれる画素データをラインメモリに展開するステップと、
前記ラインメモリに展開された画素データに対して、並列に配置された複数本のパイプラインの複数段の処理ユニットを用いてパイプライン処理を行うステップと、を備え、
前記パイプライン処理を行うステップは、
（ａ）前記第１の画像の対象画素に対応する対象画素データと、前記第２の画像において、前記対象画素の周囲画素に対応する周囲画素データとに基づいて、第１の演算子が演算を行う第１の演算ステップと、
（ｂ）前記第１の演算ステップでの演算結果に基づく第１の中間データに基づいて、第２の演算子が第２の演算を行う第２の演算ステップと、
（ｃ）前記第２の演算子の演算結果に基づく第２の中間データを、レジスタが保持するステップと、
（ｄ）前記第１の中間データに基づいて、第３の演算子が第３の演算を行う第３の演算ステップと、
（ｅ）前記第３の演算子での演算結果に応じた第３の中間データを遅延素子で遅延するステップと、
（ｆ）前記周囲画素を順次変えていくことで、（ａ）〜（ｅ）のステップを繰り返し行うステップと、を備えた画像処理方法。
【請求項１２】
複数本のパイプラインには、第１のパイプラインと第２のパイプラインとが含まれており、
前記第１のパイプラインの前記処理ユニットに設けられた前記遅延素子で遅延された第３の中間データが、前記第２のパイプラインに含まれる前記処理ユニットの前記第３の演算子に入力され、
前記第３の演算子が前記第１の演算子からの前記第１の中間データと前記遅延素子からの前記第３の中間データとに基づいて、前記第３の演算を行う請求項１１に記載の画像処理方法。
【請求項１３】
前記第３の演算子は、前記対象画素と、前記対象画素から伝播方向にずれた参照画素とについて、前記第３の演算を行い、
前記第２のパイプラインの前記処理ユニットの対象画素が、前記第１のパイプラインの処理ユニットにおける対象画素に対して、伝播方向と逆方向にずれている請求項１２に記載の画像処理方法。
【請求項１４】
前記処理ユニットは、前記対象画素データに対する演算を行って、複数の選択候補を算出し、前記複数の選択候補の中から選択された１つを出力画素データとする請求項１１に記載の画像処理方法。
【請求項１５】
前記ラインメモリは、容量の異なる複数のラインを備えている請求項１１に記載の画像処理方法。
【請求項１６】
前記レジスタは、保持した前記第２の中間データを前記第２の演算子に入力し、
前記（ｂ）のステップでは、前記第２の演算子が、前記第１の中間データ及び前記第２の中間データに基づいて、第２の演算を行う請求項１１に記載の画像処理方法。
【請求項１７】
前記遅延素子における遅延量が調整される請求項１１に記載の画像処理方法。
【請求項１８】
前記第１の画像と前記第２の画像とが、２つのカメラで取得されたステレオ画像である請求項１１に記載の画像処理方法。
【請求項１９】
１つのカメラが異なるタイミングで取得した２つの画像が前記第１の画像と前記第２の画像となっている請求項１１に記載の画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置、画像処理方法、及び自動車制御装置に関する。
【背景技術】
【０００２】
画像処理や音声処理を行うデータ処理装置に対して、高速化の要求が年々高まっている。とりわけ、自動車用途に適用される画像処理装置、画像認識装置に対しては、処理の高速性はもとより、物体の検出や認識を高精度に行う技術が求められている。
【０００３】
この傾向は、近年のマルチメディア化、コンテンツのリッチ化による画像データの肥大化に伴い、益々高まっている。
【０００４】
特に、前方監視システムにおける、高密度の画素情報による動き情報や距離情報の算出には膨大な画像データと膨大な処理回数が必要となる。よって、今後さらなる高性能化の要求が高まることが予想される。
【０００５】
この要求に応えるため、特許文献１には、パイプライン処理により並列処理が行われる演算装置が開示されている。特許文献１では、複数の演算部が直列に接続されている。そして、前段の演算部の演算データが後段の演算部に出力される。
【０００６】
また、特許文献２には、演算命令が複数の演算器によって実行される装置が開示されている。特許文献２では、レジスタが複数の演算器からそれぞれ直接アクセスできる。そして、レジスタは各演算器の演算結果を保持する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−２９６０９６号公報
【特許文献２】特開２００２−１８２９０５号公報
【非特許文献】
【０００８】
【非特許文献１】“Ａｃｃｕｒａｔｅ ａｎｄ Ｅｆｆｉｃｉｅｎｔ Ｓｔｅｒｅｏ Ｐｒｏｃｅｓｓｉｎｇ ｂｙ Ｓｅｍｉ-Ｇｌｏｂａｌ Ｍａｔｃｈｉｎｇ ａｎｄ  Ｍｕｔｕａｌ Ｉｎｆｏｒｍａｔｉｏｎ“  インターネット検索http://www.robotic.dlr.de/fileadmin/robotic/hirschmu/cvpr05hh.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００９】
昨今の複雑なコンテンツを制御するためには、演算部が他の演算部の演算結果を用いて演算を行うという複雑な制御が求められている。各演算部が、前段より前に配置された演算部の処理結果を参照する場合がある。この場合、特許文献１に開示されたパイプライン構成では、処理結果を改めて後段の演算部に入力に指定する必要がある。パイプライン段数が長くなると、命令体系が複雑になってしまう。さらに、レジスタを選択するための制御が複雑になるという問題がある。
【００１０】
また、特許文献２に記載の手法を非特許文献１に記載されたステレオ画像に適用すると中間的に生成されたデータを保持するレジスタが増大するという問題が発生する。
【００１１】
ステレオやオプティカルフローなどの処理では、対象画像と比較される比較画像が存在する。ステレオは違うカメラで同時刻の画像、オプティカルフローは同一カメラで時刻が異なる画像を扱う。この２つの画像の画素データを用いて演算を行う場合を考える。パイプライン処理は、複数のステージで構成されている。そして、各ステージで増幅と選択を繰り返す演算が多々ある。
【００１２】
増幅は、多数の選択候補を算出する演算である。選択は、複数の選択候補の中から最適なデータを選択する演算である。このため、ステレオやオプティカルフローなどの処理では、中間的に生成される選択候補又は選択候補を生成するためのデータが膨大に生成されることになる。よって、ステレオやオプティカルフローに適用される関数結果を一次元のパス上で最適化計算する手法とすると、中間的に生成されたデータを保持するレジスタが増大するという問題が発生する。
【００１３】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
一実施の形態によれば、画像処理装置は、並列に配置された複数本のパイプラインを有している。パイプラインのそれぞれは複数段の処理ユニットを有している。処理ユニットが、前記第１の画像の対象画素に対応する対象画素データと、前記第２の画像において前記対象画素の周囲画素に対応する周囲画素データとに基づいて、第１の演算を行う第１の演算子と、前記第１の演算子での演算結果に基づく第１の中間データに基づいて、第２の演算を行う第２の演算子であって、前記周囲画素を順次変えていったときの前記第１の中間データに応じて、第２の中間データを算出する第２の演算子と、前記第１の中間データに基づいて、第３の演算を行う第３の演算子であって、前記周囲画素を順次変えていったときの前記第１の中間データに応じて、第３の中間データを算出する第３の演算子と、前記周囲画素を順次変えていったときの前記第２の中間データを保持するレジスタと、前記第３の演算子からの前記第３の中間データを遅延する遅延素子と、を備えている。
【発明の効果】
【００１５】
前記一実施の形態によれば、画像処理を効率的に実施することができる。
【図面の簡単な説明】
【００１６】
【図１】画像処理装置を搭載した自動車の構成を模式的に示すブロック図である。
【図２】画像処理装置の回路構成を示す制御ブロック図である。
【図３】画像処理方法を示すフローチャートである。
【図４】一般的なハードウェア構成を用いた場合の画像処理方法の画像処理ステップを示す処理フローである。
【図５】図４での画像処理において、第１及び第２の画像の画素を説明するための図である。
【図６】図４での画像処理を説明するための図である。
【図７】図６に示す処理における実行フローを示す図である。
【図８】図６でのパイプライン処理を並列化した構成を説明するための図である
【図９】図８に示す処理における実行フローを示す図である。
【図１０】本実施の形態での対象画素と周囲画素を説明するための図である。
【図１１】本実施の形態にかかる画像処理装置での処理を説明するための概念図である。
【図１２】画像処理装置の主要部の構成を示す図である。
【図１３】図１２に示す処理における実行フローを示す図である。
【図１４】画像に含まれる画素を示す図である。
【図１５】画素の伝播方向と伝播数を説明するための図である。
【図１６】並列度とレジスタコストとの関係を示すグラフである。
【図１７】ラインメモリの構成を示す図である。
【図１８】実施の形態２にかかる画像処理装置の処理ユニットの構成を模式的に示す図である。
【図１９】図１８に示す処理における実行フローを示す図である。
【図２０】その他の実施の形態にかかる画像処理装置の構成を示すブロック図である。
【発明を実施するための形態】
【００１７】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１８】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１９】
本実施の形態にかかる画像処理装置は２つの画像に対して並列にパイプライン処理を行う画像処理装置である。すなわち、画像処理装置は、並列に配置された複数本のパイプラインを備えている。それぞれのパイプラインが複数段の処理ユニットを備えている。処理ユニットで算出されたデータが、後段の処理ユニットに出力される。これにより、パイプライン処理を行うことができる。
【００２０】
例えば、２つの画像は左右二つのカメラを有するステレオカメラで同時に取得したステレオ画像や、１つのカメラで異なるタイミングで取得された２つの画像である。ステレオやオプティカルフローにおいて、パターンマッチングを行うことで、パターンの距離情報や動き情報を求めることができる。パターンマッチングとしては、非特許文献１に記載されたセミグローバルマッチングを用いることができる。
【００２１】
本実施の形態においては、自動車に搭載されたステレオカメラで取得したステレオ画像に対して画像処理を行う例について説明する。さらには、画像処理装置は自動車の前方監視システムに用いられる。画像処理装置での画像処理結果に基づいて、自動車の自動制御を行うことも可能である。
【００２２】
実施の形態１．
（自動車の構成）
まず、画像処理装置を搭載した自動車の構成について説明する。図１は自動車１の制御構成を示す図である。自動車１は、カメラ２と、カメラＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）３と、ＥＣＵ４と、ブレーキＥＣＵ５と、アクセルＥＣＵ６と、ステアリングＥＣＵ７を有している。なお、自動車１には、通常の乗用車だけでなく、バスやトラックなども含まれる。
【００２３】
自動車１には、カメラ２と、カメラＥＣＵ３と、ＥＣＵ４と、ブレーキＥＣＵ５と、アクセルＥＣＵ６と、ステアリングＥＣＵ７が搭載されている。また、自動車１には、エンジン、ブレーキ、ステアリング、車輪などが設けられている。カメラＥＣＵ３と、ＥＣＵ４と、ブレーキＥＣＵ５と、アクセルＥＣＵ６と、ステアリングＥＣＵ７等の各コントロールユニットは、マイコンなどのハードウェアやメモリにロードされたプログラム等のソフトウェアなどによって実現される。
【００２４】
カメラ２は自動車１の左右に設置されたステレオカメラであり、自動車１の前方の画像を取得する。２つのカメラ２で取得されたステレオ画像は、カメラＥＣＵ３に出力される。カメラＥＣＵ３は、画像処理装置を有しており、ステレオ画像に対して画像処理を実行する。そして、カメラＥＣＵ３は、画像処理結果をＥＣＵ４に出力する。例えば、カメラＥＣＵ３は、画像処理結果に基づいて、自動車１から障害物までの距離等を算出する。
【００２５】
ＥＣＵ４は、画像処理結果に基づいて、自動車１を制御する制御部を有している。例えば、ＥＣＵ４は、ブレーキＥＣＵ５、アクセルＥＣＵ６、ステアリングＥＣＵ７を制御するための制御信号を出力する。ブレーキＥＣＵ５は、制御信号に応じて自動車１のブレーキを制御する。アクセルＥＣＵ６は自動車１のアクセルを制御する。ステアリングＥＣＵ７は、自動車１のステアリングを制御する。画像処理結果に応じてＥＣＵ４が制御信号を出力することで、自動車１を人の制御ではなくシステムによる自動制御することができる。
【００２６】
（画像処理装置の制御構成）
次に、本実施の形態にかかる画像処理装置となるカメラＥＣＵ３について、図２を用いて説明する。図２は、カメラＥＣＵ３の回路構成を示すブロック図である。カメラＥＣＵ３は、少なくとも一つのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２２、ローカルメモリ２３、外部メモリインターフェース２４、内部バス２５、少なくとも一つのＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）２６、専用ハードウェア２７、インターフェース２８、カメラインターフェース２９、カメラインターフェース３０を有している。
【００２７】
カメラインターフェース２９、３０は、カメラ２からの画像を入力するためのインターフェースである。例えば、左のカメラ２で所得した画像は、カメラインターフェース２９を介してカメラＥＣＵ３に入力される。右のカメラ２で取得された画像は、カメラインターフェース３０を介してカメラＥＣＵ３に入力される。ここで、左のカメラ２で所得した画像を第１の画像、右のカメラ２で取得した画像を第２の画像とする。第１の画像と第２の画像の画素数は同じとなっている。
【００２８】
内部バス２５は、ＣＰＵ２２、ローカルメモリ２３、外部メモリインターフェース２４、ＤＳＰ２６、専用ハードウェア２７、カメラインターフェース２９、カメラインターフェース３０をそれぞれ接続するバスラインを有している。インターフェース２８は、ＥＣＵ４と入出力するためのインターフェースである。外部メモリインターフェース２４は、図示しない外部メモリと入出力するためのインターフェースである。
【００２９】
ローカルメモリ２３は第１の画像、及び第２の画像に含まれる画素データを記憶する。ＣＰＵ２２は、ローカルメモリ２３、外部メモリインターフェース２４、内部バス２５、ＤＳＰ２６、専用ハードウェア２７、インターフェース２８、カメラインターフェース２９、及びカメラインターフェース３０のそれぞれを統括的に制御する。
【００３０】
ＣＰＵ２２、ＤＳＰ２６、及び専用ハードウェア２７は、本実施の形態にかかる画像処理方法を実施するためのハードウェアである。すなわち、ＣＰＵ２２、ＤＳＰ２６、及び専用ハードウェア２７において、画像処理が実行される。ＤＳＰ２６、及び専用ハードウェア２７は、内部メモリであるラインメモリを備えている。
【００３１】
（処理フロー）
次に、カメラＥＣＵ３における画像処理方法について、図３を用いて説明する。図３は、カメラＥＣＵ３での画像処理方法を示すフローチャートである。
【００３２】
まず、カメラインターフェース２９、３０を介して、カメラ２が撮像したカメラ画像（第１画像及び第２画像）をカメラＥＣＵ３が取り込む（Ｓ３１）。そして、カメラＥＣＵ３は、外部メモリインターフェース２４を介して、カメラ画像を外部メモリに展開する（Ｓ３２）。
【００３３】
つぎに、カメラＥＣＵ３は、外部メモリに展開された画素データをローカルメモリ２３に展開する（Ｓ３３）。
【００３４】
ローカルメモリ２３に格納された画素データに基づいて、カメラＥＣＵ３が画像処理を行う（Ｓ３４）。具体的には、ＣＰＵ２２、ＤＳＰ２６、及び専用ハードウェア２７が、画素データに対して演算処理を施すことで、画像処理が行われる。
【００３５】
カメラＥＣＵ３は、画像処理の結果をＥＣＵ４等に出力する（Ｓ３５）。例えば、ステップＳ３４において、カメラＥＣＵ３は、カメラ２で取得された第１及び第２の画像に基づいて出力画像を生成する。出力画像は、第１及び第２の画像と同じ画素数の画素データから構成されている。そして、カメラＥＣＵ３は出力画像を画像処理結果として、ＥＣＵ４に出力する。画素数は必要に応じて間引きや切り取りをしてもよい。
【００３６】
ＥＣＵ４は、画像処理結果に基づいて、ブレーキＥＣＵ５、アクセルＥＣＵ６、ステアリングＥＣＵ７を制御してもよい。これにより、ブレーキ、アクセル、ステアリングが制御される。よって、自動車１の自動制御が可能となる。例えば、画像処理装置によって障害物との距離を求める。そして、障害物が近いと判断した場合、アクセルＥＣＵ６がアクセルを緩めたり、ブレーキＥＣＵ５がブレーキを掛けたりすることで、自動車１が減速する。あるいは、障害物を避けるようにステアリングＥＣＵ７がステアリングを制御する。
【００３７】
（一般的な構成での処理フロー）
次に、図４を用いて、ステップＳ３４の画像処理について説明する。図４は、ステップＳ３４の画像処理を一般的なＤＳＰ２６や専用ハードウェア２７で行う場合の処理フローを示している。
【００３８】
カメラＥＣＵ３は、Ｓ３３でローカルメモリに展開された画素データを内部メモリに展開する（Ｓ４１）。内部メモリは、ＤＳＰ２６又は専用ハードウェア２７に内蔵されたラインメモリであり、画像処理に用いられる画素データを記憶する。そして、カメラＥＣＵ３はラインメモリに格納された画素データに対して演算１を行い（Ｓ４２）、演算１の演算結果をレジスタに内部保持する（Ｓ４３）。
【００３９】
次に、レジスタに保持された演算１の演算結果を用いて、演算２を行い（Ｓ４４）、演算２の演算結果をレジスタに内部保持する（Ｓ４５）。レジスタに保持された演算２の演算結果を用いて、演算３を行い（Ｓ４６）、演算３の演算結果をレジスタに内部保持する（Ｓ４７）。
【００４０】
図４では、演算と内部保持を３回繰り返すフローを示しているが、繰り返し回数を３としているが３回に限るものではない。演算１〜３は、例えば、積和演算（ＭＡＣ：Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｅ）である。
【００４１】
（単一のパイプライン）
ここで、図５、及びを参照して、図４に示す処理フローについて説明する。図５は、第１の画像と第２の画像の画素を説明するための図である。図６は、演算１〜演算３を説明するための図である。具体的には、図６は、パイプラインの１つの段で行われる処理を示している。
【００４２】
図５に示すように、第１の画像Ｒ、第２の画像Ｒｅｆとして示す。第１の画像Ｒ、第２の画像Ｒｅｆの水平方向（横方向）をＸ方向とし、鉛直方向（縦方向）をＹ方向とする。ここでは、第１の画像Ｒ、及び第２の画像Ｒｅｆは、Ｘ方向における総画素数Ｄ（Ｄは２以上の整数）、Ｙ方向における総画素数Ｈ（Ｈは２以上の整数）の２次元画像である。
【００４３】
そして、第１の画像Ｒ、第２の画像Ｒｅｆの画素座標を（ｘ，ｙ）として示す。例えば、第１の画像Ｒにおける画素座標（ｘ，ｙ）の画素はＲ（ｘ，ｙ）として示される。同様に、第２の画像Ｒｅｆにおける画素座標（ｘ＋１，ｙ）の画素はＲｅｆ（ｘ＋１，ｙ）として示される。ｘ及びｙは任意の正の整数である。第１の画像Ｒ、第２の画像Ｒｅｆの各画素の画素データは、上記のように内部メモリに格納されている。
【００４４】
ここで、第１の画像Ｒの画素座標（ｘ，ｙ）の画素を対象画素とする。また、第２の画像Ｒｅｆにおいて、画素座標（ｘ，ｙ）の周囲にある画素を周囲画素とする。例えば、周囲画素はＲｅｆ（ｘ，ｙ）〜Ｒｅｆ（ｘ＋ｄ，ｙ）のＬ個の画素である。ｄは任意の整数とする。なお、周囲画素は、対象画素と同じ画素座標を含むように設定されている。
【００４５】
図６は、Ｒ（ｘ，ｙ）を対象画素として、画像処理を行う処理ユニット２５０を示している。具体的には、図６には、対象画素Ｒ（ｘ，ｙ）の画素データから、出力画素データＶ（ｘ，ｙ）を算出するための画像処理が示されている。なお、以下の説明において、対象画素の画素データを対象画素データとし、周囲画素の画素データを周囲画素データとする。
【００４６】
まず、処理ユニット２５０における処理について説明する。第１の演算子２５１が対象画素データと周囲画素データとを用いて、演算を行う。対象画素データは、第１の画像Ｒの対象画素Ｒ（ｘ，ｙ）に対応する画素データである。周囲画素データは、第２の画像Ｒｅｆの座標（ｘ，ｙ）の周囲にある画素の画素データである。具体的には、周囲画素データは、周囲画素Ｒｅｆ（ｘ，ｙ）〜Ｒｅｆ（ｘ＋ｄ，ｙ）に対応する画素データである。なお、周囲画素はＬ個であるため、第１の演算子２５１はＬ個設けられている。なお、Ｌ＝ｄ＋１である（Ｌ、ｄは任意の正の整数）。そして、Ｌ個の第１の演算子２５１のそれぞれが２つの画素データに基づいて、演算処理を行う。これにより、Ｌ個の演算結果が得られる。第１の演算子２５１による演算は、図４のステップＳ４２に対応する。
【００４７】
そして、Ｌ個のレジスタ２５２が、それぞれ演算結果を保持する。ここで、Ｌ個のレジスタ２５２に保持された演算結果をデータ配列Ｓｃ（ｘ，ｙ）として示す。データ配列Ｓｃ（ｘ，ｙ）は、Ｌ個の演算結果から構成されている。このＬを第１の演算子２５１における増幅数とする。すなわち、増幅数Ｌは、第１の演算子２５１において、１つの対象画素Ｒ（ｘ，ｙ）について生成されるデータの数となる。増幅数Ｌは、例えば１２８、あるいは、２５６等が用いられる。レジスタ２５２によるデータの保持が、図４のステップＳ４３に対応する。
【００４８】
具体的には、１つの対象画素Ｒ（ｘ，ｙ）に対して、周囲画素を順次変えていくことで、データ配列Ｓｃ（ｘ，ｙ）が生成される。より詳細には、Ｌ個の周囲画素の画素データが順次第１の演算子２５１に入力される。そして、第１の演算子２５１によって生成された増幅データに基づいて、データ配列Ｓｃ（ｘ，ｙ）が生成される。
【００４９】
そして、データ配列Ｓｃ（ｘ，ｙ）は、第２の演算子２５３ａ〜２５３ｄに入力される。図６で、４つの第２の演算子２５３が設けられており、それぞれを第２の演算子２５３ａ〜２５３ｄとして識別している。さらに、第２の演算子２５３ａ〜２５３ｄには、ラインメモリ、又はパイプライン処理の他のステージからデータ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）がそれぞれ入力されている。
【００５０】
第２の演算子２５３ａ〜２５３ｄは入力された２つのデータ配列に対して、第２の演算を行う。具体的には、第２の演算子２５３ａ〜２５３ｄは、データ配列Ｓｃ（ｘ，ｙ）を用いて、データ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）を更新する。第２の演算子２５３ａ〜２５３ｄによる演算は、図４のステップＳ４４に対応する。
【００５１】
例えば、第２の演算子２５３ａには、データ配列Ｓｃ（ｘ，ｙ）と、データ配列Ｓ（ｘ−１，ｙ）とが入力される。そして、第２の演算子２５３ａが、データ配列Ｓｃ（ｘ，ｙ）を用いて、データ配列Ｓ（ｘ−１，ｙ）を更新する。同様に、第２の演算子２５３ｂ〜２５３ｄは、データ配列Ｓｃ（ｘ，ｙ）を用いて、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）を更新する。第２の演算子２５３ａ〜２５３ｄによって生成されたデータ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）を伝播データとする。
【００５２】
伝播データは、２つの画素から算出された増幅データを用いて算出される。具体的には、第２の演算子２５３ａ〜２５３ｄが対象画素及び参照画素についての増幅データを用いて、演算を行う。例えば、第２の演算子２５３ａの対象画素の座標は（ｘ，ｙ）であり、参照画素の座標は（ｘ−１，ｙ）である。同様に、第２の演算子２５３ｂの対象画素の座標は（ｘ，ｙ）であり、参照画素の座標は（ｘ−１，ｙ−１）である。
【００５３】
上記のように、１つの増幅データは、Ｌ個のデータ配列によって構成されている。具体的には、第２の演算子２５３ａ〜２５３ｄは、対象画素における増幅データと、対象画素からＸ方向又はＹ方向に伝播した参照画素における増幅データとを用いて、伝播データを算出する。
【００５４】
第２の演算子２５３ａ〜２５３ｄが更新したデータ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）はそれぞれレジスタ２５５ａ〜２５５ｄに保持される。レジスタ２５５ａ〜２５５ｄによるデータ保持が、図４のステップＳ４５に対応する。そして、レジスタ２５５ａ〜２５５ｄはデータ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）を第３の演算子２５６に出力する。
【００５５】
第３の演算子２５６は、データ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）に対して、第３の演算を実行する。こうすることで、第３の演算子２５６は、データ配列Ｓｓ（ｘ，ｙ）を算出する。第３の演算子２５６による演算は、図４のステップＳ４６に対応する。第３の演算子２５６によって生成されたデータ配列Ｓｓ（ｘ，ｙ）を選択候補データとする。
【００５６】
選択候補データは、複数の画素から算出された伝播データを用いて算出される。図６では、４つの画素から算出された伝播データを用いて、対象画素Ｒ（ｘ，ｙ）の選択候補データが算出される。
【００５７】
第３の演算子２５６は、データ配列Ｓｓ（ｘ，ｙ）をレジスタ２５７に出力する。レジスタ２５７は、データ配列Ｓｓ（ｘ，ｙ）を保持する。なお、レジスタ２５７による選択候補データの保持が、ステップＳ４７に対応する。
【００５８】
そして、レジスタ２５７は、データ配列Ｓｓ（ｘ，ｙ）を順次セレクタ２５８に出力する。セレクタ２５８は、データ配列Ｓｓ（ｘ，ｙ）の中から最適な画素データを選択して、出力画素データＶｘ（ｘ，ｙ）として出力する。そして、出力画素データＶｘ（ｘ，ｙ）は、ローカルメモリ２３に展開される。
【００５９】
ここで、伝播データであるデータ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）は、データ容量が大きくなる傾向がある。例えば、伝播データの容量は、Ｌ＊Ｄ＊Ｈで表現される。
【００６０】
図６に示す処理における実行フローを図７に示す。図７において、ＲＤはラインメモリからの画素データの読み取り、ＥＸは演算子による演算、ＳＴはレジスタへの書き込みを示す。ＥＸはそれぞれ２回実行されているが、１回でもよく、３回以上でもよい。
【００６１】
図７の横方向の一列が、パイプラインの各ステージでの処理に相当する。例えば、パイプラインの１段目のステージでは、対象画素をＲ（ｘ＋４，ｙ）として、読み出しＲＤ、演算ＥＸ，演算ＥＸ、書き込みＳＴを行い、パイプラインの２段目のステージでは、対象画素をＲ（ｘ＋３，ｙ）として、読み出しＲＤ、演算ＥＸ，演算ＥＸ、書き込みＳＴを行っている。すなわち、１段ごとに、演算ＥＸの実行タイミングが１回ずれている。
【００６２】
そして、Ｘ方向に沿った一列のパイプライン処理が完了した後、Ｙ方向に１画素ずらして、次の一列のパイプライン処理を行う。図７では、Ｙ座標がｙとなる１列のパイプライン処理が完了した後、Ｙ座標がｙ＋１となる１列のパイプライン処理を行う。
【００６３】
（並列パイプライン）
次に、図６に示す処理を並列に配置された２本のパイプラインで処理する例について、図８を用いて説明する。図８では、第１のパイプラインの処理ユニット２５０と第２のパイプラインの処理ユニット３５０が並列に処理を行う。
【００６４】
処理ユニット２５０と処理ユニット３５０は同様の構成となっている。処理ユニット２５０の第１の演算子２５１、レジスタ２５２、第２の演算子２５３、レジスタ２５５、第３の演算子２５６、レジスタ２５７、セレクタ２５８がそれぞれ、処理ユニット３５０の第１の演算子３５１、レジスタ３５２、第２の演算子３５３、レジスタ３５５、第３の演算子３５６、レジスタ３５７、セレクタ３５８に対応する。処理ユニット２５０、処理ユニット３５０における処理は、図６と同様であるため説明を省略する。
【００６５】
第１のパイプラインの処理ユニット２５０では、対象画素をＲ（ｘ，ｙ）とし、第２のパイプラインの処理ユニット３５０では、対象画素をＲ（ｘ，ｙ＋１）としている。すなわち、第１のパイプラインの処理ユニット２５０と第２のパイプラインの処理ユニット３５０とでは、Ｙ方向に１画素ずれた画素を対象画素としている。したがって、周囲画素もＹ方向に１画素ずれている。
【００６６】
図８に示す処理における実行フローを図９に示す。図９において、ＲＤはラインメモリからの画素データの読み取り、ＥＸは演算子による演算、ＳＴはレジスタへの書き込みを示す。ＥＸはそれぞれ２回実行されているが、１回でもよく、３回以上でもよい。
【００６７】
図８では、２本のパイプラインが並列にパイプライン処理を行っている。すなわち、第１のパイプラインの処理ユニット２５０と、第２のパイプラインの処理ユニット３５０が同時に処理を行う。
【００６８】
例えば、第１のパイプラインの処理ユニット２５０が対象画素をＲ（ｘ，ｙ）として処理を行っている時、第２のパイプラインの処理ユニット３５０が対象画素をＲ（ｘ，ｙ＋１）として処理を行っている。換言すると、図８では、対象画素がＹ方向に１画素ずれている。このため、図９に示すように、Ｒ（ｘ，ｙ）を対象画素とした処理と、Ｒ（ｘ−１，ｙ＋１）を対象画素として処理が同時に実施される。すなわち、第１のパイプラインの処理ユニット２５０が、対象画素Ｒ（ｘ，ｙ）の画素データを読み取るタイミング（ＲＤ）と、第２のパイプラインの処理ユニット３５０が、対象画素Ｒ（ｘ，ｙ＋１）の画素データを読み取るタイミング（ＲＤ）と、が同じになっている。
【００６９】
したがって、図８に示す並列のパイプライン構成では、他のパイプラインでの、演算結果を利用することが困難である。すなわち、第１のパイプラインの処理ユニット２５０で求められた伝播データを、第２のパイプラインの処理ユニット３５０での処理に利用することが困難である。具体的には、第１のパイプラインの処理ユニット２５０において、対象画素Ｒ（ｘ，ｙ）とした処理での伝播データを、第２のパイプラインの処理ユニット３５０において、対象画素を対象画素Ｒ（ｘ，ｙ＋１）とした処理で利用することができない。
【００７０】
（処理ユニットの概要構成）
そこで、本実施の形態では、以下の画像処理装置、及び画像処理方法を用いている。本実施の形態にかかる画像処理装置の処理ユニットの構成について、図１０、図１１を用いて説明する。図１０は、並列に配置されたパイプラインの２つの処理ユニットの対象画素、及び周囲画素を説明するための図である。図１１は、第１のパイプラインの処理ユニット５０と、第２のパイプラインの処理ユニット１５０の概要を示す図である。
【００７１】
上記したように、第１のパイプラインと第２のパイプラインとは、並列してパイプライン処理を行う。例えば、第１のパイプラインと第２のパイプラインとは、Ｙ方向に１画素ずれた画素を対象画素として、パイプライン処理を行う。第１のパイプラインは、パイプライン処理を行うための複数段の処理ユニットを有している。同様に、第２のパイプラインは、パイプライン処理を行うための複数段の処理ユニットを有している。第１のパイプラインに含まれる処理ユニットは、Ｙ座標がｙの画素を対象画素とし、第２のパイプラインに含まれる処理ユニットは、Ｙ座標がｙ＋１の画素を対象画素としている。
【００７２】
図１１では、第１のパイプラインにおける１段の処理ユニット５０と、第２のパイプラインにおける１段の処理ユニット１５０とが示されている。図１０、図１１に示すように、処理ユニット５０の対象画素はＲ（ｘ，ｙ）であり、処理ユニット１５０の対象画素はＲ（ｘ−１，ｙ＋１）である。
【００７３】
処理ユニット５０は、第１の演算子５１、レジスタ５２、第２の演算子５３ａ、第３の演算子５４ｂ〜５４ｄ、第４の演算子５６、セレクタ５８、及び遅延素子５９ｂ〜５９ｄを備えている。処理ユニット１５０は、第１の演算子１５１、レジスタ１５２、第２の演算子１５３ａ、第３の演算子５４ｂ〜５４ｄ、第４の演算子１５６、レジスタ１５７、及びセレクタ１５８を備えている。
【００７４】
まず、処理ユニット５０における処理について説明する。第１の演算子５１が対象画素データと周囲画素データとを用いて、第１の演算を行う。対象画素データは、第１の画像Ｒの対象画素Ｒ（ｘ，ｙ）に対応する画素データである。周囲画素データは、第２の画像Ｒｅｆの座標（ｘ，ｙ）の周囲にある画素の画素データである。具体的には、周囲画素データは、周囲画素Ｒｅｆ（ｘ，ｙ）〜Ｒｅｆ（ｘ＋ｄ，ｙ）に対応する画素データである。なお、周囲画素はＬ個であるため、第１の演算子５１はＬ個設けられている。そして、Ｌ個の第１の演算子５１のそれぞれが２つの画素データに基づいて、演算処理を行う。これにより、Ｌ個の演算結果が得られる。
【００７５】
そして、Ｌ個のレジスタ５２が、それぞれ演算結果を保持する。ここで、Ｌ個のレジスタ５２に保持された演算結果をデータ配列Ｓｃ（ｘ，ｙ）として示す。データ配列Ｓｃ（ｘ，ｙ）は、Ｌ個の演算結果から構成されている。このＬを第１の演算子５１における増幅数とする。すなわち、増幅数Ｌは、第１の演算子５１において、１つの対象画素Ｒ（ｘ，ｙ）について生成されるデータの数である。増幅数Ｌは、例えば１２８、あるいは、２５６等が用いられる。
【００７６】
具体的には、１つの対象画素Ｒ（ｘ，ｙ）に対して、周囲画素を順次変えていくことで、データ配列Ｓｃ（ｘ，ｙ）が生成される。より詳細には、Ｌ個の周囲画素の画素データが順次第１の演算子５１に入力されていく。そして、第１の演算子５１によって生成された増幅データに基づいて、データ配列Ｓｃ（ｘ，ｙ）が生成される。
【００７７】
そして、データ配列Ｓｃ（ｘ，ｙ）は、第２の演算子５３ａ、及び第３の演算子５４ｂ〜５４ｄに入力される。図１１で、３つの第３の演算子５４が設けられており、第３の演算子５４ｂ〜５４ｄとして識別している。さらに、第２の演算子５３ａ、及び第３の演算子５４ｂ〜５４ｄには、ラインメモリ、又はパイプライン処理の他のステージからデータ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）がそれぞれ入力されている。
【００７８】
第２の演算子５３ａ、及び第３の演算子５４ｂ〜５４ｄは入力された２つのデータ配列に対して、第２の演算、又は第３の演算を行う。具体的には、第２の演算子５３ａ、及び第３の演算子５４ｂ〜５４ｄは、データ配列Ｓｃ（ｘ，ｙ）を用いて、データ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）を更新する。
【００７９】
例えば、第２の演算子５３ａには、データ配列Ｓｃ（ｘ，ｙ）と、データ配列Ｓ（ｘ−１，ｙ）とが入力される。そして、第２の演算子５３ａが、データ配列Ｓｃ（ｘ，ｙ）を用いて、データ配列Ｓ（ｘ−１，ｙ）を更新する。これが第２の演算である。
【００８０】
同様に、第３の演算子５４ｂ〜５４ｄは、データ配列Ｓｃ（ｘ，ｙ）を用いて、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）を更新する。これが第３演算である。第２の演算子５３ａ、及び第３の演算子５４ｂ〜５４ｄによって生成されたデータ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）を伝播データとする。データ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）は、第４の演算子５６に入力される。
【００８１】
第３の演算子５４ｂ〜５４ｄは２つの画素の増幅データを用いて第３の演算を行う。具体的には、第３の演算子５４ｂ〜５４ｄは対象画素の増幅データと、参照画素の増幅データとを用いて、第３の演算を行う。第３の演算子５４ｂの対象画素はＲ（ｘ，ｙ）であり、参照画素はＲ（ｘ−１，ｙ−１）である。第３の演算子５４ｃの対象画素は、Ｒ（ｘ，ｙ）であり、参照画素はＲ（ｘ−２，ｙ−１）である。第３の演算子５４ｄの対象画素は、Ｒ（ｘ，ｙ）であり、参照画素はＲ（ｘ＋１，ｙ−１）である。
【００８２】
第４の演算子５６は、データ配列Ｓ（ｘ−１，ｙ）、Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）に対して、第４の演算を実行する。こうすることで、第４の演算子５６は、データ配列Ｓｓ（ｘ，ｙ）を算出する。第４の演算子５６により第４の演算は、図４のステップＳ４６に対応する。第４の演算子５６によって生成されたデータ配列Ｓｓ（ｘ，ｙ）を選択候補データとする。
【００８３】
選択候補データは、複数の画素から算出された伝播データを用いて算出される。図６では、４つの画素から算出された伝播データを用いて、対象画素Ｒ（ｘ，ｙ）の選択データが算出される。
【００８４】
第４の演算子５６は、データ配列Ｓｓ（ｘ，ｙ）をレジスタ５７に出力する。レジスタ５７は、データ配列Ｓｓ（ｘ，ｙ）を保持する。そして、レジスタ５７は、データ配列Ｓｓ（ｘ，ｙ）を順次セレクタ５８に出力する。セレクタ５８は、データ配列Ｓｓ（ｘ，ｙ）の中から最適な画素データを選択して、出力画素データＶｘ（ｘ，ｙ）として出力する。すなわち、セレクタ５８は、データ配列Ｓｓ（ｘ，ｙ）に含まれる複数のデータから最も低コストのデータを選択する。
【００８５】
次に、処理ユニット１５０における処理について説明する。第１の演算子１５１が対象画素データと周囲画素データとを用いて、第１の演算を行う。対象画素データは、第１の画像Ｒの対象画素Ｒ（ｘ−１，ｙ＋１）に対応する画素データである。周囲画素データは、第２の画像Ｒｅｆの座標（ｘ−１，ｙ＋１）の周囲にある画素の画素データである。具体的には、周囲画素データは、周囲画素Ｒｅｆ（ｘ−１，ｙ）〜Ｒｅｆ（ｘ−１＋ｄ，ｙ）に対応する画素データである。なお、周囲画素はＬ個であるため、第１の演算子５１はＬ個設けられている。そして、Ｌ個の第１の演算子５１のそれぞれが２つの画素データに基づいて、演算処理を行う。これにより、Ｌ個の演算結果が得られる。
【００８６】
そして、Ｌ個のレジスタ１５２が、それぞれ演算結果を保持する。ここで、Ｌ個のレジスタ１５２に保持された演算結果をデータ配列Ｓｃ（ｘ−１，ｙ＋１）として示す。データ配列Ｓｃ（ｘ−１，ｙ＋１）は、Ｌ個の演算結果から構成されている。このＬを第１の演算子１５１における増幅数とする。すなわち、増幅数Ｌは、第１の演算子１５１において、１つの対象画素Ｒ（ｘ−１，ｙ＋１）について生成されるデータの数である。増幅数Ｌは、例えば１２８あるいは２５６といった値をとる。第１の演算子５１の増幅数と第１の演算子１５１の増幅数は同じである。
【００８７】
具体的には、１つの対象画素Ｒ（ｘ−１，ｙ＋１）に対して、周囲画素を順次変えていくことで、データ配列Ｓｃ（ｘ−１，ｙ＋１）が生成される。より詳細には、Ｌ個の周囲画素の画素データが順次第１の演算子１５１に入力されていく。そして、第１の演算子１５１によって生成された増幅データに基づき、データ配列Ｓｃ（ｘ−１，ｙ＋１）が生成される。
【００８８】
そして、データ配列Ｓｃ（ｘ−１，ｙ＋１）は、第２の演算子１５３ａ、及び第３の演算子１５４ｂ〜１５４ｄに入力される。図１１で、３つの第３の演算子１５４が設けられており、第３の演算子１５４ｂ〜１５４ｄとして識別している。さらに、第２の演算子１５３ａ、及び第３の演算子１５４ｂ〜１５４ｄには、ラインメモリ、又はパイプライン処理の他のステージからデータ配列Ｓ（ｘ−２，ｙ＋１）、Ｓ（ｘ−２，ｙ）、Ｓ（ｘ−３，ｙ）、Ｓ（ｘ，ｙ）がそれぞれ入力されている。
【００８９】
第２の演算子１５３ａ、及び第３の演算子１５４ｂ〜１５４ｄは入力された２つのデータ配列に対して、第２の演算又は第３の演算を行う。具体的には、第２の演算子１５３ａ、及び第３の演算子１５４ｂ〜１５４ｄは、データ配列Ｓｃ（ｘ−１，ｙ＋１）を用いて、データ配列Ｓ（ｘ−２，ｙ＋１）、Ｓ（ｘ−２，ｙ）、Ｓ（ｘ−３，ｙ）、Ｓ（ｘ，ｙ）を更新する。
【００９０】
例えば、第２の演算子１５３ａには、データ配列Ｓｃ（ｘ−１，ｙ＋１）と、データ配列Ｓ（ｘ−２，ｙ＋１）とが入力される。そして、第２の演算子１５３ａが、データ配列Ｓｃ（ｘ−１，ｙ＋１）を用いて、データ配列Ｓ（ｘ−２，ｙ＋１）を更新する。これが第２の演算である。
【００９１】
同様に、第３の演算子１５４ｂ〜１５４ｄは、データ配列Ｓｃ（ｘ−１，ｙ＋１）を用いて、Ｓ（ｘ−２，ｙ）、Ｓ（ｘ−３，ｙ）、Ｓ（ｘ，ｙ）を更新する。これが第３演算である。第２の演算子１５３ａ、及び第３の演算子１５４ｂ〜１５４ｄによって生成された、データ配列Ｓ（ｘ−２，ｙ＋１）、Ｓ（ｘ−２，ｙ）、Ｓ（ｘ−３，ｙ）、Ｓ（ｘ，ｙ）を伝播データとする。データ配列Ｓ（ｘ−２，ｙ）、Ｓ（ｘ−２，ｙ）、Ｓ（ｘ−３，ｙ）、Ｓ（ｘ，ｙ）は、第４の演算子１５６に入力される。
【００９２】
第３の演算子１５４ｂ〜１５４ｄは２つの画素の増幅データを用いて第３の演算を行う。具体的には、第３の演算子１５４ｂ〜１５４ｄは対象画素の増幅データと、参照画素の増幅データとを用いて、第３の演算を行う。第３の演算子１５４ｂの対象画素はＲ（ｘ−１，ｙ＋１）であり、参照画素はＲ（ｘ−２，ｙ）である。第３の演算子１５４ｃの対象画素は、Ｒ（ｘ−１，ｙ＋１）であり、参照画素はＲ（ｘ−３，ｙ）である。第３の演算子５４ｄの対象画素は、Ｒ（ｘ−１，ｙ＋１）であり、参照画素はＲ（ｘ，ｙ）である。
【００９３】
さらに、本実施の形態では、処理ユニット５０で生成されたデータ配列Ｓ（ｘ−１，ｙ−１）、Ｓ（ｘ−２，ｙ−１）、Ｓ（ｘ＋１，ｙ−１）が第３の演算子１５４ｂ〜１５４ｄに遅延素子５９ｂ〜５９ｄを介して入力される。具体的には、第３の演算子５４ｂで生成されたＳ（ｘ−１，ｙ−１）が遅延素子５９ｂを介して、第３の演算子１５４ｂに入力される。第３の演算子５４ｃで生成されたＳ（ｘ−２，ｙ−１）が遅延素子５９ｃを介して、第３の演算子１５４ｃに入力される。第３の演算子５４ｄで生成されたＳ（ｘ＋１，ｙ−１）が遅延素子５９ｄを介して、第３の演算子１５４ｄに入力される。
【００９４】
第４の演算子１５６は、Ｓ（ｘ−２，ｙ＋１）、Ｓ（ｘ−２，ｙ）、Ｓ（ｘ−３，ｙ）、Ｓ（ｘ，ｙ）に対して、第４の演算を実行する。こうすることで、第４の演算子１５６は、データ配列Ｓｓ（ｘ−１，ｙ＋１）を算出する。第４の演算子１５６によって生成されたデータ配列Ｓｓ（ｘ−１，ｙ＋１）を選択候補データとする。
【００９５】
第４の演算子１５６は、算出したデータ配列Ｓｓ（ｘ−１，ｙ＋１）をレジスタ１５７に出力する。レジスタ１５７はデータ配列Ｓｓ（ｘ−１，ｙ＋１）を保持する。そして、レジスタ１５７は、データ配列Ｓｓを順次セレクタ１５８に出力する。セレクタ１５８は、データ配列Ｓｓ（ｘ−１，ｙ＋１）の中から最適な画素データを選択して、出力画素データＶｘ（ｘ−１，ｙ＋１）として出力する。例えば、セレクタ５８は、データ配列Ｓｓ（ｘ−１，ｙ＋１）に含まれる複数のデータから最も低コストのデータを選択する。
【００９６】
このように、第３の演算子５４ｂ〜５４ｄによって生成された伝播データが、遅延素子５９ｂ〜５９ｄを介して、第３の演算子１５４ｂ〜１５４ｄに入力される。すなわち、第３の演算子１５４ｂ〜１５４ｄは、並列に配置された第１のパイプラインの処理ユニット５０での演算結果を用いて、第３の演算を実行する。このとき、伝播データが第３の演算子１５４ｂ〜１５４ｄへ入力されるタイミングは、遅延素子５９ｂ〜５９ｄによって調整されている。このようにすることで、伝播データを保持するレジスタを削減することができる。
【００９７】
（画像処理装置の主要部の構成）
次に、本実施の形態にかかる画像処理装置の詳細な構成について、図１２を用いて説明する。図１２は、画像処理装置の主要部の構成を示す図である。
【００９８】
画像処理装置７００はラインメモリ８１と、ラインメモリ制御回路８２と、遅延調整制御回路８３と、処理ユニット７０と、処理ユニット１７０と、を備えている。処理ユニット７０は、第１のパイプラインに含まれる１段の処理ユニットを示している。処理ユニット１７０は、第２のパイプラインに含まれる１段の処理ユニットを示している。第１のパイプラインと第２のパイプラインとは、並列にパイプライン処理を行う
【００９９】
処理ユニット７０は、第１の演算子７４、第２の演算子７５、第３の演算子７６ａ、７６ｂ、レジスタ７７、遅延素子７８ａ、７８ｂを有している。処理ユニット１７０は、第１の演算子１７４、第２の演算子１７５、第３の演算子１７６ａ、１７６ｂ、レジスタ１７７、遅延素子１７８ａ、１７８ｂを有している。
【０１００】
ラインメモリ８１は、第１の画像、及び第２の画像の画素データを記憶する。ラインメモリ８１には、第１の画像、及び第２の画像に含まれる画素データが展開される。ラインメモリ制御回路８２は、ラインメモリ８１を制御する。ラインメモリ制御回路８２は、ローカルメモリ２３からラインメモリ８１へのデータの書き込みを制御する。また、ラインメモリ制御回路８２は、ラインメモリ８１から処理ユニット７０、１７０へのデータの読み出しを制御する。
【０１０１】
具体的には、ラインメモリ制御回路８２はパイプライン処理が行われる第１の画像及び第２の画像に含まれる画素データをローカルメモリ２３から読み出して、ラインメモリ８１に書き込む。ラインメモリ制御回路８２は、処理ユニット７０、処理ユニット１７０の処理に必要な画素データをラインメモリ８１から適切なタイミングで読み出す。画像処理装置においてセミグローバルマッチングを行う場合、ラインメモリ８１は、第１及び第２の画像の一部の画素データを記憶する。そして、ラインメモリ制御回路８２は、ラインメモリ８１から読み出した画素データを処理ユニット７０、１７０に供給する。遅延調整制御回路８３は、後述する遅延素子７８ａ、７８ｂ、１７８ａ、１７８ｂの遅延量を調整する。
【０１０２】
第１の演算子７４、１７４には、ラインメモリ８１から読み出された画素データが入力される。第１の演算子７４、１７４は、画素データに対して、演算処理を行う。具体的には、第１の演算子７４、１７４には、対象画素の画素データと、周囲画素の画素データが入力されている。第１の演算子７４、１７４は、それぞれ図１１に示した第１の演算子５１、及び第１の演算子１５１に対応している。
【０１０３】
第１の演算子７４、１７４には、複数の周囲画素の画素データが、順次入力される。そして、第１の演算子７４、１７４は、対象画素の画素データと、対象画素の画素データに基づく、演算結果を第２の演算子７５、７６ａ、７６ｂに入力される。第１の演算子７４の演算結果は第１の中間データとなっている。第１の中間データは、上記した増幅データに相当する。
【０１０４】
第１の演算子７４、１７４は、順次入力される複数の周囲画素の画素データを用いて、順次演算を行う。すなわち、第１の演算子７４、１７４は、順次入力される複数の周囲画素の画素データに対応する演算結果を順次出力する。例えば、第１の演算子７４、１７４における周囲画素の数は、上記の通りＬ個である。よって、第１の演算子７４、１７４は、Ｌ個のデータを時系列的に出力する。第１の演算子７４、１７４は、順次入力される画素データに対して平均化等を行う。
【０１０５】
第２の演算子７５、１７５は、順次入力されるＬ個のデータに基づいて、演算処理を行う。第２の演算子７５、１７５の演算結果を第２の中間データとする。第２の中間データは、上記した伝播データに相当する。第２の中間データは、レジスタ７７、１７７にそれぞれ保持される。そして、第２の演算子７５、１７５は、レジスタ７７、１７７に保持された第２の中間データと、次に入力される第１の中間データに基づいて、第２の演算を行う。すなわち、第２の演算子７５は、既に生成された第１の中間データに基づく第２の中間データと、新たに生成された第１の中間データと、を用いて第２の演算を行う。例えば、第２の演算は積和演算である。
【０１０６】
そして、第２の演算子７５、１７５による演算結果を新しい第２の中間データとして、レジスタ７７、１７７が保持する。第２の演算子７５、１７５は第１の中間データの数（Ｌ個）だけ、上記の第２の演算を繰り返す。第２の演算子７５、１７５は、それぞれ、図１１に示した第２の演算子５３ａ、１５３ａに対応している。
【０１０７】
同様に、第３の演算子７６ａ、７６ｂには、第１の演算子７４からの第１の中間データが順次入力される。さらに、第３の演算子７６ａ、７６ｂには、他の処理ユニットからの第１の中間データが順次入力される。そして、第３の演算子７６ａ、７６ｂは、２つの中間データに基づいて、第３の演算を行う。第３の演算子７６ａ、７６ｂは順次入力される第１の中間データに対して、順次第３の演算を実行する。なお、第３の演算子７６ａ、７６ｂには、他の処理ユニットからの第１の中間データが入力されているとして説明したが、ラインメモリ８１の画素データが入力されていてもよい。
【０１０８】
具体的には、第３の演算子７６ａ、７６ｂは、対象画素の第１の中間データと、周囲画素の第１の中間データとを用いて、第３の演算を行う。上記のように、第１の中間データにはＬ個のデータが含まれている。同様に、周囲画素の第１の中間データにもＬ個のデータが含まれている。第３の演算子７６ａ、７６ｂは、対象画素の第１の中間データに含まれるデータと、周囲画素の第１の中間データに含まれるデータと、を順次演算する。
【０１０９】
第３の演算子７６ａ、７６ｂの演算結果を第３の中間データとする。第３の中間データは、上記した伝播データに対応する。第３の演算子７６ａで算出された第３の中間データをＡ２とし、第３の演算子７６ｂで算出された第３の中間データをＡ３とする。第３の中間データＡ２は、遅延素子７８ａを介して、第３の演算子１７６ａに入力される。第３の中間データＡ３は、遅延素子７８ｂを介して、第３の演算子１７６ｂに入力される。
【０１１０】
第３の演算子１７６ａ、１７６ｂは、第３の演算子７６ａ、７６ｂと同様に、第３の演算を行う。すなわち、第３の演算子１７６ａには、第１の演算子１７４からの第１の中間データと、第３の演算子７６ａからの第３の中間データＡ２とが順次入力される。第３の演算子１７６ａは、順次入力される２つのデータに基づいて、第３の演算を行う。同様に、第３の演算子１７６ｂには、第１の演算子１７４からの第１の中間データと、第３の演算子７６ｂからの第３の中間データＡ３とが順次入力される。第３の演算子１７６ｂは、順次入力される２つのデータに基づいて、第３の演算を行う。
【０１１１】
第３の演算子１７６ａで算出されたデータを第３の中間データＢ２とし、第３の演算子１７６ｂで算出されたデータを第３の中間データＢ３とする。第３の中間データＢ２、Ｂ３は、遅延素子１７８ａ、１７８ｂを介して、他のパイプラインの処理ユニットに出力される。
【０１１２】
なお、図１２には図示されていないが、処理ユニット７０は、第２の演算子７５による第２の中間データと、第３の演算子７６ａ、７６ｂによる第３の中間データＡ２、Ａ３とを用いて、出力画素データを生成する。同様に、処理ユニット１７０は、第２の演算子１７５による第２の中間データと、第３の演算子１７６ａ、１７６ｂによる第３の中間データＢ２、Ｂ３とを用いて、出力画素データを生成する。出力画素データを生成する処理は、図１１に示した第４の演算子５６、１５６、並びにセレクタ５８、１５８による処理と同様であるため説明を省略する。
【０１１３】
図１２に示す処理における実行フローを図１３に示す。図１３において、ＲＤはラインメモリからの画素データの読み取り、ＥＸは演算子による演算、ＳＴはレジスタへの書き込みを示す。また、図１３では、第１のパイプラインＰ１におけるパイプライン処理と、第２のパイプラインＰ２におけるパイプライン処理を示している。さらに、図１３では、第１のパイプラインＰ１に含まれる５段の処理ユニット７０ａ〜７０ｅと、第２のパイプラインＰ２に含まれる５段の処理ユニット１７０ａ〜１７０ｅと、が示されている。
【０１１４】
５段の処理ユニット７０ａ〜７０ｅの中で、前段側から処理ユニット７０ａ、処理ユニット７０ｂ、処理ユニット７０ｃ、処理ユニット７０ｄ、処理ユニット７０ｅとなっている。５段の処理ユニット１７０ａ〜１７０ｅの中で、前段側から処理ユニット１７０ａ、処理ユニット１７０ｂ、処理ユニット１７０ｃ、処理ユニット１７０ｄ、処理ユニット１７０ｅとなっている。すなわち、パイプラインＰ１、Ｐ２において、最も前段の処理ユニットは、処理ユニット７０ａ、１７０ａである。前段の処理ユニットから後段の処理ユニットへ中間データが出力される。後段の処理ユニットは、前段の処理ユニットで算出された中間データを用いて演算を行う。
【０１１５】
第１のパイプラインＰ１の対象画素のＹ座標はｙとなっており、第２のパイプラインＰ１の対象画素のＹ座標はｙ＋１となっている。すなわち、並列するパイプラインでは、Ｙ座標が異なっている。例えば、第１のパイプラインＰ１の処理ユニット７０ａ〜７０ｅでは、対象画素のＹ座標がｙ、第２のパイプラインＰ２の処理ユニット１７０ａ〜１７０ｅでは、対象画素のＹ座標がｙ＋１となっている。また、１本のパイプラインにおいて、複数段の処理ユニットでは、対象画素のＸ座標が１ずつ異なっている。例えば、処理ユニット７０ａ、７０ｂ、７０ｃ、７０ｄ、７０ｅのＸ座標は、ｘ＋４、ｘ＋３、ｘ＋２、ｘ＋１、ｘ＋０となっている。
【０１１６】
処理ユニット７０ａの対象画素Ｒ（ｘ＋４，ｙ）に対する処理と、処理ユニット１７０ａの対象画素Ｒ（ｘ＋３，ｙ＋１）との処理とのタイミングは一致している。また、第１のパイプラインＰ１において、処理ユニット７０ａ〜７０ｅの処理タイミングは１単位処理期間ずつずれている。ここで、１単位処理期間は、図１３中の１マスで示される一つの単位処理を行う期間に相当する。すなわち、１単位処理期間は、読み取りＲＤ，演算ＥＸ、書き込みＳＴのうちの一つを行う期間に相当する。
【０１１７】
さらに、各処理ユニットにおいて、上から１列目が、第２の中間データに対応し、上から２列目が第３の演算子７６ａ、１７６ａによる第３の中間データに対応している。上から３列目が第３の演算子７６ｂ、１７６ｂによる第３の中間データに対応している。それぞれの処理ユニットは、（１）読み出しＲＤ，（２）第１の演算ＥＸ、（３）第２の演算又は第３の演算ＥＸ、（４）書き出しＳＴ、の４単位処理期間から構成される。
【０１１８】
図１３に示すように、１つの処理ユニット７０では、第２の演算子７５、第３の演算子７６ａ、７６ｂの演算ＥＸのタイミングが同じになっている。１つの処理ユニット１７０では、第２の演算子１７５、第３の演算子１７６ａ、１７６ｂの演算ＥＸのタイミングが同じになっている。よって、１つの処理ユニットでは、第２の中間データと、２つの第３の中間データが同時に生成される。
【０１１９】
処理ユニット７０ｂでは、対象画素Ｒ（ｘ＋３，ｙ）についての処理が行われる。処理ユニット７０ｂの第３の演算子７６ｂで生成された第３の中間データＡ３は、２つの単位処理期間の遅延を経て、処理ユニット１７０ｅの第３の演算子７６ｂに入力される。
【０１２０】
処理ユニット７０ｃでは、対象画素Ｒ（ｘ＋２，ｙ）についての処理が行われる。処理ユニット７０ｃの第３の演算子７６ａで生成された第３の中間データＡ２は、１つの単位処理期間の遅延を経て、処理ユニット１７０ｅの第３の演算子７６ａに入力される。処理ユニット１７０ｅは、対象画素Ｒ（ｘ−１，ｙ＋１）についての処理を行っている。遅延素子７８ｂによる遅延量は、遅延素子７８ａによる遅延量よりも大きい。
【０１２１】
このように、第３の中間データＡ２，Ａ３に異なる遅延を与えることで、処理ユニット１７０ｅでの第３の演算において、第３の中間データＡ２，Ａ３を用いることができる。すなわち、第２のパイプラインＰ２に含まれる処理ユニット１７０ｅの第３の演算子７６ａ、７６ｂが、第１のパイプラインＰ１で生成された第３の中間データＡ２、Ａ３を用いることができる。換言すると、第３の中間データＡ２、Ａ３がパイプラインを跨いで入出力されている。このようにすることで、第３の中間データを保持するためのレジスタの容量を削減することができる。
【０１２２】
なお、図１３では、第３の中間データＡ２，Ａ３が処理ユニット１７０ｅに入力される例のみを示しているが、遅延調整制御回路８３が適切の遅延素子を設定することで、複数の処理ユニット７０と複数の処理ユニット１７０との間で、第３の中間データＡ２、Ａ３を入出力することができる。これにより、よりレジスタの容量を削減することができる。
【０１２３】
例えば、パイプラインＰ１，Ｐ２のそれぞれが６段以上の処理ユニットを有していれば、処理ユニット７０ｄ、７０ｅで生成された第３の中間データＡ２、Ａ３を処理ユニット１７０に供給することができる。さらに、パイプラインの並列数を増やすことで、他のパイプラインで利用可能な第３の中間データＡ２、Ａ３を増やすことができる。例えば、図１２において、第１のパイプラインＰ１、及び第２のパイプラインＰ２に加えて、第３のパイプラインＰ３がある場合、第３の演算子１７６で生成された第３の中間データＢ２、Ｂ３を３本目のパイプラインの処理ユニットに入力することができる。
【０１２４】
なお、演算子７４〜７６、演算子１７４〜１７６、演算子５１、５３、５４、５６、演算子１５１、１５３、１５４、１５６のいずれか一つ以上は、例えば、非特許文献１の式（１３）、式（１４）に基づいて演算を行う。例えば、第４の演算子１５６、第４の演算子５６は、式（１４）に基づく演算を行う。また、第３の演算子１７６、第３の演算子７６、第３の演算子５４、第３の演算子１５４は、式（１３）に基づく演算を行う。
【０１２５】
（伝播方向と対象画素について）
本実施の形態では、第１のパイプラインＰ１の処理ユニット７０では、処理ユニット７０の対象画素から周囲画素への伝播方向と逆方向にある画素を対象画素としている。この理由について、図１４、及び図１５を用いて説明する。図１４は、第１及び第２の画像の総画素数を説明するための図であり、図１５は、画素の伝播方向と伝播数を説明するための図である。
【０１２６】
図１４に示すように、画像の横方向における総画素数をＤ、縦方向における総画素数をＨとする。すなわち、第１の画像Ｒと、第２の画像Ｒｅｆとに含まれる総画素数は、それぞれＤ×Ｈとなる。
【０１２７】
図１５のように、第３の演算子において、対象画素Ｒ（ｘ，ｙ）から参照画素への方向が伝播方向となっている。そして、伝播数１のときには伝播しないる。すなわち、伝播数が１のとき、対象画素と参照画素の座標が一致している。具体的には、水平画素伝播方向は−Ｘ方向で、水平画素伝播数Ｍは、２又は４である。垂直画素伝播方向は−Ｙ方向で、垂直画素伝播数Ｎは、２又は４である。
【０１２８】
本実施の形態にかかる画像処理方法では、必要なレジスタコストＣ１は以下のように表現される。
Ｃ１＝Ｌ＊｛（Ｎ−１）＊Ｍ＋Ｐ｝
【０１２９】
なお、Ｐはパイプラインの並列度である。並列度は、並列に配置されたパイプラインの本数である。レジスタの容量Ｒ２は、増幅数、並列度、水平画素伝播方向、垂直画素伝播方向に応じて変化する。
【０１３０】
一方、本実施の形態かかる画像処理方法を用いない場合、必要なレジスタコストＣ２は以下のように表現される。
Ｃ２＝Ｌ＊Ｄ＊Ｈ
【０１３１】
なお、図１４に示した通り、Ｄは画像の水平方向総画素数であり、Ｈは画像の垂直方向総画素数である。ここで、Ｎ＝２、Ｍ＝４、Ｄ＝６４０、Ｈ＝４８０とした場合のレジスタコストを図１６に示す。なお、図１６では、入力画素を１ビットとしている。並列度Ｐ＝１２８とすると、本実施の形態による画像処理装置では、レジスタコストを約１／１００にすることができる。よって、レジスタ容量の増大を防ぐことができる。よって、効率的に画像処理を実行することができる。特に、パイプラインの並列本数（並列度）を多くすることで、処理を高速化することができる。
【０１３２】
また、遅延素子１７８ａ、１７８ｂで遅延された第３の中間データがパイプラインを跨いだ処理ユニット１７０の第３の演算子１７６ａ、１７６ｂに供給されている。すなわち、第１のパイプラインＰ１の処理ユニット７０に設けられた遅延素子７８ａ、７８ｂで遅延された第３の中間データＡ２、Ａ３が、第２のパイプラインＰ２に含まれる処理ユニット１７０の第３の演算子１７６ａ、１７６ｂに入力される。そして、第３の演算子１７６ａ、１７６ｂが第１の演算子１７４からの第１の中間データと遅延素子７８ａ、７８ｂからの第３の中間データＡ２、Ａ３とに基づいて、第３の演算を行う。こうすることで、適切なタイミングで第３の中間データＡ２、Ａ３を利用することができる。これにより、レジスタコストの増大を防ぐことができる。
【０１３３】
また、第３の中間データの時間軸調整が、対象画素の選択により最適化されている。こうすることで、遅延量を増加することなく、第３の中間データＡ２、Ａ３を参照することができる。すなわち、第１のパイプラインＰ１の対象画素と、第２のパイプラインＰ２の対象画素との位置を適切に設定することで、第１のパイプラインＰ１での第３の中間データを第２のパイプラインＰ２での演算に利用することが可能である。第３の演算子７６ａ、７６ｂが、対象画素と、対象画素から伝播方向にずれた参照画素とについて、第３の演算を行う場合、第２のパイプラインＰ２の処理ユニット１７０の対象画素から、第１のパイプラインＰ１の処理ユニット７０における対象画素への方向とが、伝播方向と逆方向にずれている。例えば、図１０に示されるように、処理ユニット１７０の対象画素は、処理ユニット７０の対象画素から＋Ｘ方向にずれている。処理ユニット７０において、対象画素からの参照画素への伝播方向は−Ｘ方向となっている。これにより、少ない遅延量で第３の中間データＡ２、Ａ３を利用することができる。
【０１３４】
さらに、本実施の形態にかかる画像処理装置によれば、ラインメモリの容量を削減することができる。このラインメモリの削減について、図１７を用いて説明する。図１７は、比較例のラインメモリと、本実施の形態にかかる画像処理装置でのラインメモリの構成を示す図である。図１７の左側に比較例の画像処理装置でのラインメモリの構成が示され、右側に本実施の形態での画像処理装置のラインメモリの構成が示されている。
【０１３５】
比較例では、元画像の画像データをライン単位で格納するため、各ラインの容量が等しい。例えば、Ｙ＋０、Ｙ＋１、Ｙ＋２の容量が一致している。これに対して、本実施の形態の構成では、パイプラインの並列化時の読み出し位置がＮとＭによって移動するため、その移動範囲内に不要部分が発生する。この部分をはじめからメモリとして確保しない構成とする。
【０１３６】
図１７に示すように、比較例のラインメモリは、Ｘ＊Ｙの長方形状のメモリ構成を取っている。これに対して、本実施の形態では、参照画素を階段状に変化させることができるため、長方形状を取る必要がない。例えば、Ｙ＋０ラインではＸ＋３の画素まで保持する必要がある。一方、Ｙ＋１ではＸ＋２、Ｙ＋２ではＸ＋１と保持する画素を削減可能である。その為、ラインメモリ８１はその画素に相当する部分を保持しない構造とする。
【０１３７】
このように、本実施の形態によれば、処理ユニットでの処理にメモリ構造を最適化することで、ラインメモリの容量を削減することができる。すなわち、ラインメモリ８１は、容量の異なる複数のラインを備えている。削減可能な箇所はＮとＭとＰのパラメータに依存する。ＮとＭとＰにて決定されるパラメータにより、ラインメモリの容量を削減することができる。具体的なラインメモリの容量は図１７に示す数式で示される。
【０１３８】
なお、パイプラインの並列数、各パイプラインにおける段数、画像の画素数、増幅数、伝播数等が決まっている場合、遅延調整制御回路８３は、遅延素子７８、１７８の遅延量を固定にしてもよい。すなわち、演算条件が固定であれば、遅延量は一定とすることができる。よって、遅延調整制御回路８３を設けずに、遅延量が固定の遅延素子７８、１７８を設けてもよい。また、並列化するパイプラインの本数は３以上であってもよい。これにより、処理を高速化した場合であっても、レジスタ容量の増大を抑制することができる。よって、複雑なコンテンツをよりスムーズに処理することができる。また、並列度や伝播数等が変わる場合、遅延調整制御回路８３が遅延量を調整してもよい。
【０１３９】
実施の形態２．
本実施の形態２にかかる画像処理装置の処理ユニットの構成について、図１８を用いて説明する。実施の形態１では、総伝播数が３つであったのに対して、実施の形態２ではそう伝播数が４つになっている。したがって、処理ユニット７０には第３の演算子７６ａ〜７６ｃが設けられており、処理ユニット１７０には第３の演算子１７６ａ〜１７６ｃが設けられている。
【０１４０】
そして、第３の演算子７６ｃでの第３の中間データＡ４が、遅延素子７８ｃを介して、第３の演算子１７６ｃに入力される。ここで、遅延素子７８ｃによる遅延量は、遅延素子７８ａ、７８ｂによる遅延量よりも大きい。遅延素子７８ｂによる遅延量は、遅延素子７８ａによる遅延量よりも大きい。
【０１４１】
図１８に示す構成の処理フローを図１９に示す。処理ユニット７０ａの第３の中間データＡ４が３単位処理期間の遅延を経て、処理ユニット１７０ｅに入力される。そして、処理ユニット１７０ｅは処理ユニット７０ａ〜７０ｃから入力された第３の中間データＡ２〜Ａ４を用いて第３の演算を行う。このような構成であっても、実施の形態１と同様の効果を得ることができる。第３の中間データＡ２〜Ａ４の遅延量はそれぞれ１単位処理期間ずつ異なっている。すなわち、３つの処理ユニット７０ａ〜７０ｃからの第３の中間データＡ２〜Ａ４は異なる遅延量を経て、１つの処理ユニット１７０ｅに入力される。
【０１４２】
その他の実施の形態．
その他の実施の形態にかかる画像処理装置の構成を図２０に示す。画像処理装置８００は、第１の画像、及び第２の画像に含まれる画素データを記憶するラインメモリ８１と、並列に配置された複数本のパイプラインＰ１，Ｐ２であって、それぞれが画素データに対してパイプライン処理を行う複数段の処理ユニット７０ａ、７０ｂ、１７０ａ、１７０ｂを有する複数本のパイプラインＰ１、Ｐ２と、ラインメモリ８１から処理ユニット７０ａ、７０ｂ、１７０ａ、１７０ｂへのデータの読み出しを制御するラインメモリ制御回路８２と、備えている。処理ユニット７０ａは、第１の画像の対象画素に対応する対象画素データと、第２の画像において対象画素の周囲画素に対応する周囲画素データとに基づいて、第１の演算を行う第１の演算子７４と、第１の演算子７４での演算結果に基づく第１の中間データに基づいて、第２の演算を行う第２の演算子７５であって、周囲画素を順次変えていったときの前記第１の中間データに応じて、第２の中間データを算出する第２の演算子７５と、第１の中間データに基づいて、第３の演算を行う第３の演算子７６であって、周囲画素を順次変えていったときの第１の中間データに応じて、第３の中間データを算出する第３の演算子７６と、周囲画素を順次変えていったときの第２の中間データを保持するレジスタ７７と、第３の演算子での演算結果を遅延する遅延素子７８と、を備えている。
【０１４３】
本実施の形態にかかる画像処理方法は、第１の画像、及び第２の画像に含まれる画素データをラインメモリに展開するステップと、前記ラインメモリに展開された画素データに対して、並列に配置された複数本のパイプラインの複数段の処理ユニットを用いてパイプライン処理を行うステップと、を備えている。
【０１４４】
パイプライン処理を行うステップは、以下のステップ（ａ）〜（ｆ）を有している。
（ａ）前記第１の画像の対象画素に対応する対象画素データと、前記第２の画像において、前記対象画素の周囲画素に対応する周囲画素データとに基づいて、第１の演算子が演算を行う第１の演算ステップ。
（ｂ）前記第１の演算ステップでの演算結果に基づく第１の中間データに基づいて、第２の演算子が第２の演算を行う第２の演算ステップ。
（ｃ）前記第２の演算子の演算結果に応じて、前記レジスタが前記第２の中間データを保持するステップと、
（ｄ）前記第１の中間データに基づいて、第３の演算子が第３の演算を行う第３の演算ステップ。
（ｅ）前記第３の演算子での演算結果に応じた第３の中間データを遅延素子で遅延するステップ。
（ｆ）前記周囲画素を順次変えていくことで、（ａ）〜（ｅ）のステップを繰り返し行うステップ。
【０１４５】
なお、上記の説明では、自動車の前方監視システムにおける画像処理を例として説明したが、本実施の形態にかかる画像処理装置、及び画像処理方法は、前方監視システム以外にも適用可能である。本実施の形態にかかる画像処理装置、及び画像処理方法は、物体の検出を高精度に行う画像認識等にも適用することができる。
【０１４６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０１４７】
１  車本体
２  カメラ
３  カメラＥＣＵ
４  ＥＣＵ
５  ブレーキＥＣＵ
６  アクセルＥＣＵ
７  ステアリングＥＣＵ
１０  自動車
２２  ＣＰＵ
２３  ローカルメモリ
２４  外部メモリインターフェース
２５  内部バス
２６  ＤＳＰ
２７  専用ハードウェア
２８  インターフェース
２９  カメラインターフェース
３０  カメラインターフェース
５０  処理ユニット
５１  第１の演算子
５２  レジスタ
５３  第２の演算子
５４  第３の演算子
５５  レジスタ
５６  第４の演算子
５７  レジスタ
５８  セレクタ
５９  遅延素子
１５０  処理ユニット
１５１  第１の演算子
１５２  レジスタ
１５３  第２の演算子
１５４  第３の演算子
１５５  レジスタ
１５６  第４の演算子
１５７  レジスタ
１５８  セレクタ
１５９  遅延素子
７００  画像処理装置
８１  ラインメモリ
８２  ラインメモリ制御回路
８３  遅延調整制御回路
７０  処理ユニット
７４  第１の演算子
７５  第２の演算子
７６  第３の演算子
７７  レジスタ
７８  遅延素子
１７０  処理ユニット
１７４  第１の演算子
１７５  第２の演算子
１７６  第３の演算子
１７７  レジスタ
１７８  遅延素子
【図１】
2017174291.tif 000003
【図２】
2017174291.tif 000004
【図３】
2017174291.tif 000005
【図４】
2017174291.tif 000006
【図５】
2017174291.tif 000007
【図６】
2017174291.tif 000008
【図７】
2017174291.tif 000009
【図８】
2017174291.tif 000010
【図９】
2017174291.tif 000011
【図１０】
2017174291.tif 000012
【図１１】
2017174291.tif 000013
【図１２】
2017174291.tif 000014
【図１３】
2017174291.tif 000015
【図１４】
2017174291.tif 000016
【図１５】
2017174291.tif 000017
【図１６】
2017174291.tif 000018
【図１７】
2017174291.tif 000019
【図１８】
2017174291.tif 000020
【図１９】
2017174291.tif 000021
【図２０】
2017174291.tif 000022