以下に添付図面を参照して、この発明に係る対応点探索手法の好適な実施例を詳細に説明する。なお、以下では、本発明に係る対応点探索手法を適用した対応点探索装置が、文字画像を探索対象とする場合について説明するが、文字画像と同様に、同じ対象を撮像しても異なる内容となる可能性がある画像、たとえば、顔画像や掌画像などの生体画像を探索対象とすることも可能である。
また、以下では、本発明に係る対応点探索手法の概要について図1および図2を用いて説明した後に、本発明に係る対応点探索手法を適用した対応点探索装置についての実施例を図3以降の各図を用いて説明することとする。
まず、本発明に係る対応点探索手法の概要について説明する。図1は、本発明に係る対応点探索手法の概要を示す図である。同図に示すように、本発明に係る対応点探索手法は、参照画像におけるサンプル点の間隔(以下、「サンプル間隔」と記載する)を、徐々に狭めつつ、対応点の探索を行っていく(階層化探索)。なお、同図の(1a)、(2a)および(3a)に示す格子(メッシュ)の交点がサンプル点を指す。
従来、参照画像におけるサンプル点に対応する対応点を入力画像内で探索する場合、かかる対応点の探索は画素単位で行われていた。たとえば、探索された対応点の座標が、(1.4,2.5)であれば、かかる座標を四捨五入し、(1,3)と決定していた。しかし、このように対応点の最小単位を画素としてしまうと、階層化探索を行った場合に、誤差の累積によって探索精度が悪化してしまうという問題があった。
また、階層化探索を行わない場合であっても、サンプル間隔を狭くしすぎると、対応点の変形の自由度が大きくなりすぎて正確な対応点を求めることができないという問題もあった。具体的には、いきなり狭いサンプル間隔で、対応点を求めようとすると、サンプル点から大きくずれる対応点が多数検出されてしまうので、本来は隣り合う対応点が滑らかに変形するはずであるのに、変形の滑らかさを担保することができない。
そこで、本発明に係る対応点探索手法では、拘束条件を付加した更新式(以下、「拘束条件付更新式」と記載する)を用いることによって、密なサンプル点を設定した場合、すなわち、サンプル間隔を狭くした場合であっても、対応点の変形の自由度を制限することとした。したがって、密なサンプル点に対しても、対応点の滑らかな変形を担保することができる。
また、本発明に係る対応点探索手法では、対応点の座標を、画素単位ではなく、画素単位よりも小さい「サブピクセル単位」で求めることとした。これにより、上記した階層化探索を行う場合であっても誤差の累積を減少させることができるので、対応点の探索精度を向上させることができる。
具体的には、本発明に係る対応点探索手法では、所定のサンプル間隔で対応点の探索を開始する(同図の(0)参照)。なお、同図では、最初のサンプル間隔に対応する階層化レベルをレベル1、レベル1よりもサンプル間隔を狭めた階層化レベルをレベル2というようにあらわしている。
レベル1では、最初のサンプル間隔のサンプル点を参照画像上に設定し、かかるサンプル点にそれぞれ対応する対応点を入力画像上で探索する処理を行う。ここで、対応点は、サブピクセル単位で検出される(同図の(1a)参照)。また、対応点の探索には、上記した拘束条件付更新式を用いる。
そして、サンプル間隔を狭めたうえで(同図の(1b)参照)、レベル2へと移行する。そして、レベル2では、レベル1よりも狭められたサンプル間隔で対応点を探索する処理を行う。ここでも、対応点は、サブピクセル単位で検出され(同図の(2a)参照)、対応点の探索には、上記した拘束条件付更新式を用いる。
つづいて、さらにサンプル間隔を狭めたうえで(同図の(2b)参照)、レベル3へと移行し、レベル3では、レベル2よりも狭められたサンプル間隔で対応点を探索する処理を行う。ここでも、対応点は、サブピクセル単位で検出され(同図の(3a)参照)、対応点の探索には、上記した拘束条件付更新式を用いる。
このように、各階層化レベルにおいて、対応点をサブピクセル単位で検出することで、階層化レベルが深まった場合であっても、検出誤差の累積を減少させることができる。また、拘束条件付更新式を用いることで、階層化レベルを問わず滑らかな変形を反映した対応点を得ることができる。したがって、本発明に係る対応点探索手法によれば、誤差の発生を抑制して階層的な探索を可能ならしめることで探索速度を向上することができるとともに、密な対応点を高精度に得ることができる。
なお、階層化探索を行う場合には、最終的には、サンプル間隔が画素単位(1ピクセル)となるまで、すなわち、対応点を画素単位(1ピクセル)で検出するまで、任意数のレベルを設けることができる。また、必ずしもサンプル間隔が画素単位となるまで階層化探索を繰り返す必要性はなく、直前の階層化レベルと最新の階層化レベルとの間で対応点の変化量が所定値よりも小さければ、階層化探索を打ち切ることとしてもよい。
図2は、シリアルアップデート法およびパラレルアップデート法に対する本発明の適用例を示す図である。なお、同図の(A)には、シリアルアップデート方法に対する本発明の適用例を、同図の(B)には、パラレルアップデート法に対する本発明の適用例を、それぞれ示している。なお、シリアルアップデート法の詳細については図8〜図25を用いて、パラレルアップデート法の詳細については図26〜図34を用いて、それぞれ後述することとする。
図2の(A)に示すように、シリアルアップデート法では、類似度画像全体C(m,n,u,v)について、同図に示す4方向(j方向、−j方向、i方向、−i方向)の更新処理を行う。かかるシリアルアップデート法に、本発明を適用する場合には、各更新処理を、本発明に係る拘束条件付更新式を用いて行うこととすればよい。
また、図2の(B)に示すように、パラレルアップデート法では、類似度画像全体C(m,n,u,v)を4枚複写し、これらをそれぞれD1(m,n,u,v)、D2(m,n,u,v)、D3(m,n,u,v)、D4(m,n,u,v)とし、それぞれj方向、−j方向、i方向、−i方向の累積加算に使用する。かかるパラレルアップデート法に、本発明を適用する場合には、D1(m,n,u,v)〜D4(m,n,u,v)の更新処理を、本発明に係る拘束条件付更新式を用いて行うこととすればよい。
図3は、本実施例に係る対応点探索装置10の構成を示すブロック図である。同図に示すように、対応点探索装置10は、画像入力部11と、階層化情報記憶部12と、階層化処理部13と、収束判定部14と対応点探索部20とを備えている。
画像入力部11は、入力画像および参照画像を入力する入力部である。具体的には、光学的に画像を取得するスキャナや、ネットワークから画像を取得するインタフェース部や、二次記憶装置から画像を読み出す読み出し部が該当する。
ここで、入力画像は、対応点の探索対象となる画像であり、歪みや変形を伴うものであってもよい。これに対し、参照画像は、入力画像の比較対象となる画像であり、歪みや変形を伴わないものであることが望ましい。なお、画像入力部11は、受け付けた入力画像および参照画像を対応点探索部20へ渡す処理を併せて行う。
階層化情報記憶部12は、図1に示した各階層化レベル(レベル1、レベル2など)と、各階層化レベルで用いるサンプル間隔とを対応付けた情報である階層化情報を記憶する記憶部である。たとえば、階層化情報には、レベル1のサンプル間隔が10画素、レベル2のサンプル間隔が8画素、最終レベルのサンプル間隔が1画素である旨を予め定義する。なお、階層化情報記憶部12は、ハードディスクドライブや不揮発性メモリといった記憶デバイスで構成することができる。
階層化処理部13は、階層化情報記憶部12から読み出した階層化情報に基づき、サンプル間隔を徐々に狭めながら対応点の階層化探索を制御する処理を行う処理部である。具体的には、この階層化処理部13は、レベル1のサンプル間隔で、対応点の探索を行うように対応点探索部20を指示するとともに、対応点探索部20によって探索された対応点(レベル1)の変形(サンプル点からのずれ量)を補正した変形補正画像(レベル1)を生成する。
そして、レベル2のサンプル間隔で、変形補正画像(レベル1)から対応点を探索するように対応点探索部20に指示するとともに、対応点探索部20によって探索された変形補正画像(レベル1)上の対応点(レベル2)と、先に探索されている対応点(レベル1)とを合成することで、入力画像上の対応点(レベル2)を生成する。
つづいて、同様の処理をレベル3、レベル4等について繰り返していくことで、対応点の探索単位を徐々に小さくしていき、最終的には、対応点の探索単位が画素(1ピクセル)になるまで階層化探索を繰り返していく。
ここで、階層化処理部13が行う処理の概要について図4および図5を用いて説明しておく。図4は、階層化レベル1から階層化レベル2への階層化処理の概要を示す図であり、図5は、階層化レベル2から階層化レベル3への階層化処理の概要を示す図である。なお、以下の説明では、階層化レベル1、階層化レベル2などを、単に、レベル1、レベル2などと記載することとする。
まず、レベル1からレベル2への階層化処理について図4を用いて説明する。図4に示したように、レベル1では、レベル1に対応付けられたサンプル間隔で参照画像上にサンプル点を設定し、サンプル点が設定された参照画像と入力画像との対応付けを行う(図4の(1)参照)。そして、対応点探索部20によって対応点探索が行われ(図4の(2)参照)、入力画像上のレベル1における対応点である対応点(レベル1)を得る。
また、レベル1では、対応点(レベル1)の変形(サンプル点からのずれ量)を補正した変形補正画像(レベル1)を生成する(図4の(3)参照)。なお、後述するように、この変形補正画像(レベル1)は、レベル2において参照画像の対応付け対象となる。
レベル2では、レベル1に対応付けられたサンプル間隔で参照画像上にサンプル点を設定し、サンプル点が設定された参照画像と、先に生成された変形補正画像(レベル1)との対応付けを行う(図4の(4)参照)。そして、対応点探索部20によって対応点探索が行われ(図4の(5)参照)、変形補正画像(レベル1)上のレベル2における対応点である「変形補正画像(レベル1)上の対応点(レベル2)」を得る。
つづいて、階層化処理部13は、レベル1で得た「入力画像上の対応点(レベル1)」と、レベル2で得た「変形補正画像(レベル1)上の対応点(レベル2)」とを合成する(図4の(6)参照)。具体的には、階層化処理部13は、「入力画像上の対応点(レベル1)」および「変形補正画像(レベル1)上の対応点(レベル2)」を、それぞれ画素(1ピクセル)単位で補間したうえで、両者を足し合わせる。なお、補間処理には、線形補間や非線形補間に関する一般的な補間手法を用いることができる。
このような合成を行うことで、レベル2における「入力画像上の対応点(レベル2)」が得られるので、入力画像へ適用し(図4の(7)参照)、変形補正を行うことで(図4の(8)参照)、変形補正画像(レベル2)を生成する。
なお、変形補正画像(レベル1)を変形補正して変形補正画像(レベル2)を生成することも可能である。しかし、変形補正時に画像に対する補間処理が行われるので、補間処理に伴う誤差の累積によって画像が少しずつぼやけていき、対応点の検出を高精度に行うことが難しくなる。このため、上述のように、入力画像上の対応点(レベル2)を得たうえで、この対応点(レベル2)を入力画像へ適用して変形補正画像(レベル2)を生成することが好ましい。
次に、レベル2からレベル3への階層化処理について図5を用いて説明する。なお、説明の都合上、図4の下段に示したレベル2の処理を、図5の上段に再度記載しているが、実際には、レベル2おける処理は、1回のみ行うこととすればよい。
図5に示したように、レベル2では、レベル2に対応付けられたサンプル間隔で参照画像上にサンプル点を設定し、サンプル点が設定された参照画像と変形補正画像(レベル1)との対応付けを行う(図5の(1)参照)。そして、対応点探索部20によって対応点探索が行われ、上述した「入力画像上の対応点(レベル2)」を対応点合成の対象として使用することとする(図5の(2)参照)。
また、レベル2では、「入力画像上の対応点(レベル2)」の変形を補正した変形補正画像(レベル2)を生成する(図5の(3)参照)。なお、後述するように、この変形補正画像(レベル2)は、レベル3において参照画像の対応付け対象となる。
レベル3では、レベル3に対応付けられたサンプル間隔で参照画像上にサンプル点を設定し、サンプル点が設定された参照画像と、先に生成された変形補正画像(レベル2)との対応付けを行う(図5の(4)参照)。そして、対応点探索部20によって対応点探索が行われ(図5の(5)参照)、変形補正画像(レベル2)上のレベル3における対応点である「変形補正画像(レベル2)上の対応点(レベル3)」を得る。
つづいて、階層化処理部13は、レベル2で得た「入力画像上の対応点(レベル2)」と、レベル3で得た「変形補正画像(レベル2)上の対応点(レベル3)」とを合成する(図5の(6)参照)。このようにして、レベル3における「入力画像上の対応点(レベル3)」が得られるので、入力画像へ適用し(図5の(7)参照)、変形補正を行うことで(図5の(8)参照)、変形補正画像(レベル3)を生成する。以下、図5に示した処理を、レベル4、レベル5のように繰り返していくことになる。
図3の説明に戻り、収束判定部14について説明する。収束判定部14は、階層化処理部13経由で受け取った対応点探索部20からの対応点の収束状況を判定し、異なるレベル間における対応点の変化量が所定の閾値を下回った場合に、階層化処理を打ち切る判定を行う処理部である。なお、収束判定部14は、階層化情報記憶部12の階層化情報における最大レベルに達した際にも階層化処理を打ち切る判定を行うものとする。
対応点探索部20は、階層化処理部13から指示されたサンプル間隔で対応点の探索を行うとともに、探索した対応点を階層化処理部13へ通知する処理を行う処理部である。また、この対応点探索部20は、上記した「拘束条件付更新式」を用いて対応点を探索するとともに、対応点の座標を、画素単位ではなく、画素単位よりも小さい「サブピクセル単位」で求める。
次に、対応点探索部20によって行われるサブピクセル位置算出処理の例について図6を用いて説明する。図6は、サブピクセル位置算出処理の一例を示す図である。対応点探索部20は、初期の類似度画像群に対して再帰的な更新による弛緩処理を行うことで類似度画像群を収束させる。このようにして得られた収束後の類似度画像群を構成する各類似度画像において、各画素の画素値は、類似度(R)をあらわしている。
たとえば、同図に示した「1つの類似度画像」の中で、最大の類似度(R)をもつ画素である対応点と、対応点の各周辺画素とを抜き出すと、同図に示すように、3画素×3画素の9つの画素が得られる。ここで、対応点および対応点の4近傍の画素位置は、ピクセル単位であれば同図に「×」で示した位置となる。
ここで、対応点の画素位置を(x,y)をとし、かかる画素の4近傍の画素位置を、それぞれ、(x−1,y)、(x+1,y)、(x,y−1)、(x,y+1)とする。そして、各画素の類似度をR(x,y)とすると、対応点のサブピクセル単位の位置(x’,y’)をパラボラフィッティングによって求めると、
x’=(R(x−1,y)−R(x+1,y))/
(2R(x−1,y)−4R(x,y)+2R(x+1,y))
y’=(R(x,y−1)−R(x,y+1))/
(2R(x,y−1)−4R(x,y)+2R(x,y+1))
となる。なお、パラボラフィッティングの代わりにスプライン補間などの他の補間手法を用いることとしてもよい。
たとえば、同図に示したように、R(x,y)=100、R(x−1,y)=85、R(x+1,y)=60、R(x,y−1)=80、R(x,y+1)=90の場合には、対応点のサブピクセル単位の位置(x’,y’)は、(0.2272・・・,0.1666・・・)と算出される。なお、小数点以下何桁までを有効とするかは任意に定めることができる。
このように、対応点探索部20は、対応点の座標を、画素単位ではなく、画素単位よりも小さい「サブピクセル単位」で求める。これにより、階層化処理部13の指示によって階層化探索がなされた場合であっても、検索誤差の累積を抑制することができる。
次に、対応点探索装置10が実行する処理手順について図7を用いて説明する。図7は、対応点探索装置10が実行する処理手順を示すフローチャートである。なお、同図では、レベル(階層化レベル)を変数Lであらわし、レベルLに対応するサンプル間隔などをサンプル間隔(L)のように記載している。
図7に示したように、階層化処理部13は、レベルを1(L=1)とし(ステップS101)、階層化情報記憶部12から取得したサンプル間隔(L)をセットする(ステップS102)。そして、レベルが1(L=1)であるか否かを判定し(ステップS103)、レベルが1の場合には(ステップS103,Yes)、対応点探索部20は、参照画像と入力画像とをサンプル間隔(L)で対応付ける(ステップS104)。
つづいて、入力画像上の対応点(L)をサブピクセル単位で決定し(ステップS105)、入力画像上の対応点(L)を変形補正して変形補正画像(L)を生成する(ステップS106)。
次に、階層化処理部13は、サンプル間隔(L+1)をセットし(ステップS107)、対応点探索部20は、参照画像と変形補正画像(L)とをサンプル間隔(L+1)で対応付ける(ステップS108)。そして、変形補正画像(L)上の対応点(L+1)をサブピクセル単位で決定する(ステップS109)。
つづいて、入力画像上の対応点(L)と、変形補正画像(L)上の対応点(L+1)とを合成して入力画像上の対応点(L+1)を生成し(ステップS110)、入力画像上の対応点(L+1)を変形補正して変形補正画像(L+1)を生成する(ステップS111)。
そして、収束判定部14は、直前のレベルにおける対応点と、最新のレベルにおける対応点との間の変形が収束したか否かを判定し(ステップS112)、変形が収束した場合には(ステップS112,Yes)、処理を終了する。一方、ステップS112の判定条件を満たさなかった場合には(ステップS112,No)、レベルLをインクリメントしたうえで(ステップS113)、ステップS102以降の処理を繰り返す。
ここで、2回目以降にステップS103の判定を行う場合には、Lが2以上となってステップS103の判定条件を満たさないので(ステップS103,No)、ステップS104〜ステップS106の処理を行うことなく、ステップS107以降の処理を行うことになる。
なお、図7では、ステップS112において変形が収束したか否かを階層化探索の打ち切り条件とする場合について示したが、サンプル間隔が画素単位となるまで階層化探索を繰り返すこととしてもよい。
次に、図3に示した対応点探索部20の構成およびその動作について、さらに詳細に説明する。なお、以下では、上記した「シリアルアップデート法」を行う対応点探索部20(対応点探索部20a)について図8〜図25を用いて説明し、「パラレルアップデート法」を行う対応点探索部20(対応点探索部20b)について図26〜図34を用いて説明することとする。
まず、「シリアルアップデート法」を行う対応点探索部20aについて説明する。図8は、対応点探索部20aの構成を示すブロック図である。同図に示す対応点探索部20aは、(1)入力画像を分割した入力部分画像と参照画像を分割した参照部分画像との間の類似度を示す類似度画像を作成する類似度画像作成段階と、(2)複数の類似度画像を累積加算した結果に基づいて最適な対応点を決定する対応点決定段階とからなる。
具体的には、(1)類似度画像作成段階では、たとえば、7×7画素のサイズからなる参照部分画像を21×21画素のサイズからなる入力部分画像内を移動させつつ両画像間の相関値を順次求め、求めた相関値を画素値としてもつ類似度画像を作成する。このため、作成した類似度画像は、参照部分画像上の中心点が入力部分画像上の点にどの程度類似しているかを示すことになる。
次に、(2)対応点決定段階では、各類似度画像の画素値を垂直方向および水平方向について再帰的な累積加算を繰り返しながら各類似度画像を更新し、各類似度画像を形成する画素のうち最大の画素値をもつ画素の位置を求め、求めた位置を入力部分画像上での対応点として決定する。
このように、この対応点探索部20aによれば、従来よりも大局的な最適化を行っているためローカルミニマム(局所解)に陥り難くなり、また、累積加算を繰り返す最適化の微調整によって対応付けの精度が高くなり、さらに、並列分散処理が可能になるのでハードウェア化が容易となる。
次に、対応点探索部20aの構成について説明する。なお、ここでは参照画像、入力画像の順に画像を入力する場合を示すこととする。図8に示すように、対応点探索部20aは、画像入力部20aaと、分割処理部20abと、参照部分画像一時記憶部20acと、類似度画像作成部20adと、累積加算処理部20aeと、対応点決定部20afとを備えている。
画像入力部20aaは、対応点探索装置20から、縦横のサイズI、Jからなる参照画像I0(i,j)(0≦i≦I−1,0≦j≦J−1)および入力画像I1(i,j)を受け付ける。
図9には参照画像21を示しており、図10には入力画像22を示している。ここでは、説明を簡単にするために、参照画像21および入力画像22としてアルファベット「a」の32×32画素からなる文字画像を用いて説明する。
分割処理部20abは、画像入力部20aaによって入力された入力画像および参照画像を入力部分画像および参照部分画像にそれぞれ分割する処理部である。ただし、入力画像の分割手順と参照画像の分割手順とはそれぞれ異なる。
参照画像を分割する場合には、参照画像上で縦方向にM個、横方向にN個サンプリングした点(pm,qn)(0≦m≦M−1,0≦n≦N−1)を中心とした参照部分画像を作成する。図11は、図9に示した参照画像21の分割結果の一例を示す図であり、図11に示すように、ここでは32×32画素の参照画像21を7×7画素からなる25個の参照部分画像に分割している。具体的には、pm=I/M、qn=J/Nであり、小数点以下についても所定の桁数を保持する。
入力画像を分割する場合には、参照画像を分割する場合とは異なり、各入力部分画像の一部が重なり合う重複したデータをもつように分割する。図12は、図10に示した入力画像22の分割結果の一例を示す図であり、同図に示すように、ここでは32×32画素の入力画像22を21×21画素からなる25個の入力部分画像に分割している。
参照部分画像一時記憶部20acは、分割処理部20abで分割した各参照部分画像を一時記憶する記憶部であり、類似度画像作成部20adが類似度画像を作成する際に、該当する参照部分画像が取り出される。
類似度画像作成部20adは、入力部分画像と参照部分画像との間の変形を考慮した類似度を算定し、算定した類似度を画素値としてもつ類似度画像C(m,n,u,v)(0≦m≦M−1,0≦n≦N−1,0≦u≦U−1,0≦v≦V−1)を作成する処理部である。ただし、U、Vは、それぞれ類似度画像の縦横のサイズであるものとする。この類似度としては、たとえば、正規化相関係数(σfg/(σf・σg))を用いることができる。
図13は、参照部分画像および入力部分画像から類似度画像を作成する概念を示す図である。なお、ここでは、図11および図12の2行2列に位置する入力部分画像および参照部分画像を用いることとする。
同図に示す入力部分画像51と参照部分画像52との間の類似度を求める場合には、参照部分画像52の中心画素を入力部分画像51の左上部の画素に対応付けて正規化相関係数を計算し、計算結果を類似度画像53の左上部の画素の画素値とする。その後、参照部分画像52を右へずらし、同様の処理を行う。上記処理を参照部分画像52をずらしながら入力部分画像51の全画素について行うことによって類似度画像53が求められる。
かかる類似度画像の作成処理を入力部分画像ごとに行うと、図14に示すような複数の類似度画像が得られる。なお、参照部分画像の全ての画素の画素値が一定値である場合には、正規化相関係数の分母がゼロとなるため、この場合の類似度画像の画素値もゼロとなる。
累積加算処理部20aeは、図15に示すように、各類似度画像をj方向、−j方向、i方向、−i方向の順序で再帰的に累積加算する処理部である。具体的には、j方向に累積加算する場合には、n=1〜N−1の類似度画像について、
C(m,n,u,v)=C(m,n,u,v)
+α・Max(C(m,n−1,p,q)−w(Δd))
を順次再帰的に計算する。ただし、Max()は最大値を示し、αは定数であり、0≦u≦U−1、0≦v≦V−1、0≦m≦M−1、0≦n≦N−1、u−1≦p≦u+1、v−1≦q≦v+1とする。
また、w(Δd)は、たとえば、w(Δd)=β・exp(Δd/T)であらわされる重みである(βおよびTは定数)。そして、Δdは、画素(u,v)と画素(p,q)との距離であり、
Δd=sqrt((u−p)2+(v−q)2))
とあらわされる。なお、sqrt()は平方根を示している。
ここで、「−w(Δd)」は、拘束条件であり、Δdが大きいほど、すなわち、画素(u,v)と画素(p,q)との距離が大きいほど、「C(m,n−1,p,q)−w(Δd)」は小さい値となる。なお、w(Δd)=β・Δdとすることとしてもよい(βは定数)。
すなわち、j方向に累積加算する場合には、図16に示すように、C(m,n−1,p,q)を中心とする3×3画素の中から最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
なお、本実施例では、3×3画素の中から最大の画素値を求める場合について説明するが、5×5画素のように3×3画素以外の画素群の中から最大の画素値を求めることとしてもよい。また、4×4画素のように、中心画素が存在せず、画素のかたよりが発生する画素群を用いることとしてもよい。
また、−j方向に累積加算する場合には、n=N−2〜0の類似度画像について、
C(m,n,u,v)=C(m,n,u,v)
+α・Max(C(m,n+1,p,q)−w(Δd))
を順次再帰的に計算する。ただし、0≦u≦U−1、0≦v≦V−1、0≦m≦M−1、0≦n≦N−2とする。また、Δd=sqrt((u−p)2+(v−q)2))である。
すなわち、−j方向に累積加算する場合には、図17に示すように、C(m,n+1,p,q)を中心とする3×3画素の中から最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
また、i方向に累積加算する場合には、m=1〜M−1の類似度画像について、
C(m,n,u,v)=C(m,n,u,v)
+α・Max(C(m−1,n,p,q)−w(Δd))
を順次再帰的に計算する。ただし、0≦u≦U−1、0≦v≦V−1、0≦m≦M−1、0≦n≦N−1とする。また、Δd=sqrt((u−p)2+(v−q)2))である。
すなわち、i方向に累積加算する場合には、図18に示すように、C(m−1,n,p,q)を中心とする3×3画素の中から最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
また、−i方向に累積加算する場合には、m=M−2〜0の類似度画像について、
C(m,n,u,v)=C(m,n,u,v)
+α・Max(C(m+1,n,p,q)−w(Δd))
を順次再帰的に計算する。ただし、0≦u≦U−1、0≦v≦V−1、0≦m≦M−2、0≦n≦N−1とする。また、Δd=sqrt((u−p)2+(v−q)2))である。
すなわち、−i方向に累積加算する場合には、図19に示すように、C(m+1,n,p,q)を中心とする3×3画素の中から最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
対応点決定部20afは、累積加算処理部20aeと連携しながら累積加算後の類似度画像に基づいて対応点を決定する処理部である。具体的には、各方向についての累積加算処理を行った時点で各類似度画像の最大値の位置を検出し、それらの位置と前回の累積加算処理時における最大値の位置との変化が所定の範囲内でなければ累積加算処理をフィードバックして繰り返し、所定の範囲内となった時点で繰り返しを終了する。そして、繰り返し終了時における各類似度画像の最大値の位置を対応点として決定する。
たとえば、累積加算処理の繰り返しによって図20に示す各類似度画像が得られた場合には、各類似度画像の最大値の位置の変化分を調べ、調べた変化分が所定の範囲内となった場合には、図21に示すように各類似度画像の最大値の位置を求めてこれを対応点とする。そして、この対応点に基づいて入力画像のひずみを図示すると図22あるいは図23のようになる。
次に、図8に示した対応点探索部20aの処理手順について説明する。なお、上記説明と一部重複するが、図9〜図23を用いて処理の流れを例示しつつ処理手順について説明することとする。
図24は、図8に示した対応点探索部20aの処理手順を示すフローチャートである。同図に示すように、この対応点探索部20aが参照画像および入力画像を取得したならば、取得した参照画像を参照部分画像に分割する(ステップS201)。たとえば、図9に示した32×32画素の参照画像21を図11に示した7×7画素からなる25個の参照部分画像に分割して記憶する。この参照部分画像は、参照したい画像毎に予め記憶しておいてもよいし、また、参照部分画像ではなく、参照画像のみを予め別途記憶しておき、後述する入力画像と参照画像との類似度の計算の際に、記憶された参照画像から参照部分画像に分割してもよい。
つづいて、入力画像を入力部分画像に分割する(ステップS202)。たとえば、図10に示した32×32画素の入力画像22を図12に示した21×21画素からなる25個の入力部分画像に分割する。
そして、この参照部分画像と入力部分画像との間の類似度画像を作成する(ステップS203)。たとえば、図13に示すようにして入力部分画像51と参照部分画像52との類似度を画素値とする類似度画像53の作成を入力部分画像毎に行って図14に示したような複数の類似度画像を作成する。
つづいて、j方向の累積加算処理(ステップS204)、−j方向の累積加算処理(ステップS205)、i方向の累積加算処理(ステップS206)、−i方向の累積加算処理(ステップS207)を行い、類似度画像の最大値の位置を検出する(ステップS208)。具体的には、図16〜図19に示した加算処理を図15に示すように再帰的に繰り返すことによって図20に示したような類似度画像を作成し、図21に示すように各類似度画像の最大値の位置を検出する。
そして、最大値の位置の変動が一定値以内であるか否かを判定し(ステップS209)、一定値以内でなければ(ステップS209,No)、ステップS204へ移行して同様の処理を繰り返す。一方、一定値以内であれば(ステップS209,Yes)、この位置を対応点として処理を終了する。
次に、図8に示した累積加算処理部20aeによるj方向の累積加算処理手順について説明する。図25は、図8に示した累積加算処理部20aeによるj方向の累積加算処理手順を示すフローチャートである。なお、−j方向、i方向、−i方向の累積加算処理についても同様である。
同図に示すように、まず、変数m、uおよびvを0にするとともに、変数nを1とする初期化を行う(ステップS301〜ステップS304)。ここで、変数mは、i方向のインデックスとして用いる変数であり、変数nは、j方向のインデックスとして用いる変数である。また、変数u、vは探索範囲を示すi方向およびj方向の変数である。
そして、この初期化を終えたならば、
C(m,n,u,v)=C(m,n,u,v)
+α・Max(C(m,n−1,p,q)−w(Δd))
の算定式による計算を行う(ステップS305)。
つづいて、変数vをインクリメントし(ステップS306)、インクリメントした変数vがVよりも小さければ(ステップS307,Yes)、ステップS305へ移行して加算処理を繰り返す。つまり、探索方位をj方向へずらすことになる。
これに対して、変数vがV以上であれば(ステップS307,No)、変数uをインクリメントし(ステップS308)、インクリメントした変数uがUよりも小さければ(ステップS309,Yes)、ステップS304へ移行して加算処理を繰り返す。つまり、探索範囲をi方向へずらすことになる。
そして、変数uがU以上であれば(ステップS309,No)、ある類似度画像についての計算を終了し、次の類似度画像へ移行する。具体的には、変数nをインクリメントして注目類似度画像をj方向へ移行させた後に(ステップS310)、この変数nをNと比較し(ステップS311)、変数nがNよりも小さければ(ステップS311,Yes)、ステップS303へ移行して加算処理を繰り返す。
これに対し、変数nがN以上であれば(ステップS311,No)、変数mをインクリメントして注目類似度画像をi方向へ移行させた後に(ステップS312)、この変数mがMよりも小さければ(ステップS313,Yes)、ステップS302ヘ移行して加算処理を繰り返し、変数mがM以上であれば(ステップS313,No)、処理を終了する。上記した一連の処理を行うことによって各類似度画像の全画素についてj方向の累積加算結果が得られることになる。
なお、図25に示したフローチャートでは、変数u、vのインクリメントを行いながら最大値を算出する場合について示した。しかしながら、これに限らず、あらかじめC(m,n−1,u,v)に最大値フィルターを掛けた最大値フィルター画像C’(m,n−1,u,v)を作成しておき、α倍してからC(m,n,u,v)に対して加算することとしてもよい。
次に、「パラレルアップデート法」を行う対応点探索部20bについて図26〜図34を用いて説明する。なお、ここでは参照画像、入力画像の順に画像を入力する場合を示すこととする。図26に示すように、対応点探索部20bは、画像入力部20baと、分割処理部20bbと、参照部分画像一時記憶部20bcと、類似度画像作成部20bdと、累積加算処理部20beと、類似度画像更新部20bfと、対応点決定部20bgとを備えている。
なお、画像入力部20ba、分割処理部20bb、参照部分画像一時記憶部20bcおよび類似度画像作成部20bdについては、図8に示した対応点探索部20aの画像入力部aa、分割処理部20ab、参照部分画像一時記憶部20acおよび類似度画像作成部20adと同様であるので、ここでの説明を省略する。
累積加算処理部20beは、図27に示すように、各類似度画像をj方向、−j方向、i方向、−i方向にそれぞれ独立して累積加算する処理部である。具体的には、類似度画像全体C(m,n,u,v)を4枚複写し、これらをそれぞれD1(m,n,u,v)、D2(m,n,u,v)、D3(m,n,u,v)、D4(m,n,u,v)とし、それぞれj方向、i方向、−j方向、−i方向の累積加算に使用する。たとえば、D1(m,n,u,v)を用いてj方向に累積加算する場合には、n=1〜N−1の類似度画像について、
D1(m,n,u,v)=C(m,n,u,v)
+α・Max(D1(m,n−1,p,q)−w(Δd))
を順次再帰的に計算する。ただし、Max()は最大値を示し、αは定数であり、0≦u≦U−1、0≦v≦V−1、0≦m≦M−1、0≦n≦N−1、u−1≦p≦u+1、v−1≦q≦v+1とする。
また、また、w(Δd)は、たとえば、w(Δd)=β・exp(Δd/T)であらわされる重みである(βおよびTは定数)。そして、Δdは、画素(u,v)と画素(p,q)との距離であり、
Δd=sqrt((u−p)2+(v−q)2))
とあらわされる。ここで、sqrt()は平方根を示している。
ここで、「−w(Δd)」は、拘束条件であり、Δdが大きいほど、すなわち、画素(u,v)と画素(p,q)との距離が大きいほど、「D1(m,n−1,p,q)−w(Δd)」は小さい値となる。なお、w(Δd)=β・Δdとすることとしてもよい(βは定数)。
すなわち、j方向に累積加算する場合には、図28に示すように、D1(m,n−1,u,v)を中心とする8近傍内の9画素のうちの最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
なお、本実施例では、3×3画素の中から最大の画素値を求める場合について説明するが、5×5画素のように3×3画素以外の画素群の中から最大の画素値を求めることとしてもよい。また、4×4画素のように、中心画素が存在せず、画素のかたよりが発生する画素群を用いることとしてもよい。
また、−j方向に累積加算する場合には、n=N−2〜0の類似度画像について、
D3(m,n,u,v)=C(m,n,u,v)
+α・Max(D3(m,n+1,p,q)−w(Δd))
を順次再帰的に計算する。ただし、Max()は最大値を示し、αは定数であり、0≦u≦U−1、0≦v≦V−1、0≦m≦M−1、0≦n≦N−2、u−1≦p≦u+1、v−1≦q≦v+1とする。また、Δd=sqrt((u−p)2+(v−q)2))である。
すなわち、−j方向に累積加算する場合には、図29に示すように、D3(m,n,u,v)を中心とする8近傍内の9画素のうちの最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
また、i方向に累積加算する場合には、m=1〜M−1の類似度画像について、
D2(m,n,u,v)=C(m,n,u,v)
+α・Max(D2(m−1,n,p,q)−w(Δd))
を順次再帰的に計算する。ただし、Max()は最大値を示し、αは定数であり、0≦u≦U−1、0≦v≦V−1、0≦m≦M−1、0≦n≦N−1、u−1≦p≦u+1、v−1≦q≦v+1とする。また、Δd=sqrt((u−p)2+(v−q)2))である。
すなわち、i方向に累積加算する場合には、図30に示すように、D2(m,n,u,v)を中心とする8近傍内の9画素のうちの最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
また、−i方向に累積加算する場合には、m=M−2〜0の類似度画像について、
D4(m,n,u,v)=C(m,n,u,v)
+α・Max(D4(m−1,n,p,q)−w(Δd))
を順次再帰的に計算する。ただし、Max()は最大値を示し、αは定数であり、0≦u≦U−1、0≦v≦V−1、0≦m≦M−2、0≦n≦N−1、u−1≦p≦u+1、v−1≦q≦v+1とする。また、Δd=sqrt((u−p)2+(v−q)2))である。
すなわち、−i方向に累積加算する場合には、図31に示すように、D4(m,n,u,v)を中心とする8近傍内の9画素のうちの最大の画素値を求める際に、各画素値からw(Δd)を差し引いた値同士を比較する。そして、拘束条件を反映した各値の中で最大の値をα倍し、C(m,n,u,v)の画素値に加算する処理を再帰的に繰り返すことになる。
類似度画像更新部20bfは、累積加算処理部20beの累積加算後の類似度画像に基づいて類似度画像を更新する処理部である。具体的には、まず各方向についての累積加算処理を行ったならば、図32の概念図に示すように、
式(1)によってC(m,n,u,v)を更新する。
その後、対応点決定部20bgは、各類似度画像の最大値の位置を検出し、それらの位置と前回の各類似度画像の最大値の位置との変化が所定の範囲内でなければ累積加算処理をフィードバックして繰り返し、所定の範囲内となった時点で繰り返しを終了し、そのときの各類似度画像の最大値の位置を対応点として決定する。なお、上述の前回の各類似度画像というのは、初回処理の場合は、類似度画像作成部20bdにより作成された各類似度画像であり、初回以降は類似度画像更新部20bfにより前回更新処理された各類似度画像となる。
図33は、図26に示した対応点探索部20bの処理手順を示すフローチャートである。同図に示すように、この対応点探索部20bが参照画像と入力画像を取得したならば、この参照画像を参照部分画像に分割する(ステップS401)。たとえば、図9に示した32画素×32画素の参照画像21を、図11に示した7×7画素からなる25個の参照部分画像に分割して記憶する。この参照部分画像は、参照したい画像毎に予め記憶しておいてもよいし、また、参照部分画像ではなく、参照画像のみを予め別途記憶しておき、後述する入力画像と参照画像との類似度の計算の際に、記憶された参照画像から参照部分画像に分割してもよい。
その後、入力画像を入力部分画像に分割する(ステップS402)。たとえば、図10に示した32画素×32画素の入力画像22を、図12に示した21画素×21画素からなる25個の入力部分画像に分割する。
そして、この参照部分画像と入力部分画像の間の類似度画像を作成する(ステップS403)。たとえば、図13に示すようにして入力部分画像51と参照部分画像52の類似度を画素値とする類似度画像53の作成を入力部分画像ごとに行い、図14に示したような複数の類似度画像を作成する。つづいて、各類似度画像の画素値が最大となる位置(以下、「最大値の位置」と記載する)を検出する(ステップS404)。ここで、最大値の位置は、画素サイズよりも小さいサブピクセル単位、たとえば、0.1画素単位や、0.01画素単位で検出する。
その後、類似度画像全体Cを4枚複写してD1、D2、D3およびD4を用意したうえで、4方向、すなわち、j方向の累積加算処理、i方向の累積加算処理、−j方向の累積加算処理、−i方向の累積加算処理をそれぞれ独立して行う(ステップS405)。そして、j、i、−j、−i方向の累積加算された類似度画像の各画素の8近傍内の9画素の拘束条件付き最大値を、ステップS403で作成された類似度画像の各画素に加算して各類似度画像を更新する(ステップS406)。
つづいて、更新された類似度画像の最大値の位置を検出する(ステップS407)。具体的には、図28〜図32に示した加算処理を繰り返すことによって、図20に示したような類似度画像を作成し、図21に示したような各類似度画像の最大値の位置を検出する。
次に、各類似度画像の最大値の一変動を算出し(ステップS408)、すべての最大値の一変動が所定値以内であるか否かを調べ(ステップS409)、所定値以内でなければ(ステップS409,No)、ステップS405以降の処理を繰り返し、所定値以内であれば(ステップS409,Yes)、この位置を対応点と決定し(ステップS410)、処理を終了する。
なお、上述のステップS409における処理は、各類似度画像の最大値の位置が前回の各類似度画像の最大値の位置から変化した変化分について、所定値以内であるか否かを調べるという処理であり、所定値以内であれば、ステップS410において、更新処理後の各類似度画像の最大値の位置を入力画像の参照画像に対する対応点と決定する。
なお、ここでは説明の便宜上、j方向の累積加算処理、i方向の累積加算処理、−j方向の累積加算処理および−i方向の累積加算処理を順次行うこととしたが、これらはそれぞれ独立した処理とすることができるので、並列処理化することとしてもよい。
次に、図26に示した累積加算処理部20beによるj方向の累積加算処理手順について詳細に説明する。図34は、図26に示した累積加算処理部20beによるj方向の累積加算処理手順を示すフローチャートである。なお、i方向、−j方向、−i方向の累積加算処理も同様に行うことができる。
同図に示すように、まず、変数m、uおよびvを0にするとともに、変数nを1とする初期化を行う(ステップS501〜ステップS504)。ここで、この変数mはi方向のインデックスとして用いる変数であり、変数nはj方向のインデックスとして用いる変数である。また、変数u、vは探索範囲を示すi方向およびj方向の変数である。
そして、これらの初期化を終えたならば、
D1(m,n,u,v)=C(m,n,u,v)+α・Max(D1(m,n−1,p,q)−w(Δd))
の算定式による計算を行う(ステップS505)。
その後、変数vをインクリメントし(ステップS506)、この変数vがVよりも小さければ(ステップS507,Yes)、ステップS505に移行して加算処理を繰り返す。つまり、探索範囲をj方向にずらすことになる。
これに対し、変数vがV以上であれば(ステップS507,No)、変数uをインクリメントし(ステップS508)、この変数uがUよりも小さければ(ステップS509,Yes)、ステップS504に移行して加算処理を繰り返す。つまり、探索範囲をi方向にずらすことになる。
そして、変数uがU以上であれば(ステップS509,No)、ある類似度画像についての計算を終了し、次の類似度画像に移行する。具体的には、変数nをインクリメントして注目類似度画像をj方向に移動させた後に(ステップS510)、この変数nをNと比較し(ステップS511)、この変数nがNよりも小さければ(ステップS511,Yes)、ステップS503に移行して加算処理を繰り返す。
これに対し、変数nがN以上であれば(ステップS511,No)、変数mをインクリメントして注目類似度画像をi方向に移行させた後に(ステップS512)、この変数mがMよりも小さければ(ステップS513,Yes)、ステップS502に移行して加算処理を繰り返し、変数mがM以上であれば(ステップS513,No)、処理を終了する。上記した一連の処理を行うことによって各類似度画像の全画素についてj方向の累積加算結果が得られることになる。
なお、図34に示したフローチャートでは、変数u、vのインクリメントを行いながら最大値を算出する場合について示した。しかしながら、これに限らず、あらかじめD1(m,n−1,u,v)に最大値フィルターを掛けた最大値フィルター画像D1’(m,n−1,u,v)を作成しておき、α倍してからC(m,n,u,v)に対して加算することとしてもよい。
上述してきたように、本実施例では、対応点決定部が、参照画像を複数のブロックに分割して参照部分画像を生成し、互いにその一部が重なり合う複数のブロックに入力画像を分割して複数の入力部分画像を生成し、入力部分画像と参照部分画像との間の類似度を算定し、算定された類似度を画素値としてもつ複数の類似度画像を生成し、生成された類似度画像における注目画素と注目画素の周辺画素との距離が大きいほど周辺画素の画素値が小さくなるように補正したうえで、補正後の各画素値の中で最大の画素値を他の類似度画像における注目画素の画素値に対して順次累積加算し、累積加算された各類似度画像の画素値が最大となる画素の画素位置を対応点として特定するように対応点探索装置を構成した。
また、本実施例では、対応点決定部が、累積加算された各類似度画像の画素値が最大となる画素の画素位置を、この画素位置に隣接する画素の画素値に基づいて画素サイズよりも小さいサブピクセル単位で算出したうえで、算出した画素位置を対応点として特定し、階層化処理部が、特定された対応点を用いた累積加算およびあらたな対応点の特定を、ブロックのサイズを減少させつつ複数の階層にわたって繰り返すように対応点探索装置を構成した。
したがって、誤差の発生を抑制して階層的な探索を可能ならしめることで探索速度を向上することができるとともに、密な対応点を高精度に得ることができる。
なお、上述した実施例では、拘束条件付更新式における重み(w)における定数(β)を各階層化レベルにおいて一定とする場合について示したが、階層化レベルに応じて定数(β)を変更することとしてもよい。この場合、レベル1のように階層化レベルの初期段階では、βを小さい値として拘束条件を弱くすることで対応点の変形を大きめに許容することとすればよい。そして、階層化レベルが深まるに従ってβを大きい値として拘束条件を強くすることで対応点の変形を小さめに許容することとすればよい。