以下添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
[第1の実施形態]
本実施形態に係る位置姿勢計測装置は、撮像装置と計測対象物体の位置及び姿勢の計測を行う。以下、本実施形態に係る位置姿勢計測装置及び位置姿勢計測方法について説明する。
図1は、本実施形態における位置姿勢計測装置の構成を示している。同図に示したように、本実施形態における位置姿勢計測装置100は、画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部120によって構成される。そして、撮像装置130及び、撮像装置130と計測対象物体170に取り付けられた位置姿勢センサ140(140a,140b)に接続されている。
計測対象物体170上の複数の位置には、物体座標系(計測対象物体170上に定義される座標系)における位置が既知である複数個の指標Qk(k=1,2,・・・,K)が配置されている。図1の例は、K=9、すなわち9個の指標Q1〜Q9が配置されている状況を示している。指標Qkは、例えば、それぞれが異なる色を有する同一形状(図では円形)のマーカによって構成してもよいし、それぞれが異なるテクスチャ特徴を有する自然特徴等の特徴点によって構成してもよい。また、ある程度の面積を有する四角形の単色領域によって形成されるような、四角形指標を用いることも可能である。撮影画像上における投影像の画像座標が検出可能であって、かついずれの指標であるかが何らかの方法で識別可能であるような指標であれば、何れの形態であってもよい。また指標は故意に設定されたものであっても良いし、故意に設定されたものではない、自然形状のものを用いても良い。
例えばビデオカメラである撮像装置130が出力する画像(以下、これを撮影画像と呼ぶ)は、位置姿勢計測装置100に入力される。
6自由度センサである位置姿勢センサ140a及び140bは、それぞれ撮像装置130及び計測対象物体170に装着されており、基準座標系における撮像装置130及び計測対象物体170の位置及び姿勢を計測する。位置姿勢センサ140が出力する計測値は、位置姿勢計測装置100に入力される。位置姿勢センサ140は、例えば、米国Polhemus社のFASTRAK等によって構成される。なお、位置姿勢センサ140によって計測される位置及び姿勢は、磁場の歪み等の影響によって誤差を含んだものとなっている。ただし、計測範囲内にあっては連続的に安定して位置及び姿勢を計測することが可能である。
画像入力部160は、位置姿勢装置100へ入力される撮影画像をデジタルデータに変換し、指標検出部110へと出力する。
センサ計測値入力部150は、位置姿勢センサ140(140a,140b)から夫々の計測値を入力し、位置姿勢算出部120へと出力する。
指標検出部110は、画像入力部160より撮影画像を入力し、入力した画像中に撮影されている指標Qkの画像座標を検出する。例えば、指標Qkの各々が異なる色を有するマーカによって構成されている場合には、撮影画像上から各々のマーカ色に対応する領域を検出し、その重心位置を指標の検出座標とする。また、指標Qkの各々が異なるテクスチャ特徴を有する特徴点によって構成されている場合には、既知の情報として予め保持している各々の指標のテンプレート画像によるテンプレートマッチングを撮影画像上に施すことにより、指標の位置を検出する。また、四角形指標を用いる場合は、画像に2値化処理を施した後にラベリングを行い、4つの直線によって形成されている領域を指標候補として検出する。さらに、候補領域の中に特定のパターンがあるか否かを判定することによって誤検出を排除し、また、指標の識別子を取得する。なお、このようにして検出される四角形指標は、本明細書では、4つの頂点の個々によって形成される4つの指標であると考える。
指標検出部110は、さらに、検出された各々の指標Qknの画像座標uQknとその識別子knを位置姿勢算出部120へと出力する。ここで、n(n=1,,,N)は検出された指標夫々に対するインデックスであり、Nは検出された指標の総数を表している。
位置姿勢算出部120は、センサ計測値入力部150の出力である撮像装置130及び計測対象物体170の位置及び姿勢の計測値と、指標検出部110の出力である各々の指標Qknの画像座標uQknを入力し、入力した情報に基づいて、計測対象物体170あるいは撮像装置130の位置及び姿勢の計測値の誤差を補正し、補正後の位置及び姿勢のデータを出力する。
なお、図1に示した画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部120の少なくとも一部は、独立した装置として実現しても良いし、夫々1つもしくは複数のコンピュータにインストールし、コンピュータのCPUにより実行することで、その機能を実現するソフトウェアとして実現しても良い。本実施形態では、各部(画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部120)は、それぞれソフトウェアにより実現され、同一のコンピュータにインストールされているものとする。
図2は、画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部120の夫々の機能を、ソフトウェアを実行することで実現するためのコンピュータの基本構成を示す図である。
CPU1001は、RAM1002やROM1003に格納されたプログラムやデータを用いてコンピュータ全体の制御を行うと共に、画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部120の夫々のソフトウェアの実行を制御して、各部の機能を実現する。
RAM1002は、外部記憶装置1007や記憶媒体ドライブ1008からロードされたプログラムやデータを一時的に記憶するエリアを備えると共に、CPU1001が各種の処理を行うために必要とするワークエリアを備える。
ROM1003は、一般にコンピュータのプログラムや設定データなどが格納されている。キーボード1004、マウス1005は入力デバイスであり、操作者はこれらを用いて、各種の指示をCPU1001に入力することができる。
表示部1006は、CRTや液晶ディスプレイなどにより構成されており、例えば、位置姿勢計測のために表示すべきメッセージ等を表示することができる。
外部記憶装置1007は、ハードディスクドライブなどの大容量情報記憶装置として機能する装置であって、ここにOS(オペレーティングシステム)やCPU1001が実行するプログラム等を保存する。また本実施形態の説明において、既知であると説明する情報はここに保存されており、必要に応じてRAM1002にロードされる。
記憶媒体ドライブ1008は、CD−ROMやDVD−ROMなどの記憶媒体に記憶されているプログラムやデータをCPU1001からの指示に従って読み出して、RAM1002や外部記憶装置1007に出力する。
I/F1009は、撮像装置130を接続するためのアナログビデオポートあるいはIEEE1394等のデジタル入出力ポート、位置姿勢センサ140を接続するためのRS232CあるいはUSB等のシリアルポート、また、算出した位置及び姿勢を外部へ出力するためのイーサネット(登録商標)ポート等によって構成される。夫々が入力したデータはI/F1009を介してRAM1002に取り込まれる。画像入力部160及びセンサ計測値入力部150の機能の一部は、I/F1009によって実現される。
上述した各構成要素は、バス1010によって相互に接続される。
図3は、位置姿勢算出部120の処理手順を示すフローチャートであり、本実施形態ではCPU1001が位置姿勢算出部120の機能を実現するプログラムを実行することにより実現される。なお、以下の処理を行う前段で、同フローチャートに従ったプログラムコードは、例えば外部記憶装置1007からRAM1002に既にロードされているものとする。
ステップS3000において、位置姿勢算出部120は、検出された各々の指標Qknの画像座標uQknとその識別子knを指標抽出部110から入力する。なお、各指標の物体座標系における3次元座標xO Qknは、既知の値としてRAM1002に予めロードされているものとする。
ステップS3005において、位置姿勢算出部120は、撮像装置130及び計測対象物体170の位置及び姿勢のセンサによる計測値をセンサ計測値入力部150から入力する。
ステップS3010において、位置姿勢算出部120は、指標が検出されているか否かを判定する。指標が検出されていない場合はステップS3080に処理を進め、それ以外の場合はステップS3020に処理を進める。
ステップS3020において、位置姿勢算出部120は、検出された指標の総数が一つか否かを判定する。指標の総数が一つの場合はステップS3025に処理を進め、それ以外の場合はステップS3030に処理を進める。
ステップS3025において、位置姿勢算出部120は、ステップS3005で得た撮像装置130の姿勢の計測値のうちのパン及びチルト角に対して、検出されている指標上での誤差(物体座標系における指標の3次元座標xO Qknと撮像装置130及び計測対象物体170の位置及び姿勢の計測値から導出する投影座標の理論値uQkn*と、実際の検出座標uQknとの誤差)を打ち消すような補正を加え、ステップS3080に処理を進める。ステップS3025における補正処理としては、周知の処理を適用することが可能であるため、これ以上の説明は行わない。具体的には、例えば特許文献1(ランドマーク1点を利用したカメラの回転による補正方法(段落「0019」〜「0029」)およびランドマークを複数点利用したカメラの回転による補正方法(段落「0039」〜「0050」))に開示されている方法を用いることができる。
ステップS3030において、位置姿勢算出部120は、検出された指標の総数が二つか否かを判定する。指標の総数が二つの場合はステップS3033に処理を進め、それ以外の場合はステップS3040に処理を進める。
ステップS3033において、位置姿勢算出部120は、検出された二つの指標の画像上での距離を算出し、その値と所定の値として定められている閾値T1(例えば、画像の対角線長の1/4)との比較を行う。距離が閾値T1以上の場合にはステップS3035に処理を進め、それ以外の場合はステップS3025に処理を進め、上述した処理を行う。
ステップS3035において、位置姿勢算出部120は、ステップS3005で得た計測対象物体170の位置及び姿勢の計測値と、撮像装置130の位置の計測値を固定値として、撮像装置130の姿勢の計測値を表す3パラメータ(パン,チルト及びロール角)に対して、検出されている全指標上での誤差の和を最小とするような補正を加え、ステップS3080に処理を進める。この処理工程の詳細は後述する。
ステップS3040は、検出された指標の総数が三つ以上の場合のみ実行される。ここで、位置姿勢算出部120は、検出された全指標の分布範囲に関する評価値の一例として、検出された全指標の画像座標を包含する凸包を算出する。画像上の点群に対する凸包の算出方法は画像処理の基本的事項として広く公知のものであるので、その詳細な説明は省略する。
図6,図7,及び図8は、撮像装置130によって計測対象物体170を撮影することで取得される撮影画像の一例を示している。図6に示す撮影画像600上では指標Q1,Q5,Q6,Q9が、図7の撮影画像700上では指標Q1,Q2,Q6,Q7が,図8の撮影画像800上では指標Q2,Q6,Q7が観測されており、それ以外の指標は、他の物体(本実施形態においてはユーザの手610)によって隠蔽されているものとする。
これらの撮影画像に対して指標の検出を行い、図3のフローチャートで示した位置姿勢算出部120の処理ステップを実行すると、各画像において検出される指標の数は3以上であるので、ステップS3040以降の処理が実行されることになる。図9,図10及び図11は、それぞれ撮影画像600,700,800に対してステップS3040の処理を実行した際に得られる、検出指標の成す凸包(900,1000,1100)を示している。なお、以下では、各凸包の面積をそれぞれA900,A1000,及びA1100と表記したときに、以下に述べる閾値T2及び閾値T3に対して、A1100<T2<A1000<T3<A900という関係が満たされているものとする。
ステップS3050において、位置姿勢算出部120は、ステップS3040で算出した凸包の面積と、所定の値として定められている閾値T2(例えば、撮影画像全体の面積の1/16)との比較を行う。面積が閾値T2以上の場合はステップS3060に処理を進め、それ以外の場合はステップS3025へと処理を進める。図6〜図11の例では、撮影画像800についてはステップS3025へ、撮影画像700及び600についてはステップS3060へと処理が進行する。
ステップS3060において、位置姿勢算出部120は、ステップS3040で算出した凸包の面積と、所定の値として定められている閾値T3(例えば、撮影画像全体の面積の1/9)との比較を行う。面積が閾値T3以上の場合はステップS3070に処理を進め、それ以外の場合はステップS3035へと処理を進める。図6〜図11の例では、撮影画像700についてはステップS3035へ、撮影画像600についてはステップS3070へと処理が進行する。
ステップS3070において、位置姿勢算出部120は、検出されている全指標上での誤差の和を最小とするような撮像装置130の位置と姿勢を算出する。この処理工程の詳細は後述する。
ステップS3080において、位置姿勢算出部120は、ステップS3025、S3035及びS3070で得られた撮像装置130及び計測対象物体170の位置及び姿勢を表すデータを、I/F1009を介して外部へと出力する。あるいは、これらのデータを、他のアプリケーションから利用可能な状態としてRAM1002上に格納する。
なお、ステップS3025,S3035,S3070の各工程では、撮像装置130に関する計測値のみに補正を加えているので、ステップS3080で出力される位置及び姿勢のデータは、計測対象物体170に関しては、ステップS3005で入力したセンサによる計測値そのものとなる。しかし、位置及び姿勢の出力形態はこれに限られるものではなく、逆に、撮像装置130の位置及び姿勢の計測値には補正を加えずにセンサによる計測値をそのまま出力し、計測対象物体170の位置及び姿勢の計測値に補正を加えて出力しても良い。この場合は、ステップS3080において、以下に述べる座標変換処理を行った後に、変換後の位置及び姿勢を出力する。
同次座標系を用いた4×4の座標変換行列によって位置及び姿勢を表記すると、計測対象物体170の補正後の位置及び姿勢MWOは、センサ計測値として得られた撮像装置130の位置及び姿勢M# WC(以下、# はセンサによる計測値を表す記号)と、センサ計測値として得られた計測対象物体170の位置及び姿勢M# WOと、ステップS3070までの処理結果として得られた撮像装置130の補正後の位置及び姿勢MWCに基づいて、次式によって算出される。
このとき、撮像装置130によって定義されるカメラ座標系における計測対象物体170の位置及び姿勢は、
となる。すなわち、ステップS3070までの処理結果として得られた撮像装置130の補正後の位置及び姿勢(MWC)と、センサ計測値として得られた計測対象物体170の位置及び姿勢(M# WO)とを出力する場合と、センサ計測値として得られた撮像装置130の位置及び姿勢(M# WC)と、式1によって求められる計測対象物体170の補正後の位置及び姿勢(MWO)とを出力する場合では、計測対象物体170と撮像装置130の相対的な位置及び姿勢の関係は等価となる。したがって、本装置の出力を利用するアプリケーションが要求する形態に合わせて、出力形態を選択できるようになっていることが好ましい。
また、カメラ座標系における計測対象物体170の位置及び姿勢(MCO)を式2から算出してこれを出力しても良いし、物体座標系における撮像装置130の位置及び姿勢(MCO -1)を求めて、これを出力してもよい。
ステップS3090において、位置姿勢算出部120は、処理を終了するか否かの判定を行い、処理を終了しない場合には、ステップS3000へと処理を進める。
以上によって、撮像装置の位置及び姿勢が計測される。
次に、図4のフローチャートを用いて、上記ステップS3035における撮像装置130の姿勢算出の処理工程を説明する。以下では、算出すべき未知パラメータである撮像装置130の姿勢を、3値ベクトル
s = ωWC = [ξWC ψWC ζWC]T
によって内部的に表現している。
姿勢を3値によって表現する方法には様々なものが存在するが、ここでは、ベクトルの大きさによって回転角を、ベクトルの向きによって回転軸方向を定義するような3値のベクトルによって表現されているものとする。なお、姿勢ωは、次式、
によって、3×3の回転行列Rによっても表現可能であり、ωとRとは、互いに一意に変換することができる。Rからωへの変換方法は公知であるので、その詳細な説明は省略する。
ステップS4000において、位置姿勢算出部120は、センサ計測値として得られた撮像装置130の姿勢を、sの初期値とする。
ステップS4010において、位置姿勢算出部120は、各々の指標Qknに対して、その画像座標の推定値uQkn*を算出する。uQkn*の算出は、sによって定義される指標の観測方程式、すなわち、指標Qkn各々の物体座標系における座標xO Qkn(既知な情報として予め保持している)から画像座標を算出する関数:
に基づいて行われる。具体的には、観測方程式Fc()は、xO Qknとsから当該指標のカメラ座標(撮像装置130の視点位置を原点として定義し、更に互いに直交する3軸を夫々X軸、Y軸、Z軸として定義した座標系)xC Qknを求める次式、
及び、カメラ座標xC Qknから画像座標uQkn*を求める次式、
によって構成されている。ここでtWC及びtWOは、撮像装置130と計測対象物体170の夫々の位置計測値(平行移動成分)を表す3次元ベクトルであり、ここでは固定値として取り扱われる。また、RWOは計測対象物体170の姿勢計測値(回転成分)を表す3×3の回転行列であり、同様に固定値として取り扱われる。また、fC x及びfC yは、それぞれx軸方向及びy軸方向における撮像装置130の焦点距離であり、既知の値として予め保持されているものとする。
ステップS4020において、位置姿勢算出部120は、各々の指標Qknに対して、画像座標の推定値uQkn*と実測値uQknとの誤差ΔuQknを、次式によって算出する。
ステップS4030において、位置姿勢算出部120は、各々の指標Qknに対して、sに関する画像ヤコビアン(すなわち、式4の観測方程式Fc()をsの各要素で偏微分した解を各要素に持つ2行×3列のヤコビ行列)Jus Qkn(=∂u/∂s)を算出する。具体的には、式6の右辺をカメラ座標xC Qknの各要素で偏微分した解を各要素に持つ2行×3列のヤコビ行列Jux Qkn(=∂u/∂x)と、式5の右辺をベクトルsの各要素で偏微分した解を各要素に持つ3行×3列のヤコビ行列Jxs Qkn(=∂x/∂s)を算出し、次式によってJus Qknを算出する。
ステップS4040において、位置姿勢算出部120は、ステップS4020及びステップS4030において算出した誤差ΔuQkn及び画像ヤコビアンJus Qknに基づいて、sの補正値Δsを算出する。具体的には、誤差ΔuQknを垂直に並べた2N次元の誤差ベクトル
及び、画像ヤコビアンJus Qknを垂直に並べた2N行×3列の行列
を作成し、Θの擬似逆行列Θ+を用いて、
として算出する。このように、本実施形態では補正値Δsを、局所的な線形近似によって算出している。
ステップS4050において、位置姿勢算出部120は、ステップS4040において算出した補正値Δsを用いて式12に従ってsを補正し、得られた値をsの新たな推定値とする。
ステップS4060において、位置姿勢算出部120は、誤差ベクトルUが予め定めた閾値より小さいかどうか、あるいは、補正値Δsが予め定めた閾値より小さいかどうかといった何らかの判定基準を用いて、計算が収束しているか否かの判定を行う。収束してない場合には、補正後のsを用いて、再度ステップS4010以降の処理を行う。一方、収束していると判断した場合には、ステップS4070へと処理を進める。
以上のステップS4000からS4060までの工程は、複数の観測方程式からなるsに関する非線形連立方程式をニュートン法によって求解する工程である。この一連の工程は、後述する変形例5に示すとおり、他のいかなる非線形解法を用いても良い。
ステップS4070において、位置姿勢算出部120は、ステップS4060までの処理によって得られたsを、撮像装置130の姿勢の(補正後の)推定値 ωWCとする。
以上によって、センサ計測値として得られた位置パラメータを固定して、全指標上での誤差の和を最小化するような姿勢パラメータを求めることができる。
次に、図5のフローチャートを用いて、上記ステップS3070における撮像装置130の位置及び姿勢算出の処理工程を説明する。以下では、算出すべき未知パラメータである撮像装置130の位置及び姿勢を、6値ベクトルs = [tWC T ωWC T]T = [xWC yWC zWC ξWC ψWC ζWC]Tによって内部的に表現している。
ステップS5000において、位置姿勢算出部120は、センサ計測値として得られた撮像装置130の位置及び姿勢を、sの初期値とする。
ステップS5010において、位置姿勢算出部120は、各々の指標Qknに対して、その画像座標の推定値uQkn*を算出する。uQkn*の算出は、sによって定義される指標の観測方程式、すなわち、各指標Qknの物体座標系における座標xO Qknから画像座標を算出する関数:
に基づいて行われる。具体的には、観測方程式F’c()は、xO Qknとsから当該指標のカメラ座標xC Qknを求める式5、及び、カメラ座標xC Qknから画像座標uQkn*を求める式6によって構成されている。ただしここでは、式5におけるtWC(撮像装置130の位置を表す)を、固定値としてではなく、sを構成するパラメータの一部として取り扱う。一方、計測対象物体170の位置tWO及び姿勢RWOに関しては、センサによる計測値をそのまま固定値として使用する。
ステップS5020において、位置姿勢算出部120は、各々の指標Qknに対して、画像座標の推定値uQkn*と実測値uQknとの誤差ΔuQknを、式7によって算出する。
ステップS5030において、位置姿勢算出部120は、各々の指標Qknに対して、sに関する画像ヤコビアン(すなわち、式13の観測方程式F’c()をsの各要素で偏微分した解を各要素に持つ2行×6列のヤコビ行列)Jus Qkn(=∂u/∂s)を算出する。具体的には、式6の右辺をカメラ座標xC Qknの各要素で偏微分した解を各要素に持つ2行×3列のヤコビ行列Jux Qkn(=∂u/∂x)と、式5の右辺をベクトルsの各要素で偏微分した解を各要素に持つ3行×6列のヤコビ行列Jxs Qkn(=∂x/∂s)を算出し、式8によってJus Qknを算出する。
ステップS5040において、位置姿勢算出部120は、ステップS5020及びステップS5030において算出した誤差ΔuQkn及び画像ヤコビアンJus Qknに基づいて、sの補正値Δsを算出する。具体的には、誤差ΔuQknを垂直に並べた2N次元の誤差ベクトルU及び、画像ヤコビアンJus Qknを垂直に並べた2N行×6列の行列Θを作成し、Θの擬似逆行列Θ+を用いて、式11によって算出する。
ステップS5050において、位置姿勢算出部120は、ステップS5040において算出した補正値Δsを用いて式12に従ってsを補正し、得られた値をsの新たな推定値とする。
ステップS5060において、位置姿勢算出部120は、誤差ベクトルUが予め定めた閾値より小さいかどうか、あるいは、補正値Δsが予め定めた閾値より小さいかどうかといった何らかの判定基準を用いて、計算が収束しているか否かの判定を行う。収束していない場合には、補正後のsを用いて、再度ステップS5010以降の処理を行う。一方、収束していると判定された場合には、ステップS5070へと処理を進める。
ステップS5070において、位置姿勢算出部120は、ステップS5060までの処理によって得られたsを、撮像装置130の補正後の位置及び姿勢の推定値とする。
なお、本実施形態では、ステップS3070の処理において、撮像装置130の位置及び姿勢を補正の対象としていたが、計測対象物体170の位置及び姿勢を補正の対象として処理を行っても良い。この場合は、算出すべき未知パラメータを、計測対象物体170の位置及び姿勢を表す6値ベクトルs = [tWO T ωWO T]T = [xWO yWO zWO ξWO ψWO ζWO]Tによって内部的に表現し、センサ計測値として得られた計測対象物体170の位置及び姿勢をsの初期値とする。また、観測方程式F’c()を構成する式5を、次式のように変形する。
このとき、撮像装置130の位置tWC及び姿勢RWCに関しては、センサによる計測値をそのまま固定値として使用する。
また、カメラ座標系における計測対象物体170の位置及び姿勢や、物体座標系における撮像装置130の位置及び姿勢を未知のパラメータとして求めても良い。
前者の場合、算出すべき未知パラメータを、カメラ座標系における計測対象物体170の位置及び姿勢を表す6値ベクトルs = [tCO T ωCO T]T = [xCO yCO zCO ξCO ψCO ζCO]Tによって内部的に表現する。また、カメラ座標系における計測対象物体170の位置及び姿勢(M# CO)を、次式、
によってセンサ計測値(M# WC及びM# WO)に基づいて求め、これをsの初期値とする。また、観測方程式F’c()を構成する式5を、次式のように変形する。
一方、後者の場合は、算出すべき未知パラメータを、物体座標系における撮像装置130の位置及び姿勢を表す6値ベクトルs = [tOC T ωOC T]T = [xOC yOC zOC ξOC ψOC ζOC]Tによって内部的に表現する。また、物体座標系における撮像装置130の位置及び姿勢(M# CO)を、次式、
によってセンサ計測値(M# WC及びM# WO)に基づいて求め、これをsの初期値とする。また、観測方程式F’c()を構成する式5を、次式のように変形する。
以上のようにして、計測対象物体170と撮像装置130との間の相対的な位置及び姿勢の関係を未知のパラメータとして、センサによる位置及び姿勢計測値の誤差を補正することができる。
従来の位置姿勢計測装置では、指標の分布を考慮していないため、画像上の一部の領域に指標が偏在して観測されている場合に解が不安定になる。一方、本実施形態に係る位置姿勢計測装置によれば、ステップS3033や、ステップS3040,S3050,S3060によって指標の分布範囲の大きさを考慮した手法の選択が行われるため、例えば検出された指標の数が多くても、それらが画像上の小領域に偏在しているような場合に、位置及び姿勢の6自由度を安定して求めるのに不十分であるという判定を行うことができる。そのため、画像上の一部の領域に指標が偏在して観測されている場合であっても適切な位置姿勢推定手法が選択され、不安定な解が得られる状況に陥る可能性が低下し、従来手法と比して安定した解を得ることができる。
また、本実施形態に係る位置姿勢計測装置によれば、撮像装置の位置及び姿勢を構成する一部のパラメータのみを選択してセンサ計測値の補正を行う場合に、その制約の中で指標上での誤差の和を最小化するような補正を行うことができる。したがって、未知とするパラメータを減らすことによって撮像装置の位置及び姿勢の計測を安定化させようとする場合であっても、従来と比べて高精度な計測を行うことができる。
[第2の実施形態]
本実施形態に係る位置姿勢計測装置は、室内等に設定された基準座標系における任意の計測対象物体の位置及び姿勢の計測を行う。
本実施形態に係る位置姿勢計測装置は、撮像装置に位置姿勢センサが取り付けられておらず、三脚等によって既知の位置及び姿勢に固定して設置されていることが、第1の実施形態とは異なっている。以下では、第1の実施形態との相違点のみを説明する。
図12は、本実施形態における位置姿勢計測装置の構成を示している。同図に示したように、本実施形態における位置姿勢計測装置1200は、画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1220によって構成されており、撮像装置130及び位置姿勢センサ140に接続されている。
撮像装置130は、三脚1280によって、空間中の既知の位置、姿勢に固定して設置されている。撮像装置130が出力する撮影画像は、位置姿勢計測装置1200の画像入力部160に入力される。基準座標系における撮像装置130の位置及び姿勢は、既知の値として予め保持されているものとする。
センサ計測値入力部150は、計測対象物体170の位置及び姿勢の計測値を位置姿勢センサ140から入力し、位置姿勢算出部1220へと出力する。
位置姿勢算出部1220は、センサ計測値入力部150の出力である計測対象物体170の位置及び姿勢の計測値と、指標検出部110の出力である各々の指標Qknの画像座標uQknを入力し、入力した情報に基づいて、計測対象物体170の位置及び姿勢の計測値の誤差を補正し、補正後の位置及び姿勢のデータを出力する。
なお、図12に示した画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1220の少なくとも一部は、独立した装置として実現しても良いし、夫々1つもしくは複数のコンピュータにインストールし、コンピュータのCPUにより実行することで、その機能を実現するソフトウェアとして実現しても良い。本実施形態では、各部(画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1220)は、それぞれソフトウェアにより実現され、同一のコンピュータにインストールされているものとする。ソフトウェアを実行することで、各部の機能を実現するためのコンピュータの基本構成は、第1の実施形態と同様であるので説明を省略する。
本実施形態における位置姿勢算出部1220の処理手順は、第1の実施形態における位置姿勢算出部120の処理手順(図3のフローチャートに対応)とほぼ同一である。唯一の違いは、撮像装置130の位置及び姿勢が、計測値として与えられるのではなく、既知の値として予め保持されていることである。位置姿勢算出部1220は、撮像装置130の位置及び姿勢の既知の値を、撮像装置130の位置及び姿勢の仮の計測値とおき、第1の実施形態におけるステップS3000からステップS3070までと同一の工程によって撮像装置130の位置及び姿勢の計測値の補正を行い、この補正結果に基づいて、ステップS3080において、第1の実施形態と同様に計測対象物体170の位置及び姿勢の計測値を補正する(式1)。本実施形態では、位置姿勢算出部1220がステップS3080において出力するのは、計測対象物体170の位置及び姿勢のみである。
以上によって、計測対象物体の位置及び姿勢が計測される。このように、本実施形態に係る位置姿勢計測装置によっても、指標の分布範囲の大きさを考慮した手法の選択が行われるため、画像上の一部の領域に指標が偏在して観測されている場合であっても適切な位置姿勢推定手法が選択され、従来手法と比して安定した解を得ることができる。
なお、既知の位置に固定された撮像装置によって任意の計測対象物体の位置及び姿勢を計測する方法は、計測対象物体に取り付けるセンサを姿勢センサに変更しても実現できる。例えば、検出された指標の分布が閾値未満の場合は、姿勢センサの姿勢計測値を固定値として用いて、位置のみを指標の情報から推定する。また、指標の分布が閾値以上の場合には、位置及び姿勢の6パラメータを指標の情報から推定する。この場合の撮像装置は1台に限定されるものではなく、複数の撮像装置を用いることが可能である。
[第3の実施形態]
本実施形態に係る位置姿勢計測装置は、室内等の空間中における撮像装置の位置及び姿勢の計測を行う。以下、本実施形態に係る位置姿勢計測装置について説明する。
本実施形態においては撮像装置以外の計測対象物体は存在せず、本実施形態に係る位置姿勢計測装置は、撮像装置の位置及び姿勢の計測のみを行うことが、第1の実施形態とは異なっている。以下では、第1の実施形態との相違点のみを説明する。
図13は、本実施形態における位置姿勢計測装置の構成を示している。同図に示したように、本実施形態における位置姿勢計測装置1300は、画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1320によって構成されており、撮像装置130及び位置姿勢センサ140に接続されている。
また、現実空間中の複数の位置には、撮像装置130によって撮影するための指標として、基準座標系における位置が既知である複数個の指標Qkが配置されている。指標Qkは、第1の実施形態と同様に、撮影画像上における投影像の画像座標が検出可能であって、かついずれの指標であるかが何らかの方法で識別可能であるような指標であれば、どのような形態であってもよい。
センサ計測値入力部150は、撮像装置130の位置及び姿勢の計測値を位置姿勢センサ140から入力し、位置姿勢算出部1320へと出力する。
位置姿勢算出部1320は、センサ計測値入力部150の出力である撮像装置130の位置及び姿勢の計測値と、指標検出部110の出力である各々の指標Qknの画像座標uQknを入力し、入力した情報に基づいて、撮像装置130の位置及び姿勢の計測値の誤差を補正し、補正後の位置及び姿勢のデータを出力する。
なお、図13に示した画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1320の少なくとも一部は、独立した装置として実現しても良いし、夫々1つもしくは複数のコンピュータにインストールし、コンピュータのCPUにより実行することで、その機能を実現するソフトウェアとして実現しても良い。本実施形態では、各部(画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1320)は、それぞれソフトウェアにより実現され、同一のコンピュータにインストールされているものとする。ソフトウェアを実行することで、各部の機能を実現するためのコンピュータの基本構成は、第1の実施形態と同様であるので説明を省略する。
本実施形態における位置姿勢算出部1320の処理手順は、第1の実施形態における位置姿勢算出部120の処理手順(図3のフローチャートに対応)と類似しているため、図3を参照しながら、第1の実施形態との相違点のみについて説明する。
ステップS3005において、位置姿勢算出部1320は、センサによって計測された撮像装置130の位置及び姿勢を、センサ計測値入力部150から入力する。
ステップS3025において、位置姿勢算出部1320は、ステップS3005で得た撮像装置130の姿勢計測値のうちのパン及びチルト角に対して、検出されている指標上での誤差(基準座標系における指標の3次元座標xW Qknと撮像装置130の位置及び姿勢の計測値から導出する投影座標の理論値uQkn*と、実際の検出座標uQknとの誤差)を打ち消すような補正を加え、ステップS3080に処理を進める。
このような補正処理としては、周知の方法を用いることができるため、これ以上の説明は行わない。具体的には、例えば特許文献1(ランドマーク1点を利用したカメラの回転による補正方法(段落「0019」〜「0029」)およびランドマークを複数点利用したカメラの回転による補正方法(段落「0039」〜「0050」))に開示されている方法を用いることができる。
ステップS3035において、位置姿勢算出部1320は、ステップS3005で得た撮像装置130の位置計測値を固定値として、撮像装置130の姿勢計測値を表す3パラメータ(パン,チルト及びロール角)に対して、検出されている全指標上での誤差の和を最小とするような補正を加え、ステップS3080に処理を進める。この補正処理工程は、第1の実施形態におけるステップS3035の補正処理工程(図4のフローチャートに対応)と類似したものとなる。ただし、本実施形態の場合、指標の観測方程式F’’c()が、基準座標系における指標Qknの座標xW Qkn(既知な情報として予め保持している)から画像座標を算出する関数となる。すなわち、観測方程式F’’c()は次式によって表される。
具体的には、観測方程式F’’c()は、xW Qknとsから当該指標のカメラ座標xC Qknを求める次式、
及び、カメラ座標xC Qknから画像座標uQkn*を求める式6によって構成されており、この点のみが異なっている。ここでtWCは、撮像装置130の位置計測値を表す3次元ベクトルであり、ここでは固定値として取り扱われる。
ステップS3070において、位置姿勢算出部1320は、検出されている全指標上での誤差の和を最小とするような撮像装置130の位置と姿勢を算出する。この処理工程での具体的な処理は、例えば特許文献2に開示されているような周知技術を用いて実現することが可能であるので、ここでの説明は省略する。
ステップS3080において、位置姿勢算出部1320は、ステップS3070までの結果として得られた撮像装置130の位置及び姿勢を、I/F1009を介して外部へと出力する。あるいは、このデータを、他のアプリケーションから利用可能な状態としてRAM1002上に格納する。
以上によって、撮像装置の位置及び姿勢が計測される。このように、本実施形態に係る位置姿勢計測装置によっても、指標の分布範囲の大きさを考慮した手法の選択が行われるため、画像上の一部の領域に指標が偏在して観測されている場合であっても適切な位置姿勢推定手法が選択され、従来手法と比して安定した解を得ることができる。
[第4の実施形態]
本実施形態に係る位置姿勢計測装置は、室内等の空間中における任意の計測対象物体の位置及び姿勢の計測を行う。以下、本実施形態に係る位置姿勢計測装置について説明する。本実施形態においては、撮像装置ではなく、任意の計測対象物体の位置及び姿勢を計測することが、第3の実施形態と異なっている。以下では、第3の実施形態との相違点のみを説明する。
図14は、本実施形態における位置姿勢計測装置の構成を示している。同図に示したように、本実施形態における位置姿勢計測装置1400は、画像入力部160、指標検出部110、センサ計測値入力部150、撮像部1430、位置姿勢計測部1440、及び位置姿勢算出部1420によって構成されており、計測対象物体1470に接続されている。
撮像部1430は、位置及び姿勢を計測したい対象である計測対象物体1470に固定して取り付けられており、指標を含む現実空間の映像を撮影する。
位置姿勢計測部1440は、撮像部1430に固定して装着されており、基準座標系における撮像部1430の位置及び姿勢を計測してセンサ計測値入力部150へと出力する。位置姿勢計測部1440は、例えば、米国Polhemus社のFASTRAK等によって構成される。
画像入力部160は、撮像部1430が撮影した撮影画像をデジタルデータに変換し、指標検出部110へと出力する。
センサ計測値入力部150は、撮像部1430の位置及び姿勢の計測値を位置姿勢計測部1440から入力し、位置姿勢算出部1420へと出力する。
位置姿勢算出部1420は、センサ計測値入力部150の出力である撮像部1430の位置及び姿勢の計測値と、指標検出部110の出力である各々の指標Qknの画像座標uQknを入力し、入力した情報に基づいて、撮像部1430の位置及び姿勢の計測値の誤差を補正する。
位置姿勢算出部1420はさらに、得られた撮像部1430の位置及び姿勢と、既知の値として予め保持している撮像部1430と計測対象物体1470との相対的な位置姿勢の関係についての情報(具体的には、計測対象物体1470上のどの位置に撮像部1430が設置されているかという情報。計測対象物体1470によって定義される物体座標系における、撮像部1430の位置及び姿勢によって表現される)から、基準座標系における計測対象物体1470の位置及び姿勢を算出し、I/F1009を介してこのデータを外部へと出力する。あるいは、このデータを、他のアプリケーションから利用可能な状態としてRAM1002上に格納する。なお、この変換工程は必ずしも必要ではなく、撮像部1430の位置及び姿勢をそのまま出力することも可能である。
なお、本実施形態では、位置姿勢計測部1440は撮像部1430の位置及び姿勢を計測していたが、位置姿勢計測部1440は計測対象物体1470の位置及び姿勢を計測するように構成されていても良い。この場合には、位置姿勢算出部1420は、既知の値として予め保持している撮像部1430と計測対象物体1470との相対的な位置姿勢の関係を用いて、計測値として得られた計測対象物体1470の位置及び姿勢から撮像部1430の位置及び姿勢を算出し、これを初期値として上記と同様な処理を実行する。
また、位置姿勢算出部1420は、ステップS3025,S3035,S3070の何れの工程においても、撮像部1430の姿勢あるいは位置及び姿勢を補正し、その後計測対象物体1470の位置及び姿勢を求めていた。しかし、ステップS3035及びS3070の工程においては、計測対象物体1470の位置及び姿勢を直接求めるような構成としても良い。
位置姿勢計測部1440が撮像部1430の位置及び姿勢を計測している場合には、位置姿勢算出部1420は、既知の値として予め保持している撮像部1430と計測対象物体1470との相対的な位置姿勢の関係を用いて、計測値として得られた撮像部1430の位置及び姿勢から計測対象物体1470の位置及び姿勢を算出し、これを初期値とする。
ステップS3035においては、計測対象物体1470の姿勢を表す3値ベクトルs = ωWO = [ξWO ψWO ζWO]Tを未知パラメータとする。また、ステップS3070においては、計測対象物体1470の位置及び姿勢を表す6値ベクトルs = [tWO T ωWO T]T = [xWO yWO zWO ξWO ψWO ζWO]Tを未知パラメータとする。そして、観測方程式F’’c()を定義するのに必要な式20を、
に変更する。ここで、tOC 及びROCは、計測対象物体170によって定義される物体座標系における撮像部1430の姿勢を表す3×3の回転行列及び位置を表す3次元ベクトルであり、撮像部1430と計測対象物体1470との相対的な位置姿勢の関係を表す既知の値として、予め保持されているものとする。なお、ステップS3035では、tWOは固定値として設定する。
以上によって、任意の物体の位置及び姿勢が計測される。このように、本実施形態に係る位置姿勢計測装置によっても、指標の分布範囲の大きさを考慮した手法の選択が行われるため、画像上の一部の領域に指標が偏在して観測されている場合であっても適切な位置姿勢推定手法が選択され、従来手法と比して安定した解を得ることができる。
[第5の実施形態]
本実施形態に係る位置姿勢計測装置は、室内等の空間中における撮像装置の位置及び姿勢の計測を行う。以下、本実施形態に係る位置姿勢計測装置について説明する。
図15は、本実施形態における位置姿勢計測装置の構成を示している。同図に示したように、本実施形態における位置姿勢計測装置1500は、画像入力部160、指標検出部110、センサ計測値入力部1550、及び位置姿勢算出部1520によって構成されており、撮像装置130及び姿勢センサ1540に接続されている。
本実施形態においては、撮像装置130に、位置姿勢センサではなく姿勢センサが装着されている点が、第3の実施形態と異なっている。姿勢センサを用いることで、位置姿勢センサを用いる場合に存在する、センサの計測範囲以外の領域を計測できないという制約を回避することができる。以下では、第3の実施形態との相違点のみを説明する。
姿勢センサ1540は、撮像装置130に装着されており、姿勢センサ1540自身の現在の姿勢を計測してセンサ計測値入力部1550へと出力する。姿勢センサ1540は、例えばジャイロセンサと加速度センサをベースとしたセンサユニットであり、具体的には、株式会社トキメックのTISS-5-40や、米国InterSense社のInertiaCube2等によって構成される。これらのセンサによって計測される姿勢計測値は、慣性計測値を時間積分した値として計測されたものであるため、真の姿勢とは異なった誤差を有する。ただし、これらの姿勢センサは、内蔵する加速度センサによって地球の重力方向を観測することによって、傾斜角方向(ピッチ角及びロール角)のドリフト誤差の蓄積をキャンセルする機能を有している。そのため、傾斜角方向に関してはドリフト誤差が発生しないという性質を有している。言い換えれば、方位角方向(ヨー角方向)に関しては時間の経過に伴って蓄積されるドリフト誤差を有している。
センサ計測値入力部1550は、方位ドリフト誤差補正値の更新値を位置姿勢算出部1520から入力し、姿勢センサ1540の現在の方位ドリフト誤差補正値を更新し保持する。また、姿勢センサ1540から姿勢計測値を入力し、現在の方位ドリフト誤差補正値によってこれを補正して、撮像装置130の姿勢の予測値として位置姿勢算出部1520へと出力する。
位置姿勢算出部1520は、センサ計測値入力部1550の出力である撮像装置130の姿勢の予測値と、指標検出部110の出力である各々の指標Qknの画像座標uQknを入力データとして、撮像装置130の位置及び姿勢を算出して出力する。また、位置及び姿勢の算出工程で導出される姿勢センサ1540の方位ドリフト誤差補正値の更新値を、センサ計測値入力部1550へと出力する。
なお、図15に示した画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1520の少なくとも一部は、独立した装置として実現しても良いし、夫々1つもしくは複数のコンピュータにインストールし、コンピュータのCPUにより実行することで、その機能を実現するソフトウェアとして実現しても良い。本実施形態では、各部(画像入力部160、指標検出部110、センサ計測値入力部150、及び位置姿勢算出部1520)は、それぞれソフトウェアにより実現され、同一のコンピュータにインストールされているものとする。ソフトウェアを実行することで、各部の機能を実現するためのコンピュータの基本構成は、第1の実施形態と同様であるので説明を省略する。
図16は、撮像装置130の位置及び姿勢を示すパラメータを算出する処理のフローチャートであり、CPU1001が位置姿勢算出部1520のソフトウェアのプログラムを実行することで行われる。
ステップS15000において、位置姿勢算出部1520は、検出された各々の指標Qknの画像座標uQknとその識別子knを指標抽出部110から入力する。なお、各指標の基準座標系における3次元座標xQknは、既知の値としてRAM1002に予めロードされているものとする。
ステップS15005において、位置姿勢算出部1520は、撮像装置130の姿勢の予測値R*をセンサ計測値入力部1550から入力し、これを、撮像装置130の姿勢の初期値として設定する。また、2回目以降の処理では、1ループ前の処理において算出された撮像装置130の位置を、撮像装置130の姿勢の初期値として設定する。
ステップS15010において、位置姿勢算出部1520は、指標が検出されているか否かを判定する。指標が検出されていない場合はステップS15090に処理を進め、それ以外の場合はステップS15020に処理を進める。
ステップS15020において、位置姿勢算出部1520は、検出された指標の総数が一つか否かを判定する。指標の総数が一つの場合はステップS15025に処理を進め、それ以外の場合はステップS15030に処理を進める。
ステップS15025において、位置姿勢算出部1520は、ステップS15005で設定した初期値の平行移動成分のうちの視軸と直交する2軸方向の値を補正対象として、検出されている指標上での誤差を打ち消すような補正を加え、ステップS15090に処理を進める。ステップS15025での処理工程としては、周知の処理を提供することが可能であるため、これ以上の説明は行わない。具体的には、例えば特許文献1(ランドマーク1点を利用したカメラの平行移動による補正方法(段落「0030」〜「0036」)およびランドマークを複数点利用したカメラの平行移動による補正方法(段落「0051」〜「0056」)に開示されている方法を用いることができる。ただし、特許文献1では6自由度位置姿勢センサの計測値を誤差補正の対象とした場合を説明しているが、本実施形態では、前フレームで求めた位置と姿勢センサの計測値とを組み合わせたものが補正対象となる点が異なっている。
ステップS15030において、位置姿勢算出部1520は、検出された指標の総数が二つか否かを判定する。指標の総数が二つの場合はステップS15032に処理を進め、それ以外の場合はステップS15040に処理を進める。
ステップS15032において、位置姿勢算出部1520は、検出された二つの指標の画像上での距離を算出し、その値と所定の値として定められている閾値T1(例えば、画像の対角線長の1/8)との比較を行う。距離が閾値T1以上の場合にはステップS15034に処理を進め、それ以外の場合はステップS15025に処理を進める。
ステップS15034において、位置姿勢算出部1520は、検出された二つの指標の画像上での距離と所定の値として定められている閾値T2(例えば、画像の対角線長の1/4)との比較を行う。距離が閾値T2以上の場合にはステップS15038に処理を進め、それ以外の場合はステップS15036に処理を進める。
ステップS15036において、位置姿勢算出部1520は、ステップS15005で設定した初期値のうち、位置を表す3パラメータ(平行移動成分)を更新対象として(すなわち、姿勢計測値には誤差は含まれていないものと仮定して)、検出されている指標上での誤差を最小とするような補正を位置のパラメータのみに加え、ステップS15090に処理を進める。この処理工程の詳細は、例えば特許文献3(第6の実施形態)に開示されているので、ここでの説明は省略する。また、位置を表す3パラメータを未知変数とした観測方程式を構成し、画像ヤコビアンを用いた誤差最小化計算を行うことによっても、画像上での誤差を最小とするような位置の補正を行うことができる。
ステップS15038において、位置姿勢算出部1520は、ステップS15005で設定した初期値のうちの位置を表す3パラメータ(平行移動成分)と、姿勢センサ1340の方位ドリフト誤差補正値の更新値φの合計4パラメータとを、算出すべき未知パラメータとして取り扱い、検出されている指標の情報を用いてこれらを算出する。この処理工程の詳細は、例えば特許文献3(第7の実施形態)に開示されているので、ここでの説明は省略する。また、これら4パラメータを未知変数とした観測方程式を構成し、画像ヤコビアンを用いた誤差最小化計算を行うことによっても、画像上での誤差を最小とするような位置と方位ドリフト誤差補正値の更新値の算出を行うことができる。さらに、ステップS15080へと処理を進める。
ステップS15040は、検出された指標の総数が三つ以上の場合のみ実行される。ここで、位置姿勢算出部1520は、検出された全指標の分布範囲に関する評価値の一例として、検出された全指標の画像座標を包含する凸包を算出する。
ステップS15050において、位置姿勢算出部1520は、S15040で算出した凸包の面積と所定の値として定められている閾値T3(例えば、画像の面積の1/16)との比較を行う。面積が閾値T3以上の場合はステップS15060に処理を進め、それ以外の場合はステップS15036へと処理を進め、上述した処理を行う。
ステップS15060において、位置姿勢算出部1520は、S15040で算出した凸包の面積と所定の値として定められている閾値T4との比較を行う。面積が閾値T4(例えば、画像の面積の1/9)以上の場合はステップS15070に処理を進め、それ以外の場合はステップS15038へと処理を進め、上述した処理を行う。
ステップS15070において、位置姿勢算出部1520は、検出されている全指標上での誤差の和を最小とするような撮像装置130の位置と姿勢を算出する。この算出は、例えば、撮像装置130の位置と姿勢を表す6パラメータを変数として、ステップS15005で設定した初期値を用いて、非線形方程式の反復解法によって誤差を最小化するパラメータを求めることによって実現される。すなわち、位置と姿勢を表す6パラメータを未知変数とした観測方程式を構成し、これに基づいて求められる指標投影位置の誤差と各パラメータに関する画像ヤコビアンとを用いて当該パラメータの補正値を求め、補正処理を反復的に行うことで画像上での誤差を最小とするような位置と姿勢を算出する。
位置姿勢算出部1520はさらに、ステップS15005で設定した姿勢の初期値と求められた姿勢との変化分を算出し、その方位成分を方位ドリフト誤差補正値の更新値φとする。
ステップS15080において、位置姿勢算出部1520は、ステップS15038あるいはステップS15070において得られた方位ドリフト誤差補正値の更新値φを、センサ計測値入力部処理1550へと出力する。
ステップS15090において、位置姿勢算出部1520は、ステップS15080までの結果として得られた撮像装置130の位置及び姿勢を、I/F1009を介して外部へと出力する。あるいは、これらのデータを、他のアプリケーションから利用可能な状態としてRAM1002上に格納する。
ステップS15100において、位置姿勢算出部1520は、処理を終了するか否かの判定を行い、処理を終了しない場合には、処理をステップS15000へと進める。
以上によって、撮像装置の位置及び姿勢が計測される。
本実施形態に係る位置姿勢計測装置によれば、ステップS15034やステップS15050によって指標の分布範囲の大きさを考慮した手法の選択(方位ドリフト誤差補正値の更新を行うか否かの判断)が行われるため、画像上の一部の領域に指標が偏在して観測されている場合に、方位ドリフト誤差補正値の更新を不正確に行ってしまうという状況を回避することができる。
また、本実施形態に係る位置姿勢計測装置によれば、第3の実施形態の効果に加え、ステップS15060による手法の選択によって、画像情報が不足する場合であっても姿勢センサによる傾斜角情報を信頼することで位置及び姿勢を安定して導出できるほか、画像情報が十分得られる場合であれば位置及び姿勢の推定を高精度に行えるという、通常の画像情報に基づく位置姿勢推定手法が有する利点を両立することができる。
[第1乃至第5の実施形態の変形例]
(変形例1)
上記の実施形態の各々では、画像上における指標の分布に基づいて、適用する補正アルゴリズムが選択される。これらの補正アルゴリズム(第1の実施形態におけるステップS3025,S3035,S3070、第2乃至第4の実施形態におけるこれらの変形、及び、第5の実施形態におけるステップS15025,S15036,S15038,S15070)は、必ずしも上記の実施形態で示したものである必要はなく、指標の分布に従って見込まれる画像情報の情報量に応じて適切に設定されたものであれば、他の補正アルゴリズムに変更することも可能である。
例えば、第1乃至第4の実施形態におけるステップS3025やS3035において、姿勢の計測値を補正するのではなく、位置の計測値を補正する構成としてもよい。この場合、ステップS3025では、例えば、特許文献1の段落「0030」〜「0036」および「0051」〜「0056」に開示されているような、1つ又は複数の指標を利用したカメラの平行移動による補正方法に基づいて、位置計測値のうちのカメラの視軸と直交する2軸方向の値を補正対象として、検出されている指標上での誤差を打ち消すような補正を加えることができる。
また、ステップS3035では、算出すべき未知パラメータを、撮像装置130の位置を表す3値ベクトルs = tWC = [xWC yWC zWC ]Tとして、図5と同様な処理手順によって位置の補正を行う。第1の実施形態との相違点は、観測方程式を構成する式5を、次式のように変更することである。
ここで、RWCは、固定値として用いる撮像装置130のセンサによる姿勢計測値を表している。また、RWO 及びtWOは、第1の実施形態における式5と同様に、計測対象物体170の位置及び姿勢のセンサによる計測値を表しており、固定値として取り扱われる。
なお、式22は線形方程式であるので、式6と組み合わせた観測方程式から連立方程式を作成しこれを解くことで、繰り返し演算を用いなくても補正値を得ることができる。
なお、不図示のUIを介して、姿勢の補正と位置の補正の何れを優先させるかをユーザが自由に選択できるようにしてもよい。この場合、ステップS3025及びS3035の実行時に、ユーザの選択に応じて、姿勢あるいは位置の補正アルゴリズムが実行される。これにより、特性の異なる位置姿勢センサを用いた場合でも、より好ましい計測を行うことができる。
また、ステップS3025においては、計測値として得られる6パラメータのうちの任意の2パラメータを補正対象として選択し、これを未知数として上述した方法と記と同様にして求めてもよい。同様に、ステップS3035においては、計測値として得られる6パラメータのうちの任意の3パラメータを補正対象として選択し、これを未知数として上述した方法と同様な枠組みによって求めてもよい。
(変形例2)
上記第1乃至第4の実施形態では、画像上における指標の分布の尺度に基づいて、3種類のアルゴリズムへと処理を分岐させていた(ステップS3033、ステップS3050及びステップS3060)。しかし、指標の分布の尺度に基づいて行う分岐数は3通りに限られるものではない。例えば、ステップS3050の処理を省いて、閾値T3と凸包の面積の大小関係によってステップS3035あるいはステップS3070へと処理を分岐させるだけでもよい。また、より多数の閾値を設けて、4通り以上の分岐を行ってもよい。例えば、補正対象とするパラメータの数(2〜6)を凸包の面積に応じて変更し、これを未知数として同様な方法により位置姿勢を算出してもよい。
(変形例3)
上記の実施形態の各々では、位置姿勢センサや姿勢センサによる計測値と、撮像装置によって得られる画像情報を併用することにより、計測対象(計測対象物体や撮像装置)の位置及び姿勢を求めていた。しかし、画像上における指標の分布に基づいて、位置及び姿勢を求めるために用いるアルゴリズムを選択するという基本的な技術思想は、これらのセンサによる計測値を用いずに、画像情報のみから計測対象の位置及び姿勢を得る場合であっても適用できる。
例えば、図13に示した第3の実施形態の構成において、位置姿勢計測装置1300がセンサ計測値入力部150を有さず、また、位置姿勢センサ140が撮像装置130に設置されていない場合を考える。この場合、位置姿勢算出部1320は、初期値として位置姿勢センサ140による撮像装置130の位置及び姿勢の計測値を用いるのではなく、前フレームで求めた撮像装置130の位置及び姿勢の算出値(あるいは、過去の算出値から予測した現フレームにおける位置及び姿勢)を用いることにすると、これを仮の計測値とおいて図3と同様な処理を行うことで、指標の分布に応じて適切な位置及び姿勢の算出アルゴリズムを選択することが可能となる。
(変形例4)
上記の実施形態の各々では、指標の分布を計る評価値として、指標が3点以上検出されている場合には、指標が成す凸包を求めてその面積を利用していた。しかし、指標の分布を評価する尺度はこれに限られるものではなく、他の尺度を用いてもよい。例えば、画像中心から最も遠い位置にある指標を第1の指標として選択し、第1の指標から最も遠い位置にある指標を第2の指標として選択し、さらに、第1,第2の指標を結ぶ直線から最も遠い距離にある指標を第3の指標として選択し、これら第1,第2,第3の指標が成す三角形の面積を分布の尺度として、凸包の面積の変わりに用いても良い。また、簡易的には、このような第1,第2の指標間の距離を分布の尺度としても良いし、指標の画像座標の分散や標準偏差といった、分布を数値で表しうる他の任意の情報を分布の尺度として用いてもよい。
他の指標の画像座標の分散を分布の尺度として用いる具体的な方法として、指標の画像座標の共分散を利用する方法が考えられる。検出されている指標の画像座標の分散共分散行列を求め、その固有値(この値は主成分分析における各主成分の分散に相当する)を用いる方法である。この場合、第2固有値を尺度とすることで、画像上における指標の2次元的広がりを評価することが可能である。また、第1固有値を尺度とすることで、画像の1次元的な広がりを評価することができる。
また、それ以外にも、凸包の周囲長等の、凸包の面積以外の特徴量を用いてもよい。また、検出された全ての指標に対する外接矩形や外接円などから得られる特徴量を用いてもよい。また、指標の画像座標のモーメントの解析値(例えば、慣性等価楕円の長軸長と短軸長)等を用いてもよい。また、単一の多角形指標を用いる場合には、その指標を検出する際に得られる指標領域の面積をそのまま用いてもよい。
また、検出された指標の分布を直接計測しなくても、指標の分布の大小を何らかの情報に基づいて推定してもよい。例えば、過去のフレームやセンサの情報から得たカメラや物体の位置及び姿勢の推定値(初期値)に基づいて、画像上で観測されるであろう指標の座標を算出し、計算上の指標の分布を求めてもよい。また、検出された指標の見かけの大きさ等から指標までの距離を近似的に推定して、それに応じて分布を推定してもよい。
(変形例5)
第1の実施形態におけるステップS3035では、図4のステップS4040にて詳細に説明したように、誤差ベクトルUと行列Θに基づく補正値Δsの算出に、式11で表現される方法を用いている。また、その結果のΔs を用いてsをs+Δsに置き換えるというニュートン法によってsの算出を行っている。しかしながら、そのsを算出する方法は、このニュートン法に限ったものではない。例えば公知の非線形方程式の反復解法であるLM法(Levenberg-Marquardt法)を用いて求めてもよいし、公知のロバスト推定手法であるM推定等の統計的手法を組み合わせてもよいし、他の何れの数値計算手法を適用しても発明の本質が損なわれないことは言うまでもない。また、上記の実施形態におけるsを状態ベクトル、式4を観測方程式とすることで、画像ヤコビアンを利用して位置姿勢センサによる計測値のうちの一部のパラメータのみを補正するという効果を有した拡張カルマンフィルタ(Extended Kalman Filter)や、反復拡張カルマンフィルタ(iterative Extended Kalman Filter)を構成することができる。なお、拡張カルマンフィルタ及び反復拡張カルマンフィルタについては非特許文献2に記載されるように周知であるので、その詳細に関するこれ以上の説明は省略する。
(変形例6)
上記の実施形態の各々においては、各々が一つの座標を表すような指標(以下、これを点指標と呼ぶ)を用いていた。しかし、点指標以外の指標を用いることも可能である。例えば、公知の位置姿勢計測装置(例えば、非特許文献3を参照)に用いられているような、線特徴によって構成される指標(以下、これを線指標と呼ぶ)を用いてもよい。例えば、原点から線指標までの距離を評価のための基準として画像からの検出値とsによる推定値から算出する誤差によって誤差ベクトルUを構成し、観測方程式をsの各要素で偏微分した解を各要素に持つ1行×6列のヤコビ行列によって行列Θを構成することで、上記実施形態と同様にして位置及び姿勢の計測(補正)を行うことができる。また、線指標と点指標、その他の指標から得られる誤差及び画像ヤコビアンを積み重ねることによって、それらの特徴を併用することも可能である。
(変形例7)
上記の実施形態の各々では、画像面積に対する指標の分布に応じて以降の処理を選択していた。しかし、計測対象物体に対する相対的な比率を尺度としてもよい。例えば、第1の実施形態において、ステップS3040で、全検出指標の成す凸包の面積SHに加えて、画像上への計測対象物体170(その大まかな形状を表す3次元データが記憶されているものとする)の投影像の面積SOを求め、これらの比率(SH/SO)を得る。そして、上記比率に対して適宜設定した閾値を用いてステップS3050とステップS3060での条件分岐を行えばよい。
また、画像中ではなく、物理空間における指標の分布を尺度とすることも可能である。例えば、第1の実施形態において、ステップS3040で、物体座標系における全検出指標の3次元座標によって構成される3次元凸包を求め、その体積VHを算出し、計測対象物体170の体積VOとの比率(VH/VO)を得ることで、計測対象物体170上における検出指標の分布の割合を導出する。そして、上記比率に対して適宜設定した閾値を用いてステップS3050とステップS3060での条件分岐を行えばよい。また、物体座標系における互いが最も遠い3点の検出指標によって構成される三角形の面積を求め、計測対象物体170のサイズ(例えば、外接直方体の最も長い2辺が成す矩形の面積)との比率を求め、これを尺度として用いることも可能である。
[第6の実施形態]
上記第1乃至第5の実施形態では、位置及び姿勢を算出するいくつかの手法の中から、指標の分布に応じて一つの手法を選択していた。本実施形態では、一つの手法を選択するのとは異なる方法によって、指標の分布を加味した位置及び姿勢の安定計測を実現する。
本実施形態に係る位置姿勢計測装置は、第1の実施形態と同様に、撮像装置と計測対象物体の位置及び姿勢の計測を行う。以下、本実施形態に係る位置姿勢計測装置及び位置姿勢計測方法について説明する。
本実施形態に係る位置姿勢計測装置の構成は第1の実施形態とほぼ同じであり、位置姿勢算出部120の内部動作のみが異なっている。そのため、以下では、第1の実施形態との相違点である、本実施形態の位置姿勢算出部の動作についてのみ説明する。
図17は、本実施形態の位置姿勢算出部1720の処理手順を示すフローチャートである。本実施形態では、CPU1001が位置姿勢算出部1720の機能を実現するプログラムを実行することにより以下の手順を実現する。
ステップS17000において、位置姿勢算出部1720は、検出された各々の指標Qknの画像座標uQknとその識別子knを指標抽出部110から入力する。なお、各指標の物体座標系における3次元座標xO Qknは、既知の値としてRAM1002に予めロードされているものとする。
ステップS17005において、位置姿勢算出部1720は、撮像装置130及び計測対象物体170の位置及び姿勢の、センサによる計測値を、センサ計測値入力部150から入力する。以下では、撮像装置130の位置計測値を3値ベクトルt# WC 、姿勢計測値を3×3の回転行列R# WCで表現する。また、計測対象物体170の位置計測値を3値ベクトルt# WO 、姿勢計測値を3×3の回転行列R# WOで表現する。
ステップS17010において、位置姿勢算出部1720は、指標が検出されているか否かを判定する。指標が検出されていない場合(N=0)はステップS17120に処理を進め、それ以外の場合(N≧1)はステップS17020に処理を進める。
ステップS17020において、位置姿勢算出部1720は、検出された指標の総数Nが1か否かを判定する。検出された指標の総数Nが1の場合はステップS17025に処理を進め、それ以外の場合はステップS17030に処理を進める。
ステップS17025において、位置姿勢算出部1720は、検出されている指標上での誤差を打ち消すように、撮像装置130の姿勢計測値の2パラメータ(パン及びチルト角)に対して補正を加える。そして、ステップS17120に処理を進める。ステップS17025における補正処理は、第1の実施形態におけるステップS3025と同様であるので、詳細な説明は省略する。
ステップS17030において、位置姿勢算出部1720は、検出されている指標上での誤差を打ち消すように、撮像装置130の姿勢計測値の3パラメータ(パン、チルト及びロール角)に対して補正を加える補正行列ΔRWC_1を算出する。はじめに、第1の実施形態におけるステップS3035と同様な方法によって姿勢の3パラメータを補正し、補正後の撮像装置の姿勢RWC_1を得る。そして、得られたRWC_1と、センサによる姿勢計測値R# WCとに基づいて、ΔRWC_1を次式23のように算出する。
また、ステップS17030では位置の補正は行っていないが、以下の説明における便宜上、位置の補正値を、3値のベクトルΔtWC_1と表記する。そして、ΔtWC_1= [0 0 0]Tとおく。
ステップS17040において、位置姿勢算出部1720は、検出された指標の総数Nが2か否かを判定する。指標の総数Nが2の場合はステップS17043に処理を進め、それ以外の場合はステップS17050に処理を進める。
ステップS17043において、位置姿勢算出部1720は、検出されている指標上での誤差を打ち消すように、撮像装置130の姿勢計測値の2パラメータ(パン及びチルト角)に対して補正を加える補正行列ΔRWC_2を算出する。はじめに、ステップS17025と同様な方法によって姿勢を補正し、補正後の撮像装置の姿勢RWC_2を得る。そして、得られたRWC_2と、センサによる姿勢計測値R# WCとに基づいて、式23と同様にしてΔRWC_2を算出する。
ステップS17047において、位置姿勢算出部1720は、二つの姿勢補正値(補正行列ΔRWC_1及びΔRWC_2)を合成し、実際に適用する姿勢補正値(補正行列ΔRWC)を算出する。また、位置の補正は行っていないので、位置の補正ベクトルΔtWCを[0 0 0]Tとおく。そして、ステップS17110へに処理を進める。
以下、ステップS17047における、姿勢補正値の合成処理の詳細を説明する。まず、検出された二つの指標間の距離distに応じて、次式24によって両補正値の重みw1を決定する。
ここで、T1 minとT1 maxは指標間の距離を正規化するためのパラメータであり、適切な値が予め設定されているものとする。図18は、式24によって得られる重みw1とdistとの関係を表している。
次に、夫々の補正行列ΔRWC_1及びΔRWC_2の姿勢成分を、四元数表現(4値のベクトルΔHWC_1,ΔHWC_2と表す)で得て、次式25によってその加重和ΔHWCを算出する。
そして、得られた加重和ΔHWCを、回転行列表現であるΔRWCに変換する。なお、回転行列と四元数である加重和との相互変換方法は、コンピュータ・グラフィックス等の分野における基本的事項であるので、その詳細な説明は省略する。
式25によって、重みw1が0の時は2パラメータの補正が選択され、重みw1が1の時は3パラメータの補正が選択される。また、重みw1が0から1の間である時は、2パラメータの補正と3パラメータの補正の中間的な変換行列が、重みw1の大きさに応じて生成される。
次に、ステップS17040で、N=2でなかった場合、即ち検出された指標が3つ以上の場合について説明する。ステップS17050において、位置姿勢算出部1720は、検出された全指標の画像座標を包含する凸包を算出する。
ステップS17060において、位置姿勢算出部1720は、ステップS17050で算出した凸包の面積Aと、所定の値として定められている閾値T4(例えば、撮影画像全体の面積の1/12)との比較を行う。面積Aが閾値T4以上の場合はステップS17090に処理を進め、それ以外の場合はステップS17070へと処理を進める。なお、後述する二つのパラメータT2 max及びT3 minに対して、T2 max≦T4≦T3 minの関係が成り立つ値であれば、閾値T4はいずれの値であってもよい。
ステップS17070において、位置姿勢算出部1720は、ステップS17043と同様に、撮像装置130の姿勢計測値のパン及びチルト角に補正を加える補正行列ΔRWC_2を算出する。
ステップS17080において、位置姿勢算出部1720は、ステップS17047と同様に、二つの補正行列ΔRWC_1及びΔRWC_2を合成し、補正行列ΔRWCを算出する。そして、ステップS17110へと処理を進める。ただし、ステップS17080では、指標間の距離distではなく、ステップS17050で求めた凸包の面積Aに応じて、次式26によって重みw1を決定する。
ここで、T2 minとT2 maxは凸包の面積を正規化するためのパラメータであり、T2 max≦T4を満たす適切な値が予め設定されているものとする。
ステップS17090において、位置姿勢算出部1720は、検出されている全指標上での誤差の和を最小とするような、撮像装置130の位置及び姿勢の補正値を算出する。ここで、位置の補正値は3値のベクトルΔtWC_3で、姿勢の補正値は3×3の回転行列ΔRWC_3で表現する。はじめに、第1の実施形態におけるステップS3070と同様な方法によって撮像装置の位置及び姿勢を補正し、補正後の撮像装置の位置tWC_3及び姿勢RWC_3を得る。そして、得られたRWC_3と、センサによる姿勢計測値R# WCとに基づいて、式23と同様にしてΔRWC_3を算出する。また、得られたtWC_3とセンサによる位置計測値t# WCとに基づいて、ΔtWC_3を次式27のように算出する。
ステップS17100において、位置姿勢算出部1720は、二つの補正値(ΔRWC_1とΔtWC_1及びΔRWC_3とΔtWC_3)を合成し、センサ計測値に実際に適用する補正値を算出する。そして、ステップS17110へに処理を進める。
以下、ステップS17100の処理の詳細を説明する。まず、ステップS17050で求めた凸包の面積Aに応じて、次式28によって重みw2を決定する。
ここで、T2 minとT2 maxは凸包の面積を正規化するためのパラメータであり、T4≦T3 minを満たす適切な値が予め設定されているものとする。図19は、式26及び式28の夫々によって得られる、凸包の面積Aと重みw1及びw2との関係を表している。
次に、位置と姿勢のそれぞれについて、二つの補正値の加重和を算出する。姿勢に関しては、夫々の補正行列ΔRWC_1及びΔRWC_3の姿勢成分を四元数表現(4値のベクトルΔHWC_1,ΔHWC_3と表す)で得て、次式29によってその加重和ΔHWCを算出する。
そして、得られた四元数ΔHWCを、回転行列表現であるΔRWCに変換する。一方、位置の補正値に関しては、次式30によって二つのベクトルの加重和ΔTWCを直接算出する。
上述のように、ΔtWC_1= [0 0 0]Tである。従って、式29及び式30によって、重みw2が0の時は姿勢3値のみの補正が選択され、重みw2が1の時は位置3値を加えた6自由度の補正が選択される。また、重みw2が0から1の間である時は、姿勢のみの補正と6自由度の補正との中間的な補正値が、重みw2の大きさに応じて生成される。
ステップS17110において、位置姿勢算出部1720は、次式31及び32によって撮像装置130の位置及び姿勢のセンサ計測値に補正を加え、補正後の位置tWC及び姿勢RWCを得る。
ステップS17120において、位置姿勢算出部1720は、得られた撮像装置130及び計測対象物体170の位置及び姿勢を表すデータを、I/F1009を介して外部へと出力する。あるいは、これらのデータを、他のアプリケーションから利用可能な状態としてRAM1002上に格納する。
なお、第1の実施形態と同様に、計測対象物体170の位置及び姿勢の計測値に補正を加えて出力しても良い。また、カメラ座標系における計測対象物体170の位置及び姿勢を算出してこれを出力しても良いし、物体座標系における撮像装置130の位置及び姿勢を求めて、これを出力してもよい。
ステップS17130において、位置姿勢算出部1720は、処理を終了するか否かの判定を行い、処理を終了しない場合には、ステップS17000へと処理を進める。
以上によって、撮像装置の位置及び姿勢の計測が行われる。
本実施形態では、検出された指標の分布状況に応じて、複数の補正方法の使用割合を変化させている。そのため、時系列画像上で検出指標の分布が徐々に変化する場合に複数の手法が推定値の算出もしくは補正値に与える影響度が徐々に変化し、手法の切り替えがシームレスに行われる。そのため、閾値処理で手法を完全に切り替える第1の実施形態の場合と比べ、時間軸上でのスムースさにおいて優位性がある。
また、本実施形態では、画像を重視する方法とセンサによる計測値を重視する方法を合成している。その結果、推定される位置及び姿勢に対する画像情報の影響度(寄与度)が、検出された指標の分布に応じて変化する。すなわち、画像情報が十分に得られている場合には画像情報を優先的に利用し、画像情報が不十分な場合には画像情報の影響度が低くなるという効果を得ることができる。
なお、上記では、重みw(w1及びw2)の値によらず、常に二つの方法による補正値の算出を行っていた。しかし、重みwを先に算出し、その値が0または1の場合には、加重が0となる補正値の算出処理を実行しないという構成をとることも可能である。これにより、重みが0または1の場合の計算量が削減できる。
また、上記では、二つの方法によって得られた補正値(補正ベクトルや補正行列)の加重和を求め、これをセンサによる計測値に付加している。しかし、二つの方法によって得られた位置及び姿勢自体の加重和を求めることでも、同様な効果を得ることができる。この場合、ステップS17047では、ステップS17030で求めた姿勢RWC_1とステップS17043で求めた姿勢RWC_2との加重和を、式25と同様にして算出する。また、ステップS17070では、ステップS17030で求めた姿勢RWC_1とステップS17070で求めた姿勢RWC_2との加重和を、式25と同様にして算出する。また、ステップS17100では、ステップS17030で求めた姿勢RWC_1及び位置t# WCとステップS17090で得た姿勢RWC_3及び位置tWC_3の加重和を、式29及び式30と同様にして算出する。そして、ステップS17110を実行せずに、加重和の結果として得られた位置及び姿勢を出力する。
本実施形態で示した技術的思想の本質は、検出された指標の分布に応じて、複数の方法によって得られた解を合成することにある。したがって、第2乃至第5の実施形態においても、指標の分布に応じた手法の選択工程を両者による結果の加重和に変更することで、同様な効果を有する位置姿勢計測装置を構成することができる。
例として、第5の実施形態に本実施形態の考え方を適用した場合を考える。例えば、ステップS15070とステップS15038の処理の双方を実行し、夫々による位置と姿勢を得る。そして、凸包の面積Aに対する重みw2を式28と同様にして算出し、式29や式30と同様にして位置及び姿勢の加重和を算出する。このとき、姿勢に関しては、夫々の方法で得た補正値の加重和を算出して、センサ計測値に付加してもよい。他の手法の選択工程を加重和に変更する方法も同様であるので、これ以上の説明は省略する。
なお、本実施形態においても、指標の分布の尺度として、検出された指標の成す凸包の面積を用いることは必須ではなく、上記実施形態の変形例4と同様な様々な尺度を用いても良い。
また、式24、式26、式28及び、図18、図19で示したように、本実施形態では、指標の分布の尺度が下限値から上限値まで推移した際に、0から1の間を線形に推移するように重み(w1またはw2)を設定している。。しかし、重みの算出方法は必ずしもこれに従う必要はない。すなわち、指標の分布の尺度が下限値の場合に重みの値が0、上限値の場合に1、二つの区間の間で単調増加する値となっていれば、同様の効果を得ることができる。例えば式26を次式33のように変形してもよい。
もちろん、同様な他の単調増加関数に置き換えてもよい。
また、二つの姿勢の加重平均を求める方法として、本実施形態では、式25や式29で表されるような四元数の加重和を用いている。しかし、姿勢の加重平均方法はこれに限られるものではなく、他の算出方法を用いてもよい。例えば、式25を用いる代わりに以下のような方法を用いてもよい。まず、姿補正行列ΔRWC_2とΔRWC_1の差分を表す姿勢を回転軸a及び回転角θによる表現で求める。次に、回転角θに重みw1を乗算した角度をθ’とおく。最後に、回転軸a及び回転角θ’で表現される姿勢を求めてこれをΔRWC_2に乗算する。この結果は、w1が0の時にはΔRWC_2、w1が1の時にはΔRWC_1となる。そして、w1が0と1の中間値の場合には、二つの補正行列を重み付けして内挿した補正行列を得ることができる。もちろん、二つの姿勢を重み付けして内挿するような他のいずれの算出方法を用いてもよいことは、いうまでもない。
[第7の実施形態]
上記の実施形態では、検出された指標の分布状況を明示的に数値化し、その値に基づいて、注目フレームにおける検出指標以外の情報の影響度を制御していた。本実施形態は、指標の分布状況に応じて指標以外の情報の影響度を制御する方法である点では共通するが、指標の分布の明示的な数値化は行わない点で異なる。
本実施形態に係る位置姿勢計測装置は、計測対象である撮像装置が撮影した時系列画像を利用して、撮像装置の位置及び姿勢の計測を行う。以下、本実施形態に係る位置姿勢計測装置及び位置姿勢計測方法について説明する。
図20は、本実施形態における位置姿勢計測装置の構成を示している。同図に示したように、本実施形態における位置姿勢計測装置2000は、画像入力部2050、指標検出部2010、位置姿勢算出部2020、重み設定部2060、及び姿勢センサ2040によって構成される。そして、計測対象である撮像装置2030に接続されている。撮像装置2030の位置及び姿勢が、本実施形態に係る位置姿勢計測装置2000によって計測される。
シーン(撮像装置2030が撮影する空間)には、基準座標系(記号Wによって表現する)が定義されている。シーン中の複数の位置には、基準座標系における位置(基準座標)が既知である複数個の指標Qk(k=1,2,・・・,K)が配置されている。ここで、kは指標の識別子を表している。また、Kは配置されている指標の総数を表している。指標Qkの配置は、計測範囲内を撮像装置2030が移動した際に、撮影画像中に常に観測されるように調整されていることが好ましい。
図20の例は、K=6、すなわち6個の指標Q1〜Q6がシーン中に配置されている状況を示している。指標Qkは、例えば、それぞれが異なる色を有する同一形状(図では円形)のマーカによって構成される。あるいは、それぞれが異なるテクスチャ特徴を有する自然特徴等の特徴点によって指標を構成してもよい。また、ある程度の面積を有する四角形の単色領域によって形成されるような、四角形指標を用いることも可能である。撮影画像上における投影像の画像座標が検出可能であって、かついずれの指標であるかが何らかの方法で識別可能であるような指標であれば、何れの形態であってもよい。また指標は故意に設定されたものであっても良いし、故意に設定されたものではない、自然形状のものを用いても良い。
撮像装置2030は、例えばビデオカメラである。撮像装置2030が撮像する画像は、位置姿勢計測装置2000に入力される。撮像装置2030にはカメラ座標系が定義されている。以下では必要に応じて、カメラ座標系を記号Cによって表現する。位置姿勢計測装置2000は、基準座標系に対するこのカメラ座標系の位置と姿勢を、撮像装置2030の位置と姿勢として計測する。カメラ座標系は、撮像装置2030の視点位置を原点、視線方向を−Z軸と定義し、更に、Z軸に直交してかつ互いに直交する2軸をX軸、Y軸として定義した座標系である。撮像装置2030のカメラ内部パラメータは既知であるものとする。
姿勢センサ2040は、撮像装置2030に装着されており、基準座標系における撮像装置2030の姿勢を計測する。姿勢センサ2040が出力する計測値は、位置姿勢算出部2020に入力される。姿勢センサ2040は、例えば、米国InterSense社のInertiaCube3等によって構成される。
画像入力部2050は、位置姿勢計測装置2000へ入力される撮影画像をデジタルデータに変換し、指標検出部2010へと出力する。
指標検出部2010は、画像入力部2050より撮影画像を入力する。指標検出部2010は、入力画像を解析し、画像中に撮影されている指標を検出(並びに同定)する。なお、本明細書において、特に説明がない場合、「検出された指標」とは、「同定された指標」を意味する。指標検出部2010は、さらに、検出された夫々の指標(以下、必要に応じて検出指標と呼ぶ)の画像座標と対応する基準座標を、位置姿勢算出部2020へと出力する。
なお、以下では、検出指標の夫々に通し番号n(n=1,2,・・・,N)をつけ、画像上で検出された夫々の指標をQknと表記する。ここで、Nは画像上で検出された指標の総数を表している。また、検出指標Qknの画像座標(実測値)をunと表記し、必要に応じて指標Qkの画像座標をuC Qkと表記する(すなわち、un=uC Qkn)。また、既知の値である指標Qkの基準座標をxw Qkと表記する。
指標の検出は、使用する指標の種類に応じた方法で行われる。例えば、図20の例のように、指標の各々が異なる色を有するマーカによって構成されている場合には、撮影画像上から各々のマーカ色に対応する領域を検出する。そして、その重心位置を指標の検出座標とする。また、指標の各々が異なるテクスチャ特徴を有する特徴点によって構成されている場合には、テンプレート画像によるテンプレートマッチングによって指標の位置を検出する。この場合、各々の指標のテンプレート画像は、既知の情報として予め保持しておく。
また、四角形指標を用いる場合は、画像に2値化処理及びラベリング処理を施し、4つの直線によって形成されているラベル領域を指標候補として検出する。さらに、各指標候補の矩形領域の中に特定のパターンがあるか否かを判定することによって誤検出の排除を行う。また、矩形領域中のパターンによって、指標の識別子を取得する。最後に、矩形領域の4頂点の座標が指標の位置として出力される。なお、このようにして検出される四角形指標は、本明細書では、4つの頂点の個々によって形成される4つの指標であると考える。
重み設定部2060は、「姿勢計測値を重視する度合い」を表すパラメータ(以下、必要に応じて「重みパラメータ」と表す)の設定を行うユーザインタフェース(UI)を提供する。重み設定部2060は、キーボード1004やマウス1005(後述)等の入力デバイスを介して重みパラメータを入力し、位置姿勢算出部2020へと出力する。
UI上における操作者に対する重みパラメータの表現方法としては、後述する位置姿勢算出部2020の内部で使用される重み係数wの値をそのまま用いても良い。また、重み係数wの指数部の数値(10の何乗であるか)を用いてもよい。また、正規化された値(例えば、0から1の間の値)を入力し、内部で重み係数wにマッピングしても良い。これらの数値の入力は、キーボードから値を直接打ち込むことで行っても良いし、スライダー等のGUIで選択しても良い。
また、スライダー等のGUIを用いる場合には、数値以外の概念的な表現でパラメータを入力し、その入力値を内部で重み係数wにマッピングしても良い。概念的な表現としては、例えば、「最小」 「最大」とその間の何段階かの中から選択するようなUIが利用できる。また、「指標重視」「センサ重視」とその間の何段階かの中から選択しても良い。
位置姿勢算出部2020は、撮像装置2030の姿勢の計測値を姿勢センサ2040から入力し、検出指標Qknの画像座標uQknと基準座標xw Qknの組を指標検出部2010から入力する。そして、入力した情報に基づいて、撮像装置2030の位置及び姿勢を算出して出力する。位置姿勢算出部2020の処理の詳細については、フローチャートを用いて後に詳しく説明する。
なお、画像入力部2050、指標検出部2010、重み設定部2060、及び位置姿勢算出部2020の少なくとも一部は、独立した装置として実現しても良い。あるいは、夫々1つもしくは複数のコンピュータにインストールし、コンピュータのCPUにより実行することで、その機能を実現するソフトウェアとして実現しても良い。本実施形態では、各部(画像入力部2050、指標検出部2010、重み設定部2060、及び位置姿勢算出部2020)は、それぞれソフトウェアにより実現され、同一のコンピュータにインストールされているものとする。ソフトウェアを実行することで各部の機能を実現するためのコンピュータの基本構成は、第1の実施形態と同様であるので、説明を省略する。
図21は、位置姿勢算出部2020の処理手順を示すフローチャートである。この処理手順は、本実施形態では、CPU1001が位置姿勢算出部2020の機能を実現するプログラムを実行することにより実現される。なお、以下の処理を行う前段で、同フローチャートに従った手順を実現するためのプログラムコードは、例えば外部記憶装置1007からRAM1002に既にロードされているものとする。
以下では、撮像装置2030の位置を、3値のベクトルt = [x y z]Tによって内部的に表現する。また、撮像装置2030の姿勢を、ベクトルの大きさによって回転角を、ベクトルの向きによって回転軸方向を定義するような3値のベクトルω= [ξψ ζ]Tによって表現する。また、撮像装置2030の位置と姿勢を、6値のベクトルs= [tT ωT]T = [x y z ξ ψ ζ]Tによって表現する。
なお、姿勢の情報は必要に応じて、カメラ座標系から基準座標系への回転変換を行う3×3の回転行列Rに変換して使用されるものとする。ωとRは互いに一意に変換することができる。ωからRへの変換は式3によって可能である。Rからωへの変換方法は公知であるので、その詳細な説明は省略する。
ステップS21000において、位置姿勢算出部2020は、時刻τにおける撮像装置2030の姿勢計測値ω* τ( = [ξ* τ ψ* τ ζ* τ]T)を、姿勢センサ2040から入力する。
ステップS21010において、位置姿勢算出部2020は、時刻τにおける撮影画像から検出された指標Qkn(n=1,2,・・・,N)の画像座標un(=uC Qkn)と基準座標xw Qknの組を、指標検出部2010から入力する。
ステップS21020において、位置姿勢算出部2020は、入力された検出指標の情報が位置及び姿勢の推定に十分か否かを判定し、それに応じて処理の分岐を行う。具体的には、入力した指標の数が3点以上の場合はステップS21030に処理を進め、3点未満の場合は処理を終了する。
ステップS21030において、位置姿勢算出部2020は、姿勢計測値のうちの傾斜角に関する2パラメータを規定値として扱い、夫々の検出指標の情報を用いて残された4パラメータを推定する。ここで、残された4パラメータとは、撮像装置2030の方位角と位置である。この処理は、例えば、非特許文献6に開示されている手法によって実現できるので、詳細な説明は省略する。以下では、ステップS21030で得られる位置及び姿勢を、以降の処理における位置及び姿勢の初期値s0= [t0 T ω0 T]T = [x0 y0 z0 ξ0 ψ0 ζ0]Tと表記する。なお、得られた姿勢ω0と姿勢計測値ω* τとの差異は、方位角成分のみとなる。すなわち、ω0はω* τの方位角ドリフト誤差を補正した姿勢と考えることができる。
ステップS21040において、位置姿勢算出部2020は、各々の指標Qknに対して、その画像座標の推定値(理論値)un *(=uC Qkn*)を算出する。un *は、sによって定義される指標の観測方程式、すなわち、指標の基準座標xw Qknから画像座標を算出する式19に基づいて算出される。ただし式19では、画像座標の推定値un *を、uQkn*と表記している。
ステップS21050において、位置姿勢算出部2020は、各々の指標Qknに対して、画像座標の推定値un *と実測値unとの差異(再投影誤差)Δunを、次式34によって算出する。
ステップS21060において、位置姿勢算出部2020は、各々の指標Qknに対して、sに関する画像ヤコビアンJus Qkn(=∂u/∂s)を算出する。ここで、画像ヤコビアンとは、式19の観測方程式をsの各要素で偏微分した解を各要素に持つ2行×6列のヤコビ行列である。具体的には、ヤコビ行列Jux Qkn(=∂u/∂x)とヤコビ行列Jxs Qkn(=∂x/∂s)を算出し、次式35によってJus Qknを算出する。
ここで、Jux Qknは、式6の右辺をカメラ座標xC Qknの各要素で偏微分した解を各要素に持つ2行×3列のヤコビ行列である。また、Jxs Qknは、式20の右辺をベクトルsの各要素で偏微分した解を各要素に持つ3行×6列のヤコビ行列である。
ステップS21070において、位置姿勢算出部2020は、ステップS21030で得た姿勢の初期値ω0に対する現在の姿勢推定値ωの差異Δω( = [Δξ Δψ Δζ]T)を、次式36によって算出する。
ステップS21080において、位置姿勢算出部2020は、上記のステップで算出した再投影誤差Δun、画像ヤコビアンJus Qkn、及び姿勢の差異Δωに基づいて、sの補正値Δsを算出する。具体的には、ヤコビアンを並べた行列Θと誤差ベクトルUを作成し、次式37によってΔsを算出する。
ここで、行列Θは、画像ヤコビアンJus Qknを垂直に並べた行列に、姿勢のパラメータξ,ψ,ζ自身のsに関するヤコビアンを追加した行列である。Θは次式38によって定義される。
また、Θ'は、Θの転置行列に重み係数wを付加した行列であり、次式39によって定義される。
ここでwは、画像情報と姿勢計測値とのバランスをとるための重み係数であり、「姿勢計測値を重視する度合い」を表している。wの値によって、最終的に得られる位置及び姿勢に対する姿勢計測値の影響力の基準値が決定される。重み係数wの値は、重み設定部2060によって与えられる。なお、姿勢計測値の実際の影響力は、指標から得られる情報量の大小に応じて受動的に変更される。
一方、誤差ベクトルUは、ΔunとΔωの各項を垂直に並べた2N+3次元のベクトルである。Uは次式40によって定義される。
ここで、式37乃至式40によって求められるΔsの意味について説明する。式36の目的は、直感的には、誤差ベクトルUを小さくするようなΔsを求めることである。例えば第5の実施形態のステップS15070における処理のような、指標の情報のみを用いてカメラの位置と姿勢を求める手法では、誤差ベクトルUは次式41によって定義される。
これは、指標の再投影誤差を評価基準として、これを最小化することを意図している。
一方、式40の誤差ベクトルUは、式41の誤差ベクトルUに姿勢の差異Δωを付加したものとなっている。これは、本実施形態に係る位置姿勢算出部2020が、指標の再投影誤差と姿勢計測値の差異を評価基準としていることを示している。直感的には、姿勢が姿勢計測値(正確には、姿勢計測値の方位誤差を補正した値)から離れすぎてはいけないという制約条件を加味しながら、指標の再投影誤差を極力小さくするようなΔsが算出される。
ステップS21090において、位置姿勢算出部2020は、ステップS21080において算出した補正値Δsを用い、式12に従ってsを補正し、得られた値をsの新たな推定値とする。
ステップS21100において、位置姿勢算出部2020は、誤差ベクトルUが予め定めた閾値より小さいかどうか、あるいは、補正値Δsが予め定めた閾値より小さいかどうかといった何らかの判定基準を用いて、計算が収束しているか否かの判定を行う。収束してない場合には、補正後のsを用いて、再度ステップS21040以降の処理を行う。一方、収束していると判断した場合には、ステップS21110へと処理を進める。
ステップS21110において、位置姿勢算出部2020は、ステップS21100までの処理によって得られたsを、撮像装置2030の位置と姿勢の推定値として出力する。なお、位置及び姿勢の出力形態はsそのものに限定されるものではない。例えば姿勢を、回転行列、回転軸ベクトルと回転角、オイラー角、4元数等に変換して出力してもよい。また、同次座標表現による4×4の位置姿勢変換行列やその逆行列によって、位置及び姿勢を表してもよい。また、撮像装置2030に対する基準座標系の位置及び姿勢を求めてこれを出力してもよい。もちろん、これらのいずれかの組み合わせを同時に出力してもよい。
以上のようにして、撮像装置2030の位置及び姿勢が算出される。なお、連続的に撮影される時系列画像に対して撮像装置2030の位置及び姿勢を求める場合には、入力されたフレーム毎に上述の処理を実行すればよい。
本実施形態に係る位置姿勢計測装置によれば、姿勢が姿勢計測値(正確には、姿勢計測値の方位誤差を補正した値)から離れすぎてはいけないという制約条件を加味しながら、指標の再投影誤差を極力小さくするような位置と姿勢が算出される。
本実施形態に係る位置姿勢計測装置によれば、画像から得られる情報が不十分な場合には、検出指標の項の影響力が小さくなるので、姿勢計測値を重視した位置及び姿勢を得ることができる。その結果、姿勢計測値を信用して未知パラメータ数を限定する手法と同様な、解を安定化させる効果を得ることができる。一方、画像情報が十分に得られている場合には、検出指標の項の影響力が大きくなる。その結果、姿勢計測値の誤差に影響されることなく、高精度な解を得ることができる。
すなわち、本実施形態に係る位置姿勢計測装置によれば、画像と姿勢センサから得られる情報を無駄なく利用することが可能となり、従来の方法と比べて安定性と精度の双方に優れた計測が実現できる。
[第8の実施形態]
本実施形態に係る位置計測装置は、環境側に配置した複数台の撮像装置及び指標、計測対象物体に設置した複数台の撮像装置、指標、及び姿勢センサを用いて、任意の計測対象物体の位置と姿勢の計測を行う。以下では、本実施形態に係る位置計測装置及び位置計測方法について説明する。
図22は、本実施形態における位置姿勢計測装置の構成を示している。同図に示したように、本実施形態における位置姿勢計測装置2200は、画像入力部2250、指標検出部2210、位置姿勢算出部2220、モード選択部2280、1台以上の主観視点カメラ2230,1台以上の客観視点カメラ2260、及び姿勢センサ2040によって構成されている。位置姿勢計測装置2200は、計測対象物体2270に接続されている。基準座標系における計測対象物体2270の位置と姿勢が、本実施形態に係る位置計測装置2200によって計測される。
シーンには、第1の実施形態と同様に、基準座標系における位置が既知である1つ以上の指標Qk(k=1,2,・・・,KW)が配置されている。以下では、環境側に配置されているこれらの指標を、必要に応じて主観視点指標と呼ぶ。主観視点指標の形態は、第1の実施形態と同様に、撮影画像上における投影像の画像座標が検出可能であって、かつ、いずれの指標であるかが何らかの方法で識別可能であるような指標であれば、何れのものであってもよい。図22では、KW=6、すなわち6個の主観視点指標が配置されている。
また、計測対象物体2270には、物体座標系上における位置(物体座標)が既知である1つ以上の指標QKW+k(k=1,・・・,KO)が配置されている。以下では、物体側に配置されているこれらの指標を、必要に応じて客観視点指標と呼ぶ。客観視点指標の形態は、主観視点指標と同様に、撮影画像上における投影像の画像座標が検出可能であって、かつ、いずれの指標であるかが何らかの方法で識別可能であるような指標であれば、何れのものであってもよい。図22では、KO=4、すなわち4個の客観視点指標が配置されている。なお,客観視点指標は、計測対象物体2270上に直接配置されていなくてもよい。客観視点指標は、例えば、主観視点カメラ2230上や姿勢センサ2040上に配置されていてもよい。
主観視点カメラ2230a及び2230b(まとめて、主観視点カメラ2230ともいう)は、例えばビデオカメラである。主観視点カメラ2230は、計測対象物体2270上に配置されている。主観視点カメラ2230の夫々が撮像する画像(主観視点画像)は、画像入力部2250に入力される。主観視点カメラ2230のカメラ内部パラメータや、物体座標系における位置及び姿勢は既知であるものとする。主観視点指標及び主観視点カメラ2230の配置は、計測範囲内を計測対象物体2270が移動した際に、その撮影画像中に常に主観視点指標を観測可能なように調整されていることが好ましい。図22では、2台の主観視点カメラ2230a,2230bが配置されている。以下では必要に応じて、主観視点カメラ2230の夫々によって定義される主観視点カメラ座標系を、記号C1,C2で表現する
客観視点カメラ2260a〜2260d(まとめて、客観視点カメラ2260ともいう)は、例えばビデオカメラである。客観視点カメラ2260は、計測対象物体2270を撮影可能なように、計測範囲を包囲する位置に設置されている。客観視点カメラ2260の夫々が撮像する画像(客観視点画像)は、画像入力部2250に入力される。客観視点カメラ2260のカメラ内部パラメータや、基準座標系における位置及び姿勢は既知であるものとする。客観視点指標及び客観視点カメラ2260の配置は、計測範囲内を計測対象物体2270が移動した際に、その撮影画像中に常に客観視点指標を観測可能なように調整されていることが好ましい。図22では、4台の客観視点カメラ2260a,2260b,2260c,2260dが配置されている。以下では必要に応じて、客観視点カメラ2260a〜2260dの夫々によって定義される客観視点カメラ座標系を、それぞれ記号B1,B2,B3,B4で表現する。
姿勢センサ2040は、計測対象物体2270上に配置されている。姿勢センサ2040は、計測対象物体2270の姿勢を計測して位置姿勢算出部2220へと出力する。
画像入力部2250は、夫々のカメラから入力される撮影画像をデジタルデータに変換し、指標検出部2210へと出力する。
指標検出部2210は、画像入力部2250より夫々の撮影画像を入力する。指標検出部2210は、夫々の入力画像を解析し、夫々の画像中に撮影されている指標を検出(並びに同定)する。指標検出部2210は、夫々の検出指標について、検出したカメラの識別子と、画像座標の実測値と、対応する3次元座標の組を、位置姿勢算出部2220へと出力する。ここで、3次元座標とは、指標が主観視点指標の場合は基準座標を、客観視点指標の場合は物体座標を意味している。なお、指標の検出方法は第1の実施形態と同様にいずれの方法であっても良いので、詳細な説明は省略する。
なお、以下では、検出された指標の夫々に通し番号n(n=1,,,N)をつけ、画像上で検出された夫々の指標をQknと表記する。ここで、Nは各画像上で検出された指標の総数である。また、N=ΣNdであり、Ndは夫々のカメラの撮影画像上で検出された指標の数を表している。また、dはカメラの識別子(d=C1,C2,B1,B2,B3,B4)を表している。また、指標Qknの画像座標をun、その指標を撮影したカメラの識別子をdnと表記し、識別子dのカメラで検出された指標Qkの画像座標をud Qkと表記する(すなわち、un=udn Qkn)。また、指標Qkが主観視点指標である場合に、既知の値であるその基準座標をxw Qkと表記する。同様に、指標Qkが客観視点指標である場合に、既知の値であるその物体座標をxO Qkと表記する。
モード選択部2280は、キーボード1004やマウス1005等の入力デバイスを介して、位置姿勢算出部2220において使用するアルゴリズムを選択する。例えばラジオボタン等のGUIによって、「指標の情報を重視」モード、「姿勢センサの計測値を重視」モード、それらの「中間」モード、のいずれかを選択可能とする。モード選択部2280は、選択されたモードがいずれであるかを、位置姿勢算出部2220に出力する。
位置姿勢算出部2220は、計測対象物体2270の姿勢計測値を姿勢センサ2040から入力する。また、夫々の検出指標について、検出したカメラの識別子dnと、画像座標の実測値unと、対応する3次元座標(xw QknまたはxO Qkn)の組を、指標検出部2210から入力する。そして、入力した情報に基づいて、計測対象物体2270の位置及び姿勢を算出して出力する。位置姿勢算出部2220の処理の詳細については、フローチャートを用いて後に詳しく説明する。
なお、画像入力部2250、指標検出部2210、モード選択部2280、及び位置姿勢算出部2220の少なくとも一部は、独立した装置として実現しても良い。あるいは、夫々1つもしくは複数のコンピュータにインストールし、コンピュータのCPUにより実行することで、その機能を実現するソフトウェアとして実現しても良い。本実施形態では、各部(画像入力部2250、指標検出部2210、モード選択部2280、及び位置姿勢算出部2220)は、それぞれソフトウェアにより実現され、同一のコンピュータにインストールされているものとする。なお、ソフトウェアを実行することで各部の機能を実現するためのコンピュータの基本構成は、第1の実施形態と同様であるので、詳細な説明は省略する。
図23は、位置姿勢算出部2220の処理手順を示すフローチャートであり、本実施形態ではCPU1001が位置姿勢算出部2220の機能を実現するプログラムを実行することにより実現される。なお、以下の処理を行う前段で、同フローチャートに従ったプログラムコードは、例えば外部記憶装置1007からRAM1002に既にロードされているものとする。
以下では、計測対象物体2270の位置及び姿勢を、第1の実施形態と同様、3値のベクトルt = [x y z]T及びω= [ξψ ζ]Tによって表現する。また、計測対象物体2270の位置と姿勢を、6値のベクトルs= [tT ωT]T = [x y z ξ ψ ζ]Tによって表現する。
ステップS23000において、位置姿勢算出部2220は、時刻τにおける計測対象物体2270の姿勢計測値ω* τ( = [ξ* τ ψ* τ ζ* τ]T)を、姿勢センサ2040から入力する。
ステップS23010において、位置姿勢算出部2220は、時刻τにおける夫々の撮影画像から検出された検出指標Qknの情報を、指標検出部2210から入力する。具体的には、検出したカメラの識別子dnと、画像座標の実測値unと、対応する3次元座標(xw QknまたはxO Qkn)の組を入力する。
ステップS23020において、位置姿勢算出部2220は、入力された検出指標の情報が位置及び姿勢の推定に十分か否かを判定し、それに応じて処理の分岐を行う。例えば、入力した指標の実体の総数が3点以上(N≧3)の場合はステップS23030に処理を進め、3点未満の場合は処理を終了する。ここで、実態の総数とは、同一指標が複数の画像中で検出された場合には、1つの指標が検出されたものとして計数した総数を意味する。
ステップS23030において、位置姿勢算出部2220は、モード選択部2280で選択されているモードが、「指標の情報を重視」モードであるか否かの判定を行う。「指標の情報を重視」モードの場合はステップS23035へと処理を進め、その他の場合はステップS23040へと処理を進める。
ステップS23035において、位置姿勢算出部2220は、夫々の検出指標の再投影誤差を評価基準として用いる手法によって、計測対象物体2270の位置及び姿勢を推定する。主観及び客観視点カメラから得られる検出指標の再投影誤差を最小化することで物体の位置及び姿勢を求める手法は、非線形最適化計算に基づく手法が非特許文献1等に開示されているので、詳細な説明は省略する。さらに、ステップS23070へと処理を進める。
ステップS23040において、位置姿勢算出部2220は、姿勢計測値のうちの傾斜角に関する2パラメータを規定値として扱い、夫々の検出指標の情報を用いて残された4パラメータを推定する。ここで、残された4パラメータとは、計測対象物体2270の方位角と位置である。この処理は、例えば、非特許文献1に開示されている手法によって実現できるので、詳細な説明は省略する。以下では、ステップS23040で得られる位置及び姿勢を、以降の処理における位置及び姿勢の初期値s0= [t0 T ω0 T]T = [x0 y0 z0 ξ0 ψ0 ζ0]Tと表記する。
ステップS23050において、位置姿勢算出部2220は、モード選択部2280で選択されているモードが、「姿勢センサの計測値を重視」モードであるか否かの判定を行う。「姿勢センサの計測値を重視」モードの場合は、ステップS23040で得られる位置及び姿勢をそのまま出力することとして、ステップS23070へと処理を進める。また、その他の場合はステップS23060へと処理を進める。
ステップS23060において、位置姿勢算出部2220は、夫々の検出指標の再投影誤差と、推定された姿勢パラメータと姿勢計測値との間の差異とを評価基準として用いる手法によって、計測対象物体2270の位置及び姿勢を推定する。ステップS23060の処理の詳細については、フローチャートを用いて後に詳しく説明する。
ステップS23070において、位置姿勢算出部2220は、以上の処理によって得られた計測対象物体2270の位置及び姿勢を出力する。
次に、図24のフローチャートを用いて、ステップS23060における処理の詳細を説明する。
ステップS24010において、位置姿勢算出部2220は、各々の指標Qknに対して、その画像座標の推定値(理論値)un *を算出する。un *は、指標Qknが主観視点指標の場合には、次式42で表される主観視点カメラ指標Ciによる観測方程式に基づいて算出される。
観測方程式Fci()は、xw Qknとsから当該指標のカメラ座標xCi Qknを求める式43と、xCi Qknから画像座標un *を求める式44によって構成される。
ここでfCi x及びfCi yは、それぞれx軸方向及びy軸方向における主観視点カメラ指標Ciの焦点距離である。また、RCiOは物体座標系Oから主観視点カメラ座標系Ciへ姿勢を変換する行列、tCiOは同座標系間の位置を変換するベクトルである。いずれの値も、主観視点カメラ2230a,2230b毎に予め位置の値として保持されているものとする。
一方、指標Qknが客観視点指標の場合には、un *は、次式45で表される客観視点カメラBiによる観測方程式に基づいて算出される。
観測方程式FBi()は、xO Qknとsから当該指標の世界座標xW Qknを求める式46と、xW Qknから夫々の客観視点カメラ座標系における座標xBi Qknを求める式47と、xBi Qknから画像座標un *を求める式48によって構成される。
ステップS24020において、位置姿勢算出部2220は、各々の指標Qknに対して、画像座標の推定値un *と実測値unとの差異(再投影誤差)Δunを、式34によって算出する。
ステップS24030において、位置姿勢算出部2220は、各々の指標Qknに対して、sに関する画像ヤコビアンJus Qkn(=∂u/∂s)を算出する。ここで、画像ヤコビアンとは、式42もしくは式45の観測方程式をsの各要素で偏微分した解を各要素に持つ2行×6列のヤコビ行列である。観測方程式Fci()の画像ヤコビアンは式35と同様にして得ることができる。一方、観測方程式FBi()の画像ヤコビアンは、ヤコビ行列JuxB Qkn(=∂u/∂xB)とヤコビ行列JxBxW Qkn(=∂xB/∂xW)とヤコビ行列JxWs Qkn(=∂xW/∂s)を算出し、次式49によって算出する。
ここで、JuxB Qknは、式48の右辺を客観視点カメラ座標xBi Qknの各要素で偏微分した解を各要素に持つ2行×3列のヤコビ行列である。また、JxBxW Qknは、式47の右辺を世界座標xW Qknの各要素で偏微分した解を各要素に持つ3行×3列のヤコビ行列である。また、JxWs Qknは、式46の右辺を状態ベクトルsの各要素で偏微分した解を各要素に持つ3行×6列のヤコビ行列である。
ステップS24040において、位置姿勢算出部2220は、ステップS23040で得た姿勢の初期値ω0に対する現在の姿勢推定値ωの差異Δω( = [Δξ Δψ Δζ]T)を、式35によって算出する。
ステップS24050において、位置姿勢算出部2220は、上記のステップで算出した再投影誤差ΔuQkn、画像ヤコビアンJus Qkn、及び姿勢の差異Δωに基づいて、sの補正値Δsを算出する。具体的には、ヤコビアンを並べた行列Θと誤差ベクトルUを作成し、式37によってΔsを算出する。なお、行列Θ、行列Θ'、及び行列Uの定義は、それぞれ式38,式39,式40と同様である。ただし、第7の実施形態とは異なり、夫々の行列には、異なるカメラ(客観視点カメラ及び主観視点カメラ)による検出指標Qknに関する情報が全て含まれている。また、本実施形態では、重み係数wは、予め求めた適切な値が固定値として設定されているものとする。
ステップS24060において、位置姿勢算出部2220は、ステップS24050において算出した補正値Δsを用いて式12に従ってsを補正し、得られた値をsの新たな推定値とする。
ステップS24070において、位置姿勢算出部2220は、誤差ベクトルUが予め定めた閾値より小さいかどうか、あるいは、補正値Δsが予め定めた閾値より小さいかどうかといった何らかの判定基準を用いて、計算が収束しているか否かの判定を行う。収束してない場合には、補正後のsを用いて、再度ステップS24010以降の処理を行う。一方、収束していると判断した場合には処理を終了する。
以上のようにして、計測対象物体2270の位置及び姿勢が算出される。本実施形態に係る位置姿勢計測装置によれば、姿勢が姿勢計測値(正確には、姿勢計測値の方位誤差を補正した値)から離れすぎてはいけないという制約条件を加味しながら、夫々のカメラによる検出指標の再投影誤差を極力小さくするような位置と姿勢が算出される。
本実施形態では、主観視点カメラ2230と客観視点カメラ2260の双方を用いた。しかし、計測対象物体2270の位置及び姿勢の計測に使用するカメラの構成はこれに限定されるものではない。例えば、主観視点カメラ2230のみを用いても良いし、客観視点カメラ2260のみを用いても良い。
なお、主観視点カメラ2230の位置及び姿勢を求めることが目的の場合にも、本実施形態と同様な方法を用いることができる。この場合、主観視点カメラ2230(のうちのひとつ)自体が計測対象物体2270であると考えればよい。
本実施形態では、予め定めた重み係数を固定値として用いた。しかし、第1の実施形態と同様に重み設定部2060を設けて、操作者が重み係数wを設定することも可能である。また、重み設定部2060とモード選択部2280を同一のUIで設定できるような工夫をしても良い。例えば、重み設定部2060の入力手段として、正規化されたパラメータ(例えば、0から1の間の値)を数値入力するUIを考える。この場合、入力されたパラメータが0場合は「指標の情報を重視」モード、1の場合は「姿勢センサの計測値を重視」モード、0と1の中間値の場合は「中間」モードとしても良い。そして、「中間」モードの場合にのみ、入力されたパラメータを重み係数wに変換して用いても良い。
[第7及び第8の実施形態の変形例]
(変形例7)
上記第7及び第8の実施形態では、姿勢センサ2040による姿勢計測値から離れすぎてはいけないという制約条件を考慮しながら、計測対象物体(撮像装置2030または計測対象物体2270)の位置及び姿勢を推定していた。しかし、上記実施形態で述べた技術的思想の適用範囲は、姿勢計測値から離れすぎてはいけないという制約条件だけを考慮することに限定されるものではない。
例えば、連続的に撮影される時系列画像に対して計測対象物体の位置及び姿勢を求める場合には、前のフレームとの連続性を考慮してもよい。前のフレームで求めた位置及び姿勢から離れすぎてはいけないという制約条件を考慮することで、フレーム間の連続性に優れた位置及び姿勢を得ることができる。
本変形例の処理ステップは、上記第7及び第8の実施形態とほぼ同様である。以下、第7の実施形態との差異について、図21を参照しながら説明する。基本的には、ステップS21110において位置及び姿勢の推定結果(sτ-1)が保持される点と、補正値の算出工程(ステップS21080)において前フレームに対する拘束条件が考慮される点のみが異なっている。なお、第8の実施形態も同様に変更することができる。
本変形例では、ステップS21080における式38の行列Θ、式39のΘ'、式40の誤差ベクトルUの夫々を、次式50〜52のように変更する。
すなわち、前フレームの結果に対する拘束条件を表す6つの評価値が、新たに追加される。ここで、w1,w2,w3は、それぞれ姿勢計測値の影響度、前フレームの位置の影響度、前フレームの姿勢の影響度を定める重みパラメータである。本変形例では、夫々の重みパラメータには適当な値が予め設定されているものとする。これらの値は、姿勢センサの信頼度やフレーム間の連続性を重視する度合いに応じて個別に設定しても良いし、簡易的には同一の値を設定してもよい。また、パラメータごとに異なる値を設定してもよい。また、上記の実施形態と同様に、重み設定部2060を介してユーザが値を調整できるようにしてもよい。
以上によって、姿勢が姿勢計測値から離れすぎてはいけないという制約条件と、位置及び姿勢が前フレームの推定結果から離れすぎてはいけないという制約条件を同時に考慮することができる。そして、これらの拘束条件の範囲内で、指標の再投影誤差を極力小さくするような位置と姿勢を算出することができる。
なお、前フレームにおける位置及び姿勢の推定結果であるsτ-1は、必ずしもステップS21110で推定された位置及び姿勢そのものでなくてもよい。例えば、計測対象物体の移動の履歴から、現フレームにおける計測対象物体の位置及び姿勢を予測した値を用いてもよい。この場合、予測は計測対象物体の速度や角速度から単純な線形近似によって行ってもよいし、他のいずれの方法によって行ってもよい。
なお、本変形例では前フレームにおける位置及び姿勢パラメータの全て(6自由度)を制約条件として用いていたが、必ずしも全パラメータを制約条件としなくてもよい。例えば、姿勢の制約は姿勢センサの計測値に対してのみ行ってもよい。この場合、式50の行列Θ、式51のΘ'、式52の誤差ベクトルUの夫々から、前フレームの姿勢に関する項を除外すればよい。同様に、前フレームの位置に関する項を省略しても良い。また、前フレームにおける位置及び姿勢パラメータのうちの任意の組み合わせに対してのみ拘束を行ってもよい。
(変形例8)
上記第7及び第8の実施形態に追加する形で、さらに、計測対象物体(撮像装置2030または計測対象物体2270)上に位置センサが設置されている場合を考える。この場合、姿勢センサから得られる姿勢計測値と位置センサから得られる位置計測値の双方を制約条件として用いることができる。
本変形例の処理ステップは、上記第7及び第8の実施形態とほぼ同様である。以下、第7の実施形態との差異について、図21を参照しながら説明する。基本的には、位置センサによる位置計測値を入力する工程をステップS21010の直後にステップS21015として有する点と、補正値の算出工程(ステップS21080)において位置計測値に対する拘束が考慮される点のみが異なっている。なお、第8の実施形態も同様に変更することができる(図23参照)。
新規に追加されるステップとして、ステップS21015において、位置姿勢算出部2020は、時刻τにおける撮像装置2030の位置計測値t* τを、位置センサから入力する。
ステップS21030において、位置姿勢算出部2020は、位置及び姿勢の初期値s0を算出する。本変形例では、ステップS21010で入力した姿勢計測値ω* τに前フレームの処理で推定された姿勢センサの誤差補正値Δωτ-1を乗算した姿勢を、姿勢の初期値ω0とおく。また、ステップS21015で入力した位置計測値t* τと次式53を用いて、位置の初期値t0を算出する。
ここで、xoは、既知の値である計測対象物体の座標系における位置センサの計測点の座標を示している。すなわち、式53は、位置センサの計測値(計測点の位置を表している)から計測対象の位置への変換式を表している。
本変形例では、ステップS21070で算出する姿勢の初期値と現在の推定姿勢との差異を求める式(式36)を、次式54のように、位置及び姿勢の双方を含むように変形する。
そして、ステップS21080で算出する、式38の行列Θ、式39のΘ'、式40の誤差ベクトルUの夫々を、次式55〜57のように変更する。
すなわち、位置の計測値に対する拘束条件が新たに追加される。ここで、w1およびw2は、それぞれ位置計測値の影響度と姿勢計測値の影響度を定める重みパラメータである。本変形例では、w1とw2には適当な値が予め設定されているものとする。これらの値は、夫々のセンサの信頼度に応じて個別に設定しても良いし、簡易的には同一の値を設定しても良い。また、パラメータごとに異なる値を設定してもよい。また、上記の実施形態と同様に、重み設定部2060を介してユーザが値を調整できるようにしても良い。
ステップS21110では、推定された位置及び姿勢を出力する。このとき、姿勢計測値ω* τと最終的に得られた姿勢ωとの差異を求め、姿勢の誤差補正値Δωτ-1として保持しておく。
以上によって、位置及び姿勢が位置計測値と姿勢計測値の夫々から離れすぎてはいけないという制約条件を加味しながら、指標の再投影誤差を極力小さくするような位置と姿勢を算出することができる。
本変形例に係る位置姿勢計測装置によれば、画像から得られる情報が不十分な場合には、指標の項の影響力が小さくなるので、夫々のセンサの計測値を重視した位置及び姿勢を得ることができる。一方、画像情報が十分に得られている場合には、指標の項の影響力が大きくなる。その結果、夫々のセンサ計測値の誤差に影響されることなく、高精度な解を得ることができる。
なお、本変形例においても、フレーム間の連続性を考慮することができる。この場合、変形例7と同様に、前フレームで求めた位置及び姿勢に対する制約を補正値の算出工程に追加すればよい。具体的には、式55の行列Θ、式56のΘ'、式57の誤差ベクトルUの夫々に、前フレームの位置及び姿勢のパラメータを評価する項を追加すればよい。なお、全12の制約条件(前フレームに関して6、センサ計測値に関して6)の任意の組み合わせを選択して用いてもよいことは言うまでもない。
(変形例9)
上記第7及び第8の実施形態と変形例7及び8の夫々では、計測対象物体(撮像装置2030または計測対象物体2270)の位置及び姿勢の6自由度のパラメータを推定していた。しかし、上記実施形態で述べた技術的思想の適用範囲は、推定パラメータが位置及び姿勢の6値の場合のみに限定されるものではない。
例えば、計測対象物体上にさらに高精度な位置センサが設置されている場合を考える。この場合、公知の方法として、位置センサから得られる位置を既知の値として、計測対象物体の姿勢パラメータのみを画像情報から求めるというアプローチを取ることができる。このアプローチは、例えば、特許文献4の第6の実施形態に記載されているように、計測対象物体の姿勢パラメータのみを未知とした非線形最適化処理によって実現できる。そして、このようなアプローチをとる場合においても、上記実施形態で述べた技術的思想をそのまま適用することができる。すなわち、姿勢センサ2040による姿勢計測値に対する拘束条件を考慮しながら、計測対象物体の姿勢パラメータを推定することができる。
本変形例の処理ステップは、上記第7及び第8の実施形態と同様である。以下、第7の実施形態との差異について、図21を参照しながら説明する。基本的には、位置センサによる位置計測値を入力する工程(ステップS21015)を有する点と、計測対象物体の姿勢ωのみが未知パラメータとなる点のみが異なっている。なお、第8の実施形態も同様に変更することができる。
ステップS21015、ステップS21030、ステップS21110の処理は、変形例7と同様である。
本変形例では、計測対象物体の位置を既知の値として扱い、未知パラメータは姿勢を表すωのみとなる。すなわち、ステップS21040では、計測対象物体の位置を固定値とおく。また、ステップS21060では、ωの各パラメータについてのみ画像ヤコビアンを算出する。さらに、ステップS21080における式38の行列Θ及び式39のΘ'を、未知パラメータの変化に応じて次式58及び式59のように変更する。
以上によって、6自由度の位置及び姿勢を未知パラメータとしない場合であっても、姿勢センサの計測値から離れすぎてはいけないという制約条件を加味しながら、指標の再投影誤差を極力小さくするような姿勢を求めることができる。
なお、本変形例においても、フレーム間の連続性を考慮することができる。この場合、変形例7と同様に、前フレームで求めた姿勢に対する制約を補正値の算出工程に追加すればよい。具体的には、式58の行列Θ、式59のΘ'、式40の誤差ベクトルUの夫々に、前フレームの姿勢のパラメータを評価する項を追加すればよい。
(変形例10)
上記第7及び第8の実施形態と変形例7乃至9の夫々においては、重みパラメータwの値は予め定めた固定値であるか、あるいは、重み設定部2060を介してユーザが設定した値であった。しかし、重みパラメータの値はこれらの方法で設定することに限定されるものではない。本変形例では、検出された指標の分布に応じて重みパラメータを能動的に調整することで、指標から得られる情報量に応じて指標の影響度を調整する効果を、より積極的に実現する。
本変形例の処理ステップは、上記第7及び第8の実施形態と同様である。以下、第7の実施形態との差異について、図21を参照しながら説明する。基本的には、検出された指標の分布状況を算出する工程(ステップS21025)と、算出された指標の分布状況に応じて重みパラメータwを決定する工程(ステップS21027)を有する点のみが異なっている。なお、第8の実施形態も同様に変更することができる。
新規に追加されるステップとして、ステップS21025において、位置姿勢算出部2020は、検出された全指標の画像座標を包含する凸包を算出する。この処理は、第6の実施形態におけるステップS17050の処理と同様である。
次に、新規に追加されるステップとして、ステップS21027において、位置姿勢算出部2020は、ステップS21025で求めた凸包の面積Aに応じて、次式60によって重み調整パラメータw0を決定する。
ここで、TminとTmaxは凸包の面積を正規化するためのパラメータであり、適切な値が予め設定されているものとする。w0の範囲は0から1に正規化された値であり、指標の分布が十分であれば0に、不十分であれば1に近い値となる。得られたw0に基づいて、補正値Δsの算出工程(ステップS21080)で用いる重み係数wを、次式61によって算出する。
ここでw’は、重み設定部2060で設定された重み係数を表している。すなわち、重み設定部2060で設定された重み係数を、指標の分布に応じて増減する。なお、w’の設定は重み設定部2060で行わなくてもよく、予め適切な値を設定しておいてもよい。
以上によると、指標の分布が十分であれば重み係数wの値は小さくなるので、姿勢が姿勢計測値から離れすぎてはいけないという制約条件の影響度が小さくなる。そのため、センサの誤差に制約を受けることなく、検出された画像情報を十分に生かした位置及び姿勢の計測を行うことができる。
一方、指標の分布が不十分な場合は重み係数wの値が大きくなるので、姿勢計測値から離れすぎてはいけないという制約条件の影響度が大きくなる。そのため、検出された画像情報の情報量が不足していても、センサから得られる姿勢を逸脱しない推定結果を得ることができる。
以上のように、本変形例によっても、画像から得られる情報の影響度を指標の分布に応じて制御するという効果を得ることができる。
なお、本変形例においても、指標の分布の尺度として指標の成す凸包の面積を用いることは必須ではなく、上記実施形態の変形例4と同様な様々な尺度を用いてもよい。また、重み係数wの変位は指標の分布の尺度に対して線形である必要はなく、第6の実施形態と同様に二つの区間を単調増加する任意の値を用いることができる。
なお、変形例7と同様に、前のフレームで求めた位置及び姿勢から離れすぎてはいけないという制約条件を同時に考慮する場合でも、指標の分布に応じて重み係数を調整することができる。この場合、ベースとなる重み係数としてw1’,w2’,w3’を保持しておいて、夫々にw0を乗算することで、実際に適用する重み係数(w1,w2,w3)を求めればよい。また、変形例8のように位置センサによる拘束を利用する場合も同様に、指標の分布に応じて重み係数を調整することができる。
なお、検出された画像情報の影響度を指標の分布に応じて調整するという効果は、上記で述べた12の制約条件(前フレームに関して6、センサ計測値に関して6)の任意の組み合わせを用いる場合であっても得ることができる。例えば、センサを使用せずに、位置及び姿勢が前フレームの推定結果(の少なくともいずれか一つのパラメータ)から離れすぎてはいけないという制約条件のみを用いるという構成をとることもできる。
この場合、指標の分布が十分であれば重み係数wの値は小さくなるので、位置や姿勢が前フレームにおける推定値から離れすぎてはいけないという制約条件の影響度が小さくなる。そのため、フレーム間の平滑化を行おうとする拘束の影響を受けることなく、検出された画像情報を十分に生かした位置及び姿勢の計測を行うことができる。
一方、指標の分布が不十分な場合は重み係数wの値が大きくなるので、位置や姿勢が前フレームにおける推定値から離れすぎてはいけないという制約条件の影響度が大きくなる。そのため、検出された画像情報の情報量が不足していても、フレーム間での不自然なジッタ−を回避し、安定した位置及び姿勢を得ることができる。
(変形例11)
上記第7及び第8の実施形態と変形例7乃至10の夫々は、式37で表現される方法を用いて補正値Δsを算出している。また、sをs+Δsに置き換えることで推定値sの更新を行っている。しかしながら、行列Θ、行列Θ'、及び誤差ベクトルUに基づいてsを算出する方法はこの方法に限ったものではない。例えば公知の非線形方程式の反復解法であるLM法(Levenberg-Marquardt法)を組み合わせて求めてもよい。また、公知のロバスト推定手法であるM推定等の統計的手法を組み合わせてもよい。他の何れの数値計算手法を併用しても発明の本質が損なわれないことは言うまでもない。
(変形例12)
上記の夫々の実施形態や変形例では、式3で表されるような3値によって姿勢を表現し、これを最適化計算の工程で用いていた。しかし、最適化計算の工程で用いる姿勢の表現はこれに限定されるものではない。例えば、オイラー角によって姿勢を3値で表現し、このオイラー角を未知パラメータとして最適化計算を行ってもよい。この場合、式3の代わりに、オイラー角から3×3の回転行列Rを求める式を得て、これを夫々の観測方程式に組み込めばよい。また、姿勢計測値や前フレームの姿勢推定値による拘束を行う場合には、夫々のパラメータを同様にオイラー角に変更すればよい。もちろん、その他の表現方法を未知パラメータとした場合であっても同様に解くことが可能であり、パラメータの表現方法は本質的問題ではない。なお、オイラー角を用いた非線形最適化計算によるカメラの位置及び姿勢の推定方法は例えば非特許文献7に開示されているので、詳細な説明は省略する。
本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体(または記録媒体)を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
本発明を上記記憶媒体に適用する場合、その記憶媒体には先に説明したフローチャートに対応するプログラムコードが格納されることになる。