JP2018026032A - 画像処理装置、および画像処理装置の制御方法 - Google Patents
画像処理装置、および画像処理装置の制御方法 Download PDFInfo
- Publication number
- JP2018026032A JP2018026032A JP2016158513A JP2016158513A JP2018026032A JP 2018026032 A JP2018026032 A JP 2018026032A JP 2016158513 A JP2016158513 A JP 2016158513A JP 2016158513 A JP2016158513 A JP 2016158513A JP 2018026032 A JP2018026032 A JP 2018026032A
- Authority
- JP
- Japan
- Prior art keywords
- pixel
- target
- column
- value
- calculated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Image Processing (AREA)
Abstract
【課題】ステレオマッチングを行うための演算の回数および演算器の個数を削減するとともに、処理の高速化を実現する。【解決手段】画像処理装置(1)は、対象領域(T)における注目画素(n)と探索領域(S)における比較画素(c)との相関値を算出する相関値算出処理を、注目する行の画素の各々を順次に注目画素(n)として設定する毎に実行することを処理単位として、探索領域(S)を水平方向へ移動させる毎に上記処理単位を繰り返し実行する。相関値算出処理では、注目画素(n)を中心とする基準領域(B)と比較画素(c)を中心とする比較領域(C)とにおいて、画素間の差分の絶対値を画素列毎に積算した値を全ての画素列について積算することにより相関値を算出する。画像処理装置(1)は、同一の注目画素(n)に対して算出される相関値のうちの最小値が算出されたときの探索領域(S)の移動量をシフトレジスタ部(40)に保持する。【選択図】図1
Description
本発明は、ステレオマッチングを行う画像処理装置等に関する。
2つ以上の異なる方向から同一の被写体をカメラにて撮影して得られた画像における、対応する画素間の視差情報を求める手法(いわゆるステレオマッチング)に関し、従来から様々な技術開発がなされている。中でも、特許文献1には、演算に必要な演算器の個数を、演算時間の増大を抑制しつつ減少させるウィンドウマッチング手法について開示されている。
特許第4396189号公報(2010年1月13日発行)
しかしながら、特許文献1に開示されている技術は、演算に必要な演算器の個数を減少させるものの、処理時間が僅かではあるが増加するという問題がある。
そこで、本願の発明者らは、演算回数および演算器の個数を大幅に削減しつつ、演算処理を大幅に高速化するステレオマッチング手法について鋭意検討した結果、本発明を完成するに至った。
本発明の目的は、ステレオマッチングを行うための演算の回数および演算器の個数を削減するとともに、ステレオマッチング処理の高速化を実現する画像処理装置等を提供することにある。
上記の課題を解決するために、本発明の一態様に係る画像処理装置は、基準画像に設けられた対象領域に設定された注目画素と、比較画像に設けられた上記対象領域と同形同大の探索領域における相対位置が上記対象領域における上記注目画素の相対位置と同じである比較画素との相関値を算出する相関値算出処理を、上記注目画素が設定された行の水平方向に並ぶ画素の各々を順次に上記注目画素として設定する毎に実行することを処理単位として、上記探索領域を初期位置から水平方向へ所定量ずつ移動させる毎に上記処理単位を繰り返し実行する演算部を備え、上記演算部は、同一の上記注目画素に対して算出される上記相関値のうちの最小値が算出されたときの、上記探索領域の上記初期位置からの移動量を、上記注目画素毎に保持する移動量保持部を備え、上記相関値算出処理は、上記基準画像における、上記注目画素を中心とする基準領域において垂直方向に並ぶ画素から成る画素列の各々について、上記画素列を構成する第1画素の画素値と、上記比較画像における、上記基準領域と同形同大の、上記比較画素を中心とする比較領域を構成する、上記比較領域における相対位置が上記基準領域における上記第1画素の相対位置と同じである第2画素の画素値との差分の絶対値を、上記画素列を構成する全ての画素について算出し、該算出した差分の絶対値を上記画素列毎に積算した列積算値を算出し、上記画素列毎の上記列積算値を全て積算することにより上記相関値を算出する処理であることを特徴としている。
上記構成によれば、上記画素列毎の列積算値を積算することにより上記相関値を算出するという手順で行う相関値算出処理を、注目画素が設定された行の水平方向に並ぶ画素の各々を順次に注目画素として設定する毎に実行することを処理単位として、探索領域を初期位置から水平方向へ所定量ずつ移動させる毎に上記処理単位を繰り返し実行する。ここで、注目画素を中心とする基準領域と比較画素を中心とする比較領域とは、いずれも、注目画素を新たに設定する毎に同一方向に移動する。
そうすると、移動後の基準領域を構成する画素列のうち、移動方向の最前列を除く画素列は、移動前の基準領域にも存在する。このことは比較領域についても同様である。よって、探索領域の位置が変わらない期間において、移動前の基準領域および比較領域に対する相関値算出処理において算出した列積算値のうち、移動方向側に位置する画素列の列積算値は、移動後の基準領域および比較領域に対する相関値算出処理において改めて算出しなおす必要はなく、算出済みの列積算値として再利用することができる。
したがって、再利用しない場合と比べて、演算回数および演算器を大幅に削減することができ、処理全体を大幅に高速化することができる。
なお、本発明の一態様に係る画像処理装置は、コンピュータによって実現してもよく、この場合には、コンピュータを上記画像処理装置が備える各手段として動作させることにより上記画像処理装置をコンピュータにて実現させる画像処理装置の制御プログラム、およびそれを記録したコンピュータ読み取り可能な記録媒体も、本発明の範疇に入る。また、本発明の一態様に係る画像処理装置は集積回路として実現してもよく、この場合には、上記集積回路を備えるチップなども本発明の範疇に入る。
本発明の一態様によれば、ステレオマッチングを行うための演算の回数および演算器の個数を削減するとともに、ステレオマッチング処理の高速化を実現できる。
本発明の一実施形態について、図1〜図7に基づいて説明すると以下のとおりである。
本実施形態において、画像を構成する画素の位置(座標)は、画像の左上端の画素を原点とする二次元座標(つまりX座標およびY座標)で表すものとして説明する。原点から水平右方向をX軸方向、原点から垂直下方向をY軸方向とする。
本実施形態に係る画像処理装置1は、左右に離間して配置された2台のカメラにて同一の被写体を異なる方向から撮影して得られる2枚の画像における、対応する画素間の視差情報を画素毎に算出する装置である。画像処理装置1は、典型例として、図2に示す車両用ステレオカメラシステムに用いられ、FPGA(field programmable gate array)またはASIC(application specific integrated circuit)(不図示)として構成される。同図に示す例では、車両5のフロントガラスの上部に車両前方へ向けて取り付けられた2台のステレオカメラ2、3にて路上の人物4、車両、物体などを撮影して得られる画像が、画像処理装置1に入力される。
以降の説明において、2台のカメラのうち左側に配置されたカメラにて被写体を撮影して得られる画像を「左画像L」(基準画像)と表記し、右側に配置されたカメラにて被写体を撮影して得られる画像を「右画像R」(比較画像)と表記する。説明の便宜上、左画像Lおよび右画像Rは同形同大であるものとする。なお、左画像Lまたは右画像Rのエピポーララインの方向が水平方向と異なる場合は、周知技術であるレクティフィケーション(画像平行化)等によりエピポーララインの方向を水平方向に揃えるものとする。
画像処理装置1は、左画像Lにおいて、処理対象となる領域(以下では「対象領域T」と表記する)を設定するとともに、右画像Rにおいて、対象領域Tと同形同大の探索対象となる領域(以下では「探索領域S」と表記する)を設定する。その上で、画像処理装置1は、対象領域Tにおいて処理対象として注目する画素(以下では「注目画素n」と表記する)と、探索領域Sにおいて注目画素nと比較する対象の画素(以下では「比較画素c」と表記する)との相関値を算出する。この算出処理を「相関値算出処理」と表記する。画像処理装置1は、この相関値算出処理を、注目画素nを対象領域T内で移動させながら、また、探索領域Sを予め定められた範囲(以下では「探索範囲M」と表記する)内で移動させながら、繰り返し実行することにより、画素毎の視差情報を算出する。
なお、対象領域Tを設ける画像は、左画像Lおよび右画像Rのいずれであってもよい。右画像Rに対象領域Tを設ける場合は、左画像Lに探索領域Sを設ける。
また、比較画素cの典型例は、探索領域Sにおける相対位置が対象領域Tにおける注目画素nの相対位置と同じ画素であるが、これに限定されるものではない。
また、探索領域Sの、初期位置から水平方向への移動量を、以下では「探索値d」とも表記する。
画像処理装置1は、相関値算出処理において、相関の精度を高めるために面積相関を演算する。面積相関では、左画像Lにおける、注目画素nを含む所定サイズの領域(ウィンドウとも称されるが、以下では「基準領域B」と表記する)と、右画像Rにおける、比較画素cを含む基準領域Bと同形同大の領域(ウィンドウとも称されるが、以下では「比較領域C」と表記する)との相関を求める。より具体的には、基準領域Bを構成する画素毎に、当該画素に対応する比較領域Cを構成する画素との相関値を求め、画素毎に求めた相関値を積算する。面積相関の具体的な演算方法は限定されるものではなく、一般的な正規相関で用いられるSAD(Sum of Absolute Difference)を用いて演算してもよいし、SSD(Sum of Squared Difference)を用いて演算してもよい。本実施形態では、下記式1にて規定されるSADを用いて面積相関を演算するものとする。式1において、Left(x,y)は、X座標がxでありY座標がyである注目画素nを表し、Right(x,y)は、X座標がxでありY座標がyである比較画素cを表し、dは、探索領域Sの初期位置からの移動量(以下では「探索値」とも表記する)を表すものとする。式1では、注目画素nと比較画素cとの画素値の差分の絶対値(以下では「差分絶対値」と表記する)を、処理対象となる全ての画素について積算する演算式である。
以降の説明において、対象領域Tは四角形状であるものとし、その水平方向の画素数を「Tx」と表記し、その垂直方向の画素数を「Ty」と表記する。同様に、探索領域Sは四角形状であるものとし、その水平方向の画素数を「Sx」と表記し、その垂直方向の画素数を「Sy」と表記する。Tx、Ty、Sx、およびSyは正の整数である。上述したとおり、対象領域Tと探索領域Sとは同形同大であるから、Tx=Sx、Ty=Syである。
また、基準領域Bは注目画素nを中心とする四角形状であるものとし、その水平方向の画素数を「Bx」と表記し、その垂直方向の画素数を「By」と表記する。同様に、比較領域Cは比較画素cを中心とする四角形状であるものとし、その水平方向の画素数を「Cx」と表記し、その垂直方向の画素数を「Cy」と表記する。Bx、By、Cx、およびCyは正の整数である。上述したとおり、基準領域Bと比較領域Cとは同形同大であるから、Bx=Cx、By=Cyである。
上述したとおり、画像処理装置1は、相関値算出処理を、注目画素nを対象領域T内で移動させながら、また、探索領域Sを探索範囲M内で移動させながら、繰り返し実行することにより、画素毎の視差情報を算出する。ここで、画像処理装置1の特徴は、(1)注目画素nおよび探索領域Sの移動手順、および(2)面積相関の演算手順、をそれぞれ工夫したことにより、演算結果を再利用し、演算の回数および演算器の個数を大幅に削減した点にある。
まず、注目画素nおよび探索領域Sの移動手順について説明する。画像処理装置1は、対象領域Tにおいて処理対象として注目する行(以下では「注目行」と表記する)を構成するTx個の各画素を順次に注目画素nとして設定する毎に、相関値算出処理を実行する。このとき、Tx個の各画素に対して1回ずつ相関値算出処理を実行し終わるまでの期間において、探索領域Sの位置は動かさない。
また、対象領域Tにおける注目行の設定順は、垂直方向に順番であることが好ましく、典型例では、対象領域Tの最上行からY軸方向(垂直下方向)へ1行ずつ順番に設定する。以降では、この典型例を前提として説明する。
また、注目行における注目画素nの設定順は、水平方向に順番であることが好ましく、典型例では、注目行の最左画素からX軸方向(水平右方向)へ1画素ずつ順番に1クロック毎に設定する。以降では、この典型例を前提として説明する。
1つの注目行の各画素に対して相関値算出処理を実行し終えると、画像処理装置1は、探索領域Sの位置を所定量だけ水平方向へ移動させる。典型的には探索領域Sを1画素だけX軸の負方向(水平左方向)へ移動させる(つまり、探索値dの値を1つ増やす)。そして、この状態において再び、探索領域Sを移動する前と同じ注目行の各画素を順次に注目画素nとして設定する毎に相関値算出処理を実行する。画像処理装置1は、この処理を、探索領域Sの移動量が探索範囲M内である限り繰り返し実行する。
この繰り返しの結果、同一の注目行の各画素について、探索範囲M+1回分の相関値が算出されることとなるが、そのうちの最小値が算出された時点における探索領域Sの移動量(つまり、その時点での探索値d)が、視差情報となる。
そして、画像処理装置1は、探索領域Sの移動量が探索範囲Mに達したら、現在の注目行に対する処理を終了する。そして、画像処理装置1は、探索領域Sの水平位置を初期化する(つまり、探索値dを0にする)とともに、新たな注目行に対して上述と同様に、相関値算出処理および探索領域Sの移動を繰り返し実行する。
そして、対象領域Tの最下行を注目行とした処理が完了すると、ステレオマッチング処理は全て完了する。
以上で説明した注目画素nおよび探索領域Sの移動手順について、図3を参照しながら具体的に説明する。なお、図3では、Tx=Sx=10、Ty=Sy=8、Bx=Cx=5、By=Cy=3であり、また、探索範囲M=4であるものとする。
まず、図3の(a)〜(c)は、対象領域Tの最上行を注目行として注目画素nを順次に設定したうちの、1回目、2回目、および10回目(最終回)を示しており、図3の(a)は1回目に注目画素n最左画素に設定した例であり、図3の(b)は2回目に注目画素nを左から2番目の画素に設定した例であり、図3の(c)は最後に注目画素nを最右画素に設定した例である。図3の(d)〜(f)は、それぞれ、図3の(a)〜(c)に示した注目画素nと比較する比較画素cを比較領域Cにおいて設定した様子を示している。図3の(d)〜(f)において、探索領域Sは初期位置から移動していないものとする(探索値d=0)。
画像処理装置1は、対象領域Tの最上行を注目行として、図3の(a)(d)に示す状態から図3の(c)(f)に示す状態に達するまで相関値算出処理を繰り返し実行することにより、探索値d=0のときの、対象領域Tの最上行についての処理を完了する。
続いて、画像処理装置1は、探索領域Sの位置を1画素だけ水平左方向へ移動させるとともに(探索値d=1)、再び、対象領域Tの最上行の各画素を順次に注目画素nとして設定する。つまり、再び、図3の(a)〜(c)に示したとおり最上行の最左画素から順次に注目画素nを設定する一方、図3の(a)〜(c)に示した注目画素nと比較する比較画素cを、それぞれ、図3の(g)〜(i)に示すとおりに設定する。図3の(g)〜(i)において、探索領域Sは初期位置から1画素だけ水平左方向へ移動している(探索値d=1)。なお、図3の(g)〜(i)に示す比較画素cは、それぞれ、図3の(d)〜(f)に示す比較画素cより1画素だけ左隣の画素である。
画像処理装置1は、対象領域Tの最上行を注目行として、図3の(a)(g)に示す状態から図3の(c)(i)に示す状態に達するまで相関値算出処理を繰り返し実行することにより、探索値d=1のときの、対象領域Tの最上行についての処理を完了する。
その後、画像処理装置1は、さらに探索領域Sの位置を1画素だけ水平左方向へ移動させるとともに、再び、対象領域Tの最上行の各画素を順次に注目画素nとして設定する処理の流れを繰り返す。
図3の(j)〜(l)は、探索領域Sの移動量が探索範囲Mに達した状態において(探索値d=4)、図3の(a)〜(c)に示した注目画素nと比較する比較画素cを示している。画像処理装置1は、対象領域Tの最上行を注目行として、図3の(a)(j)に示す状態から図3の(c)(l)に示す状態に達するまで相関値算出処理を繰り返し実行することにより、探索値d=4のときの、対象領域Tの最上行についての処理を完了する。
そして、探索領域Sの移動量が探索範囲Mに達しているから、この時点で、対象領域Tの最上行についての処理は全て完了する。したがって、画像処理装置1は、探索領域Sの水平位置を初期化した上で(探索値d=0)、新たな注目行である対象領域Tの上から2行目に対して同様の処理を繰り返し実行する(不図示)。
次に、面積相関の演算手順について説明する。上述したとおり、画像処理装置1は、面積相関の演算において、基準領域Bを構成する画素毎に、当該画素に対応する比較領域Cを構成する画素との相関値を求め、画素毎に求めた相関値の全てを積算する処理を行う。
このとき、画像処理装置1は、基準領域Bを構成する各画素を、基準領域Bにおいて列方向(垂直方向)に並ぶBy個の画素から成るBx個の画素列に分け、画素列の単位で相関値を積算する。言い換えれば、基準領域Bを構成する画素の画素値と、比較領域Cにおける相対位置が当該画素の基準領域Bにおける相対位置と同じである比較領域Cを構成する画素の画素値との差分絶対値を、画素列の単位で積算する。そして、画素列の単位で積算した結果(以下では「列積算値」と表記する)の全てを積算することにより、面積相関の演算結果を得るのである。
画素列単位の列積算値を求めることの意義は、その列積算値を再利用することにある。この再利用は、上述した注目画素nおよび探索領域Sの移動手順と、面積相関の演算手順とが相俟って実現可能となる。上述したとおり、画像処理装置1は、対象領域Tにおいて注目行を構成する各画素を順次に注目画素nとして設定する毎に相関値算出処理を実行するともに、この期間中は探索領域Sの位置を動かさない。そうすると、基準領域Bおよび比較領域Cは、いずれも、注目行において注目画素nを新たに設定する毎に、同一方向に1画素ずつ移動することとなる。よって、1画素移動後の基準領域Bを構成する画素列のうち、移動方向の最前列を除くBx−1個の画素列は、1画素移動前の基準領域Bにも存在する。逆に言えば、1画素移動前の基準領域Bを構成する画素列のうち、移動方向側に位置するBx−1個の画素列は、1画素移動後の基準領域Bにも存在する。このことは比較領域Cについても同様である。
そうすると、探索領域Sの位置が変わらない期間において、1画素移動前の基準領域Bに対して求めた列積算値のうち、移動方向側に位置するBx−1個の画素列の列積算値は、1画素移動後の基準領域Bに対する相関値算出処理においては算出済みの列積算値として再利用すればよく、改めて演算しなおす必要はない。したがって、注目画素nが注目行の最左端に位置するときを除き、相関値算出処理においては、基準領域Bのうち移動方向の最前列(つまり最右列)の列積算値のみを演算すれば足りる。言い換えれば、探索領域Sの位置が変わらない期間において、画素列の各々について列積算値の算出は最初の1回のみ行い、同一の画素列の列積算値が再び必要なときは、算出済みの列積算値を再利用する。これにより、再利用しない場合と比べて、演算回数を削減することができ、処理全体の高速化を実現することができる。
以上で説明した面積相関の演算手順について、図4を参照しながら具体的に説明する。なお、図4では、Bx=Cx=5、By=Cy=3である。図4の(a)は、対象領域Tの最上行を注目行として、最左画素B8を注目画素nとして設定した状態を示している。同図において、基準領域Bの各画素列を破線枠で囲んで明示した。図4の(b)は、図4の(a)に示した注目画素nと比較する画素C8を比較画素cとして設定した状態を示している。同図において、比較領域Cの各画素列を破線枠で囲んで明示した。図4の(a)(b)の状態において、画像処理装置1は、下記に示す列積算値E1〜E5をこの順で算出する。
列積算値E1=|B1−C1|+|B2−C2|+|B3−C3|
列積算値E2=|B4−C4|+|B5−C5|+|B6−C6|
列積算値E3=|B7−C7|+|B8−C8|+|B9−C9|
列積算値E4=|B10−C10|+|B11−C11|+|B12−C12|
列積算値E5=|B13−C13|+|B14−C14|+|B15−C15|
なお、B1〜B15はそれぞれ画素B1〜画素B15の画素値を示し、C1〜C15はそれぞれ画素C1〜画素C15の画素値を示すものとする。
列積算値E2=|B4−C4|+|B5−C5|+|B6−C6|
列積算値E3=|B7−C7|+|B8−C8|+|B9−C9|
列積算値E4=|B10−C10|+|B11−C11|+|B12−C12|
列積算値E5=|B13−C13|+|B14−C14|+|B15−C15|
なお、B1〜B15はそれぞれ画素B1〜画素B15の画素値を示し、C1〜C15はそれぞれ画素C1〜画素C15の画素値を示すものとする。
次に、図4の(c)は、画素B8の右隣の画素B11を注目画素nとして新たに設定した状態を示している。画素B4〜B6から成る画素列、画素B7〜B9から成る画素列、画素B10〜B12から成る画素列、画素B13〜B15から成る画素列は、図4の(a)に示した基準領域Bにも存在する画素列である。図4の(d)は、図4の(c)に示した注目画素nと比較する画素C11を比較画素cとして設定した状態を示している。図4の(c)(d)の状態において、画像処理装置1が算出する列積算値は、下記に示す列積算値E2〜E6である。
列積算値E2=|B4−C4|+|B5−C5|+|B6−C6|
列積算値E3=|B7−C7|+|B8−C8|+|B9−C9|
列積算値E4=|B10−C10|+|B11−C11|+|B12−C12|
列積算値E5=|B13−C13|+|B14−C14|+|B15−C15|
列積算値E6=|B16−C16|+|B17−C17|+|B18−C18|
なお、B16〜B18はそれぞれ画素B16〜画素B18の画素値を示し、C16〜C18はそれぞれ画素C16〜画素C18の画素値を示すものとする。
列積算値E3=|B7−C7|+|B8−C8|+|B9−C9|
列積算値E4=|B10−C10|+|B11−C11|+|B12−C12|
列積算値E5=|B13−C13|+|B14−C14|+|B15−C15|
列積算値E6=|B16−C16|+|B17−C17|+|B18−C18|
なお、B16〜B18はそれぞれ画素B16〜画素B18の画素値を示し、C16〜C18はそれぞれ画素C16〜画素C18の画素値を示すものとする。
列積算値E2〜E5は、図4の(a)(b)に示した状態において算出済みであるから、その演算結果を保持していれば改めて演算する必要はなく、それゆえ新たに演算する必要があるのは列積算値E6のみである。
次に、図4の(e)は、画素B11の右隣の画素B14を注目画素nとして新たに設定した状態を示している。画素B7〜B9から成る画素列、画素B10〜B12から成る画素列、画素B13〜B15から成る画素列、画素B16〜B18から成る画素列は、図4の(c)に示した基準領域Bにも存在する画素列である。図4の(f)は、図4の(e)に示した注目画素nと比較する画素C14を比較画素cとして設定した状態を示している。図4の(e)(f)の状態において、画像処理装置1が算出する列積算値は、下記に示す列積算値E3〜E7である。
列積算値E3=|B7−C7|+|B8−C8|+|B9−C9|
列積算値E4=|B10−C10|+|B11−C11|+|B12−C12|
列積算値E5=|B13−C13|+|B14−C14|+|B15−C15|
列積算値E6=|B16−C16|+|B17−C17|+|B18−C18|
列積算値E7=|B19−C19|+|B20−C20|+|B21−C21|
なお、B19〜B21はそれぞれ画素B19〜画素B21の画素値を示し、C19〜C21はそれぞれ画素C19〜画素C21の画素値を示すものとする。
列積算値E4=|B10−C10|+|B11−C11|+|B12−C12|
列積算値E5=|B13−C13|+|B14−C14|+|B15−C15|
列積算値E6=|B16−C16|+|B17−C17|+|B18−C18|
列積算値E7=|B19−C19|+|B20−C20|+|B21−C21|
なお、B19〜B21はそれぞれ画素B19〜画素B21の画素値を示し、C19〜C21はそれぞれ画素C19〜画素C21の画素値を示すものとする。
列積算値E3〜E6は、図4の(c)(d)に示した状態までに算出済みであるから、その演算結果を保持していれば改めて演算する必要はなく、それゆえ新たに演算する必要があるのは列積算値E7のみである。
以上から分かるとおり、注目画素nが注目行の最左端に位置するときを除き、基準領域Bの最右列の列積算値のみを演算し、その他の列積算値については直前までの演算結果を再利用する構成とすれば、演算回数を削減することができる。
次に、上述した各手順を実現するための画像処理装置1の構成例について、図1を参照しながら説明する。同図は、画像処理装置1の構成例を示すブロック図である。画像処理装置1は、同図に示すとおり、左画像バッファー10、右画像バッファー11、左アドレス生成部20、右アドレス生成部21、減算部30、加算部32(第1加算部)、シフトレジスタ部40(保持部)、加算部50(第2加算部)、相関結果保持ラインバッファー60、比較器70、セレクタ80、セレクタ81、および、探索値保持ラインバッファー90(移動量保持部)を含んでいる。なお、特許請求の範囲の「演算部」は、左アドレス生成部20、右アドレス生成部21、減算部30、加算部32、シフトレジスタ部40、加算部50、比較器70、セレクタ80、セレクタ81を含んでいる。
左画像バッファー10は、画像処理装置1に入力される左画像Lを保持するためのバッファーである。右画像バッファー11は、画像処理装置1に入力される右画像Rを保持するためのバッファーである。
左アドレス生成部20は、基準領域Bを構成する各画素の画素値が格納されている左画像バッファー10内アドレスを生成する。右アドレス生成部21は、比較領域Cを構成する各画素の画素値が格納されている右画像バッファー11内アドレスを生成する。また、右アドレス生成部21は、探索領域Sの移動量である探索値dをセレクタ81へ出力する。なお、左アドレス生成部20および右アドレス生成部21には、左画像Lおよび右画像Rのサイズ(同図では「画像サイズ(X,Y)」と表記)、対象領域Tのサイズおよび基準位置(同図では「対象領域サイズ(X,Y)・位置」と表記)、基準領域Bおよび比較領域Cのサイズ(同図では「ウィンドウサイズ(X,Y)」と表記)、および、探索範囲Mが与えられる。なお、対象領域Tの基準位置はどのように設定してもよく、対象領域Tの中心を基準位置として設定してもよいし、対象領域Tの左上端を基準位置として設定してもよい。
減算部30は、左アドレス生成部20が生成するアドレスに従って左画像バッファー10から読み出された画素の画素値と、右アドレス生成部21が生成するアドレスに従って右画像バッファー11から読み出された画素の画素値との差分絶対値を、対応する画素毎に並列に算出する。
左アドレス生成部20、右アドレス生成部21、および減算部30が実行する処理を具体的に説明すると、まず、基準領域Bを構成するBx個の画素列の各々について、最左列からX軸方向に順番に、画素列を構成するBy個の画素の画素値を左画像バッファー10から読み出し、かつ、比較領域Cにおける相対位置が当該画素の基準領域Bにおける相対位置と同じである比較領域Cを構成する画素の画素値を右画像バッファー11から読み出す。そして、減算部30は、画素列単位で、対応する画素について読み出された画素値の差分絶対値を1クロック毎に並列に算出する(列並列)。そのために、減算部30は、2入力1出力のBy個の減算器31(不図示)を含んでいる。減算器31は、対応する画素の画素値を入力とし、その差分を出力する。
加算部32は、減算部30が算出したBy個の差分絶対値を全て積算することにより列積算値を算出する処理を、Bx個の画素列の各々について1クロック毎に順次に行う。加算部32は、By個の差分絶対値を積算するためにBy個未満の加算器33(不図示)を備えている。典型的として、加算部32は、2入力1出力の加算器33が多段に接続された構成であることが好ましい。
シフトレジスタ部40は、直列に接続されたBx個のフリップフロップ41(図1では「F」と表記している)で構成され、加算部32から出力される列積算値を各フリップフロップ41にて保持する。最前段のフリップフロップ41には加算部32の出力が入力される。最後段を除くフリップフロップ41の出力は後段のフリップフロップ41に入力される。各々のフリップフロップ41の出力は加算部50に入力される。フリップフロップ41に格納されている列積算値は、1クロック毎に、次段のフリップフロップ41へシフトされるとともに加算部50へ出力される。この構成により、シフトレジスタ部40に入力された列積算値は、Bxクロックの期間、シフトレジスタ部40に保持され続けるともに、1クロック毎に合計Bx回だけ加算部50へ出力される。
ここで、図4および図5を参照しながら、シフトレジスタ部40のフリップフロップ41に列積算値が格納される様子の一例について説明する。図4を参照しながら説明したとおり、図4の(a)および(b)に示した状態において、上述した列積算値E1〜E5がこの順で算出される(列積算値E1=|B1−C1|+|B2−C2|+|B3−C3|、列積算値E2=|B4−C4|+|B5−C5|+|B6−C6|、列積算値E3=|B7−C7|+|B8−C8|+|B9−C9|、列積算値E4=|B10−C10|+|B11−C11|+|B12−C12|、列積算値E5=|B13−C13|+|B14−C14|+|B15−C15|)。よって、列積算値E1〜E5はこの順でシフトレジスタ部40に入力され、その結果、図5の(a)に示すとおり、シフトレジスタ部40の最後段のフリップフロップ(「F4」と表記する)に列積算値E1が、その前段のフリップフロップ(「F3」と表記する)に列積算値E2が、その前段のフリップフロップ(「F2」と表記する)に列積算値E3が、その前段のフリップフロップ(「F1」と表記する)に列積算値E4が、そして、最前段のフリップフロップ(「F0」と表記する)に列積算値E5が、それぞれ保持される。
引き続き、図4の(c)(d)の状態において、上述した列積算値E6が新たに算出される(列積算値E6=|B16−C16|+|B17−C17|+|B18−C18|)。列積算値E6がシフトレジスタ部40に入力されると、フリップフロップF0に列積算値E6が保持され、列積算値E2〜E5はそれぞれ後段のフリップフロップF4〜F1にシフトされる(図5の(b)参照)。
引き続き、図4の(e)(f)の状態において、上述した列積算値E7が新たに算出される(列積算値E7=|B19−C19|+|B20−C20|+|B21−C21|)。列積算値E7がシフトレジスタ部40に入力されると、フリップフロップF0に列積算値E7が保持され、列積算値E3〜E6はそれぞれ後段のフリップフロップF4〜F1にシフトされる(図5の(c)参照)。
再び図1に戻り説明する。加算部50は、シフトレジスタ部40を構成するBx個のフリップフロップから同じタイミングで出力される列積算値の全てを1クロックで積算する(ライン並列)。加算部50は、Bx個の列積算値を積算するためにBx個未満の加算器51(不図示)を備えている。典型的として、加算部50は、2入力1出力の加算器51が多段に接続された構成であることが好ましい。加算部50による積算の結果が、注目画素nと比較画素cとの相関値である。
相関結果保持ラインバッファー60は、対象領域Tの注目行に対して相関値算出処理を実行して得られるTx個の相関値を保持するためのバッファーである。上述したとおり、同一の注目行の各画素について、探索範囲M+1回分の相関値が算出されるが、相関結果保持ラインバッファー60に最終的に保持させる相関値は、そのうちの最小値である。探索領域Sの移動量が0(探索値d=0)であるときは、注目行の各画素に対して初めて相関値を算出することになるため、加算部50から出力される相関値の全てを相関結果保持ラインバッファー60に格納する。探索領域Sの移動量が0より大きい(探索値d>0)ときは、加算部50から出力される相関値と、相関結果保持ラインバッファー60に格納されている相関値とを比較器70により比較し、それらの小さい方をセレクタ80で選択し、相関結果保持ラインバッファー60に格納する。
探索値保持ラインバッファー90は、対象領域Tの注目行の各画素に対応するTx個の探索値を保持するためのバッファーである。探索値保持ラインバッファー90に最終的に保持させる値は、対象領域Tの注目行の各画素について最小の相関値を算出した時点での探索領域Sの移動量(すなわち探索値d)である。探索領域Sの移動量が0(探索値d=0)であるときは、探索値保持ラインバッファー90には全て0を格納する。探索領域Sの移動量が0より大きい(探索値d>0)場合において、上述した比較器70による比較結果として加算部50から出力される相関値の方が小さいときは、セレクタ81によりその時点の探索値dを選択し、探索値保持ラインバッファー90に格納する。一方、相関結果保持ラインバッファー60に格納されている相関値の方が小さいときは、セレクタ81は探索値保持ラインバッファー90に格納されている探索値を選択する。探索領域Sの移動量が探索範囲Mに達した時点で最終的に探索値保持ラインバッファー90に格納されている探索値の各々が、対象領域Tの注目行についての視差情報である。
なお、セレクタ81には、画像の1ライン目のときにH(High)となり、1ライン目以外のときにL(Low)となる制御信号FIRSTLINEが入力されている。セレクタ80にもセレクタ81を経由して制御信号FIRSTLINEが入力されている。制御信号FIRSTがHのときセレクタ80および81は選択動作を行わず、Lのときセレクタ80および81は選択動作を行う。
次に、上述した構成例の画像処理装置1が実行するステレオマッチング処理の流れの一例を、図6を参照しながら説明する。図6は、ステレオマッチング処理の流れの一例を示すフローチャートである。
まず最初に、探索領域Sの位置を初期位置に設定し、探索値dを0に初期化する(ステップS1)。そして、注目画素nの位置を初期化する(ステップS2)。具体的には、対象領域Tにおける注目行の最左画素を注目画素nとして設定するとともに、注目画素nに対応する探索領域Sの画素を比較画素cとして設定する。そして、注目画素nと比較画素cとの相関値算出処理を実行する(ステップS3)。ステップS3の詳細については図7を参照しながら別途説明する。
そして、現在の注目画素nが注目行の最右画素でなければ(ステップS4にてNO)、注目画素nの位置を水平右方向(X軸方向)に1画素だけ移動させる(ステップS5)。その後、ステップS3へ戻る。
一方、現在の注目画素nが注目行の最右画素であれば(ステップS4にてYES)、探索領域Sの移動量が探索範囲Mであるか否かを判定する(ステップS6)。探索領域Sの移動量が探索範囲Mでなければ(ステップS6にてNO)、探索領域Sの位置を水平左方向に1画素だけ移動させる(探索値dの値を1つ増やす)(ステップS7)。その後、ステップS2へ戻る。
探索領域Sの移動量が探索範囲Mであれば(ステップS6にてYES)、注目行が対象領域Tの最下行であるか否かを判定する(ステップS8)。注目行が対象領域Tの最下行でなければ(ステップS8にてNO)、注目行をY軸方向に1画素だけ移動させる(ステップS9)。その後、ステップS1へ戻る。
一方、注目行が対象領域Tの最下行であれば(ステップS8にてYES)、ステレオマッチング処理を終了する。
なお、ステップS3は、左画像バッファー10から読み出された画素の画素値と、右アドレス生成部21が生成するアドレスに従って右画像バッファー11から読み出された画素の画素値とを用いて、減算部30、加算部32、シフトレジスタ部40、および加算部50が実行する処理であり、ステップS3以外は、左アドレス生成部20および右アドレス生成部21が実行する処理である。
次に、図7を参照しながら、図6に示した相関値算出処理(ステップS3)について具体的に説明する。まず、減算部30にて、基準領域Bを構成するBx個の画素列のうち、処理対象とする画素列と、対応する比較領域Cの画素列との間で、画素列を構成するBy個の画素同士の画素値の差分絶対値を算出する(ステップS31)。具体的には、基準領域Bにおける処理対象の画素列を構成する画素の画素値と、比較領域Cにおける相対位置が当該画素の基準領域Bにおける相対位置と同じである比較領域Cを構成する画素の画素値との差分絶対値を算出する。
そして、加算部32にて、ステップS31にて算出されたBy個の差分絶対値を全て積算することにより、列積算値を算出する(ステップS32)。
そして、基準領域Bにおける全ての画素列に対して処理し終えるまで(ステップS33にてNO)、ステップS31〜S32を繰り返し実行する。画素列毎に算出された列積算値は、シフトレジスタ部40にて保持する。
そして、シフトレジスタ部40において、基準領域Bの全ての画素列の列積算値が揃う毎に(ステップS33にてYES)、加算部50にて列積算値を積算することにより、相関値を算出する(ステップS34)。
そして、探索領域Sの移動量が0(探索値d=0)であるか、または、加算部50にて算出した相関値が相関結果保持ラインバッファー60に格納されている相関値より小さいとき(ステップS35にてYES)、加算部50にて算出した相関値を相関結果保持ラインバッファー60へ格納し(ステップS36)、その時点の探索値dを探索値保持ラインバッファー90へ格納する(ステップS37)。
次に、画像処理装置1により面積相関の演算結果を再利用し、演算の回数および演算器の個数を削減できることについて説明する。そのために、まず、比較対象として、画像処理装置1の特徴として説明した演算結果の再利用をいっさい行わずに全ての対象領域Tの全画素について面積相関を演算する例について説明する。対象領域TがTx=Ty=64であり、基準領域BがBx=By=32であり、探索範囲M=64であるものとすると、基準領域B内の全画素分の差分絶対値を算出し、算出された全ての差分絶対値を積算して相関値を算出するのに必要な加減算回数は、(加算1回+減算1回)×Bx×By=2×32×32=2048である。この加減算を、対象領域T内の1つの画素について探索領域Sを探索範囲M内で移動させる毎に実行する処理を、対象領域Tの全画素について実行すると、その総演算回数は、(加算1回+減算1回)×Bx×By×Tx×Ty×M=2×32×32×64×64×64≒5億3600万回となる。
一方、画像処理装置1では、減算部30は2入力1出力のBy(=32)個の減算器31で構成される。また、加算部32は、Bx(=32)個の値を積算するための2入力1出力の加算器33が多段に接続される構成であるとすれば、16+8+4+2+1=31個の加算器33で構成される。また、加算部50は、Bx(=32)個の列積算値を積算するための2入力1出力の加算器51が多段に接続される構成とすれば、16+8+4+2+1=31個の加算器51で構成される。よって、画像処理装置1では、基準領域B内の全画素分の差分絶対値を算出し、算出された全ての差分絶対値を積算して相関値を算出するのに必要な加減算器は、32+31+31=94個となる。したがって、画像処理装置1にて、対象領域T内の1つの画素について探索領域Sを探索範囲M内で移動させる毎に実行する処理を対象領域Tの全画素について実行すると、その総演算回数は、94×Tx×Ty×M=94×64×64×64≒2460万回である。
以上のとおり、この例では、面積相関の演算結果を再利用しない場合に必要となる2048回の加減算を、画像処理装置1では94個の加減算器で実現できる。また、面積相関の演算結果を再利用しない場合に総演算回数が5億3600万回となるところ、画像処理装置1では総演算回数が2460万回に大幅に削減される。このように、画像処理装置1によればステレオマッチング処理の高速化を実現することが可能となるのである。
最後に、画像処理装置1の各ブロック(ただし、バッファーを除く)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェアによって実現してもよい。CPUを用いて実現する場合、画像処理装置1は、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、上記プログラムおよび各種データがコンピュータ(またはCPU)で読み取り可能に記録されたROMまたは記憶装置(これらを「記録媒体」と称する)、上記プログラムを展開するRAM(Random Access Memory)などを備えている。そして、コンピュータ(またはCPU)が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
本発明は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
1 画像処理装置、20 左アドレス生成部(演算部の一部)、21 右アドレス生成部(演算部の一部)、30 減算部(演算部の一部)、31 減算器、32 加算部(演算部の一部、第1加算部)、33 加算器、40 シフトレジスタ部(演算部の一部)、41 フリップフロップ、50 加算部(演算部の一部、第2加算部)、51 加算器、60 相関結果保持ラインバッファー、90 探索値保持ラインバッファー(移動量保持部)、n 注目画素、c 比較画素、d 探索値、L 左画像(基準画像)、R 右画像(比較画像)、B 基準領域、C 比較領域、T 対象領域、S 探索領域、M 探索範囲
Claims (5)
- 基準画像に設けられた対象領域に設定された注目画素と、比較画像に設けられた上記対象領域と同形同大の探索領域における相対位置が上記対象領域における上記注目画素の相対位置と同じである比較画素との相関値を算出する相関値算出処理を、上記注目画素が設定された行の水平方向に並ぶ画素の各々を順次に上記注目画素として設定する毎に実行することを処理単位として、上記探索領域を初期位置から水平方向へ所定量ずつ移動させる毎に上記処理単位を繰り返し実行する演算部を備え、
上記演算部は、同一の上記注目画素に対して算出される上記相関値のうちの最小値が算出されたときの、上記探索領域の上記初期位置からの移動量を、上記注目画素毎に保持する移動量保持部を備え、
上記相関値算出処理は、
上記基準画像における、上記注目画素を中心とする基準領域において垂直方向に並ぶ画素から成る画素列の各々について、上記画素列を構成する第1画素の画素値と、上記比較画像における、上記基準領域と同形同大の、上記比較画素を中心とする比較領域を構成する、上記比較領域における相対位置が上記基準領域における上記第1画素の相対位置と同じである第2画素の画素値との差分の絶対値を、上記画素列を構成する全ての画素について算出し、該算出した差分の絶対値を上記画素列毎に積算した列積算値を算出し、
上記画素列毎の上記列積算値を全て積算することにより上記相関値を算出する処理であることを特徴とする画像処理装置。 - 上記相関値算出処理では、
同一の上記画素列についての上記列積算値の算出を、1回の上記処理単位において1回のみ行うとともに、上記画素列毎に算出された上記列積算値を算出された順に、直列に接続された複数のフリップフロップの最前段に入力し、
上記基準領域における全ての上記画素列の、上記複数のフリップフロップの各々に保持された上記列積算値を積算して上記相関値を算出することを特徴とする請求項1に記載の画像処理装置。 - 上記基準領域は、水平方向の画素数がX(Xは正の整数)、かつ、垂直方向の画素数がY(Yは正の整数)の四角形状であり、
上記演算部は、
上記画素列の単位でY個の上記差分を算出するためのY個の減算器を含む減算部と、
上記画素列毎にY個の上記差分の絶対値から上記列積算値を算出するためのY個未満の加算器を含む第1加算部と、
X個の上記列積算値を積算するためのX個未満の加算器を含む第2加算部とを含むことを特徴とする請求項1または2に記載の画像処理装置。 - 上記演算部は、さらに、
上記探索領域の水平方向の移動量が上限に達する毎に、上記注目画素が設定される行を垂直方向にずらすとともに、上記探索領域の水平位置を上記初期位置に戻した上で、
上記探索領域を上記初期位置から水平方向へ所定量ずつ移動させる毎に上記処理単位を繰り返し実行することを特徴とする請求項1から3のいずれか1項に記載の画像処理装置。 - 基準画像に設けられた対象領域に設定された注目画素と、比較画像に設けられた上記対象領域と同形同大の探索領域における相対位置が上記対象領域における上記注目画素の相対位置と同じである比較画素との相関値を算出する相関値算出処理を、上記注目画素が設定された行の水平方向に並ぶ画素の各々を順次に上記注目画素として設定する毎に実行することを処理単位として、上記探索領域を初期位置から水平方向へ所定量ずつ移動させる毎に上記処理単位を繰り返し実行する演算ステップを含み、
上記演算ステップは、同一の上記注目画素に対して算出される上記相関値のうちの最小値が算出されたときの、上記探索領域の上記初期位置からの移動量を、上記注目画素毎に保持する保持ステップをさらに含み、
上記相関値算出処理は、
上記基準画像における、上記注目画素を中心とする基準領域において垂直方向に並ぶ画素から成る画素列の各々について、上記画素列を構成する第1画素の画素値と、上記比較画像における、上記基準領域と同形同大の、上記比較画素を中心とする比較領域を構成する、上記比較領域における相対位置が上記基準領域における上記第1画素の相対位置と同じである第2画素の画素値との差分の絶対値を、上記画素列を構成する全ての画素について算出し、該算出した差分の絶対値を上記画素列毎に積算した列積算値を算出し、
上記画素列毎の上記列積算値を全て積算することにより上記相関値を算出する処理であることを特徴とする画像処理装置の制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016158513A JP2018026032A (ja) | 2016-08-12 | 2016-08-12 | 画像処理装置、および画像処理装置の制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016158513A JP2018026032A (ja) | 2016-08-12 | 2016-08-12 | 画像処理装置、および画像処理装置の制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018026032A true JP2018026032A (ja) | 2018-02-15 |
Family
ID=61194581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016158513A Pending JP2018026032A (ja) | 2016-08-12 | 2016-08-12 | 画像処理装置、および画像処理装置の制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2018026032A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022107530A1 (ja) * | 2020-11-20 | 2022-05-27 | ソニーグループ株式会社 | 信号処理装置と信号処理方法およびプログラム |
-
2016
- 2016-08-12 JP JP2016158513A patent/JP2018026032A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022107530A1 (ja) * | 2020-11-20 | 2022-05-27 | ソニーグループ株式会社 | 信号処理装置と信号処理方法およびプログラム |
JP2022081926A (ja) * | 2020-11-20 | 2022-06-01 | ソニーグループ株式会社 | 信号処理装置と信号処理方法およびプログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102281017B1 (ko) | 이미지 처리를 위한 신경망 모델 훈련 방법, 장치 및 저장 매체 | |
US11341750B2 (en) | Quasi-parametric optical flow estimation | |
EP2811457B1 (en) | Image processing method and apparatus | |
TWI398158B (zh) | 產生立體影像之影像深度的方法 | |
CN112633470B (zh) | 优化神经网络卷积残差结构的方法、系统、设备及介质 | |
US8948502B2 (en) | Image processing method, and image processor | |
KR20150114950A (ko) | 이미지 스트림의 프레임 레이트 증가 | |
JP2023541350A (ja) | 表畳み込みおよびアクセラレーション | |
JP2016122444A (ja) | 焦点スタックから適応スライス画像を生成する方法および装置 | |
JP2017537396A (ja) | 非集束型プレノプティックデータの深度を推定する方法および装置 | |
JP6567381B2 (ja) | 演算装置、方法及びプログラム | |
CN102257829A (zh) | 立体影像显示装置及运动矢量导出方法 | |
CN113962864A (zh) | 图像拼接方法、装置、存储介质及电子装置 | |
JP6212021B2 (ja) | 距離検出装置 | |
JP2018026032A (ja) | 画像処理装置、および画像処理装置の制御方法 | |
US10949988B2 (en) | Information processing apparatus, information processing method, and program | |
JP2019020839A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
CN111161289B (zh) | 图像中物体轮廓精度提升方法、装置 | |
Kalomiros et al. | Design and hardware implementation of a stereo-matching system based on dynamic programming | |
WO2019000300A1 (zh) | 二维数据匹配方法、装置和逻辑电路 | |
JP6730804B2 (ja) | 画像処理装置および画像処理方法 | |
JP2018132946A (ja) | 視差算出装置 | |
JP6730214B2 (ja) | 視差演算装置 | |
WO2024034449A1 (ja) | 情報処理装置、及び情報処理方法 | |
WO2024066829A1 (zh) | 特征图处理方法及装置、计算机可读存储介质 |