説明

画像処理プログラムおよび画像処理装置

【課題】カメラの取り付け位置や取り付け姿勢の情報を迅速かつ精度良く得ることを課題とする。
【解決手段】設定部232は、4個のマーカーが映し出された画像平面上の4個に対応するカメラ座標系における仮想的な4つの対応点の中から基準マーカーとする点Mを選択する。そして、設定部232は、基準点Mまでの距離Lに所定の値を設定する。作成部233は、基準点M以外の点、つまり基準マーカー以外のマーカーに対応する点1〜点3までの各距離L,L,Lを表す数式を作成する。導出部234は、設定部232により設定された基準マーカーで採用する全ての符号パターンを導出する。棄却部235は、導出部234により導出された符号パターンの中から、距離L、L、Lの値の少なくとも1つが相応しい値となり得えない符号パターンを棄却する。

【発明の詳細な説明】
【技術分野】
【0001】
本願の開示する技術は、画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【0002】
近年、カメラにより撮影された画像を3次元的に認識する技術が実用化されている。この技術は、例えば、車両に搭載された車載カメラにより撮影された画像を用いて、車両の全周囲を見渡すことができる全周囲画像などを合成する場合に利用されている。そのほか、ロボットに搭載されたカメラにより撮影された画像を用いて、対象物体に対するロボットの相対位置を把握可能な画像を合成する場合などにも利用されている。
【0003】
ところで、カメラにより撮影された画像を3次元的に認識する技術においては、カメラにより撮影された画像を用いて3次元の画像を合成する場合に、カメラの取り付け姿勢や取り付け位置の情報を正しく把握しておくことが求められる場合がある。カメラの取り付け姿勢や取り付け位置の情報を推定する技術には、以下に説明するような公知技術1や公知技術2がある。
【0004】
上述した公知技術1について図17を用いて説明する。図17は、公知技術1を説明するための図である。公知技術1は、まず、マーカーなどの物体を実空間上の所定位置、言い換えれば、世界座標系における所定位置に配置してカメラで撮影する。続いて、公知技術1は、図17に示すように、マーカーを撮影して得られる画像平面H上の3つの点(x,x,x)に対応する3つの点(P,P,P)を抽出する。この3点(P,P,P)は、画像平面H上の3つの点(x,x,x)に対応するカメラ座標系における3次元位置である。そして、公知技術1は、図17に示すように、カメラ座標系の原点Cと、3点(P,P,P)とを結んでできる三角錐の各面を定式化した連立方程式をそれぞれ立てる。例えば、原点Cと、3点(P,P,P)とを結んでできる三角錐の各面は余弦定理を用いて定式化した数式で表すことができる。そして、各数式から以下に示す連立方程式(1)が成立する。なお、原点Cと点Pとの距離をL、原点Cと点Pとの距離をL、原点Cと点Pとの距離をL、原点Cから点Pへの視線ベクトルをV、原点Cから点Pへの視線ベクトルをV、原点Cから点Pへの視線ベクトルをVとする。視線ベクトル(V,V,V)は、カメラの光軸位置や焦点距離などの内部パラメータから得られる。なお、以下の式(1)に示す<V,V>(i,j=0,1,2、i≠j)はベクトルVとベクトルVとの内積を表す。また、以下の式(1)に示すD0,1、D0,2、D1,2は、点P〜点Pのうちの各2点間の実距離をそれぞれ表している。
【0005】
【数1】

【0006】
次に、公知技術1は、上述した連立方程式(1)から導出される4次方程式の解を求めることにより、図17に示すカメラ座標系の原点Cから3点(P,P,P)までの距離L、L、Lを求める。そして、公知技術1は、原点Cから3点(P,P,P)までの距離と、カメラの内部パラメータから得られる視線ベクトル(V,V,V)とを用いて、逆算的にカメラの位置および姿勢を導出する。
【0007】
また、例えば、公知技術2は、マーカーなどの物体をカメラにより撮影した画像上の特徴点を抽出し、画像上の特徴点と物体の見え方のパターンとの対応関係から、カメラの概略的な推定位置に応じた探索領域を設定する。そして、公知技術2は、カメラの位置や姿勢に関する合計6つのパラメータについて、要求誤差精度を満足する最適解を探索領域の中から探索することによりカメラの位置や姿勢を検出する。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開平6−258028号公報
【非特許文献】
【0009】
【非特許文献1】Quan and Lan,「Linear N−Point Camera Pose Determination」,IEEE Trans.on PAMI,1999
【発明の概要】
【発明が解決しようとする課題】
【0010】
上述した公知技術1は、抽出した3点からカメラ座標系の原点までの距離を求めるために4次方程式の解を求める必要があるので、計算量が多くなる結果、カメラの取り付け姿勢や取り付け位置の情報を迅速に得られないという問題がある。さらに、公知技術1では、カメラ座標系の原点までの距離を求めるために4次方程式の解を求めるが、4次方程式は特異値分解を用いて解を導き出すので、専門的な数値計算ライブラリ等を格納するための領域が必要となり、実用性に欠けるという問題もある。
【0011】
また、上述した公知技術2は、カメラの位置や姿勢に関する合計6つのパラメータについて最適解の探索を行うので、局所解に陥りやすい結果、カメラの取り付け姿勢や取り付け位置の情報を必ずしも精度良く得ることができないという問題があった。
【0012】
開示の技術は、上記に鑑みてなされたものであって、カメラの取り付け位置や取り付け姿勢の情報を迅速かつ精度良く得ることが可能な画像処理プログラムおよび画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【0013】
本願の開示する画像処理プログラムは、一つの態様において、コンピュータに、次のような処理を実行させる。すなわち、コンピュータに、実空間に設けられた4個以上のマーカーをカメラにより撮影した画像を取得する処理を実行させる。また、コンピュータに、前記カメラの焦点距離および光軸位置の情報を含む内部パラメータおよび前記画像における前記4個以上のマーカーの各々の位置に基づいて、前記カメラから該4個以上のマーカーの各々に対応するベクトルを生成する処理を実行させる。また、コンピュータに、前記4個以上のマーカーの中から基準マーカーを一つ選択する処理を実行させる。また、コンピュータに、前記基準マーカー以外の残りのマーカーのうちのそれぞれに対するベクトルと、該基準マーカーのベクトルとの内積値を算出する処理を実行させる。また、コンピュータに、前記内積値の符号が負となる前記基準マーカー以外のマーカーについて次の処理を実行させる。例えば、コンピュータに、該基準マーカーを用いて該基準マーカー以外のマーカーと前記カメラとの距離を求める二次方程式の解を表す数式に含まれる符号のうち、負の符号の採用を棄却する処理を実行させる。また、コンピュータに、棄却した結果に基づいて、前記基準マーカー以外のマーカーのそれぞれに対する前記数式に含まれる符号を、全ての該基準マーカー以外のマーカーについて組み合わせた符号パターンを生成する処理を実行させる。また、コンピュータに、前記基準マーカーと前記カメラとの距離として第1の値を設定する処理を実行させる。また、コンピュータに、前記第1の値と前記二次方程式と棄却した前記結果とを用いて、該第1の値における、前記基準マーカー以外のマーカーの各々と前記カメラとの距離の候補値を、1つまたは2つ算出する処理を実行させる。また、コンピュータに、前記符号パターンごとに、該符号パターン及び前記1つまたは2つの候補値に基づいて算出されるマーカー間距離と、前記実空間におけるマーカー間の距離との誤差を算出する処理を実行させる。また、コンピュータに、前記第1の値とは異なる第2の値を設定した場合に、前記符号パターンごとに他の誤差を算出する処理を実行させる。また、コンピュータに、前記第1の値を選択した場合に算出された前記誤差および前記第2の値を選択した場合に算出された前記他の誤差に基づいて、前記4個以上のマーカーの各々と前記カメラとの距離を決定する処理を実行させる。また、コンピュータに、決定した前記4個以上のマーカーの各々と前記カメラとの距離に基づいて、該カメラの世界座標系における位置および姿勢を演算する処理を実行させる。
【発明の効果】
【0014】
本願の開示する技術の一つの態様によれば、カメラの取り付け位置や取り付け姿勢の情報を迅速かつ精度良く得ることができる。
【図面の簡単な説明】
【0015】
【図1】図1は、実施例1に係る画像処理装置の説明に用いる図である。
【図2】図2は、実施例1に係る画像処理装置の構成を示す機能ブロック図である。
【図3】図3は、実施例1に係る生成部の説明に用いる図である。
【図4】図4は、実施例1に係る作成部の説明に用いる図である。
【図5】図5は、実施例1に係る導出部の説明に用いる図である。
【図6】図6は、実施例1に係る棄却部の処理に関する概念的な説明に用いる図である。
【図7】図7は、実施例1に係る算出部の処理に関する概念的な説明に用いる図である。
【図8】図8は、実施例1に係る算出部の処理に関する概念的な説明に用いる図である。
【図9】図9は、実施例1に係る算出部の処理に関する概念的な説明に用いる図である。
【図10】図10は、実施例1に係る算出部の処理に関する概念的な説明に用いる図である。
【図11】図11は、実施例1に係る位置姿勢推定部の説明に用いる図である。
【図12】図12は、実施例1に係る最適解算出処理の流れを示す図である。
【図13】図13は、実施例1に係る最適解候補算出処理の流れを示す図である。
【図14】図14は、実施例1に係る符号パターン決定処理の流れを示す図である。
【図15】図15は、実施例2に係る画像処理装置の構成を示す機能ブロック図である。
【図16】図16は、画像処理プログラムを実行する電子機器の一例を示す図である。
【図17】図17は、公知技術1を説明するための図である。
【発明を実施するための形態】
【0016】
以下に、図面を参照しつつ、本願の開示する画像処理プログラムおよび画像処理装置の一実施形態について詳細に説明する。なお、以下の実施例では、実空間である世界座標系の既知の3次元位置に位置する4個のマーカーを車両やロボットなどに搭載されたカメラにより撮影して、撮影された画像を用いてカメラの位置および姿勢を推定する技術に関する一実施形態について説明する。なお、マーカーは、4個以上であれば何個であっても構わない。以下の実施例では、実空間のことを3次元空間と表記するものとする。本願の開示する画像処理プログラムおよび画像処理装置の一実施形態として後述する実施例により、本願が開示する技術が限定されるものではなく、処理内容に矛盾を生じさせない範囲で各実施例を適宜組み合わせることが可能である。
【実施例1】
【0017】
実施例1に係る画像処理装置の構成の説明に入る前に、図1を用いて、実施例1に係る画像処理装置を説明する。図1は、実施例1に係る画像処理装置の説明に用いる図である。なお、以下に説明する実施例では、世界座標系の既知の3次元位置に4個のマーカーを配置する場合の一実施形態を説明するが、図1では、説明の便宜上、配置される4個のマーカーのうち3個のマーカーに焦点をあてて説明する。
【0018】
図1に示すCはカメラ座標系の原点を示す。なお、図1の説明において、図1に示すCを「原点C」と表記するものとする。図1に示すP,P,P2A,P2Bは、4個のマーカーが映し出された画像平面上の点のうち、3個のマーカーに対応するカメラ座標系における仮想的な3次元位置(対応点)を示す。また、P2A,P2Bは、画像平面上のある点に対応するカメラ座標系における3次元位置となり得る候補に相当する。なお、図1の説明において、図1に示すP,P,P2A,P2Bを、「対応点P」,「対応点P」,「対応点P2A」,「対応点P2B」とそれぞれ表記するものとする。図1に示すV,V,Vは、原点Cから対応点P,対応点P,対応点P2A,対応点P2Bへ向かう視線ベクトルを示し、例えば、長さが1の単位ベクトルである。なお、図1の説明において、図1に示すV,V,Vを、「ベクトルV」,「ベクトルV」,「ベクトルV」とそれぞれ表記するものとする。
【0019】
また、図1に示すLは原点Cと対応点Pとの距離を示し、図1に示すLは原点Cと対応点Pとの距離の値を示し、図1に示すL2Aは原点Cと対応点P2Aとの距離の値を示し、図1に示すL2Bは原点Cと対応点P2Bとの距離の値を示す。なお、図1の説明において、図1に示すLを「距離L」と表記するものとする。同様に、図1の説明において、図1に示すL,L2A,L2Bを、「距離L」,「距離L2A」,「距離L2B」とそれぞれ表記するものとする。
【0020】
また、図1に示すD(0,1)は、対応点Pと対応点Pとの3次元空間上の実距離を示し、図1に示すD(0,2)は、対応点Pと対応点Pとの3次元空間上の実距離を示し、図1に示すD(1,2)は、対応点Pと対応点Pとの3次元空間上の実距離を示す。なお、図1の説明において、図1に示すD(0,1)を「実距離D(0,1)」と表記するものとする。同様に、図1の説明において、図1に示すD(0,2)を「実距離D(0,2)」と記し、図1に示すD(1,2)を「実距離D(1,2)」と表記するものとする。
【0021】
実施例1に係る画像処理装置は、まず、基準点として対応点Pを選択した場合に、距離Lを用いて、距離Lおよび距離Lを余弦定理により定式化して表した各数式からなる連立方程式を立てる。この連立方程式は、例えば、以下の式(2)で示される。なお、以下の式(2)に示すD0,1、D0,2、は、上述した図1に示すD(0,1)、D(0,2)にそれぞれ対応する。
【0022】
【数2】

【0023】
ここで、距離Lの値が与えられれば、上述した式(2)の解を求めることにより、2種類の値が距離Lの値として導出される。つまり、距離Lの値として、距離Lを定式化して表した数式の右辺内にある内積の項と根号の項との間にあるプラスの符合を選択した場合と、マイナスの符号を選択した場合の2種類の値が導出される。同様に、上述した式(2)の解を求めることにより、2種類の値が距離Lの値として導き出される。すなわち、距離Lを定式化して表した数式の右辺内にある内積の項と根号の項との間にある符合の選択により距離Lの値が決定付けられる。同様に、距離Lを定式化して表した数式内の内積の項と根号の項との間にある符合の選択により距離Lの値が決定付けられる。そこで、実施例1に係る画像処理装置は、距離Lを定式化して表した数式の右辺内にある根号前の符号の一方と、距離Lを表す数式の右辺内にある根号前にある符号一方とを組合せた符号パターンを導出する。そして、実施例1に係る画像処理装置は、符号パターンの中から、距離L、距離Lの値として相応しくない値が導き出されるものを棄却する。
【0024】
例えば、実施例1に係る画像処理装置は、距離LおよびLが上述した式(2)で表される場合に、(+、+)、(−、−)、(+、−)、(−,+)の4つの符号パターンを導出できる。次に、実施例1に係る画像処理装置は、導出した符号パターンの中から、少なくとも距離Lおよび距離Lの値の一方が相応しい値となり得えない符号パターンを棄却する。例えば、図1に示すベクトルVとベクトルVとのなす角度「θ」が90度よりも大きい場合には、距離Lを表す数式の右辺内にある内積がマイナスの値となる。この場合、式(2)の根号前の符号のうちマイナス符号を選択した場合に計算される距離Lの値はマイナスとなってしまうので、距離Lの値として相応しくない。つまり、右辺の第一項は必ず負の値となるため、符号パターンは少なくとも正が採用されないかぎり、右辺は負の値となる。よって、実施例1に係る画像処理装置は、距離Lを表す数式の右辺内にある根号前の符号のうちマイナスの符号を選択してできる符号パターンを棄却する。また、例えば、図1に示すベクトルVとベクトルVとのなす角度が90度以下である場合には、距離Lを表す数式の右辺内にある内積がプラスの値となる。この場合、距離Lを表す数式に含まれる根号前の各符号をそれぞれ選択した場合に計算される距離Lの値は、プラスになるかマイナスになるか不明なので、距離Lの値として相応しいかどうかの判断はできない。よって、実施例1に係る画像処理装置は、距離Lを表す数式の右辺内にある根号前のプラスの符号およびマイナスの符合を選択してできる各符号パターンを棄却せずに残す。この結果、実施例1に係る画像処理装置は、(−、−)、(−,+)の2つの符号パターンを棄却し、(+、−)、(+,+)の2つの符号パターンを残すこととなる。
【0025】
なお、棄却されずに残された符号パターンでは、距離Lの値の候補は、距離Lを表す数式の右辺内にある内積の項と根号の項との間にあるプラスの符合を選択した場合に計算される1つの値のみとなる。つまり、図1に示す距離Lの値の候補は、2種類の符号の選択により与えられる2つの候補のうちの1つの候補に絞り込まれる。一方、距離Lの値の候補は、距離Lを表す数式の右辺内にある内積の項と根号の項との間にあるプラスの符合を選択した場合に計算される値、およびマイナスの符号を選択した場合に導出される値の2つとなる。つまり、図1に示す距離Lの値の候補は、図1に示すL2Aに対応する値と図1に示すL2Bに対応する値の2つとなり、2種類の符号の選択により与えられる2つの候補がそのまま残される。このように、カメラ座標系の原点からマーカーに対応するカメラ座標系における対応点までの距離を算出する場合に、視線ベクトル同士がなす角度を考慮することにより、2種類の符号の選択により与えられる2つの候補の中から絞り込むことができる場合がある。
【0026】
次に、実施例1に係る画像処理装置は、棄却されずに残された符号パターンについて、3次元空間上のマーカー間の距離の候補値と3次元空間上のマーカー間の実距離の値との誤差を算出する。例えば、実施例1に係る画像処理装置は、以下に説明するようにして各符号パターンについての誤差を算出する。
【0027】
まず、実施例1に係る画像処理装置は、距離Lと、上述した式(2)とに基づいて、例えば、棄却されずに残された符号パターン(+、+)について、距離Lおよび距離L2Aを得られる。また、実施例1に係る画像処理装置は、距離Lと、上述した式(2)とに基づいて、例えば、棄却されずに残された符号パターン(+、−)について、距離Lおよび距離L2Bを得られる。なお、距離Lの値は、距離Lの値が取り得る範囲内で予め設定される。
【0028】
続いて、実施例1に係る画像処理装置は、符号パターン(+、+)について、距離Lおよび距離L2Aに基づき、3次元空間上のマーカー間の距離の候補値、つまり図1に示す点Pと点P2Aとの距離を算出する。また、実施例1に係る画像処理装置は、符号パターン(+、−)について、距離Lおよび距離L2Bに基づき、3次元空間上のマーカー間の距離の候補値、つまり図1に示す点Pと点P2Bとの間の距離を算出する。
【0029】
次に、実施例1に係る画像処理装置は、符号パターン(+、+)について算出した点Pと点P2Aとの距離と、3次元空間上のマーカー間の実距離の値との誤差を算出する。同様に、実施例1に係る画像処理装置は、符号パターン(+、−)について算出した点Pと点P2Bとの距離と、3次元空間上のマーカー間の実距離の値との誤差を算出する。
【0030】
続いて、実施例1に係る画像処理装置は、符号パターン(+、+)について算出した誤差と、符号パターンである(+、−)について算出した誤差とを比較する。比較の結果、実施例1に係る画像処理装置は、符号パターン(+、+)について算出した誤差の値の方が小さい場合には、距離L、距離L、距離L2Aを、カメラ原点から3次元空間上のマーカーまでの距離に決定する。
【0031】
実施例1に係る画像処理装置は、上述した符号パターンについての誤差の算出をする処理において、基準点以外に選択した2点間の距離と実距離との誤差が最小となるときの基準点までの距離および基準点以外の点までの距離を検出する処理を行っている。例えば、対応点Pと対応点Pとの間の距離と実距離との誤差が最小となるときの基準点までの距離および基準点以外の点までの距離を検出する処理は、以下に示す式(3)で表される。なお、以下の式(3)に示すD1,2は、上述した図1に示すD(1,2)に対応する。以下の式(3)に示すLは、L2AやL2Bなどに対応する。また、例えば‖V‖は、ベクトルVの長さを表わす。また、例えば|a|は、実数aの絶対値を表わす。
【0032】
【数3】

【0033】
上述してきたように、実施例1に係る画像処理装置は、まず、上述した符号パターンについて高々2種類の符号の選択を行う。そして、実施例1に係る画像処理装置は、選択の結果残された符号パターンについて、基準点以外に選択した2点間の距離と実距離との誤差が最小となるときの基準点までの距離および基準点以外の点までの距離の検出を実行する。このようにして、実施例1に係る画像処理装置は、4個以上のマーカーが映し出された画像平面上の点に対応する3次元空間上の対応点の位置を迅速かつ精度良く算出する。
【0034】
[画像処理装置の構成(実施例1)]
図2は、実施例1に係る画像処理装置の構成を示す機能ブロック図である。なお、図2には、実施例1に係る画像処理装置の機能を説明する上で必要となる機能ブロックを図示する。以下の実施例中において、単に原点Cと表記するものはカメラ座標系の原点を示し、単に対応点と表記するものはカメラ座標系における3次元位置を示すものとする。
【0035】
図2に戻り、実施例1に係る画像処理装置200は、例えば、撮影装置100が接続される。撮影装置100は、例えば、単眼カメラやステレオカメラなどに該当する。撮影装置100は、例えば、車両やロボットなどの周囲の実空間上の所定位置に配置された4個のマーカーを撮影する。なお、以下の実施例中、カメラと表記する箇所は撮影装置100に該当するものとする。
【0036】
画像処理装置200は、図2に示すように、取得部210、記憶部220および制御部230を有する。取得部210は、撮影装置100により撮影されたマーカーの画像をそれぞれ取得する。取得部210は、撮影装置100から取得したマーカーの画像を画像記憶部221に格納する。
【0037】
記憶部220は、図2に示すように、画像記憶部221、カメラパラメータ記憶部222およびマーカー距離情報記憶部223を有する。なお、記憶部220は、例えば、RAM(Random Access Memory)やフラッシュメモリ(flash memory)などの半導体メモリ素子である。
【0038】
画像記憶部221は、例えば、取得部210により格納されたマーカーの画像をそれぞれ記憶する。カメラパラメータ記憶部222は、カメラの焦点距離および光軸位置の情報を含むカメラのパラメータの情報、いわゆるカメラ内部パラメータの情報を記憶する。カメラ内部パラメータの情報は、後述する生成部231による視線ベクトルの生成時に用いられる。マーカー距離情報記憶部223は、車両やロボットなど周囲に配置されたマーカー間の3次元空間上の実距離の情報をそれぞれ記憶する。なお、記憶部220は、さらに距離Lの値が取り得る範囲を記憶する領域を有する。なお、距離Lの値が取り得る範囲は予め記憶部に記憶されていても良いし、後述の処理を行う際に、利用者によって入力された数値範囲が記憶部220に記憶するとしても良い。また、距離Lの値が取り得る範囲は、予めカメラの設置位置が予測される環境において、予測値の前後の範囲が設定される。例えば、カメラを備える車体を、マーカーを有する試験場に停車し、詳細なカメラの位置や姿勢を演算する場合においては、試験場における車体を停止する位置や、設計上の車種ごとのカメラ取り付け位置などから推測された数値範囲が設定される。
【0039】
図2に戻り、制御部230は、生成部231と、設定部232と、作成部233と、導出部234と、棄却部235と、算出部236と、決定部237と、位置姿勢推定部238とを有する。なお、制御部230は、例えば、電子回路や集積回路に該当する。電子回路としては、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)がある。また、集積回路としては、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などがある。
【0040】
生成部231は、カメラからマーカーの各々に対応する視線ベクトルを生成する。例えば、生成部231は、画像記憶部221から4個のマーカーの画像を取得し、カメラの焦点距離および光軸位置の情報を含むカメラ内部パラメータをカメラパラメータ記憶部222から取得する。そして、生成部231は、4点のマーカーの画像の画像平面上における4個のマーカーそれぞれの位置の情報を取得する。続いて、生成部231は、カメラ内部パラメータと、マーカーの画像における4個のマーカーの各々の位置の情報とに基づいて、カメラから4個のマーカーの各々に対応する視線ベクトルを生成する。例えば、視線ベクトルV(i=0,1,2,3)は、カメラ内部パラメータを与える正則な3次元正方行列「K」と、画像の座標「x」と、xの同次座標表現「x´」を用いて、以下に示す式(4)で表わすことができる。以下に示す式(4)では、視線ベクトルVの大きさが「1」に正規化されている。なお、以下の式(4)に示すK−1は、3次元正方行列「K」の逆行列である。
【0041】
【数4】

【0042】
なお、生成部231により生成された視線ベクトルを用いて、4個のマーカーが映し出された画像平面上の点に対応するカメラ座標系における仮想的な3次元位置(対応点)は、以下の式(5)で表すことができる。以下の式(5)は、視線ベクトルの延長線上に対応点が位置することを意味している。以下の説明において、単に「対応点」と表記するものは、マーカーが映し出された画像平面上の点に対応するカメラ座標系における仮想的な3次元位置を表すものとする。なお、4個のマーカーが映し出された画像平面上の点に対応する対応点は、以下に説明する設定部232〜決定部237による処理の結果を用いることにより得ることができる。また、生成部231は、マーカーが映し出される画像平面上の各点の位置と、3次元空間上のマーカーの位置との対応関係の情報を予め有するものとする。
【0043】
【数5】

【0044】
図3に、生成部231が生成する視線ベクトルの一例を示す。図3は、実施例1に係る生成部の説明に用いる図である。図3に示すように、生成部231は、カメラ座標系の原点Cから対応点の一つである点0に対応するベクトルV、およびカメラ座標系の原点Cから対応点の一つである点1に対応するベクトルVをそれぞれ生成する。同様に、図3には示していないが、生成部231は、カメラ座標系の原点Cから対応点の一つである点2に対応するベクトルV、およびカメラ座標系の原点Cから対応点の一つである点3に対応するベクトルVをそれぞれ生成する。
【0045】
図2に戻り、設定部232は、4個のマーカーが映し出された画像平面上の4個に対応する仮想的な4つの対応点の中から基準とするマーカー(以後、基準マーカーと表記する)に対応する点である基準点M(点0〜点3のいずれか)を選択する。また、設定部232は、基準点Mまでの距離Lに所定の値「L」を設定する。なお、距離Lに設定される所定の値「L」は、カメラの設置位置およびマーカーの配置位置から予め推定される。
【0046】
図2に戻り、作成部233は、基準点M以外の点、つまり基準マーカー以外のマーカーに対応する点1〜点3までの各距離L,L,Lを表す数式を作成する。距離L,L,Lは、上述した式(2)のように、余弦定理を用いて定式化して表すことができる。図4に、作成部233により作成される数式から得られる対応点までの距離の一例を示す。図4は、実施例1に係る作成部の説明に用いる図である。図4に示す点1(+)は、距離Lを表す数式の根号前の符号のうちプラスを選択した場合の距離に相当する。図4に示す点1(−)は、距離Lを表す数式の根号前の符号のうちマイナスを選択した場合の距離に相当する。
【0047】
図4に示すように、基準点として点0を選択した場合、カメラ座標系の原点Cから点1までの距離として、上述した式(2)から、点Cから点1(+)までの距離と点Cから点1(−)までの距離の2つの候補が得られる。言い換えれば、カメラ座標系の原点Cから点1までの距離は、基準マーカー以外のマーカーに対応する点1〜点3までの各距離L,L,Lを表す数式によって、高々2つの候補に限定することができる。
【0048】
図2に戻り、導出部234は、設定部232により設定された基準マーカーで採用する符号パターンを全て導出する。図5には、対応点0〜3のうち点0を基準点とした場合に導出される符号パターンを示す。図5は、実施例1に係る導出部の説明に用いる図である。図5に示すように、導出部234は、(+、+、+)、(+、+、−)、(+、−、+)、(+、−、−)、(−、+、+)、(−、+、−)、(−、−、+)、(−、−、−)の8つの符号パターンを導出する。
【0049】
また、導出部234は、作成部233により作成された各数式の根号内の値を算出し、各数式の根号の値が全て実数であるか否かを判定する。判定の結果、各数式の根号の値の全てが実数である場合には、導出部234は、符号パターンを棄却部235に送出する。一方、判定の結果、各数式の根号の値の全てが実数ではない場合には、導出部234は、後述する決定部237に対して処理の終了を送出する。なお、この実施例では、導出部234により、各数式の根号の値の全てが実数であるか否かを判定する場合を説明したが、これに限定されるものではなく、例えば、作成部233が各数式の根号の値の全てが実数であるか否かを判定してもよい。
【0050】
棄却部235は、導出部234により導出された符号パターンの中から、距離L、L、Lの少なくとも1つが相応しくない符号パターンを棄却する。まず、棄却部235は、基準点M以外の対応点Nを一つ選択する。例えば、点0を基準点Mとして選択した場合には、点1〜3のいずれか一つを対応点Nとして選択する。次に、棄却部235は、原点Cから基準点Mまでの視線ベクトル、および原点Cから対応点Nまでの視線ベクトルを生成部231から取得する。
【0051】
続いて、棄却部235は、基準点Mに対応する視線ベクトルと、選択した対応点Nに対応する視線ベクトルとの内積を計算し、視線ベクトルのなす角が90度よりも大きいか否かを判定する。例えば、棄却部235は、計算した内積の値が負の値である場合には、視線ベクトルのなす角が90度よりも大きいと判定する。判定の結果、棄却部235は、視線ベクトルのなす角が90度よりも大きい場合には、選択した対応点Nについてはプラスの符号のみを取り得ることを記録する。ここで、記録するとは、棄却部235が、内部的に有する記憶部に、対応点Nについてはプラスの符号のみを取り得ることを示すデータを保存することを意味する。
【0052】
一方、判定の結果、棄却部235は、視線ベクトルのなす角が90度以下である場合には、選択した対応点Nについてはプラス、マイナスの両方の符号を取り得ることを記録する。ここで、記録するとは、棄却部235が、内部的に有する記憶部に、対応点Nについてはプラス、マイナスの両方の符号を取り得ることを示すデータを保存することを意味する。そして、棄却部235は、対応点の中から、まだ選択していない他の全ての点についても上述してきたのと同様の処理を行い、全ての対応点が取り得る符号の組合せを列挙することにより符号パターンを決定する。
【0053】
以下、図6を用いて符号パターンの決定方法の一例を説明する。図6は、実施例1に係る棄却部の処理に関する概念的な説明に用いる図である。棄却部235は、図6に示す基準点0以外の点1〜3の中から点1を選択する。次に、棄却部235は、基準点0に対応する視線ベクトルV、および点1に対応する視線ベクトルVを生成部231から取得する。続いて、棄却部235は、視線ベクトルVと視線ベクトルVとの内積を計算し、視線ベクトルVと視線ベクトルVとのなす角が90度よりも大きいか否かを判定する。判定の結果、棄却部235は、視線ベクトルVと視線ベクトルVとのなす角が90度よりも大きい場合には、選択した点1ではプラスの符号のみを取り得ることを記録する。一方、判定の結果、棄却部235は、視線ベクトルのなす角が90度以下である場合には、選択した点1ではプラス、マイナスの両方の符号を取り得ることを記録する。
【0054】
そして、棄却部235は、対応点である点1〜点3の中から、まだ選択していない点2および点3についても上述してきたのと同様の処理を行い、点1〜点3が取り得る符号の組合せを列挙することにより符号パターンを決定する。例えば、棄却部235は、点1〜点3が取り得る符号の組合せを列挙する。その結果、棄却部235は、図6に示す符号パターンのうち、(−、+、+)、(−、+、−)、(−、−、+)、(−、−、−)を棄却し、(+、+、+)、(+、+、−)、(+、−、+)、(+、−、−)を点1〜点3が取り得る符号の組合せとして残す。よって、棄却部235は、棄却されずに残された4つの符号パターン、図6に示す(+、+、+)、(+、+、−)、(+、−、+)、(+、−、−)の4つの符号パターンを点1〜点3が取り得る符号パターンとして決定する。
【0055】
図2に戻り、算出部236は、棄却部235により決定された各符号パターンについて、基準点以外の各対応点間の距離の候補値と3次元空間上の実距離の値との誤差を演算し、各符号パターンについて最小誤差を算出する。
【0056】
まず、算出部236は、後に用いる最小誤差Jの値を初期化する。棄却部235により決定された各符号パターンの中から符号パターンを一つ選択し、選択した符号パターンについて距離L、LおよびLの値をそれぞれ算出する。算出部236は、設定部232により設定された基準点0までの距離Lの値「L」と、作成部233により作成された数式とを用いて、距離L、LおよびLの値を算出する。
【0057】
次に、算出部236は、距離L、LおよびLの値が正の実数であるか否かを判定する。なお、正の実数とは、実数のうち正の値を意味する。算出部236は、判定の結果、距離L、LおよびLの値が正の実数ではない場合には、次の符号パターンを選択する。これとは反対に、算出部236は、判定の結果、距離L、LおよびLの値が正の実数である場合には、誤差Eの値を、例えば、「0」に初期化する。なお、後に説明するが、誤差Eの値は、所定の条件を満足する場合に、基準点0以外の2点の組合せについて算出される誤差の値を加算された値となる。
【0058】
続いて、算出部236は、選択した符号パターン内で、基準点0以外の2点の組合せを一つ取得する。次に、算出部236は、取得した2点の組合せについて2点間の距離の候補値を算出する。続いて、算出部236は、算出した候補値に対応する3次元空間上のマーカー間の実距離の値をマーカー距離情報記憶部223から取得し、この候補値と、この候補値に対応する実距離の値との誤差を演算する。そして、算出部236は、算出した誤差の値を誤差Eの値に加算して更新し、誤差Eの値が最小誤差Jの値よりも大きいか否かを判定する。算出部236は、判定の結果、誤差Eの値が最小誤差Jの値よりも大きい場合には、棄却部235により決定された各符号パターンの中から次の符号パターンを選択する。
【0059】
一方、算出部236は、判定の結果、誤差Eの値が最小誤差Jの値以下である場合には、選択した符号パターン内で基準点0以外の2点の組合せの全てについて処理を完了したか否かを判定する。算出部236は、判定の結果、選択した符号パターン内で基準点0以外の2点の組合せの全てについて処理を完了している場合には、誤差Eの値で最小誤差Jの値を更新し、棄却部235により決定された各符号パターンの中から次の符号パターンを一つ選択する。これとは反対に、算出部236は、判定の結果、選択した符号パターン内で基準点0以外の2点の組合せの全てについて処理を完了していない場合には、選択した符号パターン内で、基準点0以外の2点の組合せの中から次の組合せを一つ取得する。以後、算出部236は、取得した2点の組合せについて上述したのと同様に処理を行う。
【0060】
そして、算出部236は、全符号パターン内について処理を完了した場合には、「基準点=点0」および「距離L=L」に関する処理結果を決定部237に送出する。例えば、算出部236は、最終的に残った誤差Eの値、すなわち該当符号パターン内の最小誤差の値と、最小誤差に対応する符号パターンの距離L、L、LおよびLの値を処理結果として送出する。
【0061】
図7〜図10を用いて、算出部236による処理を概念的に説明する。なお、図7〜図10では、誤差Eの値を初期化した後の算出部236の処理について説明する。図7〜図10は、実施例1に係る算出部の処理に関する概念的な説明に用いる図である。
【0062】
まず、算出部236は、図7に示す各符号パターン(+、+、+)、(+、+、−)、(+、−、+)、(+、−、−)の中から、例えば、符号パターン(+、+、+)を選択する。次に、算出部236は、選択した符号パターン(+、+、+)内で、基準点0以外の2点の組合せ(点1,点2)を取得する。続いて、算出部236は、2点の組合せ(点1,点2)について2点間の距離の候補値を算出する。次に、算出部236は、算出した候補値に対応する3次元空間上のマーカー間の実距離の値をマーカー距離情報記憶部223から取得し、この候補値と、この候補値に対応する実距離の値との誤差を算出する。続いて、算出部236は、算出した誤差の値を誤差Eの値に加算して更新し、誤差Eの値が最小誤差Jの値よりも大きいか否かを判定する。算出部236は、判定の結果、誤差Eの値が最小誤差Jの値以下である場合には、符号パターン(+、+、+)内で基準点0以外の2点の組合せの全て、(点1,点2)、(点1,点3)および(点2,点3)について処理を完了したか否かを判定する。
【0063】
算出部236は、判定の結果、基準点0以外の2点の組合せの全てについて処理を完了していない場合には、同一の符号パターン(+、+、+)内で基準点0以外の2点の組合せ、例えば(点1,点3)を取得する。そして、算出部236は、上述してきた基準点0以外の2点の組合せ(点1,点2)に対して実行した処理と同様の手順で処理を行う。すなわち、算出部236は、2点の組合せ(点1,点3)について2点間の距離の候補値を算出し、算出した候補値に対応する3次元空間上の実距離の値を取得し、この候補値と実距離の値との誤差を算出する。続いて、算出部236は、算出した誤差の値を誤差Eの値に加算して更新し、誤差Eの値が最小誤差Jの値よりも大きいか否かを判定する。算出部236は、判定の結果、誤差Eの値が最小誤差Jの値以下である場合には、誤差Eの値を最小誤差Jの値に加算して更新し、再び、符号パターン(+、+、+)内で基準点0以外の2点の組合せの全てについて処理を完了したか否かを判定する。
【0064】
なお、算出部236により、最初に選択された符号パターン(+、+、+)については、最小誤差Jの値が無限大に設定されているので、基準点0以外の2点の組合せの全てについての処理が必ず完了される。よって、図7に示すように、符号パターン(+、+、+)についての誤差Eの値「E000」が得られる。この誤差Eの値「E000」は、2点の組合せ(点1,点2)についての誤差の値と、2点の組合せ(点1,点3)についての誤差の値と、2点の組合せ(点2,点3)についての誤差の値が加算されたものに相当する。そして、この誤差Eの値「E000」は、符号パターン(+、+、+)の後に実行される他の符号パターンに対する処理の中で最小誤差Jの値として利用される。このため、上述した手順で処理を行えば、各符号パターンについて算出された誤差の値の中で最も小さい誤差の値を得ることが可能となる。
【0065】
ここで、符号パターン(+、+、+)内で基準点0以外の2点の組合せの全てについて処理を完了したか否かの判定結果が上述した判定結果と異なり、基準点0以外の2点の組合せの全てについて処理を完了している場合について説明する。算出部236は、判定の結果、基準点0以外の2点の組合せの全てについて処理を完了している場合には、誤差Eの値で最小誤差Jの値を更新する。次に、算出部236は、図7に示す各符号パターンの中から次の符号パターン、例えば、符号パターン(+、+、−)を選択する。そして、算出部236は、上述してきた符号パターン(+、+、+)に対して実行した処理と同様の手順で、符号パターン(+、+、−)に対し処理を行う。
【0066】
ここで、上述した誤差Eの値が最小誤差Jの値よりも大きいか否かの判定結果が上述した判定結果と異なり、誤差Eの値が最小誤差Jの値よりも大きい場合について説明する。算出部236は、判定の結果、誤差Eの値が最小誤差Jの値よりも大きい場合には、現在選択中の符号パターンに対する処理を取りやめ、図7に示す各符号パターンの中から次の符号パターンを選択する。そして、算出部236は、上述してきた符号パターン(+、+、+)に対して実行した処理と同様の手順で処理を行う。
【0067】
例えば、算出部236は、符号パターン(+、+、−)の処理について、誤差Eの値が最小誤差Jの値よりも大きいという判定結果が得られた場合には、符号パターン(+、+、−)の処理を取りやめ、例えば、未選択の符号パターン(+、−、−)を選択する。次に、算出部236は、符号パターン(+、−、−)内で基準点0以外の2点の組合せ(点1,点2)を取得する。続いて、算出部236は、2点の組合せ(点1,点2)について2点間の距離の候補値を算出し、算出した候補値に対応する3次元空間上の実距離の値を取得し、この候補値と実距離の値との誤差を算出する。次に、算出部236は、算出した誤差の値を誤差Eの値に加算して更新し、誤差Eの値が最小誤差Jの値よりも大きいか否かを判定する。算出部236は、判定の結果、誤差Eの値が最小誤差Jの値以下である場合には、上述してきたのと同様に、符号パターン(+、−、−)内で基準点0以外の2点の組合せの全てについて処理を完了したか否かを判定する。以後、算出部236は、上述してきた同様の手順で処理を行う。一方、算出部236は、誤差Eの値が最小誤差Jの値よりも大きい場合には、誤差Eの値を最小誤差Jの値に加算して更新し、再び、符号パターン(+、−、−)内で基準点0以外の2点の組合せの全てについて処理を完了したか否かを判定する。以下、算出部236は、上述してきた同様の手順で処理を行う。
【0068】
上述してきた手順で、算出部236は、図7に示す各符号パターンについての演算を行うことにより、図8に示すように、誤差「E000」、「E001」、「E002」、「E003」の中で最も値の小さい最小誤差(minE000〜E003)の値を得る。そして、算出部236は、「基準点=点0」および「距離L=L」に関し、最小誤差(minE000〜E003)の値と、これに対応するL、L、LおよびLの値を処理結果として後述する決定部237に送出する。
【0069】
また、図9に示すように、算出部236は、基準点0までの距離の値として、「L」とは異なる値「L+ΔL」が設定部232により設定されると、「基準点=点0」および「距離L=L+ΔL」に関し、上述してきた手順で処理を実行する。そして、算出部236は、「基準点=点0」および「距離L=L+ΔL」に関し、最小誤差(minE010〜E013)の値と、これに対応するL、L、LおよびLの値を処理結果として後述する決定部237に送出する。
【0070】
また、図10に示すように、算出部236は、点0とは異なる点1が新たな基準点として設定部232により設定されると、「基準点=点1」および「距離L=L´」に関し、上述してきた手順で処理を実行する。そして、算出部236は、「基準点=点1」および「距離L=L´」に関し、最小誤差min(E020〜E02v:vは自然数)の値と、これに対応するL、L、LおよびLの値を処理結果として送出する。また、算出部236は、図10には示していないが、基準点1までの距離の値として、「L´」とは異なる値「L´+ΔL´」が設定部232により設定されると、「基準点=点1」および「距離L=L´+ΔL´」に関し、上述してきた手順で処理を実行する。そして、算出部236は、「基準点=点1」および「距離L=L´+ΔL´」に関し、最小誤差の値と、これに対応するL、L、LおよびLの値を処理結果として後述する決定部237に送出する。
【0071】
なお、算出部236は、基準点までの距離の設定があるたびに、基準点および基準点までの距離に対応する各符号パターンに対応する誤差のうちの最小誤差の値を算出する場合を説明したが、これに限定されるものではない。例えば、算出部236は、同一の基準点に対する処理内では、最小誤差Jを初期化せずに更新を続け、同一の基準点内の各符号パターンの中で値が最も小さい最小誤差を算出するようにしてもよい。あるいは、算出部236は、全ての基準点に対する処理内で最小誤差Jを初期化せずに更新を続け、全ての基準点内の各符号パターンに対応する誤差のうちの最小誤差の値を算出するようにしてもよい。
【0072】
図2に戻り、決定部237は、算出部236からの処理結果に基づいて、カメラ座標系の原点から、4個以上のマーカーが映し出された画像平面上の点に対応する3次元空間上の対応点の位置までの距離を決定する。
【0073】
例えば、決定部237は、最小誤差の値と、これに対応するL、L、LおよびLの値を処理結果として算出部236から取得すると、取得した処理結果を保存する。そして、決定部237は、基準点までの距離が取りうる値の全てを設定して処理を完了しているか否かを判定する。例えば、決定部237は、現在基準点0が選択されるとすると、基準点までの距離Lが取りうる値の全てを設定して処理を完了しているか否かを判定することとなる。判定の結果、距離Lが取りうる値の全てを設定して処理を完了していない場合には、決定部237は、設定部232に対して、距離Lの値として「L」とは異なる別の値を設定するように依頼する。
【0074】
一方、決定部237は、判定の結果、距離Lが取りうる値の全てを設定して処理を完了している場合には、対応点である点0〜点3の全てを基準点として処理を完了しているか否かを判定する。例えば、決定部237は、現在基準点0が選択されるとすると、残りの対応点である点1〜点3の全てを基準点として処理を完了したか否かを判定することとなる。判定の結果、対応点である点0〜点3の全てを基準点として処理を完了していない場合には、決定部237は、設定部232に対して、新たな基準点および距離の設定を依頼する。
【0075】
一方、決定部237は、判定の結果、対応点である点0〜点3の全てを基準点として処理を完了している場合には、算出部236から取得してこれまで保存した処理結果の中で、最小誤差の値が最も小さいものを特定する。例えば、決定部237は、図10に示す最小誤差min(E000〜E003)、min(E010〜E013)、min(E020〜E02v:vは自然数)等の中から、値が最も小さい最小誤差を特定する。そして、決定部237は、特定された最小誤差に対応付けられているL、L、LおよびLの値を最適解として決定し、位置姿勢推定部238に送る。
【0076】
図2に戻り、位置姿勢推定部238は、決定部237から最適解として取得したL、L、LおよびLの値を用いて、画像平面上の点に対応するカメラ座標系における3次元位置を算出し、算出した位置を用いてカメラの位置および姿勢を算出する。以下に、図11を用いて、実施例1に係る位置姿勢推定部238について説明する。図11は、実施例1に係る位置姿勢推定部の説明に用いる図である。図11に示すαはカメラ座標系を示す。また、図11に示すβは世界座標系を示す。また、図11に示すW、W、Wは、世界座標系におけるマーカーの3次元位置を示し、Wは点0、Wは点1、Wは点2にそれぞれ対応するものとする。また、カメラの位置および姿勢を算出する技術自体は公知技術であり、例えば、玉木 徹 他、「姿勢推定と回転行列」(電気情報通信学会研究報告、信学技報,vol.109, no.203, SIS2009-23, pp.59-64, 2009年9月)等を参照されたい。なお、以下では、説明を簡略化するために、マーカーが映し出された画像平面上の点に対応する3つの対応点(点0、点1および点2)を例に挙げて説明するが、対応点の数が4つでも同様に処理できる。
【0077】
例えば、位置姿勢推定部238は、決定部237から最適解として取得したL、LおよびLの値と上述した式(5)とを用いて、画像平面上の点に対応するカメラ座標系における対応点P、P、Pを算出する。そして、位置姿勢推定部238は、カメラ座標系における3次元位置(P、P、P)と、これらに対応する世界座標系におけるマーカーの位置(W、W、W)とに基づいて、公知技術を利用してカメラの位置および姿勢を算出する。
【0078】
[画像処理装置による処理(実施例1)]
次に、図12〜図14を用いて、実施例1に係る画像処理装置による処理の流れを説明する。図12は、実施例1に係る最適解算出処理の流れを説明する。図12は、実施例1に係る最適解算出処理の流れを示す図である。図12に示す処理は、画像フレームが取得されるたびに実行される。
【0079】
図12に示すように、例えば、制御部230により取得部210による画像取得が検出されると(ステップS101,YES)、生成部231は、視線ベクトルを生成する(ステップS102)。なお、取得部210による画像取得が検出されない場合(ステップS101,NO)、制御部230は、取得部210による画像取得の検出判定を繰り返し実行する。
【0080】
次に、設定部232は、各マーカーに対応する点の中から基準マーカーに対応する基準点M(点0〜点3のいずれか)を選択する(ステップS103)。続いて、導出部234は、設定部232により設定された基準マーカーで採用する符号パターンを全て導出する(ステップS104)。次に、設定部232は、カメラ座標系の原点Cから基準点Mまでの距離Lに所定の値を設定する(ステップS105)。続いて、作成部233は、カメラ座標系の原点Cから基準点M以外の各点(点1〜3)までの距離L、LおよびLの値を表す数式を作成する(ステップ106)。次に、画像処理装置200により実行される処理は最適解候補算出処理に移行される(ステップS107)。最適解候補算出処理は、主に、算出部236によりが実行される。なお、最適解候補算出処理については、図13を用いて後述する。
【0081】
続いて、決定部237は、ステップS107における最適解候補算出処理の処理結果を取得すると、取得した処理結果を保存する(ステップS108)。次に、決定部237は、基準点Mまでの距離Lが取りうる値の全てを設定して処理を完了しているか否かを判定する(ステップS109)。
【0082】
判定の結果、距離Lが取りうる値の全てを設定して処理を完了していない場合には(ステップS109,NO)、決定部237は、設定部232に対して、距離Lの値として「L」とは異なる値を設定するように依頼する。図12に示す処理は、上述したステップS105に処理を戻す。
【0083】
一方、決定部237は、判定の結果、距離Lが取りうる値の全てを設定して処理を完了している場合には(ステップS109,YES)、点0〜点3の全てを基準点として処理を完了しているか否かを判定する(ステップS110)。判定の結果、点0〜点3の全てを基準点として処理を完了していない場合には(ステップS110,NO)、決定部237は、上述したステップS103に処理を戻す。
【0084】
一方、決定部237は、判定の結果、点0〜点3の全てを基準点として処理を完了している場合には(ステップS110,YES)、次のように処理する。すなわち、決定部237は、ステップS107にて保存された最小誤差の中から、最小誤差の値が最小のときのL、各L(i=1〜3)の値を最適解として決定し、位置姿勢推定部238に送出する(ステップS111)。以上で、実施例1に係る最適解算出処理が完了するが、上述してきた図12に示す最適解算出処理は、処理内容に矛盾を生じさせない範囲でその順序を入れ替えることができる。
【0085】
なお、上述したステップS109およびステップS110の判定処理により、基準点までの距離Lの最適化を行われることとなり、図12に示す処理の内容は以下に示す式(6)で表すことができる。なお、以下の式(6)に示す「i0」は基準点を示し、「Li0」は基準点までの距離を示す。
【0086】
【数6】

【0087】
続いて、図13を用いて、実施例1に係る最適解候補算出処理の流れを説明する。図13は、実施例1に係る最適解候補算出処理の流れを示す図である。図13に示すように、導出部234は、図12に示すステップS106にて作成された全数式の根号の値を算出し、全数式の根号の値が実数であるか否かを判定する(ステップS201)。判定の結果、根号の値が実数ではない場合には(ステップS201,NO)、導出部234は、図12に示すステップS109に処理を戻す。
【0088】
一方、根号の値が実数であると導出部234により判定された場合には(ステップS201,YES)、画像処理装置200により実行される処理は符号パターン決定処理に移行される(ステップS202)。符号パターン決定処理は、棄却部235により実行される。符号パターン決定処理については、図14を用いて後述する。
【0089】
続いて、算出部236は、後に用いる最小誤差Jの値を初期化し(ステップS203)、ステップS203に示す符号パターン決定処理により得られる各符号パターンについて、以下のステップS204〜ステップS215までの処理を実行する。なお、ステップS204〜ステップS215は、全符号パターンについてステップS205〜ステップS214の処理が完了するまで繰り返し実行することを意味する。算出部236は、符号パターンを一つ選択し(ステップS204)、選択した符号パターンについて距離L、LおよびLの値をそれぞれ算出する(ステップS205)。次に、算出部236は、距離L、LおよびLの値が正の実数であるか否かを判定する(ステップS206)。判定の結果、算出部236は、距離L、LおよびLの値が正の実数ではない場合には(ステップS206,NO)、次の符号パターンを選択する。これとは反対に、算出部236は、判定の結果、距離L、LおよびLの値が正の実数である場合には(ステップS206,YES)、誤差Eの値を初期化(E=0)する(ステップS207)。
【0090】
続いて、算出部236は、ステップS204にて選択した符号パターン内で基準点M以外の2点(点1〜3のうちの2点)の組合せを一つ取得する(ステップS208)。次に、算出部236は、取得した2点の組合せについて2点間の距離の候補値を算出する(ステップS209)。続いて、算出部236は、算出した候補値に対応する3次元空間上のマーカー間の実距離の値をマーカー距離情報記憶部223から取得し、この候補値と、この候補値に対応する実距離の値との誤差を演算する(ステップS210)。そして、算出部236は、算出した誤差の値を誤差Eの値に加算して更新し(ステップS211)、誤差Eの値が最小誤差Jの値よりも大きいか否かを判定する(ステップS212)。
【0091】
算出部236は、判定の結果、誤差Eの値が最小誤差Jの値以下である場合には(ステップS212,NO)、選択した符号パターン内で基準点0以外の2点の組合せの全てについて処理を完了したか否かを判定する(ステップS213)。算出部236は、判定の結果、選択した符号パターン内で基準点0以外の2点の組合せの全てについて処理を完了している場合には(ステップS213,YES)、誤差Eの値で最小誤差Jの値を更新する(ステップS214)。続いて、ステップS202の符号パターン決定処理により得られる全符号パターンについてステップS205〜ステップS214の処理が完了するまで(ステップS215)、上述したステップS202に処理を戻す。
【0092】
ここで、ステップS213の説明に戻る。算出部236は、判定の結果、選択した符号パターン内で基準点0以外の2点の組合せの全てについて処理を完了していない場合には(ステップS213,NO)、上述したステップS208に処理を戻す。
【0093】
ここで、ステップS212の説明に戻る。算出部236は、判定の結果、誤差Eの値が最小誤差Jの値よりも大きい場合には(ステップS213,YES)、次のように処理を実行する。すなわち、算出部236は、ステップS202の符号パターン決定処理により得られる全符号パターンについてステップS205〜ステップS214の処理が完了するまで(ステップS215)、上述したステップS202に処理を戻す。
【0094】
そして、算出部236は、ステップS204〜ステップS215までの処理を完了した場合には、次のステップS216の処理を行う。すなわち、算出部236は、「基準点=M(点0〜点3のいずれか)」に関し、最終的に残った誤差Eの値、すなわち最小誤差の値と、最小誤差に対応する符号パターンの距離L、L、LおよびLの値を処理結果として送出する(ステップS216)。以上で、実施例1に係る最適解候補算出処理が完了するが、上述してきた図13に示す最適解算出処理は、処理内容に矛盾を生じさせない範囲でその順序を入れ替えることができる。
【0095】
なお、上述したステップS210で用いるマーカー間の実距離の値は、以下の式(7)で表すことができる。
【0096】
【数7】

【0097】
なお、上述したステップS205で算出される距離L、LおよびLの値は、以下に示す式(8)の解を求めることにより算出することができる。
【0098】
【数8】

【0099】
なお、上述したステップS210で算出される誤差の値は、以下の式(9)で表すことができる。
【0100】
【数9】

【0101】
なお、上述したステップS211の処理は、以下の式(10)で表すことができる。
【0102】
【数10】

【0103】
次に、図14を用いて、実施例1に係る符号パターン決定処理の流れを説明する。図14は、実施例1に係る符号パターン決定処理の流れを示す図である。図14に示すように、符号パターン決定処理では、基準点M以外の全ての対応点N(点1〜点3)について、ステップS301〜ステップS305までの処理が繰り返し実行される。
【0104】
まず、棄却部235は、基準点M以外の対応点N(点1〜点3のいずれか)を一つ取得し(ステップS301)、∠MCNが90度よりも大きいか否かを判定する(ステップS302)。なお、∠MCNとは、原点C及び基準点Mを結ぶ線分と、原点C及び対応点Nを結ぶ線分とがなす角度をいう。∠MCNが90度よりも大きいか否かの判定は、上述したように、原点C及び基準点Mを結ぶ線分上の視線ベクトルと、原点C及び対応点Nを結ぶ線分上の視線ベクトルとの内積に基づいて行なう。
【0105】
棄却部235は、判定の結果、∠MCNが90度よりも大きい場合には(ステップS302,YES)、選択した対応点Nの一点ではプラスの符号のみを取り得ることを記録する(ステップS303)。一方、棄却部235は、判定の結果、∠MCNが90度以下である場合には(ステップS302,NO)、選択した対応点Nの一点ではプラス、マイナスの両方の符号を取り得ることを記録する(ステップS304)。
【0106】
そして、棄却部235は、基準点M以外の全ての対応点Nについて、ステップS301〜ステップS305までの処理を終えると、対応点Nが取り得る符号の組合せを列挙して符号パターンを決定する(ステップS306)。以上で、実施例1に係る符号パターン決定処理が完了する。
【0107】
上述してきた図12〜図14の処理の意味は、以下の数式(11)で表すことができる。なお、以下に示す式(11)の左辺のJは、上述した式(6)のJ、つまり、Liを符号選択によって求めることを含んだ誤差評価関数である。そして、式(11)から得られる解は、基準点「i0」までの距離を「Li0」とした時に、基準点「i0」以外の点iまでの距離「Li」を符号選択により最適に選んだ場合に残っている誤差となる。よって、式(11)は、Jを最小化する解を探索することにより、基準点「i0」までの最適な距離「Li0」と、基準点「i0」以外の点iまでの最適な距離「Li」を同時に得ることができることを表している。
【0108】
【数11】

【0109】
[実施例1による効果]
上述してきたように、実施例1に係る画像処理装置200は、導出された符号パターンの中から、距離L、L、Lの値の少なくとも1つが相応しい値となり得えない符号パターンを棄却する。よって、実施例1に係る画像処理装置200は、4個以上のマーカーが映し出された画像平面上の点に対応する3次元空間上の対応点の位置を迅速かつ精度良く算出できる。この結果、実施例1によれば、カメラの取り付け位置や取り付け姿勢の情報を迅速かつ精度良く得ることができる。なお、3点の場合は、最少誤差を与える解の組合せである最適解が1つに定まらない。このため、上述してきた実施例1は、4点以上のマーカーを用いて、画像処理装置が最適解算出処理を行う。この結果、実施例1では、最適解を得ることができる。
【0110】
また、実施例1に係る画像処理装置は、例えば、図13に示すように、符号パターンの誤差を算出するときに、従前に算出された符号パターンの誤差にうちの最小誤差よりも誤差が大きくなる符号パターンの処理は取りやめて、次の符号パターンの処理を行う。このため、実施例1によれば、4個以上のマーカーが映し出された画像平面上の点に対応する3次元空間上の対応点の位置をより迅速に算出できる。この結果、実施例1によれば、カメラの取り付け位置や取り付け姿勢の情報をより迅速に得ることができる。
【0111】
また、実施例1に係る画像処理装置は、基準点M以外の点、つまり基準マーカー以外のマーカーに対応する点1〜点3までの各距離L,L,Lを表す数式の中の根号内が虚数となる場合には、基準点までの距離や基準点の設定をやり直す。このため、実施例1によれば、4個以上のマーカーが映し出された画像平面上の点に対応する3次元空間上の対応点の位置をより迅速に算出できる。この結果、実施例1によれば、カメラの取り付け位置や取り付け姿勢の情報をより迅速に得ることができる。
【実施例2】
【0112】
以下、本願の開示する画像処理プログラムおよび画像処理装置の他の実施形態を説明する。
【0113】
(1)装置構成等
例えば、図2に示した画像処理装置200の機能ブロックの構成は概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。例えば、図2に示す制御部230を、図15に示すように、カメラ座標系制御ユニット230Aと位置姿勢推定ユニット230Bとに機能的または物理的に分散してもよい。このように、画像処理装置200の機能ブロックの全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。図15は、実施例2に係る画像処理装置の構成を示す機能ブロック図である。
【0114】
(2)画像処理プログラム
また、上述の実施例1にて説明した画像処理装置200により実行される各種の処理は、例えば、車両に搭載されるECU(Electronic Control Unit)に実装されたマイコンなどの電子機器で所定のプログラムを実行することによって実現することもできる。あるいは、上述の実施例1にて説明した画像処理装置200により実行される各種の処理は、ロボットなどに実装されるマイクロプロセッサなどの電子機器で所定のプログラムを実行することによって実現することもできる。そこで、以下では、図16を用いて、実施例1にて説明した画像処理装置200により実行される処理と同様の機能を実現する画像処理プログラムを実行する電子機器の一例を説明する。図16は、画像処理プログラムを実行する電子機器の一例を示す図である。
【0115】
図16に示すように、画像処理装置200により実行される各種処理を実現する電子機器300は、各種演算処理を実行するCPU(Central Processing Unit)310を有する。また、図16に示すように、電子機器300は、カメラ画像を取得するためのカメラインターフェース320、ディスプレイとの間で各種データのやり取りを行うためのディスプレイインターフェース330を有する。また、図16に示すように、電子機器300は、ハードウェアアクセラレータとして機能するグラフィックエンジン340を有する。
【0116】
また、図16に示すように、電子機器300は、CPU310により各種処理を実現するためのプログラムやデータ等を記憶するハードディスク装置350と、各種情報を一時記憶するRAM(Random Access Memory)などのメモリ360とを有する。そして、各装置310〜360は、バス370に接続される。
【0117】
なお、CPU310の代わりに、例えば、MPU(Micro Processing Unit)などの電子回路、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を用いることもできる。また、メモリ360の代わりに、フラッシュメモリ(flash memory)などの半導体メモリ素子を用いることもできる。また、ハードディスク装置350の代わりに、フラッシュメモリなどの不揮発性の半導体メモリ素子用いることもできる。
【0118】
ハードディスク装置350には、画像処理装置200の機能と同様の機能を発揮する画像処理プログラム351および画像処理用データ352が記憶されている。なお、この画像処理プログラム351を適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。
【0119】
そして、CPU310が、画像処理プログラム351をハードディスク装置350から読み出してメモリ360に展開することにより、図16に示すように、画像処理プログラム351は画像処理プロセス361として機能する。画像処理プロセス361は、ハードディスク装置350から読み出した画像処理用データ352等の各種データを適宜メモリ360上の自身に割当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。なお、図16に示すように、画像処理プロセス361は、プロセス実行時にメモリ360に補助的に格納されるが、画像処理プロセス361は、あくまでもCPU310上で動作しているものとする。
【0120】
なお、画像処理プロセス361は、例えば、実施例1で説明した画像処理装置200の制御部230にて実行される処理、例えば、図12〜14に示す処理を含む。
【0121】
なお、画像処理プログラム351については、必ずしも最初からハードディスク装置350に記憶させておく必要はない。例えば、電子機器300が実装されたECUへ対応ドライブを接続可能なフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、電子機器300がこれらから各プログラムを読み出して実行するようにしてもよい。
【0122】
さらには、公衆回線、インターネット、LAN、WANなどを介して、電子機器300が実装されたECUに接続される「他のコンピュータ(またはサーバ)」などに各プログラムを記憶させておく。そして、電子機器300がこれらから各プログラムを読み出して実行するようにしてもよい。
【符号の説明】
【0123】
100 撮影装置
200 画像処理装置
210 取得部
220 記憶部
221 画像記憶部
222 カメラパラメータ記憶部
223 マーカー距離情報記憶部
230 制御部
231 生成部
232 設定部
233 作成部
234 導出部
235 棄却部
236 算出部
237 決定部
238 位置姿勢推定部
300 電子機器
310 CPU
320 カメラインターフェース
330 ディスプレイインターフェース
340 グラフィックエンジン
350 ハードディスク装置
351 画像処理プログラム
352 画像処理用データ
360 メモリ
361 画像処理プロセス

【特許請求の範囲】
【請求項1】
コンピュータに、
実空間に設けられた4個以上のマーカーをカメラにより撮影した画像を取得し、
前記カメラの焦点距離および光軸位置の情報を含む内部パラメータおよび前記画像における前記4個以上のマーカーの各々の位置に基づいて、前記カメラから該4個以上のマーカーの各々に対応するベクトルを生成し、
前記4個以上のマーカーの中から基準マーカーを一つ選択し、
前記基準マーカー以外の残りのマーカーのうちのそれぞれに対するベクトルと、該基準マーカーのベクトルとの内積値を算出し、
前記内積値の符号が負となる前記基準マーカー以外のマーカーについて、該基準マーカーを用いて該基準マーカー以外のマーカーと前記カメラとの距離を求める二次方程式の解を表す数式に含まれる符号のうち、負の符号の採用を棄却し、
棄却した結果に基づいて、前記基準マーカー以外のマーカーのそれぞれに対する前記数式に含まれる符号を、全ての該基準マーカー以外のマーカーについて組み合わせた符号パターンを生成し、
前記基準マーカーと前記カメラとの距離として第1の値を設定し、
前記第1の値と前記二次方程式と棄却した前記結果とを用いて、該第1の値における、前記基準マーカー以外のマーカーの各々と前記カメラとの距離の候補値を、1つまたは2つ算出し、
前記符号パターンごとに、該符号パターン及び前記1つまたは2つの候補値に基づいて算出されるマーカー間距離と、前記実空間におけるマーカー間の距離との誤差を算出し
前記第1の値とは異なる第2の値を設定した場合に、前記符号パターンごとに他の誤差を算出し、
前記第1の値を選択した場合に算出された前記誤差および前記第2の値を選択した場合に算出された前記他の誤差に基づいて、前記4個以上のマーカーの各々と前記カメラとの距離を決定し、
決定した前記4個以上のマーカーの各々と前記カメラとの距離に基づいて、該カメラの世界座標系における位置および姿勢を演算する
処理を実行させることを特徴とする画像処理プログラム。
【請求項2】
誤差を算出する処理において、従前に算出された第一の符号パターンのうちの最小誤差の値よりも、第二の符号パターンにおける前記基準マーカー以外のマーカーのうちの第一のマーカーと該第一のマーカとは異なる第二のマーカーとのマーカー間距離に対する誤差が小さい場合に、該第二の符号パターンにおける第三のマーカと該第三のマーカとは異なる第四のマーカーとの誤差を算出し、該第一のマーカーと該第二のマーカーとのマーカー間距離の誤差、及び該第三のマーカーと該第四のマーカーとのマーカー間距離の誤差を加算することを特徴とする請求項1に記載の画像処理プログラム。
【請求項3】
前記コンピュータに、
前記数式を作成する処理により作成された数式で与えられる解が実数となるか否かを判定し、前記数式の解が実数とならないとの判定結果を得た場合に、前記第1の値とは異なる第2の値を設定する処理をさらに実行させることを特徴とする請求項1または2に記載の画像処理プログラム。
【請求項4】
前記第一の値および前記第二の値は、前記カメラを有する車体の設計における取り付け位置に基づいて予め設定された数値範囲に含まれる値であることを特徴とする請求項1乃至請求項3のいずれか一項に記載の画像処理プログラム。
【請求項5】
前記コンピュータに、
演算した前記カメラの世界座標系における位置および姿勢を、前記車体が有する記憶領域に格納する処理を更に実行させることを特徴とする請求項4に記載の画像処理プログラム。
【請求項6】
実空間に設けられた4個以上のマーカーをカメラにより撮影した画像を取得する取得部と、
前記カメラの焦点距離および光軸位置の情報を含む内部パラメータおよび前記画像における前記4個以上のマーカーの各々の位置に基づいて、前記カメラから該4個以上のマーカーの各々に対応するベクトルを生成する生成部と、
前記4個以上のマーカーの中から基準マーカーを一つ選択し、前記基準マーカーと前記カメラとの距離として第1の値、または前記第1の値とは異なる第2の値を設定する設定部と、
前記基準マーカー以外の残りのマーカーのうちのそれぞれに対するベクトルと、該基準マーカーのベクトルとの内積値を算出し、前記内積値の符号が負となる前記基準マーカー以外のマーカーについて、該基準マーカーを用いて該基準マーカー以外のマーカーと前記カメラとの距離を求める二次方程式の解を表す数式に含まれる符号のうち、負の符号の採用を棄却し、棄却した結果に基づいて、前記基準マーカー以外のマーカーのそれぞれに対する前記数式に含まれる符号を、全ての該基準マーカー以外のマーカーについて組み合わせた符号パターンを生成する棄却部と、
前記第1の値と、前記二次方程式と、棄却した前記結果とを用いて、該第1の値における、前記基準マーカー以外のマーカーの各々と前記カメラとの距離の候補値を、1つまたは2つ算出し、前記符号パターンごとに、該符号パターン及び前記1つまたは2つの候補値に基づいて算出されるマーカー間距離と、前記実空間におけるマーカー間の距離との誤差を算出する算出部と、
前記第1の値とは異なる第2の値が前記設定部により設定された場合に、前記符号パターンごとに他の誤差を算出し、
前記第1の値を設定した場合に算出された前記誤差および前記第2の値を設定した場合に算出された前記他の誤差に基づいて、前記4個以上のマーカーの各々と前記カメラとの距離を決定する決定部と、
前記決定部により決定された前記4個以上のマーカーの各々と前記カメラとの距離に基づいて、該カメラの世界座標系における位置および姿勢を演算する演算部と
を有することを特徴とする画像処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2012−103213(P2012−103213A)
【公開日】平成24年5月31日(2012.5.31)
【国際特許分類】
【出願番号】特願2010−254199(P2010−254199)
【出願日】平成22年11月12日(2010.11.12)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】