以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
請求項1に記載の画像処理装置(図12の画像マッチング部77、或いは、そのうちの、ΣAB乗算器122と捉えてもよい)は、第1の画像(例えば、図5の左カメラ71から出力され、左画像変換部72を介して供給された、図14の左画像191)から基準領域(例えば、図14の基準領域221)が切り出され、かつ、第2の画像(例えば、図5の右カメラ74から出力され、右画像変換部75を介して供給された、図14の右画像192)から、前記基準領域と同一のサイズ(例えば、図14に示されるように、5画素×5画素)の比較領域(例えば、図14の比較領域222−0)が切り出された場合、前記基準領域と前記比較領との組に対する第1の値(例えば、式(1)の右辺の分子)として、所定の関数f(a,b)(例えば、式(4)の右辺のΣの中、即ち、a(i,j)×b(i+M,j))に対して、変数a(例えば、式(4)のa(i,j))として、前記基準領域を構成する各画素のそれぞれの画素値を代入し、かつ、変数b(例えば、式(4)のb(i+M,j))として、前記比較領域を構成する画素のうちの、対応する場所に位置する各画素のそれぞれの画素値を代入したときに得られる、前記関数f(a,b)の前記基準領域の画素数分の出力値の総和(例えば、式(4)の右辺)であるを演算する画像処理装置であって、前記画像処理装置自身により演算された、前記基準領域と前記比較領域との組に対する前記第1の値を記憶する記憶手段(例えば、図16のバッファ326)と、前記記憶手段に、現在の第1の基準領域(例えば、図14の基準領域221)と共通する画素を少なくとも含む第2の基準領域(例えば、図14の基準領域201)と、前記第2の基準領域との相対的な位置関係が前記第1の基準領域と現在の第1の比較領域(例えば、図14の比較領域222−0)との相対的な位置関係と同一の第2の比較領域(例えば、図14の比較領域202−0)との組に対する前記第1の値が記憶されている場合、これから演算される、前記第1の基準領域と前記第1の比較領域との組に対する前記第1の値と、前記記憶手段に記憶されている、前記第2の基準領域と前記第2の比較領域との組に対する前記第1の値との差異(例えば、図14において、1つ前の比較領域202−0のうちの、第1列(小領域)231−0に対応する部分の演算成分、および、現在の比較領域222−0のうちの、第5列(小領域)232−0に対応する部分の演算成分)に相当する第2の値を演算する第1の演算手段(例えば、図16の列積和演算回路351および列積和演算回路352)と、前記記憶手段に記憶された、前記第2の基準領域と前記第2の比較領域との組に対する前記第1の値と、前記第1の演算手段により演算された前記第2の値とに基づいて、前記第1の基準領域と前記第1の比較領域との組に対する前記第1の値を演算する第2の演算手段(例えば、図16の総合演算回路353)とを備えることを特徴とする。
請求項2に記載の画像処理方法は、第1の画像から基準領域が切り出され、かつ、第2の画像から、前記基準領域と同一のサイズの比較領域が切り出された場合、前記基準領域と前記比較領域との組に対する第1の値として、所定の関数f(a,b)に対して、変数aとして、前記基準領域を構成する各画素のそれぞれの画素値を代入し、かつ、変数bとして、前記比較領域を構成する画素のうちの、対応する場所に位置する各画素のそれぞれの画素値を代入したときに得られる、前記比較領域を構成する画素の総数と同一の数の前記関数f(a,b)の出力値の総和を演算する画像処理装置の画像処理方法(例えば、図12の画像マッチング部77、或いは、そのうちの、ΣAB乗算器122が実行する図21のΣAB乗算器の処理に対応する方法)であって、これから演算される、現在の第1の基準領域と現在の第1の比較領域との組に対する前記第1の値と、前記画像処理装置により既に演算された、前記第1の基準領域と共通する画素を少なくとも含む第2の基準領域と、前記第2の基準領域との相対的な位置関係が前記第1の基準領域と前記第1の比較領域との相対的な位置関係と同一の第2の比較領域との組に対する前記第1の値との差異に相当する第2の値を演算する第1の演算ステップ(例えば、図21のステップS30、即ち、図23のマッチング処理用のΣAB演算処理のうちの、ステップS71とS72)と、前記画像処理装置により既に演算された、前記第2の基準領域と前記第2の比較領域との組に対する前記第1の値と、前記第1の演算手段により演算された前記第2の値とに基づいて、前記第1の基準領域と前記第1の比較領域との組に対する前記第1の値を演算する第2の演算ステップ(例えば、図21のステップS30、即ち、図23のマッチング処理用のΣAB演算処理のうちの、ステップS73とS74)とを含むことを特徴とする。
請求項5に記載の電子回路(例えば、図16のΣAB乗算器122)は、第1の画像(例えば、図5の左カメラ71から出力され、左画像変換部72を介して供給された、図14の左画像191)から、N画素×N画素(Nは、前記第1の画像の縦と横の画素数よりも小さい整数値)からなる基準領域(例えば、N=5、即ち、5画素×5画素からなる、図14の基準領域221)が切り出され、かつ、第2の画像(例えば、図5の右カメラ74から出力され、右画像変換部75を介して供給された、図14の右画像192)から、N画素×N画素からなる比較領域(例えば、図14の比較領域222−0)が切り出された場合、前記基準領域と前記比較領域との組に対する第1の値(例えば、式(1)の右辺の分子)として、所定の関数f(a,b) (例えば、式(4)の右辺のΣの中、即ち、a(i,j)×b(i+M,j))に対して、変数a(例えば、式(4)のa(i,j))として、前記基準領域を構成する各画素のそれぞれの画素値を代入し、かつ、変数b(例えば、式(4)のb(i+M,j))として、前記比較領域を構成する画素のうちの、対応する場所に位置する各画素のそれぞれの画素値を代入したときに得られる、前記関数f(a,b)のN×N個の出力値の総和(例えば、式(4)の右辺)である第1の値を演算する電子回路であって、前記電子回路自身により演算された、前記基準領域と前記比較領域との組に対する前記第1の値を記憶するバッファ回路(例えば、図16のバッファ326)と、入力された2つの値のそれぞれを、前記関数f(a,b)の前記変数aまたは前記変数bとして、前記関数f(a,b)の出力値を演算するN個の第1の関数演算回路(例えば、図16の、「Mul」として示される、5(=N)個の乗算器301−11乃至301−51)と、N個の前記第1の関数演算回路の出力の総和を演算する第1の加算回路(例えば、図16の、「Add」と記述された加算器321−1)とを有し、前記第1の加算回路からの出力を演算結果として出力する第1の積和演算回路(例えば、図16の列積和演算回路351)と、入力された2つの値のそれぞれを、前記関数f(a,b)の前記変数aまたは前記変数bとして、前記関数f(a,b)の出力値を演算するN個の前記第2の関数演算回路(例えば、図16の、「Mul」として示される、5(=N)個の乗算器301−12乃至301−52)と、N個の前記第2の関数演算回路の出力の総和を演算する第2の加算回路(例えば、図16の、「Add」と記述された加算器321−1)とを有し、前記第2の加算回路からの出力を演算結果として出力する第2の積和演算回路(例えば、図16の列積和演算回路352)と、前記バッファ回路の記憶内容、前記第1の積和演算回路の前記演算結果、および、前記第2の積和演算回路の前記演算結果に基づいて、所定の演算を行い、その演算の結果を、現在の第1の基準領域と、現在の第1の比較領域との組に対する前記第1の値として出力する総合演算回路(例えば、図16の総合演算回路353)とを備えることを特徴とする。
請求項6に記載の電子回路は、前記バッファ回路に、現在の第1の基準領域(例えば、図14の左下に示される、基準画像(左画像)191の基準領域221)の位置に対して前記第1の画像(基準画像(左画像)191)の縦または横方向と平行に1画素分だけ離間された位置に配置される第2の基準領域(例えば、図14の左上に示される、現在の基準領域221に対して、空間方向xaの逆方向に1画素分だけ離間された位置に配置される基準領域201)と、前記第2の基準領域との相対的な位置関係が前記第1の基準領域と現在の第1の比較領域(例えば、相対的な位置関係は、マッチング数Mで表現され、図14に示される、M=0における、比較領域202−0)との相対的な位置関係と同一の第2の比較領域(例えば、図14の比較領域222−0)との組に対する前記第1の値が記憶されている場合、前記第1の積和演算手段は、N個の前記第1の関数演算回路のそれぞれに対して、前記変数aとして、前記第1の基準領域を構成する画素のうちの、前記第1の基準領域と前記第2の基準領域との間で共通する前記画素を除く、N個の画素(例えば、図14の基準領域221の第5列(小領域)を構成する5(=N)個の画素)のそれぞれの画素値を入力させるとともに、前記変数bとして、前記第1の比較領域を構成する画素のうちの、対応する場所に位置するN個の画素(例えば、図14の比較領域222−0の第5列(小領域)232−0を構成する5(=N)個の画素)のそれぞれの画素値を入力させて、前記関数f(a,b)の出力値のそれぞれを演算させ、前記第1の加算回路に、N個の前記第1の関数演算回路の出力の総和を演算させて、その第1の加算回路の演算結果を第2の値として出力し、前記第2の積和演算手段は、N個の前記第2の関数演算回路のそれぞれに対して、前記変数aとして、前記第2の基準領域を構成する画素のうちの、前記第1の基準領域と前記第2の基準領域との間で共通する前記画素を除く、N個の画素(例えば、図14の基準領域201の第5列(小領域)を構成する5(=N)個の画素)のそれぞれの画素値を入力させるとともに、前記変数bとして、前記第2の比較領域を構成する画素のうちの、対応する場所に位置するN個の画素(例えば、図14の比較領域202−0の第5列(小領域)231−0を構成する5(=N)個の画素)のそれぞれの画素値を入力させて、前記関数f(a,b)の出力値のそれぞれを演算させ、前記第2の加算回路に、N個の前記第2の関数演算回路の出力の総和を演算させて、その第2の加算回路の演算結果を第3の値として出力し、前記総合演算回路は、前記バッファ回路に記憶された、前記第2の基準領域と前記第2の比較領域との組に対する前記第1の値から、前記第2の積和演算回路から出力された前記第3の値を減算し、前記第1の積和演算回路から出力された前記第2の値を加算する演算を行い(図14において、1つ前の比較領域202−0に対応する分の演算結果から、比較領域202−0の第1列231−0分の演算結果を減算し、比較領域222−0の第5列232−0分の演算結果を加算することで、比較領域222−0に対応する分の演算を行い)、その演算の結果を、現在の前記第1の基準領域と前記第1の比較領域との組に対する前記第1の値として出力することを特徴とする。
請求項7に記載の電子回路は、前記バッファ回路に、前記第2の基準領域と前記第2の比較領域との組に対する前記第1の値が記憶されていない場合(例えば、図13に示されるように、最初の基準領域201が切り出された場合)、前記第1の積和演算回路と前記第2の積和演算回路のそれぞれは、さらに、N画素×N画素からなる前記第1の基準領域が、N個の画素からなるN個の小領域(例えば、1画素×5画素からなる、第1列(小領域)乃至第5列(小領域))に区分され、かつ、N画素×N画素からなる前記第1の比較領域(例えば、図13のM=0における、比較領域202−0)が、前記第1の基準領域のN個の前記小領域の位置のそれぞれに対応する、N個の小領域(例えば、図13の第1列211−0,第2列212−0,第3列211−1,第4列212−1,第5列211−2)に区分された場合における、前記第1の基準領域のうちの所定の1つの前記小領域と、前記第1の比較領域のうちの対応する前記小領域とからなるN個の組のうちの、N/2組(例えば、実線で示される列(第1列211−0,第3列211−1,第5列211−2)を含む組と、点線で示される列(第2列212−0,第4列212−1)を含む組。ただし、Nが奇数の場合、マッチング2回分でN組通し分担すると考える。即ち、M=0の場合、実線で示される列は3列あるのに対して、点線で示される列は2列である。そこで、今度は、M=1の場合、実線で示される列を2列とし、点線で示される列を3列とする)ずつを処理の対象として分担し、1組毎に(即ち、1クロック毎に1組ずつ)、N個の前記第1または前記第2の関数演算回路のそれぞれに対して、前記変数aとて、前記第1の基準領域における前記小領域を構成するN個の画素のそれぞれの画素値を入力させるとともに、前記変数bとして、前記第1の比較領域における前記小領域を構成するN個の画素のそれぞれの画素値を入力させて、前記関数f(a,b)の出力値のそれぞれを演算させ、前記第1または前記第2の加算回路に、N個の前記第1または前記第2の関数演算回路の出力の総和を演算させて、前記加算回路のN/2組の演算結果のそれぞれを順次出力し(図13に示されるように、各クロック毎に出力し)、前記総合演算回路は、前記第1の積和演算回路から出力されたN/2個の演算結果のそれぞれと、前記第2の積和演算回路から出力されたN/2個の演算結果のそれぞれの全てを加算する演算を行い(即ち、図13のt=0からt=2までに行われた、第1列211−0,第2列212−0,第3列211−1,第4列212−1,第5列211−2分の積和を総加算し)、その演算の結果を、現在の前記第1の基準領域と前記第1の比較領域との組に対する前記第1の値として出力することを特徴とする。
以下、図面を参照して、本発明が適用される画像処理システム、画像処理装置、および、電子回路の実施の形態について説明する。
図5は、本実施の形態の画像処理システムの構成例を表している。
図5の画像処理システム61は、上述したレクティフィケーション(平行化)、および、上述したウィンドウマッチング手法を伴う、上述したステレオ法を利用して、実物体の距離を演算する画像処理システムとされている。
なお、ウィンドウマッチング手法において、基準領域が切り出される画像(基準画像)は、左画像と右画像のうちのいずれでも構わないが、以下、従来の例とあわせて、左画像とされる。即ち、右画像が、比較画像とされる。
また、実際には、画像処理システム61は、画像データを処理の対象とするが、画面に表示される画像等と画像データとを区別する必要が特にない場合、以下、画像データを、単に画像と称する。
図5の画像処理システム61には、左画像(基準画像)を出力する左画像出力部71、レクティフィケーション(平行化)等によりその左画像を変換する左画像変換部72、および、左画像変換部72の処理に必要な情報が含まれるテーブル(以下、このようなテーブルを左変換テーブルと称する)を記憶する左変換テーブル記憶部73が設けられている。
同様に、図5の画像処理システム61には、右画像(比較画像)を出力する右画像出力部74、レクティフィケーション(平行化)等により、その右画像を変換する右画像変換部75、および、右画像変換部75の処理に必要な情報が含まれるテーブル(以下、このようなテーブルを右変換テーブルと称する)を記憶する右変換テーブル記憶部76が設けられている。
左画像出力部72と右画像出力部74のそれぞれは、例えば、デジタルスチルカメラやデジタルビデオカメラ(以下、これらを単にカメラと称する)等で構成することができる。なお、左画像出力部71と右画像出力部74のそれぞれは、例えば、スキャナ等の、印画紙にプリントされた写真や、フィルムの写真等をデータ化する装置等で構成することも可能であるが、以下、カメラであるとする。即ち、以下、左画像出力部71と右画像出力部74のそれぞれを、左カメラ71および右カメラ74のそれぞれと称する。
左画像変換部72と右画像変換部75とには、画像補正部81若しくは画像補正部83、並びに、レクティフィケーション(画像平行化)部82若しくはレクティフィケーション(画像平行化)部84が設けられている。
画像補正部81は、例えば、左カメラ71から出力された左画像に対して、左カメラ71のレンズ歪曲収差を除去する等、所定の画像処理を施して、レクティフィケーション(画像平行化)部82に供給する。レクティフィケーション(画像平行化)部82は、画像補正部81より供給された左画像に対して、上述したレクティフィケーション(画像平行化)を施し(図1の矢印31−1に相当する処理を施し)、画像マッチング部77に供給する。
同様に、画像補正部83は、例えば、右カメラ74から出力された右画像に対して、右カメラ74のレンズ歪曲収差を除去する等、所定の画像処理を施して、レクティフィケーション(画像平行化)部84に供給する。レクティフィケーション(画像平行化)部84は、画像補正部83より供給された右画像に対して、上述したレクティフィケーション(画像平行化)を施し(図1の矢印31−2に相当する処理を施し)、画像マッチング部77に供給する。
このとき、左画像変換部72と右画像75のそれぞれは、左変換テーブル記憶部73に記憶された左変換テーブル、または、右変換テーブル75に記憶された右変換テーブルを利用して、対応する画像処理を実行する。
即ち、左変換テーブル記憶部73と右変換テーブル記憶部76は、例えば、ROM(Read Only Memory)等のメモリからなり、左変換テーブルまたは右変換テーブルを記憶する。左変換テーブルと右変換テーブルには、左カメラ71と右カメラ74のうちの対応するカメラのレンズ係数や、左カメラ71と右カメラ74の位置関係、或いは、それらの情報に基づいて予め算出された数値等が含まれる。
画像マッチング部77は、上述したウィンドウマッチング手法を利用して、左画像変換部72より供給された左画像を構成する各画素のそれぞれに対して、右画像変換部75より供給された右画像内の対応点(画素)を検出し、それらの検出結果(左画像の各画素のそれぞれの対応点)に基づいて視差情報を生成し、距離演算部78に供給する。
距離演算部78は、画像マッチング部77より供給された視差情報に基づいて、実物体(左画像と右画像に含まれる実物体)の距離を演算し、外部に出力する。なお、視差情報は、距離の算出以外の処理にも使用可能であり、この場合、画像処理システム61には、距離演算部78の代わりに、対応する処理を実行するブロックが設けられる。
これらの、左画像変換部72、右画像変換部75、および、距離演算部78はいずれも、ハードウエア(回路等)で構成しても構わないし、ソフトウエアで構成しても構わないし、或いは、ハードウエアとソフトウエアの組合せで構成しても構わない。
また、画像マッチング部77も、勿論、ハードウエア(回路等)で構成しても構わないし、ソフトウエアで構成しても構わないし、或いは、ハードウエアとソフトウエアの組合せで構成しても構わない。ただし、以下においては、画像マッチング部77は、ハードウエアで構成されるとして説明を行う。
このように、画像処理システム61は、レクティフィケーション(平行化)、および、ウィンドウマッチング手法を伴う、ステレオ法を利用して、実物体の距離を演算する。
ここで、図6乃至図11を参照して、ウィンドウマッチング手法を伴うステレオ法と、その手法を効率的に行わせるためのレクティフィケーション(平行化)のそれぞれの詳細についてその順番に説明する。
はじめに、一般的なステレオ法の詳細について説明する。
即ち、例えば、図6において、光学中心が点cbとなるように配置された左カメラ71と、光学中心が点cdとなるように配置された右カメラ74のそれぞれが、点Pをその表面に含む実物体を撮影すると、左カメラ71からは実物体の投影像を含む左画像91が得られ、また、右カメラ74からも実物体の投影像を含む右画像92が得られる。この場合、実物体上の点Pが表示されている左画像91上の点na(対応する画素)と、同じく、実物体上の点Pが表示されている右画像92上の点nb(対応する画素)とから(即ち、点naと、その対応点nbとから)、左カメラ71と右カメラと74との間の視差を求めることができ、さらに、三角測量の原理を用いて、点Pの三次元空間における位置(三次元位置)を求めることができる。
従って、上述したように、ステレオ法では、まず、対応点を検出することが必要となるが、その検出方法としては,例えば、上述したように、エピポーラライン(Epipolar Line)を用いたウィンドウマッチング手法(エリアベースマッチング法と称されることもある)等がある。
即ち、図6に示されるように、実物体上の点Pの、左画像91における位置は、その点Pと左カメラ71の光学中心(レンズ中心)cbとを結ぶ直線93上の、左カメラ71の撮像面(左画像91)との交点na(対応する画素)となる。
また、実物体上の点Pの、右画像92上の位置は、その点Pと右カメラ74の光学中心(レンズ中心)cdとを結ぶ直線上の、右カメラ74の撮像面(右画像92)との交点nb(対応する画素)となる。
この場合、直線93が右カメラにより撮影されたとすると、その直線93の投影像は、光学中心cb、光学中心cd、および、点nb(または点P)の3点を通る平面と、撮像面(右画像92)との交線94として、撮像面(右画像92)に含まれることになる。従って、撮像面(右画像92)において、点Pの投影像である点nbは、当然ながら、直線93の投影像である直線94上に存在し、この直線94が、一般的にエピポーララインと称されている。即ち、左画像91内の点na(それに対応する画素)の、右画像92内の対応点nb(それに対応する画素)の配置位置は、必ずエピポーラライン94上であり、従って、対応点nbの探索(検出)は、エピポーラライン94上を対象に行えばよい。
このエピポーララインは、例えば、左画像(基準画像)91を構成する各画素毎に考えることができるが、左カメラ71と右カメラ74の位置関係が既知であれば、その画素ごとに存在するエピポーララインは求めることができる。
また、求められたエピポーラライン94上の各点の中から、対応点nbを検出するためには、例えば、次のようなウィンドウマッチング手法(エリアベースマッチング法)を適用すればよい。
即ち、ウィンドウマッチング手法では、図7に示されるように、左画像(基準画像)91のうちの、例えば、対応点を求めたい点na(例えば、対角線の交点であって、実際には、上述した注目画素)を中心とする、例えば、長方形(正方形含む)状の小ブロック(この小ブロックが、上述した基準領域である)が、左画像91から抜き出される(切り出される)。また、図8に示されるように、右画像(比較画像)92に投影されたエピポーラライン94上の、ある点(実際には、画素)を中心とする、左画像91の基準領域と同一の大きさの小ブロックで(この小ブロックが、上述した比較領域である)が、右画像(比較画像)92から抜き出される。
このような比較領域の中心点として、例えば、図8の例では、エピポーラライン94上に、点nb1乃至点nb6の6点が設けられている。この点nb1乃至点nb6は、図6に示される、三次元空間における直線93を、例えば、1mなどの所定の一定距離ごとに区分する点(左カメラ71からの距離が1m,2m,3m,4m,5m,6mのそれぞれとなる点)を、右カメラ74の撮像面(右画像92)に投影した点である。即ち、点nb1乃至点nb6のそれぞれは、左カメラ71からの距離が1m,2m,3m,4m,5m,6m(距離の推定値)のそれぞれの点に対応している(この場合、距離分解能が1mであるということができる)。
このように、この例のウィンドウマッチング手法では、左画像(基準画像)91から、注目点naを中心とする基準領域が切り出されるとともに、右画像(比較画像)92から、エピポーラライン94上に設けられている点nb1乃至点nb6のそれぞれを中心とする比較領域が抜き出される。
そして、各比較領域のそれぞれと、基準領域との相関が、所定の評価関数を用いて演算され、それらの演算結果のうちの、基準領域との相関が最も高い演算結果を有する比較領域の中心点(点nb1乃至点nb6のうちのいずれかの点)が、注目点naの対応点として求められる。
換言すると、ウィンドウマッチング手法では、基準となる左カメラ71の左画像91より所定の領域を基準領域として切りだし、その基準領域を、他の右カメラ74の右画像92のエピポーラライン94上で順次変移させ、その各変移位置のそれぞれにおいて、この基準領域と、それと重なり合う右画像92の領域(比較領域)との間で一致度(相関)を、所定の評価関数等を用いて演算する。そして、もっとも一致度(相関)が高いと演算された右画像92の比較領域の中心点(もっとも一致度(相関)が高いと演算された時点での、基準領域の変移量に対応する点)を、基準領域の中心点(注目画素)の対応点として設定する。
なお、このような評価関数(評価値s)として、例えば、上述した式(1)乃至式(3)を利用することができる。
例えば、いま、評価関数(評価値s)として、上述した式(3)が利用されたとする。この場合、式(3)で表される評価値sは、その値が小さいほど、相関が大きいことを示すという特徴を有しているので、右画像(比較画像)92上の点nb1乃至点nb6のうちの、評価値sを最も小さくする点が、左画像(基準画像)91上の点naの対応点として求められる。
具体的には、例えば、いま、右画像92上の点nb1乃至点nb6のそれぞれと、左画像91上の点naとの評価値(式(3)の評価関数の値)sとして、図9に示されるような結果が得られたとする。
この場合、右画像92上の点nb1乃至点nb6のうちの、評価値sが最も小さい(最も相関が高い)点nb3が、左画像91上の点naの対応点として検出される。
また、上述したように、点nb1乃至点nb6のそれぞれは、左カメラ71からの距離が1m,2m,3m,4m,5m,6m(距離の推定値)のそれぞれの点に対応しているので、図9の水平方向の軸を、距離として捉えることもできる。即ち、評価値sを最も小さくする点の水平方向の距離軸の座標値が、点naに対応する三次元実空間上の点P(図6)の左カメラ71からの距離を示すことになる。具体的には、図9の例では、点Pの距離は、点nb3に対応する3mとされる。
さらに、図9において、右画像92上の点nb1乃至点nb6それぞれについて求められた評価値(図9においては●印で示されている)のうちの最小値付近のものを用いて補間を行い、評価値がより小さくなる点(図9においては×印で示されている)を求めて、その点を、最終的な対応点として検出することも可能である。この場合、点Pの距離に換算すると、×印で示される点は3.3mとされる。
このように、左画像91の所定の点naの対応点を検出するための点として、図9等の上述した例では、三次元空間における実物体P上の点と、左カメラ71の光学中心cbとを結ぶ直線93を所定の等距離ごとに区分する点を、右カメラ74の撮像面(右画像)94に投影した点nb1乃至点nb6が予め設定されている。
このような設定は、例えば、左カメラ71および右カメラ74のキャリブレーション時に行うことができる(キャリブレーションの方法は、特に限定されるものではない)。
そして、このような設定を、左カメラ71の撮像面(左画像91)を構成する画素毎に存在する各エピポーララインのそれぞれに対して行い、各エピポーラライン上のそれぞれに設定された各点(以下、適宜、設定点という)と、左カメラ71からの距離とを対応付けるテーブルをあらかじめ作成することもできる。そこで、例えば、距離演算部78(図5)が、そのテーブルをあらかじめ保持し、画像マッチング77が、対応点となる設定点を検出し、その設定点を視差情報として距離演算部78に供給することで、距離演算部78は、その視差情報を、そのテーブルを参照して、左カメラ71からの距離(実物体上の点までの距離の推定値)に即座に変換することができる。即ち、いわば、対応点から、距離を直接求めることができる。
或いは、このような設定点が予め設定されていなくとも、画像マッチング部77は、左画像(基準画像)91上の所定の点(注目画素)に対して、右画像(比較画像)92上の対応点(画素)を検出し、その2点(注目画素と、対応点に対応する画素と)の視差を求め、それを視差情報として供給することで(或いは、単にこの2点を距離演算部78に提供し、距離演算部78が視差を求めてもよい)、距離演算部78は、左カメラ71と右カメラ74の位置関係(既知とする)、および、供給された視差情報を用いて、三角測量の原理に基づく所定の演算を行い、実物体までの距離を求めることができる。勿論、この場合も、視差と距離とを対応付けるテーブルをあらかじめ作成しておけば、距離演算部78は、このテーブルを参照することで、左カメラ71からの距離を即座に求めることができる。
なお、対応点の検出に、基準領域および比較領域といった複数画素でなるブロックを用いるのは、ノイズの影響を軽減し、左画像(基準画像)91上の画素(点)naの周囲の画素のパターンの特徴と、右画像(比較画像)92上の対応点(画素)nbの周囲の画素のパターンの特徴との間の相関性を利用することにより、対応点の検出の確実を期すためであり、特に、変化の少ない左画像91および右画像92に対しては、画像の相関性により、ブロックの大きさを大きくすれば、対応点の検出の確実性を向上させることができる。
次に、図10と図11を参照して、レクティフィケーション(平行化)について説明する。
上述したように、ステレオ法では、左カメラ71と右カメラ74とが平行でない場合、図6に示されるように、エピポーラライン94は一般的に水平とならない。このため、左画像91上の注目点naの、右画像92上の対応点nbの探索を、エピポーラライン94に沿って行うと、多くの演算が必要となるとともに、デジタル誤差が大きくなってしまう、といった課題が発生してしまう。
換言すると、左カメラ71と右カメラ74とが平行である場合、図10に示されるように、エピポーラライン94は水平となり(即ち、右画像94の垂直方向の座標が、左画像91の注目点naの垂直方向の座標vと同一の直線となり)、このような課題は発生しない。
そこで、この課題を解決するためには、左カメラ71と右カメラ74とが平行でない場合、そのとき得られた左画像91と右画像72のそれぞれを、左カメラ71と右カメラ74とが平行であった場合に得られる画像と同様の画像に変換する手法を適用すればよい。この手法が、上述したように、レクティフィケーション(平行化)と称されている。
即ち、レクティフィケーション(平行化)では、図11に示されるように、仮想的な画像平面103を置き、左画像91と右画像92のそれぞれを、この仮想画像平面103に射影させた場合の画像(即ち、平行カメラ(平行に配置された左カメラ71と右カメラ74)によりあたかも撮影されたような画像)に変換させる。これにより、もともと平行でなかったエピポーララインは、仮想画像平面上では平行(水平方向に平行)となり、また、左カメラ71の光学中心cbと、右カメラ74の光学中心cdとを結ぶ直線と平行になる。
次に、図12を参照して、図5の画像マッチング部77の詳細について説明する。即ち、図12は、評価式として上述した式(1)で示される正規化相関関数を利用する画像マッチング部77の構成例を表している。
図3と図12とを比較するに、本実施の形態の画像マッチング部77(図12)も、マクロ的に見ると、従来の画像マッチング部(図3)と基本的に同様の構成を有していることがわかる。ただし、本実施の形態の画像マッチング部77にはさらに、視差情報生成部128も設けられているが、この視差情報生成部128については後述する。
即ち、本実施の形態の画像マッチング部77にも、従来の左右画像メモリ51乃至S2正規化相関値メモリ57のそれぞれに対応する、左右画像メモリ121乃至S2正規化相関値メモリ127のそれぞれが設けられている。
換言すると、本実施の形態においても、左右画像メモリ121乃至S2正規化相関値メモリ127のそれぞれにおける、入出力値自体や他のブロック(回路)との接続形態自体は、従来における、左右画像メモリ51乃至S2正規化相関値メモリ57のそれぞれにおける、入出力値や他のブロックとの接続形態と基本的に同様とされている。従って、それらの説明については省略する。
しかしながら、仮に、本実施の形態に対しても、上述した式(1)の右辺の分子や、分母のルートの中の演算を行う電子回路として、図3に示されるような従来の回路、即ち、乗算器の数がNxN個必要な電子回路であって、具体的には、ΣAB乗算器52(詳細な構成は、図4参照)、ΣA2乗算器53、および、ΣB2乗算器54のそれぞれをそのまま適用させた場合、従来の課題を解決することができない。
そこで、この課題を解決するために、本実施の形態の画像マッチング77には、従来の電子回路(即ち、ΣAB乗算器52、ΣA2乗算器53、および、ΣB2乗算器54のそれぞれ)の代わりに、N×Nの基準領域に対する正規化相関関数の演算に必要となる乗算器の数を2×N個に抑えつつ、その処理時間を、従来のもの(乗算器の数がNxN個必要な電子回路)と比べても、1%から2%程度の増加に収えることが可能な構成を有する電子回路(即ち、ΣAB乗算器122、ΣA2乗算器123、および、ΣB2乗算器124のそれぞれ)が設けられている。
或いは、従来から存在する画像マッチング部(図3)のうちの、上述した式(1)の右辺の分子や、分母のルートの中の演算を行う電子回路として、従来のΣAB乗算器52、ΣA2乗算器53、および、ΣB2乗算器54のそれぞれの代わりに、本実施の形態の電子回路、即ち、ΣAB乗算器122、ΣA2乗算器123、および、ΣB2乗算器124のそれぞれが適用されたと捉えることもできる。
なお、以下、従来の例と比較するために、画像マッチング部77は、左画像変換部72より供給される左画像(基準画像)の注目画素の対応点を検出する場合、即ち、ウィンドウマッチングを行なう場合、左画像から、注目画素(注目点)を中心として5×5の基準領域を切り出すとする。
この場合、画像マッチング部77は、例えば、マッチング数M=0においては、左画像と右画像とを重ねた場合に、左画像の5×5の基準領域と重なる右画像の5×5の領域を、比較領域として切り出し、その比較領域と基準領域との相関値sを演算する(式(1)を演算する)。即ち、1回目のマッチングが行われる。
次に、画像マッチング部77は、マッチング数M=1においては、基準領域を右画像の水平方向(エピポーララインと平行)に1画素分スライドさせ、その時点で基準領域と重なる領域、即ち、前回のマッチング数M=0における比較領域に対して水平方向(エピポーララインと平行)に1画素分平行移動された領域を、比較領域として切り出し、その比較領域と基準領域との相関値sを演算する(式(1)を演算する)。即ち、2回目のマッチングが行われる。
以降、画像マッチング部77は、同様の処理を繰り返す。即ち、画像マッチング部77は、マッチング数M=k(kは、最大値以下の任意の整数値。ただし、最大値については後述する)においては、1つ前のマッチング数M=k-1における比較領域を、右画像の水平方向(エピポーララインと平行)に1画素分平行移動させた領域を、現在の比較領域(マッチング数Mにおける比較領域)として切り出し、その比較領域と基準領域との相関値sを演算する。即ち、k+1回目のマッチングが行われる。
ところで、以下、切り出された基準領域を構成する各画素の位置は、上述した座標系(xa,ya)(図2)を参照して説明する。同様に、基準領域に対する、右画像変換部75より供給される右画像(比較画像)を構成する各画素の位置は、上述した座標系(xb,yb)(図2)を参照して説明する。
ただし、これまでは(従来の例の説明においては)、左画像の基準領域を構成する各画素の画素値は、対応する画素に付与された番号で示されたが(即ち、例えば、番号Iが付与された画素の画素値は、aIと示されたが)、以下、対応する画素の座標系(xa,ya)における座標値(即ち、(x,y)に位置する画素の画素値は、a(x,y))で示されるとする。
具体的には、例えば、図2において、注目画素41−12の画素値は、これまでa12で示されていたが、以下においては、a(X+2,Y+2)で示されることになる。また、基準領域の左上端の画素41−0の画素値は、これまではa0で示されていたが、以下においては、a(X,Y)で示されることになる。
同様に、これまでは、右画像の比較領域を構成する各画素の画素値は、対応する画素に付与された番号で示されたが(即ち、例えば、番号Iが付与された画素の画素値は、bIと示されたが)、以下、対応する画素の座標系(xb,yb)における座標値で示される(即ち、(x,y)に位置する画素の画素値は、b(x,y))で示されるとする。
具体的には、例えば、図2において、比較領域42は、マッチング数(スライド数)Mにおける比較領域を示しているが、この比較領域42のうちの、画素42−12の画素値は、これまでb12で示されていたが、以下においては、b(X+2+M,Y+2)で示されることになる。また、基準領域の左上端の画素42−0の画素値は、これまではb0で示されていたが、以下においては、b(X+M,Y)で示されることになる。
従って、図2に示されるような、基準領域41とマッチング数Mにおける比較領域42との組に対する、式(1)の右辺で示される正規化相関関数の成分は、次の式(4)乃至式(6)で示される。ただし、式(4)乃至式(6)においては、一般的なN×Nの基準領域に対する式とされているが、ここでは、上述したように、N=5とされる。
即ち、式(1)の右辺の分子は、以下、次の式(4)の右辺で示されるように変換される。なお、式(4)の左辺は、式(1)の右辺の分子を表しているが、式(1)においては小文字のiで表されている画素の番号は、式(4)の右辺の座標iと混同しないように、大文字のIで記述されている。
同様に、式(1)の右辺の分母のうちのaiの自乗の総和は、以下、式(5)の右辺で示されるように変換される。なお、式(5)の左辺は、式(1)の右辺の分母のうちのaiの自乗の総和を表しているが、やはり、式(1)においては小文字のiで表されている画素の番号は、式(5)の右辺の座標iと混同しないように、大文字のIで記述されている。
また、式(1)の右辺の分母のうちのbiの自乗の総和は、以下、式(6)の右辺で示されるように変換される。なお、式(6)の左辺は、式(1)の右辺の分母のうちのbiの自乗の総和を表しているが、やはり、式(1)においては小文字のiで表されている画素の番号は、式(6)の右辺の座標iと混同しないように、大文字のIで記述されている。
即ち、以下、ΣAB乗算器122は式(4)の右辺を、ΣA2乗算器123は式(5)の右辺を、ΣB2乗算器124は式(6)の右辺を、それぞれ演算するとして説明する。
ところで、例えば、ΣB2乗算器124は、マッチング数(スライド数)M=kにおける図2の比較領域42に対する式(6)の右辺を演算する場合、その直前のマッチング数M=k-1における演算結果を使用することで、その演算を簡単に行うことができる。なお、マッチング数M=k-1における演算結果とは、マッチング数M=k-1における比較領域(図示はしないが、比較領域42が、水平方向xbの負の方向に1だけ水平移動された(1画素分ずれた)5×5の領域)に対する式(6)の右辺の演算結果を指す。
即ち、マッチング数M=kにおける比較領域42は、図2の座標系(xb,yb)において、左上端の画素の中心値が座標(X+k,Y)とされ、右下端の画素の中心値が座標(X+4+k,Y+4)とされる領域である。
一方、マッチング数M=k-1における図示せぬ比較領域は、座標系(xb,yb)において、左上端の画素の中心値が座標(X+k-1,Y)とされ、右下端の画素の中心値が座標(X+4+(k-1),Y+4)、即ち座標(X+3+k,Y+4)とされる領域である。
従って、マッチング数M=kにおける比較領域42と、マッチング数M=k-1における比較領域との差異は、結局、次の2つのみ(それ以外は、共通画素)である。
即ち、1つ目の差異は、「座標(X+k-1,j(jは、Y乃至Y+4のうちのいずれか))に位置する5個の画素は、マッチング数M=k-1の比較領域には(第1列目の成分として)含まれているが、マッチング数M=kの比較領域42には含まれていない」ことである。
また、2つ目の差異は、「座標(X+4+k,j(jは、Y乃至Y+4のうちのいずれか))に位置する5個の画素は、マッチング数M=k-1の比較領域には含まれていないが、マッチング数M=kの比較領域42には(第5列目の成分として)含まれている」ことである。
そこで、ΣB2乗算器124は、「直前の演算結果(マッチング数M=k-1の比較領域に対する式(6)の右辺の演算結果)」から、「座標(X+k-1,j)に位置する5個(N個)の画素のそれぞれの画素値の自乗の総和」を減算し、「座標(X+4+k,j)に位置する5個の画素のそれぞれの画素値の自乗の総和」を加算することで、「マッチング数Mの比較領域42に対する式(6)の右辺の演算結果(それを行ったのと等価な値)」を出力することができる。
従って、図示はしないが、ΣB2乗算器124は、「座標(X+k-1,j)に位置する5個(N個)の画素のそれぞれの画素値の自乗」のそれぞれを演算する5個(N個)の乗算器(かつ、それらの総和を加算する加算器)、「座標(X+4+k,j)に位置する5個の画素のそれぞれの画素値の自乗」のそれぞれを演算する5個(N個)の乗算器(かつ、それらの総和を加算する加算器)、および、「直前の演算結果(マッチング数M=k-1の比較領域に対する式(6)の右辺の演算結果)」を保持するバッファやシフトレジスタを、それぞれ構成要素として有すれば、「マッチング数Mの比較領域42に対する式(6)の右辺の演算結果(それを行ったのと等価な値)」の出力を簡単に実現することができる。
同様に、ΣA2乗算器123も、ΣB2乗算器124と基本的に同様の構成を有することで、式(5)の右辺の演算結果(それを行ったのと等価な値)の出力を簡単に実現することができる。
ところが、式(4)においては、基準領域41のうちの、座標(i,j)に位置する画素の画素値a(i,j)に乗算される値は、比較領域のうちの、座標(i+M,j)に位置する画素の画素値b(i+M,j)とされている。従って、画素値b(i+M,j)におけるMはマッチング数を表していることから、画素値a(i,j)に乗算される値は、マッチング数M=kにおいては、画素値b(i+k,j)となるるが、次のマッチング数M=k+1においては、それとは異なる画素値b(i+k+1,j)となる。即ち、マッチング数Mが変化する毎に、基準領域41の全ての画素の画素値a(i,j)に乗算される値は刻々と変化することになる。
従って、ΣAB乗算器122は、ΣA2乗算器123が実行する式(5)の右辺の演算や、ΣB2乗算器124が実行する式(6)の右辺の演算のような、基準領域または比較領域の両端の単なる加減算を行っても、式(4)の右辺の演算を行うことができない。
そこで、本実施の形態においては、ΣAB乗算器122は、図13乃至図15に示されるような手順で式(4)の右辺の演算を行う。即ち、図13乃至図15は、ΣAB乗算器122が実行する式(4)の右辺の演算の手順を説明する図である。
図13において、図中、左上には、左画像(基準画像)191が示されている。図13に示されるように、左画像191は320×240画素から構成されており、例えば、いま、1回目の基準領域として、左上端の画素の位置が座標(1,1)となる、5×5の基準領域201が切り出されたとする。即ち、注目画素(基準領域201の中心画素)として、その位置が座標(3,3)となる画素が設定され、このため、その注目画素を中心とする、5×5の基準領域201が切り出されたとする。
また、図13に示されるように、1つの基準領域(いまの場合、基準領域201)に対しては、64回のマッチング(式(1)の演算処理)が実行されるとする。即ち、図13においては、左画像191の図中右方に、マッチング数(スライド数)M=0乃至63のそれぞれに対する、右画像192の比較領域202−0乃至比較領域202−63のそれぞれが示されている(ただし、M=3乃至62については省略されている)。
即ち、図13は、一番左の列(それを構成する5つの画素)のxa座標Xが初期値X0(図13の例では、X0=1)となるように、左画像191から切り出された基準領域201を対象とする、式(4)の右辺の演算の手順の例を表している。
具体的には、例えば、マッチング数(スライド数)M=0の場合、左画像191の基準領域201と、図中その右隣に図示されている、右画像192の比較領域202−0との組に対する、式(4)の右辺の演算が行われることになる。このときの手順が、比較領域202−0が描画された右画像192の下方に示されている。即ち、比較領域202−0を含む右画像192の下方に図示されている、3つの右画像192のそれぞれが、マッチング数M=0における処理の対象を表している。
このことは、他のマッチング処理M=kにおいても同様とされている。即ち、マッチング数M=kの場合、左画像191の基準領域201と、右画像192の比較領域202−kとの組に対する、式(4)の右辺の演算が行われることになる。このときの手順が、比較領域202−kが描画された右画像192の下方に示されている。即ち、比較領域202−kを含む右画像192の下方に図示されている、3つの右画像192のそれぞれが、マッチング数M=kにおける処理対象を表している。
なお、これらの処理対象を示す3つの右画像192の左方には、図中垂直上方向に時間軸(矢印)が示されている。この時間軸は、マッチング数(スライド数)M=0乃至63それぞれの手順にとって、他のマッチング数Mとは独立した時間軸とされている。即ち、例えば、マッチング数M=0とマッチング数M=1とのそれぞれに対して、式(4)の右辺の演算が同時に行われるのではなく、マッチング数Mにおける処理対象を示す、各右画像192のそれぞれの図中右下に図示された処理の時刻tで、それぞれの対応する処理が開始される。
この時刻tは、1クロックの時間長T[秒]を1単位とする時刻であって、最初のクロックパルスが発生した時点を起点(時刻t=0)とする時刻とされている。即ち、時刻t=r(図13の例では、rは、0乃至159のうちのいずれかの値)の時点では、r[クロック]、即ち、r×T[秒]が経過していることになる。
また、以下、基準領域201、および、比較領域202−0乃至比較領域202−63のそれぞれを、5行5列(N行N列)の行列とみなし、水平方向(空間方向xbまたは空間方向xa)に並ぶ5個(N個)の画素の群(小領域)を行と称し、垂直方向(空間方向ybまたは空間方向ya)に並ぶ5個(N個)の画素の群(小領域)を列と称する。ただし、行列の成分は、画素の画素値とされる。
具体的には、例えば、基準領域201において、第1列とは、座標(X(=1),h)(hは、1乃至5のうちのいずれかの整数値)に配置される5個の画素の群を指す。同様に、第2列とは、座標(X+1(=2),h)に配置される5個の画素群を、第3列とは、座標(X+2(=3),h)に配置される5個の画素群を、第4列とは、座標(X+3(=4),h)に配置される5個の画素群を、第5列とは、座標(X+4(=5),h)に配置される5個の画素群を、それぞれ指す。
また、以下、「第1の行列を構成する各行列成分(即ち、画素値)のそれぞれと、第2の行列を構成する各行列成分(即ち、画素)のそれぞれとの積の総和」を、「第1の行列と第2の行列との積和」と称する。
以上の前提に基づいて、第1列のxa座標Xが初期値X0に位置する(X=X0とする)ように、左画像191から切り出された基準領域201を対象とする、式(4)の右辺の演算の手順について説明する。
即ち、上述したように、ΣAB乗算器122は、乗算器(例えば、後述する図16の乗算器301)を2×N(いまの場合、N=5)個有しており、また、基準領域201の各列と、比較領域202−1乃至比較領域202−63の各列のそれぞれは、N個の画素から構成されているので、ΣAB乗算器122は、1クロック(時間T)毎に、2列分の積和を演算することができる。
そこで、時刻t=0において、ΣAB乗算器122は、基準領域201の第1列と、比較領域202−0の第1列211−0との積和を演算するとともに、基準領域201の第2列と、比較領域202−0の第2列212−0との積和を演算する。
時刻t=1において、ΣAB乗算器122は、基準領域201の第3列と、比較領域202−0の第3列211−1との積和を演算するとともに、基準領域201の第4列と、比較領域202−0の第4列212−1との積和を演算する。
時刻t=2において、ΣAB乗算器122は、基準領域201の第5列と、比較領域202−0の第5列211−2との積和を演算する。
そして、ΣAB乗算器122は、時刻t=0乃至t=2のマッチング数0における演算結果の全てを加算することで、基準領域201と比較領域202−0との積和、即ち、式(4)の右辺を演算することができる。なお、この場合、式(4)における、X=Y=1とされ、N=5とされ、かつ、M=0とされる。
ところで、ΣAB乗算器122は、上述したように、1クロック(時間T)の間に、2列分の積和を演算可能である。そこで、図13に示されるように、t=2において、ΣAB乗算器122は、さらに、次のマッチング数M=1における、右画像の比較領域202−1(マッチング数M=0における比較領域202−0の図中右隣に図示されている)に対する1回目の処理(マッチング数M=1における最初のクロックの処理)として、比較領域202−1の下方に示される3つの右画像192のうちの一番下の右画像192に示されるように、基準領域201の第1列と、比較領域202−1の第1列212−2との積和を演算する。
その後、時刻t=3において、ΣAB乗算器122は、基準領域201の第2列と、比較領域202−1の第2列211−3との積和を演算するとともに、基準領域201の第3列と、比較領域202−1の第3列212−3との積和を演算する。
時刻t=4において、ΣAB乗算器122は、基準領域201の第4列と、比較領域202−1の第4列211−4との積和を演算するとともに、基準領域201の第5列と、比較領域202−1の第5列212−4との積和を演算する。
そして、ΣAB乗算器122は、時刻t=2乃至時刻t=4のマッチング数M=1における演算結果の全てを加算することで、基準領域201と比較領域202−1の積和、即ち、式(4)の右辺を演算することができる。なお、この場合、式(4)における、X=2とされ、Y=1とされ、N=5とされ、かつ、M=1とされる。
このように、ΣAB乗算器122は、時刻t=0乃至t=4の時間で、即ち、N(=5)クロックで、基準領域201と、2つの比較領域202−0と比較領域202−1のそれぞれとの積和(式(4)の右辺の演算)を実行することができる。
即ち、時刻t=2においては、基準領域201の第5列と、マッチング数M=0における比較領域202−0の第5列211−2との積和と、基準領域201の第1列と、マッチング数M=1における比較領域202−1の第1列212−2との積和とが同時に実行されているが、これらの2つの積和のそれぞれが、あたかも1/2クロックずつ順次実行されたとみなした場合、マッチング数M=kに対応する式(4)の右辺の演算(基準領域201と、比較領域202-kとの積和の演算)に必要な時間は、N/2クロック(いまの場合、2.5クロック)であると言える。
時刻t=5以降についても、ΣAB乗算器122は、上述した時刻t=0乃至t=4における処理と全く同様の処理を行っていき、最終的に、時刻t=160で、即ち、160(=64×5/2)クロックで、基準領域201と、全ての比較領域202−0乃至比較領域202−63のそれぞれとの積和の演算処理を完了させる。
このようにして、最初の基準領域201に対する対応点の検索処理(それに伴う、式(4)の右辺の演算処理)が実行されると、今度は、左画像(基準画像)191において、基準領域201の中心画素(これまでの注目画素)の右隣の画素(水平方向xaに1つずらした画素)、即ち、座標(4,3)に位置する画素が新たな注目画素として設定されて、図14に示されるように、その注目画素を中心とする5×5の領域が、基準領域221として切り出されることになる。
従って、ΣAB乗算器122は、今度は、この基準領域221を対象として、各マッチング数M=0乃至63のそれぞれに対して、図14に示されるような手順で式(4)の右辺の演算を実行する。即ち、図14は、ΣAB乗算器122が、この基準領域221を対象として、各マッチング数M=0乃至63のそれぞれに対して、式(4)の右辺の演算を実行する場合の手順を表している。
図14の下方の図に示されるように、マッチング数M=0においては、基準領域221の中心画素(注目画素)の配置位置と対応する右画像192の位置、即ち、座標(4,3)に位置する画素を中心とする、5×5の領域222−0が、比較領域として切り出され、基準領域221とこの比較領域222−0との積和が演算されることになる。
ところで、図14に示されるように、マッチング数M=0においては、1つ前の基準領域201と、現在の基準領域221との差異は、「1つ前の基準領域201の第1列が、現在の基準領域221の構成要素とされていない」ことと、「1つ前の基準領域221の第5列が、現在の基準領域201の構成要素とされていない」ことの2つである。
同様に、マッチング数M=0においては、1つ前の比較領域202−0と、現在の基準領域221に対する比較領域222−0との差異は、「1つ前の比較領域202−0の第1列が、現在の比較領域222−0の構成要素とされていない」ことと、「1つ前の比較領域222−0の第5列が、現在の比較領域202−0の構成要素とされていない」ことである。
即ち、マッチング数M=0においては、現在の基準領域221のうちの第1列乃至第4列は、1つ前の基準領域201との共通領域(1つ前の基準領域201のうちの第2列乃至第4列とされていた領域)である。同様に、現在の比較領域222−0のうちの第1列乃至第4列は、1つ前の比較領域202−0との共通領域(1つ前の比較領域202−0のうちの第2列乃至第4列とされていた領域)である。
従って、現在のマッチング数M=0における、現在の基準領域221のうちの第1列乃至第4列のそれぞれと、現在の比較領域222−0のうちの第1列乃至第4列のそれぞれとの積和は、1つ前のマッチング数M=0における式(4)の右辺の演算結果(1つ前の基準領域201と、マッチング数M=0における1つ前の比較領域202−0との積和)の一成分として含まれていることになる。
そこで、ΣAB乗算器122は、次のような簡単な手順で、マッチング数M=0における、現在の基準領域221と、比較領域222−0との積和、即ち、式(4)の右辺の演算を行うことができる。
即ち、ΣAB乗算器122は、上述した差異のある領域に対する積和、即ち、図14に示されるように、1つ前の基準領域201の第1列と、1つ前の比較領域202−0の第1列231−0との第1の積和と、現在の基準領域221の第5列と、現在の比較領域222−0の第5列232−0との第2の積和とを演算する。
そして、ΣAB乗算器122は、1つ前のマッチング数M=0における式(4)の右辺の演算結果(1つ前の基準領域201と、マッチング数M=0における1つ前の比較領域202−0との積和)から、第1の積和を減算し、かつ、第2の積和を加算することで、マッチング数M=0における、現在の基準領域221と、比較領域222−0との積和の演算を行う(式(4)の右辺と等価な演算を行う)。
ここで注目すべき点は、上述したように、ΣAB乗算器122は、1クロックで2列分の積和を演算することができるので、上述した第1の積和と第2の積和の演算を、1クロックで行うことができる、という点である。即ち、ΣAB乗算器122は、マッチング数M=0における、現在の基準領域221と、比較領域222−0との積和(即ち、式(4))の演算を、1クロックで行うことができる。
以上、マッチング数M=0の場合についてのみ説明したが、他のマッチング数M=k(kは、0を除く、1乃至63のうちのいずれかの整数値)においても、現在の基準領域221と、1つ前の基準領域201との位置関係や、現在の比較領域222−kと、1つ前の比較領域202−kとの位置関係は全く同様とされるので、マッチング数M=0の場合と全く同様な手順で、現在の基準領域221と、マッチング数M=kにおける比較領域222−kとの積和の演算(式(4)の右辺と等価な演算を行う)を、1クロックで行うことができる。
即ち、ΣAB乗算器122は、上述した差異のある領域に対する積和、即ち、図14に示されるように、1つ前の基準領域201の第1列と、1つ前の比較領域202−kの第1列231−kとの第1の積和と、現在の基準領域221の第5列と、現在の比較領域222−kの第5列232−kとの第2の積和を演算する。
そして、ΣAB乗算器122は、1つ前のマッチング数M=kにおける式(4)の右辺の演算結果(1つ前の基準領域201と、マッチング数M=kにおける1つ前の比較領域202−kとの積和)から、第1の積和を減算し、かつ、第2の積和を加算することで、マッチング数M=kにおける、現在の基準領域221と、比較領域222−kとの積和の演算を行う。
このようにして、2つ目の基準領域221に対する対応点検索処理(それに伴う、式(4)の右辺の演算処理)が実行されると、今度は、左画像(基準画像)191において、基準領域221の中心画素(これまでの注目画素)の右隣の画素(水平方向xaに1つずらした画素)、即ち、中心位置が座標(5,3)に位置する画素が新たな注目画素として設定されて、図15に示されるように、その注目画素を中心とする5×5の領域が、3つ目の基準領域241として切り出されることになる。
従って、ΣAB乗算器122は、今度は、この基準領域241を対象として、各マッチング数M=0乃至63のそれぞれに対して、図15に示されるような手順で式(4)の右辺の演算を実行する。即ち、図15は、ΣAB乗算器122が、この基準領域241を対象として、各マッチング数M=0乃至63のそれぞれに対して、式(4)の右辺の演算を実行する場合の手順を表している。
図14と図15とを比較するに、現在の基準領域241と、1つ前の基準領域221との位置関係(図15)は、1つ前の基準領域221と、さらに1つ前の基準領域201との位置関係(図14)と全く同様とされる。同様に、現在の比較領域242−kと、1つ前の比較領域222−kとの位置関係(図15)は、1つ前の比較領域222−kと、さらに1つ前の比較領域202−kとの位置関係(図14)と全く同様とされる。
従って、ΣAB乗算器122は、図14を参照して説明した上述の手順と全く同様な手順で、現在の基準領域241と、比較領域242−kとの積和の演算を行うことができる。即ち、ΣAB乗算器122は、現在の基準領域241と、比較領域242−kとの積和の演算についても、1クロックで行うことができる。
詳細には、ΣAB乗算器122は、差異のある領域に対する積和、即ち、図15に示されるように、1つ前の基準領域221の第1列と、1つ前の比較領域222−kの第1列251−kとの第1の積和と、現在の基準領域241の第5列と、現在の比較領域242−kの第5列252−kとの第2の積和とを演算する。
そして、ΣAB乗算器122は、1つ前のマッチング数M=kにおける式(4)の右辺の演算結果(1つ前の基準領域221と、マッチング数M=kにおける1つ前の比較領域222−kとの積和)から、第1の積和を減算し、かつ、第2の積和を加算することで、マッチング数M=kにおける、現在の基準領域241と、比較領域242−kとの積和(即ち、式(4))の演算を行う。
その後、左画像(基準画像)191において、水平方向xaに沿って注目画素順次設定され、その注目画素を中心とする5×5の領域が、新たな基準領域として切り出される毎に、ΣAB乗算器122は、上述した手順(図14と図15に示される手順)と全く同様の手順で、マッチング数M=kにおける、現在の基準領域と、比較領域との積和の演算を行う。
即ち、ΣAB乗算器122は、マッチング数M=0乃至63における、現在の基準領域と、比較領域との積和の演算を64クロックで行うことができる。
以上、説明したように、ΣAB乗算器122は、上述した手順(図13乃至図15に示される手順)に従ってその処理を実行することになる。この場合、ΣAB乗算器122は、その処理を実行するために、結局、所定の基準領域と所定の比較領域との積和のうちの2列分の積和の演算を行うことが可能で、かつ、1つ前の基準領域と、1つ前の各比較領域(マッチング数M=0乃至63のそれぞに対する比較領域)のとの積和(即ち、式(4))の演算結果を保存することが可能な構成を有する必要がある。換言すると、ΣAB乗算器122は、このような構成を少なくとも有すれば、その形態は特に限定されない。
例えば、ΣAB乗算器122をハードウエアで構成する場合、上述したように、基準領域と比較領域の列は、1×Nの小領域、即ち、N個の要素(画素)で構成されるので、1列分の積和のためには、N個の乗算器と、それらの加算を行う1つの加算器があればよい。即ち、2列分の積和のためには、2×N個の乗算器と、それらの加算のそれぞれを行う2つの加算器があればよい。また、1つ前の基準領域と、1つ前の各比較領域(マッチング数M=0乃至63のそれぞに対する比較領域)のとの積和(即ち、式(4))の演算結果を保存するバッファが必要となる。
従って、例えば、ΣAB乗算器122をハードウエアで構成する場合、2×N個の乗算器と、それらの加算のそれぞれを行う2つの加算器と、バッファとを少なくとも有すればよい。即ち、ハードウエアとして構成されるΣAB乗算器122は、これらの構成要素を有していれば、その構成は特に限定されない。
具体的には、例えば、本実施の形態においては、ΣAB乗算器122は、図16に示されるように構成されている。即ち、図16は、本実施の形態のΣAB乗算器122の詳細な構成例を表している。
図16に示されるように、ΣAB乗算器122には、2×N(=2×5)個の乗算器301−11乃至乗算器301−52が設けられている。
これらの乗算器301−11乃至乗算器301−52のそれぞれが有する、2つの入力のうち一方の入力には、例えば、デュアルメモリのポート307−1乃至ポート311−2のうちのいずれかが接続され、また、他方の入力には、デュアルメモリのポート302−1乃至ポート306−2のうちのいずれかが接続される。
即ち、例えば、いま、上述した図13に示されるように、一番左の列(それを構成する5つの画素の中心)のxa座標Xが初期値X0(図13の例では、X0=1)となるように、左画像191から切り出された基準領域201が、処理の対象とされているとする。なお、図2に示されるように、基準領域の左上端の画素の位置は、座標(X,Y)とされている。そこで、以下においては、この左上端の画素の座標(X,Y)を基準とし、基準領域の左上端の画素のxa座標Xを用いて基準領域の位置を示すとする。即ち、以下、「左画像191から、左上端の画素のxa座標Xがkである5×5の領域が、基準領域として切り出された場合」のことを、単に、「X=kの場合」と記述する。
具体的には、例えば、いま、乗算器301−11乃至乗算器301−52のうちの、図16中一番上に図示される、乗算器301−11と乗算器301−12とに着目する。
X=X0の場合、乗算器301−11は、点線で示される列(例えば、マッチング数M=0における比較領域202−0のうちの、第2列212−0,第4列212−1等)の上端の画素の画素値(列の一番上)と、対応する位置の画素(対応する列の一番上の画素)の画素値との積を演算する(そのように、図16のΣAB乗算器122は構成されている)。
一方、X=X0の場合、乗算器301−12は、図13中、実線で示される列(例えば、マッチング数M=0における比較領域202−0のうちの、第1列211−0,第3列211−1,第5列211−2等)の上端の画素(列の一番上の画素)の画素値と、基準領域201のうちの、対応する位置の画素(対応する列の一番上)の画素値との積を演算する(そのように、図16のΣAB乗算器122は構成されている)。
また、図13に示されるように、1クロックで2列分の積和が演算されるので、乗算器301−11と乗算器301−12は、同クロックに、相互に独立してその処理を実行することになる。
従って、乗算器301−11と乗算器301−12のそれぞれに対して、基準領域201のうちの、対応する画素のそれぞれの画素値をほぼ同時に入力させ、かつ、比較領域202−0のうちの、対応する画素のそれぞれの画素値をほぼ同時に入力させる必要がある。
そこで、本実施の形態のΣAB乗算器122には、乗算器301−11と乗算器301−12のそれぞれに対して、基準領域201のうちの、所定の2つの画素のそれぞれを同時に出力させることが可能な第1のデュアルポートメモリと、比較領域202−kのうちの、対応する画素のそれぞれの画素値をほぼ同時に出力させることが可能な第2のデュアルポートメモリが設けられている。
ただし、第1のデュアルポートメモリ自身は図示されていなく、それらのうちの2つのポート302−1とポート302−2が図示されている。
なお、ポート302−1とポート302−2のそれぞれに示されるau(p,0)とau(q,0)のそれぞれは、左画像(基準画像)191の座標系(xa,ya)における座標(p,0)と座標(q,0)のそれぞれに配置される画素の画素値を表している。
ただし、上述した図13乃至図15の例では、基準領域の左上端の画素の位置を示すya座標Yはいずれも1とされるため、図16においても、au(p,1)とau(q,1)と示されているが、実際には、図2に示されるように、基準領域の左上端の画素の位置を示すya座標Yは0とは限らない。即ち、au(p,1)とau(q,1)のうちのuは、基準領域の切り出し回数を表しているが、u回目に切り出された基準領域の左上端の座標(p,Y),(q,Y)のそれぞれが、座標(p,1),(q,1)のそれぞれに座標変換された場合の画素の画素値の表現方法として、au(p,1),au(q,1)のそれぞれと示されている、と考えることもできる。
同様に、第2のデュアルポートメモリ自身は図示されていなく、それらのうちの2つのポート307−1とポート307−2が図示されている。なお、ポート307−1とポート307−2のそれぞれに示されるb(r,1)とb(s,1)のそれぞれも、比較画像(右画像)192の座標系(xb,yb)における座標(r,1)と座標(s,1)のそれぞれに配置される画素の画素値(出力する画素値)を表している。
この場合も、上述した図13乃至図15の例では、比較領域の左上端の画素の中心位置のyb座標はいずれも1とされるため、図16においても、b(r,1)とb(s,1)と示されているが、実際には、図2に示されるように、基準領域の左上端の画素の位置を示すya座標Yは0とは限らない。即ち、u回目に切り出された基準領域に対する比較領域の左上端の座標(r,Y),(s,Y)のそれぞれが、座標(r,1),(s,1)のそれぞれに座標変換された場合の画素の画素値の表現方法として、b(r,1),q(r,1)のそれぞれと示されている、と考えることもできる。
このような、左上端の画素X=X0(=1)における、ポート302−1,ポート302−2,ポート307−1,ポート307−2のそれぞれの、各時刻t毎の出力値(出力画素の画素値)が、図17に示されている。
また、X=X0以外の場合、乗算器301−11は、図14と図15中、点線で示される列(例えば、図14におけるマッチング数M=0においては、現在の比較領域222−0のうちの、第5列232−0)の上端の画素の画素値(列の一番上)と、現在の基準領域221のうちの、対応する位置の画素(対応する列の一番上)の画素値との積を演算する(そのように、図16のΣAB乗算器122は構成されている)。
一方、X=X0以外の場合、乗算器301−12は、図14と図15中、実線で示される列(例えば、図14におけるマッチング数M=0においては、1つ前の比較領域202−0のうちの、第1列231−0)の上端の画素(列の一番上の画素)の画素値と、1つ前の基準領域201のうちの、対応する位置の画素(対応する列の一番上の画素)の画素値との積を演算する(そのように、図16のΣAB乗算器122は構成されている)。
そこで、左上端の画素X=X0以外の場合、ポート302−1,ポート302−2,ポート307−1,ポート307−2のそれぞれは、図18や図19に示されるような画素値を出力する。即ち、図18は、左上端の画素X=1の場合(図14の場合)における、ポート302−1,ポート302−2,ポート307−1,ポート307−2のそれぞれの、各時刻t毎の出力値(出力画素の画素値)を示している。また、図19は、左上端の画素X=2の場合(図15の場合)における、ポート302−1,ポート302−2,ポート307−1,ポート307−2のそれぞれの、各時刻t毎の出力値(出力画素の画素値)を示している。
図16に戻り、それ以外の乗算器(乗算器301−21乃至乗算器301−51、および、乗算器301−22乃至乗算器301−52)についても、全く同様に、対応する第1のデュアルポートメモリと第2のデュアルポートメモリ(いずれも図示せず)のそれぞれの所定のポート(ポート303−1乃至ポート306−2のうちの所定の1つと、ポート308−1乃至ポート311−2のうちの所定の1つ)から出力される、基準領域内の所定の1つの画素値と、比較領域内の対応する1つの画素値とが入力される。
このように、2×N個の乗算器301−11乃至乗算器301−52のそれぞれは、左画像191の基準領域を構成する各画素の画素値のうちの所定の1つと、右画像192の比較領域を構成する各画素のうちの所定の1つとの積を演算し出力する。
2×N個のうちの、N個の乗算器301−11乃至乗算器301−51のそれぞれの出力は、加算器321−1に接続されている。即ち、加算器321−1は、N個の乗算器301−11乃至乗算器301−51のそれぞれの演算結果(積)の総和を出力する。
即ち、N個の乗算器301−11乃至乗算器301−51のそれぞれと、加算器321−1とが図16に示されるように接続された回路351が、基準領域と比較領域との積和のうちの所定の1列分を演算し、出力するともいえる。そこで、以下、回路351を、列積和演算回路351と称する。
同様に、2×N個のうちの、N個の乗算器301−12乃至乗算器301−52のそれぞれの出力は、加算器321−2に接続されている。即ち、加算器321−2は、N個の乗算器301−12乃至乗算器301−52のそれぞれの演算結果(積)の総和を出力する。
即ち、N個の乗算器301−12乃至乗算器301−52のそれぞれと、加算器321−2とが図16に示されるように接続された回路352が、基準領域と比較領域との積和のうちの所定の1列分を演算し、出力するともいえる。そこで、以下、回路352を、列積和演算回路352と称する。
即ち、ΣAB乗算器122には、2つの列積和演算回路351および列積和演算回路352が設けられている。これにより、ΣAB乗算器122は、上述した図13乃至図15の手順に従った処理を実行するために必要な、基準領域と比較領域との積和のうちの所定の2列分の演算成分(2列分の積和)を演算することができる。
セレクタ322は、加算器321−1からの出力(列積和演算回路351からの出力)を、所定の条件が満たされた場合、セレクタ328に供給し、それ以外の場合、加算器323に供給する。
即ち、X=X0の場合、各クロック毎に(時刻t毎に)、実線で示される列211−tに対する1列分の積和と、点線で示される列212−tに対する1列分の積和の演算が必要とされる。
そこで、図16の例では、列積和演算回路351が、点線で示される列212−tに対する1列分の積和を演算し、列積和演算回路352が、実線で示される列211−tに対する1列分の積和を演算するように、ΣAB乗算器122が構成されている。
ただし、図13に示されるように、時刻t=5n+2(nは、0を含む任意の整数値)においては、点線で示される列212−tに対する1列分の積和は、現在の積和の対象とされている(マッチング数M=kにおける)比較領域202−kではなく、次の対象の(マッチング数M=k+1における)比較領域202−k+1に対する積和に使用される。具体的には、時刻t=2においては、点線で示される列212−2に対する1列分の積和は、現在の積和の対象とされている(マッチング数M=0における)比較領域202−0ではなく、次の対象の(マッチング数M=1における)比較領域202−1に対する積和に使用される。
このため、セレクタ322は、X=X0であって、かつ、時刻t=5n+2(nは、0を含む任意の整数値)の場合、加算器321−1からの出力(列積和演算回路351からの出力)を、次のマッチング数M=k+1で使用する値として、セレクタ328に供給し、それ以外の場合、現在のマッチング数M=kで使用する値として、加算器323に供給する。
一方、セレクタ324は、加算器321−2からの出力(列積和演算回路352からの出力)を、所定の条件が満たされた場合、加算器323に供給し、それ以外の場合、減算器325に供給する。
即ち、X=X0の場合(図13で示される状態場合)、上述したように、列積和演算回路352は、実線で示される列211−tに対する1列分の積和を演算するように、ΣAB乗算器122が構成されている。この場合、上述したように、実線で示される列211−tに対する1列分の積和は、最終的な演算で加算される。
これに対して、X=X0以外の場合(図14や図15で示される状態等の場合)、図16の例では、列積和演算回路351が、点線で示される列232−k、または、列252−kに対する1列分の積和を演算し、一方、列積和演算回路352が、実線で示される列231−k、または、列251−kに対する1列分の積和を演算するように、ΣAB乗算器122が構成されている。この場合、上述したように、実線で示される列231−k、または、列251−kに対する1列分の積和は、最終的な演算では減算される。
そこで、セレクタ324は、X=X0の場合、加算器321−2からの出力(列積和演算回路352からの出力)をそのまま(プラスのまま)、加算器323に供給する。
これに対して、セレクタ324は、X=X0以外の場合、加算器321−2からの出力(列積和演算回路352からの出力)を、減算器325に供給する。
減算器325は、バッファ326から出力された値から、セレクタ324から出力された値(列積和演算回路352からの出力)を減算し、加算器323に供給する。
即ち、このバッファ326が、1つ前の基準領域(切り出し回数Uの現在の基準領域の1つ前に切り出された、切り出し回数u-1の基準領域)と、1つ前の各比較領域(マッチング数M=0乃至63のそれぞに対する比較領域)のとの積和(即ち、式(4)の右辺)の演算結果を保存するバッファである。
従って、例えば、図14に示されるような、左上端の座標X=1の場合、列積和演算回路352は、1つ前の基準領域201の第1列と、1つ前の比較領域202−kの第1列231−kとの第1の積和を演算し、セレクタ324を介して減算器325に供給する。
すると、減算器325は、バッファ326より、1つ前のマッチング数M=kにおける式(4)の右辺の演算結果(1つ前の基準領域201と、マッチング数M=kにおける1つ前の比較領域202−kとの積和)を取得し、それから、セレクタ324から供給された第1の積和を減算し、その演算結果を加算器323に出力する。
このとき、加算器323には、列積和演算回路352の演算結果、即ち、現在の基準領域221の第5列と、現在の比較領域222−kの第5列232−kとの第2の積和も、セレクタ322を介して供給されている。従って、加算器323は、結局、1つ前のマッチング数M=kにおける式(4)の右辺の演算結果(1つ前の基準領域201と、マッチング数M=kにおける1つ前の比較領域202−kとの積和)から、第1の積和を減算し、かつ、第2の積和を加算し、その演算結果を、マッチング数M=kにおける、現在の基準領域221と、比較領域222−kとの積和(即ち、式(4))をセレクタ327として出力するのである。
セレクタ327は、X=X0の場合であって、t=2,4,7,9,12,14等のとき(即ち、t=5n+2若しくは5n+4のとき)、または、X=X0以外の場合、加算器323からの出力を、マッチング数M=kにおける、現在の基準領域と比較領域との積和(即ち、式(4)の右辺の演算結果)として、外部に出力するとともに、次に切り出される(u+1回目に切り出される)基準領域に対する演算のための参考データとして、バッファ326に記憶させる。
これに対して、それ以外の場合、即ち、X=X0の場合、図13に示されるように、t=0,1,2,3,5,6等のとき(即ち、t=5n+2と5n+4のうちのいずれでもないとき)、基準領域201と、所定の比較領域202−kとの積和に必要な全ての成分(列積和)がまだ演算されていない。
即ち、このとき、加算器323の演算結果が、基準領域201と、所定の比較領域202−kとの積和のうちの、その時点までに演算された列積和の総和となっている。
そこで、この列積和の総和を、次のクロックで列積和演算回路351と列積和演算回路352により演算される列積和に加算させるために、セレクタ327は、X=X0の場合であって、t=0,1,2,3,5,6等のとき(即ち、t=5n+2と5n+4のうちのいずれでもないとき)、加算器323からの出力を、セレクタ328に供給する。
セレクタ328は、所定の条件が満たされた場合、セレクタ322からの出力を、ラインレジスタ(1つのD-フリップフロップ回路)329に供給する。
即ち、上述したように、図13に示されるように、時刻t=5n+2(nは、0を含む任意の整数値)においては、点線で示される列212−tに対する1列分の積和は、現在の積和の対象とされている(マッチング数M=kにおける)比較領域202−kではなく、次の対象の(マッチング数M=k+1における)比較領域202−kに対する積和に使用される。具体的には、時刻t=2においては、点線で示される列212−2に対する1列分の積和は、現在の積和の対象とされている(マッチング数M=0における)比較領域202−0ではなく、次の対象の(マッチング数M=1における)比較領域202−1に対する積和に使用される。
このため、セレクタ322は、X=X0であって、かつ、時刻t=5n+2(nは、0を含む任意の整数値)の場合、加算器321−1からの出力(列積和演算回路351からの出力)を、セレクタ328に供給する。
そこで、セレクタ328も、これに連動して、即ち、X=X0であって、かつ、時刻t=5n+2(nは、0を含む任意の整数値)の場合、セレクタ322からの出力(列積和演算回路351からの出力)を、ラインレジスタ329に供給する。
これに対して、上述したように、セレクタ327は、X=X0の場合であって、かつ、t=0,1,2,3,5,6等のとき(即ち、t=5n+2と5n+4のうちのいずれでもないとき)、加算器323からの出力(即ち、基準領域201と、所定の比較領域202−kとの積和のうちの、その時点までに演算された列積和)を、セレクタ328に供給する。
そこで、セレクタ328も、これに連動して、即ち、X=X0であって、かつ、t=0,1,2,3,5,6等のとき(即ち、t=5n+2と5n+4のうちのいずれでもないとき)、加算器323からの出力(基準領域201と、所定の比較領域202−kとの積和のうちの、その時点までに演算された列積和)を、ラインレジスタ329に供給する。
ラインレジスタ329は、セレクタ328から供給されたデータを保持し、次のクロックで、セレクタ331に供給する。
セレクタ331は、X=X0であって、t=5nの場合、演算対象のマッチング数Mが変化するため、レジスタ330に格納された0のデータを、加算器323に出力し、それ以外の場合、ラインレジスタ329より出力されるデータを、加算器323に加算する。
このように、セレクタ322乃至セレクタ331が、図16に示されるように接続された回路353は、列積和演算回路351と列積和演算回路353との演算結果に基づいて、所定の基準領域と、マッチング数Mにおける所定の比較領域との積和(式(4)の右辺の演算)を求めるための総合的な演算を行う回路であるといえる。そこで、以下、回路353を、総合演算回路353と称する。
以上、図12の画像マッチング部77のうちの、本実施の形態のΣAB乗算器122の詳細な説明を行った。
ところで、図12において、除算器126からは、1つの基準領域(即ち、注目画素とされた所定の画素)に対して、マッチング回数(上述した例では、64回分)分の相関値sが出力されてくるので、S2正規化相関値メモリ127は、これらの全ての相関値sを保存する。
視差情報生成部128は、このS2正規化相関値メモリ127に保存された相関値sのうちの、所定の1つの基準領域(即ち、注目画素とされた所定の画素)に最も相関が高いことを示す相関値sを検索し、検索した相関値sが演算された比較領域の中心点(画素)を、注目画素の対応点として検出する。
このとき、上述したように、視差情報生成部128は、注目画素の対応点に基づいて、様々な形態の視差情報を生成することができる。即ち、視差情報生成部128は、例えば、注目画素の配置位置と、対応点の配置位置との組そのもの、注目画素における視差を示す情報、または、対応点がどの設定点に対応するのかを示す情報等を生成することができる。
そして、視差情報生成部128は、このようにして生成した視差情報を、距離演算部78に供給する。
なお、このとき、視差情報生成部128は、注目画素とされた画素毎に、視差情報を距離演算部78に順次供給してもよいし、左画像(基準画像)191の全ての画素に対して、視差情報を生成した後、それらを一括して距離演算部78に供給してよい。例えば、視差情報生成部128は、左画像191と同一サイズの画像を生成し、その画像の各画素のそれぞれの画素値として、左画像191の対応する画素に対して生成した視差情報を代入させ、その画像(以下、このような画像を、視差情報画像と称する)を距離演算部78に供給することができる。
次に、図20を参照して、図5の画像処理システムが実行する処理(以下、ステレオビジョンシステムの処理と称する)について説明する。即ち、図20は、ステレオビジョンシステムの処理の例を示すフローチャートである。
ステップS1において、左画像変換部72は、左画像出力部(左カメラ)71より出力された画像に基づいて基準画像(左画像)を生成するとともに、右画像変換部75は、右画像出力部(右カメラ)74より出力された画像に基づいて比較画像(右画像)を生成する。
即ち、本実施の形態では、上述したように、左画像出力部(左カメラ)71より出力された画像そのものが、基準画像(左画像)とされる訳ではなく、レクティフィケーション(平行化)等の所定の画像処理が施された画像が、基準画像とされる。同様に、右画像出力部(右カメラ)74より出力された画像そのものが、比較画像とされる訳ではなく、レクティフィケーション(平行化)等の所定の画像処理が施された画像が、比較画像とされる。
基準画像と、比較画像とのそれぞれが画像マッチング部77に供給されると、ステップS2において、画像マッチング部77は、基準画像の各画素毎に(即ち、各画素のそれぞれを順次注目画素に設定し)、比較画像とのウィンドウマッチング処理を行い、その処理結果から各画素毎の対応点を検出し、検出した各画素毎の対応点に基づいて視差情報を生成する。
視差情報が距離演算部78に供給されると、ステップS3において、距離演算部78は、その視差情報に基づいて、基準画像の各画素のそれぞれの距離を演算する。
ところで、上述したステップS2の処理の最中、図12のΣAB乗算器122は、上述した図13乃至図15に示される手順に従って、所定の基準領域と、所定の比較領域との積和の演算、即ち、上述した式(4)の右辺の演算を行っている。
このような、ΣAB乗算器122の処理の詳細が、図21のフローチャートに示されている。そこで、以下、図21を参照して、ΣAB乗算器122の処理について説明する。
なお、上述した説明にあわせて、ここでも、図2に示されるように、基準領域を構成する画素のうちの、左上端の画素の配置位置を示す、座標系(xa,ya)における座標(X,Y)を基準として、ΣAB乗算器122の処理について説明する。ただし、以下においては、図21のフローチャートの記載にあわせて、左上端の画素のxa座標Xを、マッチング探索位置Xと称し、また、左上端の画素のya座標Yを、マッチング探索位置Yと称する。
また、基準領域のサイズは、上述した例では、5×5とされたが、図21のフローチャートにおいては、任意のサイズであるN×Nとされている。また、マッチング数Mの初期値は0とされていることは、上述した例と同様であるが、マッチング数Mの最大値は、上述した例では、63とされていたのに対して、図21のフローチャートにおいては、任意の値(ただし、左画像の横サイズ以下)であるMmaxとされている。即ち、図21のフローチャートにおいては、マッチングの回数(1つの基準領域に対する式(4)の右辺の演算回数)は、Mmax+1とされている。
はじめに、ステップS21において、ΣAB乗算器122は、マッチング探索範囲の開始点を設定する(Y=Y0,X=X0に設定する)。
ステップS22において、ΣAB乗算器122は、X=X0であるか否かを判定する。
ステップS22において、ΣAB乗算器122は、X=X0であると判定した場合、ステップS23において、マッチング数Mを0(M=0)に設定した後、ステップS24において、図13に示されるような手順に従って、基準領域と、マッチング数M=0における比較領域との積和(式(4)の右辺)を演算する。
以下、このようなステップS24の処理(図13に示される手順に従って実行される処理)を、「X=X0におけるマッチング処理用のΣAB演算処理」と称する。なお、「X=X0におけるマッチング処理用のΣAB演算処理」の詳細については、図22を参照して後述する。
ΣAB乗算器122は、マッチング数M=0における「X=X0におけるマッチング処理用のΣAB演算処理」を終了させると、ステップS25において、マッチング数M=Mmaxではないと判定し、ステップS26において、マッチング数MをM+1に更新する(新M=旧M+1)。
その後、処理はステップS24に戻され、それ以降の処理が繰り返される。即ち、マッチング数M=0乃至Mmaxのそれぞれにおける、「X=X0におけるマッチング処理用のΣAB演算処理」が繰り返し実行される。
そして、最後のマッチング数M=Mmaxにおける、「X=X0におけるマッチング処理用のΣAB演算処理」を終了させると(ステップS25において、M=Mmaxであると判定すると)、ΣAB乗算器122は、ステップS27において、X=Xmaxであるか否かを判定する。
なお、ここでは、マッチング探索位置Xは、水平方向xa(基準画像(左画像)の右方向)にスライドされていくので、最右端と設定された位置、或いは、実際の最右端となる位置を、Xmaxと記述している。
いまの場合、マッチング探索位置X=X0であるので、ΣAB乗算器122は、ステップS27において、X=Xmaxではないと判定し、ステップS28において、マッチング探索位置XをX+1に更新する(新X=旧X+1)。即ち、新たな注目画素として、現在の注目画素である第1の画素から、水平方向xa(基準画像(左画像)の右方向)に1つスライドされた(第1の画素の右隣の)第2の画素に設定される。そして、この第2の画素を中心とするN×Nの領域が、新たな基準領域として切り出される。換言すると、基準領域が、水平方向xa(基準画像(左画像)の右方向)に1画素分スライドされる。
その後、処理はステップS22に戻され、ステップS22において、X=X0ではないと判定され、処理はステップS29に進められる。
即ち、ΣAB乗算器122は、ステップS22において、X=X0ではないと判定した場合、ステップS29において、マッチング数Mを0(M=0)に設定した後、ステップS30において、図14や図15に示されるような手順(いまの場合、X=X0+1なので、図14に示される手順)に従って、基準領域と、マッチング数M=0における比較領域との積和(式(4)の右辺)を演算する。
以下、このようなステップS30の処理(図14や図15に示されるような手順に従って実行される処理)を、「マッチング処理用のΣAB演算処理」と称する。なお、「マッチング処理用のΣAB演算処理」の詳細については、図23を参照して後述する。
ΣAB乗算器122は、M=0における「マッチング処理用のΣAB演算処理」を終了させると、ステップS31において、マッチング数M=Mmaxではないと判定し、ステップS32において、マッチング数MをM+1に更新する(新M=旧M+1)。
その後、処理はステップS30に戻され、それ以降の処理が繰り返される。即ち、マッチング数M=0乃至Mmaxのそれぞれに対して、X=X0+1における「マッチング処理用のΣAB演算処理」が繰り返し実行される。
そして、最後のマッチング数M=Mmaxに対して、X=X0+1における「マッチング処理用のΣAB演算処理」を終了させると(ステップS31において、M=Mmaxであると判定すると)、ΣAB乗算器122は、ステップS27において、X=Xmaxであるか否かを判定する。
いまの場合、X=X0+1であるので、ステップS27において、X=Xmaxではないと判定されて、それ以降の処理が繰り返される。即ち、X=X0+2乃Xmaxのそれぞれにおける、マッチング数M=0乃至Mmaxのそれぞれに対する「マッチング処理用のΣAB演算処理」が繰り返し実行される。
そして、ΣAB乗算器122は、最後のマッチング探索位置Xmaxにおける、マッチング数M=0乃至Mmaxのそれぞれに対する「マッチング処理用のΣAB演算処理」を終了させると、ステップS27において、X=Xmaxであると判定し、ステップS33において、Y=Ymaxであるか否かを判定する。
なお、ここでは、マッチング探索位置Yは、垂直方向xa(基準画像(左画像)の下方向)にスライドされていくので、最下端と設定された位置、或いは、実際の再下端の位置を、Ymaxと記述している。
いまの場合、マッチング探索位置Y=Y0であるので、ΣAB乗算器122は、ステップS27において、Y=Ymaxではないと判定し、ステップS34において、マッチング探索位置YをY+1に更新する(新Y=旧Y+1)とともに、マッチング探索位置Xを開始点に設定する(X=X0)。
即ち、新たな注目画素として、現在の注目画素である第1の画素から、垂直方向ya(基準画像(左画像)の下方向)に1つスライドされ、かつ、水平方向xaの逆方向(基準画像(左画像)の左方向)に左端(或いは、左端と設定された場所)までスライドされた第2の画素に設定される。そして、この第2の画素を中心とするN×Nの領域が、新たな基準領域として切り出される。換言すると、基準領域が、垂直方向ya(基準画像(左画像)の下方向)に1画素分スライドされるとともに、水平方向xaの逆方向(基準画像(左画像)の左方向)に左端(或いは、左端と設定された場所)までスライドされる。
その後、処理はステップS22に戻され、それ以降の処理が繰り返される。
即ち、今度は、マッチング探索位置Y=Y0+1に対して、マッチング探索位置X=X0における、マッチング数M=0乃至Mmaxのそれぞれに対する「X=X0におけるマッチング処理用のΣAB演算処理」と、マッチング探索位置X=X1乃至Xmaxのそれぞれにおける、マッチング数M=0乃至Mmaxのそれぞれに対する「マッチング処理用のΣAB演算処理」が繰り返し実行される。
同様に、マッチング探索位置Y=Y0+2乃至Ymaxのそれぞれに対しても、マッチング探索位置X=X0における、マッチング数M=0乃至Mmaxのそれぞれに対する「X=X0におけるマッチング処理用のΣAB演算処理」と、マッチング探索位置X=X1乃至Xmaxのそれぞれにおける、マッチング数M=0乃至Mmaxのそれぞれに対する「マッチング処理用のΣAB演算処理」が繰り返し実行されると、即ち、全画素(或いは、設定された全画素)の処理が実行されると、ステップS33において、Y=Ymaxであると判定され、ΣAB乗算器の処理は終了となる。
次に、図22を参照して、「X=X0におけるマッチング処理用のΣAB演算処理(図21のステップS24の処理)」の詳細について説明する。
はじめに、ステップS51において、ΣAB乗算器122は、演算補正位置Iを0に初期設定し、演算途中結果Sを0に初期設定する(I=0,S=0)。なお、演算補正位置Iと、演算途中結果Sとのそれぞれについては後述する。
ステップS52において、ΣAB乗算器122は、比較領域のうちの、xb座標(X0+M+I)である列(小領域)に対応する列積和S1を演算する。
即ち、ΣAB乗算器122は、次の式(7)の右辺を演算することで、列積和S1を演算する。
また、ステップS53において、ΣAB乗算器122は、比較領域のうちの、xb座標(X0+M+I+1)である列(小領域)に対応する列積和S2を演算する。
即ち、ΣAB乗算器122は、次の式(8)の右辺を演算することで、列積和S2を演算する。
具体的には、例えば、いま、ΣAB乗算器122は、上述した図13に示されるように、基準領域201と、M=0における比較領域202−0との組に対する積和(式(4)の右辺)を演算するとする。
この場合、t=0においては、演算補正位置I=0に設定され、演算途中結果Sも0に設定されている。また、X0=1,Y=0,N=5とされている。
従って、ステップS52の処理では、基準領域201の第1列と、比較領域202−0の第1列211−0(即ち、xb座標(1(=X0+M+I=1+0+0))である列211−0)との積和(列積和)S1が演算される。
また、ステップS53の処理では、基準領域201の第2列と、比較領域202−0の第2列212−0(即ち、xb座標(2(=X0+M+I+1=1+0+0+1))である列212−0)との積和(列積和)S2が演算される。
なお、上述したように、これら2つの列積和S1と列積和S2のそれぞれは、並行して(独立して)演算されるので、ステップS52とS53の処理の順番は、特に図22の例に限定されないことになる。
その後、ステップS54において、ΣAB乗算器122は、演算途中結果Sを更新する(新S=旧S+S1+S2)。
ステップS55において、ΣAB乗算器122は、I=N-1であるか否かを判定する。
いまの場合、I=0であるので、ΣAB乗算器122は、ステップS55において、I=N-1ではないと判定し、ステップS56において、演算補正位置Iを更新する(新I=旧I+2)。その後、処理は、ステップS52に戻され、それ以降の処理が繰り返される。
即ち、いまの場合、演算補正位置Iは2に更新されるので、ステップS52の処理では、基準領域201の第3列と、比較領域202−0の第3列211−1(即ち、xb座標(3(=X0+M+I=1+0+2))である列211−1)との積和(列積和)S1が演算される。
また、ステップS53の処理では、基準領域201の第4列と、比較領域202−0の第4列212−1(即ち、xb座標(4(=X0+M+I+1=1+0+2+1))である列212−1)との積和(列積和)S2が演算される。
そして、ステップS54の処理で、演算途中結果Sが、S=S+S1+S2に更新される。即ち、図13に示されるように、時刻t=1までの演算結果の総和(第1列乃至第4列までの列積和の総和)が、演算途中結果Sとなる。
いまの場合、演算補正値Iは2に設定されているので、その後、ステップS55において、I=N-1ではないと判定され、ステップS56において、演算補正位置Iは4に更新される。
そして、ステップS52の処理では、基準領域201の第5列と、比較領域202−0の第5列211−2(即ち、xb座標(5(=X0+M+I=1+0+4))である列211−2)との積和(列積和)S1が演算される。
ただし、xb座標(6(=X0+M+I+1=1+0+4+1))である列は、比較領域202−0には含まれないので、ステップS73の処理は実行されない(実際には、上述したように、このとき、次のマッチング数m=1の第1列目に対する処理として実行される)。即ち、このような場合、列積和S2=0として取り扱われる。
そして、ステップS54の処理で、演算途中結果Sが、S=S+S1+S2に更新される。即ち、図13に示されるように、時刻t=2までの演算結果(マッチング数M=1の分は除く)の総和(第1列乃至第5列までの列積和の総和)が、演算途中結果Sとなる。
このとき、演算補正値Iは4に設定されているので、ΣAB乗算器122は、ステップS55において、I=N-1(=5-1=4)であると判定し、ステップS57において、現時点の演算途中結果Sを、最終的な演算結果W(X0,Y,M)として(W(X0,Y,M)=S)として出力する。
なお、このとき出力される最終的な演算結果W(X0,Y,M)は、結局、次の式(9)を演算した結果と等価となる。
以上の処理で、「X=X0におけるマッチング処理用のΣAB演算処理(図21のステップS24の処理)」は終了となり、処理は、上述した図21のステップS25に進められる。
次に、図23を参照して、「マッチング処理用のΣAB演算処理(図21のステップS30の処理)」の詳細について説明する。
はじめに、ステップS71において、ΣAB乗算器122は、現在の基準領域に対する比較領域のうちの、第5列、即ち、xb座標(X+N-1+M)である列(小領域)に対応する列積和S1を演算する。
詳細には、ΣAB乗算器122は、次の式(10)の右辺を演算することで、列積和S1を演算する。
また、ステップS72において、ΣAB乗算器122は、1つ前の基準領域に対する比較領域のうちの、第1列、即ち、xb座標((X-1)+M)である列(小領域)に対応する列積和S2を演算する。なお、ここでは、Xは、現在のマッチング探索範囲、即ち、現在の比較領域の1列目のxb座標値を表している。従って、1つ前の基準領域に対応するマッチング探索範囲、即ち、1つ前のウィンドウに対する比較領域のうちの第1列のxb座標値は、X-1と表される。
詳細には、ΣAB乗算器122は、次の式(11)の右辺を演算することで、列積和S2を演算する。
具体的には、例えば、いま、ΣAB乗算器122は、上述した図14に示されるように、現在の基準領域221と、M=0における現在の比較領域222−0との組に対する積和(式(4)の右辺)を演算するとする。
この場合、1つ前の基準領域は領域201とされ、1つ前のその基準領域201に対する、M=0における比較領域は、領域202−0とされる。また、マッチング探索位置X=2,Y=0,N=5とされている。
従って、ステップS71の処理では、現在の基準領域221の第5列と、比較領域222−0の第5列232−0(即ち、xb座標(6=X+N-1+M=2+5-1+0))ある列232−0)との積和(列積和)S1が演算される。
また、ステップS72の処理では、1つ前の基準領域201の第1列と、比較領域202−0の第1列231−0(即ち、xb座標(1(=(X-1)+M=(2-1)+1))である列231−0)との積和(列積和)S2が演算される。
そして、ステップS73において、ΣAB乗算器122は、1つ前の基準領域の演算結果W(X-1,Y,M)を読み出す(いまの場合、基準領域201の演算結果W(X0,Y,M)を読み出す)。
なお、このとき読み出される演算結果W(X-1,Y,M)は、結局、次の式(12)を演算した結果と等価となる。
そして、ステップS74において、ΣAB乗算器122は、1つ前の基準領域の演算結果W(X-1,Y,M)に対して、列積和S1を加算し、かつ、列積和S2を減算した値を、演算結果W(X,Y,M)として(W(X,Y,M)=W(X-1,Y,M)+S1-S2)として出力する。
なお、このとき出力される演算結果W(X,Y,M)は、結局、次の式(13)を演算した結果と等価となる。
以上の処理で、「マッチング処理用のΣAB演算処理(図21のステップS30の処理)」は終了となり、処理は、上述した図21のステップS31に進められる。
なお、上述したように、図16の構成のΣAB乗算器122においては、減算される列積和S2は、列積和演算回路352により行われ、セレクタ324を介して、減算器325に供給される。このとき、この減算器325には、1つ前の基準領域の演算結果W(X-1,Y,M)が入力されており、結局、減算器325が、W(X-1,Y,M)-S2の演算を実行して、その演算結果(=W(X-1,Y,M)−S2)を加算器323に供給する。そして、加算器323が、減算器325より供給されたこの演算結果(=W(X-1,Y,M)-S2)と、列積和演算回路351より供給された列積和S1とを加算することで、最終的な演算結果W(X,Y,M)を算出し、出力している。
即ち、最終的な演算結果W(X,Y,M)が出力されれば、「マッチング処理用のΣAB演算処理(図21のステップS30の処理)」の処理の順番は、図23の例に限定されず、いずれの順番とされてもよい。
以上、画像マッチング部77は、式(1)で示される正規化相関関数を利用するとして説明した。このため、画像マッチング部77は、例えば、図12に示されるように構成されている。
しかしながら、上述したように、画像マッチング部77は、式(2)で示されるSSDや、式(3)で示されるSADを利用することも勿論可能である。
この場合、画像マッチング部77は、SSDやSADの演算も、上述した一連の処理(手順)と全く同様に実行することができる。即ち、図24と図25に示されるように、図16のΣAB乗算器122と基本的に同様の構成、即ち、2×N個の演算器と、1つ前の基準領域の演算結果を保存するバッファとを有する構成として実現可能である。
具体的には、SSDを演算する回路は、図24に示されるように、SADを演算する回路は、図25に示されるように、それぞれ構成することができる。即ち、図24は、本実施の形態のSSDを演算する回路の構成例を表しており、図25は、本実施の形態のSADを演算する回路の構成例を表している。
図16と図24とを比較するに、図24のSSDを演算する回路においては、図16の10個(2×N=2×5個)の、「Mul」として示される乗算器301−11乃至乗算器301−52のそれぞれの代わりに、10個(2×N=2×5個)の、「SubSQ」として示される演算器401−11乃至演算器401−52のそれぞれが接続されている。即ち、これらの演算器401−11乃至演算器401−52のそれぞれは、基準領域を構成する画素のうちの所定の1つの画素の画素値aiから、比較領域を構成する画素のうちの対応する画素の画素値biを減算し、その自乗を演算する回路である。
同様に、図16と図25とを比較するに、図25のSADを演算する回路においては、図16の10個(2×N=2×5個)の、「Mul」として示される乗算器301−11乃至乗算器301−52のそれぞれの代わりに、10個(2×N=2×5個)の、「SubAbs」として示される演算器411−11乃至演算器411−52のそれぞれが接続されている。即ち、これらの演算器411−11乃至演算器411−52のそれぞれは、基準領域を構成する画素のうちの所定の1つの画素の画素値aiから、比較領域を構成する画素のうちの対応する画素の画素値biを減算し、その絶対値を演算する回路である。
従って、結局のところ、次の式(14)の演算は、上述した一連の処理(手順)と全く同様に実行することができ、また、それを演算する回路は、図16と全く同様に構成することが可能である。ただし、この場合、図16の10個(2×N=2×5個)の、「Mul」として示される乗算器301−11乃至乗算器301−52のそれぞれの代わりに、10個(2×N=2×5個)の、関数f(ai,bi)を演算する演算回路(図示せず)が接続される。
なお、以下、上述した図16のΣAB乗算器122、図24のSSDを演算する回路、および、図25のSADを演算する回路も含めて、式(14)の右辺の演算を行う画像処理装置を、Σf(ai,bi)演算装置と称する。
即ち、例えば、いま、第1の画像(例えば、図5の左カメラ71から出力され、左画像変換部72を介して供給された、図14の左画像191)から、N×Nの基準領域(例えば、図14の基準領域221)が切り出され、かつ、第2の画像(例えば、図5の右カメラ74から出力され、右画像変換部75を介して供給された、図14の右画像192)から、N×Nの比較領域(例えば、図14の比較領域222−0)が切り出されるとする。
この場合、Σf(ai,bi)演算装置は、その基準領域とその比較領域との組に対する第1の値として、式(13)のΣの中の関数f(ai,bi)に対して、変数aiとして、その基準領域を構成する各画素のそれぞれの画素値を代入し、かつ、変数biとして、その比較領域を構成する画素のうちの、対応する場所に位置する各画素のそれぞれの画素値を代入したときに得られる、関数f(ai,bi)のN×N個の出力値の総和(例えば、式(14)の右辺)である第1の値を演算することになる。
このようなΣf(ai,bi)演算装置(画像処理装置)として、次のような3つの構成を少なくとも適用すれば、上述した一連の処理(手順)と全く同様に、第1の値を算出する(式(14)の右辺を演算したの等価な演算を行う)ことができる。
即ち、図示はしないが、1つ目の構成要素は、Σf(ai,bi)演算装置(画像処理装置)自身により演算された、基準領域と比較領域との組に対する前記第1の値を記憶する記憶部である。
2つ目の構成要素は、記憶部に、現在の第1の基準領域(例えば、図14の基準領域221)と共通する画素を少なくとも含む第2の基準領域(例えば、図14の基準領域201)と、第2の基準領域との相対的な位置関係が第1の基準領域と現在の第1の比較領域(例えば、図14の比較領域222−0)との相対的な位置関係と同一の第2の比較領域(例えば、図14の比較領域202−0)との組に対する第1の値が記憶されている場合、これから演算される、第1の基準領域と第1の比較領域との組に対する第1の値と、記憶部に記憶されている、第2の基準領域と第2の比較領域との組に対する第1の値との差異(例えば、図14において、1つ前の比較領域202−0のうちの、第1列(小領域)231−0に対応する部分の演算成分、および、現在の比較領域222−0のうちの、第5列(小領域)232−0に対応する部分の演算成分)に相当する第2の値を演算する第1の演算部である。
そして、3つ目の構成要素は、記憶部に記憶された、第2の基準領域と第2の比較領域との組に対する第1の値と、第1の演算部により演算された第2の値とに基づいて、第1の基準領域と第1の比較領域との組に対する第1の値を演算する第2の演算部である。
なお、以下、このような3つの構成を少なくとも有するΣf(ai,bi)演算装置を、従来のΣf(ai,bi)演算装置(画像処理装置)と区別するために、本実施の形態のΣf(ai,bi)演算装置と称する。
本実施の形態のΣf(ai,bi)演算装置をハードウエアで構成すれば、処理時間の増加を抑えつつ、関数f(ai,bi)を演算する演算回路(乗算器等)の数を効果的に減らすことができる。即ち、Σf(ai,bi)演算装置は、小さい回路規模のハードウエアとして容易に実現可能であり、かつ、大きな基準領域サイズのウィンドウマッチングの処理を実行することができる。
具体的には、例えば、マッチング回数m(=マッチング数M+1)が64回、基準画像(比較画像)のサイズ(=W×H)が320x240とされ、基準領域のサイズ(=N×N)が11x11とされた場合、従来の画像処理装置(例えば、図4のΣAB乗算器52に対応する装置)においては、関数f(ai,bi)の演算器は121(=11×11)個必要となる。
また、この場合、従来のΣf(ai,bi)演算装置の処理時間は、一般的に、クロックを単位とすると、H×{(W-m-xo)×m+(m+1)×m/2}[クロック]で表される。即ち、基準画像の右部分が注目画素とされた場合、64回のマッチングのうち後半については、比較領域が存在しなくなるため(基準領域を比較画像上をスライドさせると考えると、基準領域がその比較画像の外に出てしまうため)、X=256以降においては、64乃至0と順々にマッチング回数が減ってゆく。このため、1水平ラインあたりのマッチング回数は、W×mとはならず、(W-m-xo)×m+(m+1)×m/2となる。なお、x0は、上述したマッチング開始点を示している。従って、具体的には、マッチング開始点x0=0とされると、いまの場合、4,431,360(=240x{(320-64-0)x64+(64+1)x64/2}[クロック]となる。
これに対して、本実施の形態のΣf(ai,bi)演算装置では、関数f(ai,bi)の演算器は22(=2×11)個で済むことになる。
また、処理時間においては、上述したマッチング探索開始位置X=X0の場合(初期状態の場合)のみ、1回のマッチングにN/2[クロック]かかり(即ち、m回のマッチングでN/2×m[クロック]かかり、この分が、従来よりも処理時間が多くかかることになる。しかしながら、この分の処理回数は、全体の処理回数から見て極わずかであり(画像のサイズが大きくなるほど、全体の処理に対する、この分の比率は少なくなり)、それ以外の場合(マッチング探索開始位置X=X0以外の場合)、1回のマッチングは1[クロック]で済むので、従来の処理時間に対してわずかな増加にとどめることが可能になる。
具体的には、本実施の形態のΣf(ai,bi)演算装置の処理時間は、H×{n/2×m+(W-m-(xo-1))×m+(m+1)×m/2}[クロック]で表されるので、結局、4,500,480(=240x{11/2x64+(320-64-1)x64+(64+1)x64/2}[クロック]となる。
このように、本実施の形態のΣf(ai,bi)演算装置は、従来のものと比較して、関数f(ai,bi)を演算する演算器の数を82%も減少させることができるにも関わらず、処理時間を約1%の増加のみで抑制させることが可能である。
なお、本実施の形態のΣf(ai,bi)演算装置(画像処理装置)をハードウエアで構成する場合、バッファが必要となるが、そのバッファの必要な容量は、例えば、画素値が8bitの場合16bitx64=128byteとされる。
なお、ハードウエアで構成された本実施の形態のΣf(ai,bi)演算装置が有する機能をソフトウエアで実現することも可能である。即ち、上述した一連の処理を、ソフトウエアで実行させることも勿論可能である。
この場合、Σf(ai,bi)演算装置は、例えば、図26に示されるようにパーソナルコンピュータとして構成することもできる。
図26において、CPU(Central Processing Unit)501は、ROM(Read Only Memory)502に記録されているプログラム、または記憶部508からRAM(Random Access Memory)503にロードされたプログラムに従って各種の処理を実行する。RAM503にはまた、CPU501が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU501、ROM502、およびRAM503は、バス504を介して相互に接続されている。このバス504にはまた、入出力インタフェース505も接続されている。
入出力インタフェース505には、キーボードやマウス等よりなる入力部506、ディスプレイ等よりなる出力部507、ハードディスク等よりなる記憶部508、および、モデムやターミナルアダプタ等よりなり、ネットワーク等を介する他の情報処理装置との通信を制御する通信部509が接続されている。
入出力インタフェース505にはさらに、必要に応じてドライブ510が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどよりなるリムーバブル記録媒体511が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部508にインストールされる。
一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
この記録媒体は、図26に示されるように、装置本体とは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク(フロッピディスクを含む)、光ディスク(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク(MD(Mini-Disk)を含む)、もしくは半導体メモリなどよりなるリムーバブル記録媒体(パッケージメディア)511により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM502や、記憶部508に含まれるハードディスクなどで構成される。
さらにまた、本実施の形態のΣf(a,b)演算装置は、上述した用途以外に限定されず、様々な用途に適用可能である。具体的には、例えば、本実施の形態のΣf(a,b)演算装置は、横(水平)方向の探索を終えた後、縦(垂直)方向の値をインクリメントして、再び水平方向の探索することを繰り返すことにより、水平方向だけの対応点の検索から、縦と横の2次元平面上での対応点の検索の用途に適用することが可能である。即ち、本実施の形態のΣf(a,b)演算装置は、ステレオ視のなど、2台のカメラの入力だけでなく、同一のカメラの異なる2つの時間の、動き補償などの対応点の検索等使用可能なことを意味する。
なお、本明細書において、上述した一連の処理を実行するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数の装置や処理部により構成される装置全体を表すものである。