以下、図面を参照して、本発明に係る画像処理方法及び画像処理装置の実施の形態を説明する。
本実施の形態では、本発明を、2台のカメラで三次元物体を撮影し、そのステレオ画像に基づいて物体の形状及び姿勢を推定する画像処理装置に適用する。本実施の形態に係る画像処理装置では、ステレオ画像から対象の三次元物体の姿勢を表す3本の主軸を求め、その3本の主軸を利用して三次元物体の形状として直方体、円柱、球のいずれかの立体に決定する。なお、本実施の形態に係る画像処理装置では、処理結果をモニタに表示出力する態様としているが、その処理結果を工場ラインでの製造ロボットや二足ロボットによる物体の把持等の他の用途に利用してもよい。
図1〜図13を参照して、画像処理装置1の構成について説明する。図1は、本実施の形態に係る画像処理装置の構成図である。図2は、図1の三次元座標処理部で三次元物体の三次元座標点を求める処理の説明図である。図3は、図1のノイズ除去部のノイズ除去の説明図である。図4は、図1のベクトル処理部でのベクトル生成の説明図である。図5は、図1のベクトル処理部での直線ベクトルに対する重み付けの説明図である。図6は、図1のベクトル処理部での法線ベクトルに対する重み付けの説明図である。図7は、図1の姿勢推定部での第1主軸を求める処理の説明図である。図8は、図1の姿勢推定部で選択した最小の分散領域におけるベクトルの分布を示す図である。図9は、図1の姿勢推定部での第2主軸を求める処理の説明図である。図10は、図1の姿勢推定部で求めた3本の主軸が示された円柱である。図11は、図1の出力部での立体形状決定処理の説明図である。図12は、図1の出力部における立体形状決定処理で用いる(短軸/長軸)と方形度との関係を示す図である。図13は、画像処理対象の三次元物体とその三次元物体における3本の主軸の例である。
画像処理装置1は、2台のカメラ2,3及びモニタ4が接続されている。画像処理装置1は、2台のカメラ2,3からのステレオ画像に基づいて三次元物体の形状及び姿勢を推定し、その処理結果をモニタ4に表示出力する。そのために、画像処理装置1は、前処理部10、三次元座標処理手段としての三次元座標処理部11、ノイズ除去部12、ベクトル処理手段としてのベクトル処理部13、姿勢推定手段としての姿勢推定部14及び出力部15を備えている。
カメラ2,3は、対象の三次元物体の左右に配置され、同一の三次元物体を撮影するステレオカメラである。カメラ2,3は、アナログカメラでもあるいはデジタルカメラでもよく、アナログカメラの場合には画像処理装置1にアナログ画像を出力し、デジタルカメラの場合には画像処理装置1にデジタル画像を出力する。モニタ4は、液晶モニタでもあるいはCRT[Cathode Ray Tube]モニタでもよく、画像処理装置1の処理結果を表示出力する。
ちなみに、画像処理装置1は、車自体や車外の物体等の形状や姿勢を推定するために利用される場合がある。例えば、画像処理装置1が車両に搭載される場合には、画像処理装置1が車室内の適宜の位置に設置され、CCD[Charge coupled device]カメラからなるカメラ2,3が車両の側面、前面あるいは後面の左右に設置され、液晶モニタからなるモニタ4が車室内のドライバに視認可能な位置(例えば、インストルメントパネル)に取り付けられる。
前処理部10では、2台のカメラ2,3から、三次元物体を左右から撮影した各ステレオ画像が入力される。前処理部10では、ステレオ画像がアナログ画像の場合、アナログデータをデジタルデータに変換してデジタル画像とする。そして、前処理部10では、デジタルデータからなるステレオ画像に対してカメラキャリブレーションを行い、さらに、左右のステレオ画像の平行化を行う。
三次元座標処理部11では、左右のステレオ画像から撮影した三次元物体の形状を示す三次元座標点群を求める。この際、三次元座標処理部11では、エッジ復元とテクスチャ復元によって三次元座標点データ(座標点群)を取得する。エッジ復元では、三次元物体の輪郭を示すエッジの三次元座標点データが得られる。テクスチャ復元では、三次元物体の表面(模様)を面の連続で仮定したテクスチャの三次元座標点データが得られる。例えば、対象の三次元物体が図2(a)に示すような円柱C(コップ)の場合、円柱Cの形状を示す線分としては、2つの円の曲線分CS,CS,CS,CSと2つの円を結ぶ直線分SS,SSである。円柱Cの形状を示す三次元座標点としては、曲線分CSを示す三次元座標点TC,・・・(図2(b)参照)や直線分SSを示す三次元座標点TC,・・・(図2(c)参照)である。
ノイズ除去部12では、エッジ復元による三次元座標点データとテクスチャ復元による三次元座標点データとを比較し、エッジ復元による三次元座標点データ及びテクスチャ復元による三次元座標点データからそれぞれノイズを除去する。具体的な処理としては、ノイズ除去部12では、エッジ復元による三次元座標点データとテクスチャ復元による三次元座標点データとにおける対応する座標点間の最短距離をそれぞれ計算する。そして、ノイズ除去部12では、その最短距離が閾値以上か否かを判定する。最短距離が閾値以上の場合、ノイズ除去部12では、その最短距離を計算した元となるエッジ復元によるデータ及びテクスチャ復元によるデータを除去する。さらに、ノイズ除去部12では、テクスチャ復元の三次元座標点データに対しては、ノイズとして除去されて穴があいた部分にカメラ2,3の光軸方向(すなわち、カメラ2,3の位置と三次元物体の重心とを結ぶ方向)から、除去されたテクスチャ(三次元座標点データ)に面を当てはめ、除去されたテクスチャ部分を補完する。このノイズが除去され、補完された三次元座標点データ(座標点群)を用いて、以下の処理を行う。
例えば、対象の三次元物体が図3(a)に示すような円柱(コップ)の場合、ノイズ復元によって図3(b)に示すようなエッジの三次元座標点データが得られ、テクスチャ復元によって図3(c)に示すようなテクスチャの三次元座標点データが得られる。この例では、図3(a)に示すように、撮影する際にコップの横に画像処理対象以外の直方体状の物体が存在していたとする。エッジ復元の場合、エッジ検出する際の誤検出によるノイズN1や画像処理対象以外の物体のノイズN2が表れるが、ノイズ除去部12による処理によりこれらのノイズN1,N2が除去される(図3(d)参照)。テクスチャ復元の場合、コップのような穴のあいた物体をテクスチャ復元するとその穴の部分の形状がノイズN3と表れるが、ノイズ除去部12による処理によりノイズN3が除去される(図3(e)参照)。このように、ノイズ除去部12では、ノイズ復元による三次元座標点データとテクスチャ復元による三次元座標点データにおいて異なる部分をノイズとして除去する。
ベクトル処理部13では、まず、三次元物体の形状を示す三次元座標点TC,・・・の各座標点を中心として球体を設定する。例えば、図2に示す円柱Cの場合、曲線分CSを示す任意の三次元座標点TC1に対して球体S1を設定し(図4(a)参照)、直線分SSを示す任意の三次元座標点TC2に対して球体S2を設定する(図4(b)参照)。この球体は、中心となる三次元座標点との間で2つのベクトルを形成するための2つの三次元座標点を選択するための球体である。したがって、球体表面近傍の2点を選択することによって中心から略等距離に位置する三次元座標点を選択することができる。この球体の半径としては、対象の三次元物体の形状や三次元座標点間隔等を考慮して設定され、中心点の三次元座標点と線分を形成する他の三次元座標点を10個前後含む半径である。といのうは、三次元座標点データの中にはステレオ画像に混入したノイズ等の影響を受けた三次元座標点が入っている場合があり、中心となる三次元座標点に隣接する三次元座標点や極近傍の三次元座標点がそのノイズ等の影響を受けていると、生成したベクトルが三次元物体の形状を反映していないベクトルとなる場合があるからである。つまり、ある程度離れた三次元座標点間でベクトルを生成することによって、ノイズ等の影響を抑制でき、三次元物体の形状を反映したベクトルを生成できる。
次に、ベクトル処理部13では、設定した球体の内側でかつ最も球体の表面に近い三次元座標点を選択する。通常、中心となる三次元座標点から三次元座標点列が2方向に分かれており、その2方向の列から三次元座標点を各々選択する。しかし、立方体の頂点等、中心となる三次元座標点から三次元座標点列が3方向以上分かれている場合、2方向単位にグループ分けをし、各グループの2方向の列から三次元座標点を各々選択する。例えば、図4(a)の例では球体S1の表面内側の2つの三次元座標点TC11,TC12を選択し、図4(b)の例では球体S2の表面内側の2つの三次元座標点TC21,TC22を選択する。
次に、ベクトル処理部13では、中心となる三次元座標点を始点とし、選択した2つの三次元座標点を終点として2つのベクトルを生成する。例えば、図4(a)の例では三次元座標点TC1と三次元座標点TC11との間でベクトルV11を生成するとともに三次元座標点TC1と三次元座標点TC12との間でベクトルV12を生成し、図4(b)の例では三次元座標点TC2と三次元座標点TC21との間でベクトルV21を生成するとともに三次元座標点TC2と三次元座標点TC22との間でベクトルV22を生成する。
そして、ベクトル処理部13では、生成した2つのベクトルが平行か否か(すなわち、2つのベクトルが直線状か否か)を判定する。この平行判定では、中心となる三次元座標点を頂点として2つのベクトルのなす角度が厳密に180°の場合のみを平行とするのでなく、180°±1〜5°程度の場合も平行と判定する。というのは、カメラ2,3の精度やデジタルデータのステレオ画像の解像度あるいはステレオ画像に混入したノイズの影響等を考慮すると、直線の場合でも2つのベクトルで一直線とならない場合があるからである。例えば、図4(a)の例では2つのベクトルV11,V12は平行ではないと判定され、図4(b)の例では2つのベクトルV21,V22は平行と判定される。ちなみに、2つのベクトルが平行にならないのは、三次元座標点が曲線分を示している場合や方向が異なる2つの直線分の接続点(頂点)あるいは直線分と曲線分との接続点等である。
球体Sにおける2つのベクトルが平行と判定した場合、ベクトル処理部13では、中心の三次元座標点を始点として、その2つのベクトルと重なる直線ベクトルを生成する。例えば、図4(b)の例では2つのベクトルV21、V22と重なる直線ベクトルSVが生成される。
さらに、ベクトル処理部13では、処理中の球体に隣接する球体において直線ベクトルを生成しているか否かを判定し、隣接する球体内で直線ベクトルを生成している場合にはこの判定を次に隣接する球体に対しても順次行っていく。この判定は、隣接する球体で法線ベクトルを生成していると判定するまであるいは隣接する球体が存在しなくなるまで、処理中の三次元座標点から判定範囲内に存在する球体に対して順次判定を行う。そして、ベクトル処理部13では、判定範囲内に存在する球体うち直線ベクトルを生成している球体まで長さに応じて、直線ベクトルに重み付けを行う。重み付け値は、0〜1の間の値とする。すなわち、三次元座標点列が直線を形成しているか否かを検出し、直線を形成している三次元座標点列の長さ分の重み付けを行って直線であることの確度を示す。図5に示すように、隣接する球体S,・・・で直線ベクトルSV,・・・を生成している場合には、重み付けした直線ベクトルWSVを生成する。このように、隣接する球体S,・・・と関連付けして重み付けを行うことによって、三次元物体の直線分を示す三次元座標点が一部欠けている場合でもその直線区間を補間することができ、最終的な三次元物体の姿勢の推定精度も向上する。なお、最初に隣接する球体が存在しない場合や最初に隣接する球体で法線ベクトルを生成している場合、処理中の三次元座標点が直線の開始点である。
なお、重み付け処理を行う場合、三次元座標点列において一点毎の球体に対して処理を行ってもよいし、計算量を軽減するために、三次元座標点列において数点置きの球体に対して処理を行ってもよい。また、上記の判定を行う判定範囲は、その長さだけ直線が続けば直線である確度が非常に高く、直線としての重み付け値として1を設定してもよい一定の判定である。また、隣接する球体としては、処理中の三次元座標点の球体に厳密に隣接している球体だけでなく、処理中の三次元座標点から判定範囲内に存在し、処理中の三次元座標点と同一の線分上の球体も含む。
球体Sにおける2つのベクトルが平行でないと判定した場合、ベクトル処理部13では、中心の三次元座標点を始点として、その2つのベクトルで形成される面に対して垂直な法線ベクトルを生成する。例えば、図4(a)の例では2つのベクトルV11、V12によって面Fが形成され、その面Fに対して垂直な法線ベクトルNVが生成される。
さらに、ベクトル処理部13では、球体Sにおける2つのベクトルのなす角度に基づいて法線ベクトルに重み付けをする。図6(a)のマップMPに示すように、2つのベクトルのなす角度が90°の時に重み付け値が最大の1であり、角度が90°を中心にして重み付け値が減少し、角度が0°及び180°で重み付け値が0となる(なお、上記したように、直線と判定する際に180°±1〜5°程度を考慮した場合には直線と判定した角度で重み付け値が0となる)。図6(b)に示すように、2つのベクトルで面を形成できる場合、その2つのベクトルのなす角度θに対して、マップMPに基づいて法線ベクトルNVに重み付け値を設定する。図6(c)に示すように、2つのベクトルで直線を形成できる場合、その2つのベクトルがなす角度が180°となり、マップMPにおける重み付け値としては0である。
そして、ベクトル処理部13では、重み付けした直線ベクトル又は法線ベクトルを三次元の単位ベクトル空間に記録する。この際、重み付け値(0〜1)と直線ベクトル又は法線ベクトルのベクトル方向に応じた点が、単位ベクトル空間に配置される。
ベクトル処理部13では、ノイズ除去部12でノイズを除去した後の全ての三次元座標点に対して上記の処理を実行し、その実行結果である直線ベクトル及び法線ベクトルからなるベクトル群の情報を単位ベクトル空間に記録する。図7(a)には、全ての三次元座標点を処理した後のベクトル群の情報を示す全点が記録された単位ベクトル空間VSを示している。
姿勢推定部14では、対象の三次元物体の姿勢として3本の主軸を求める。姿勢推定部14では、単位ベクトル空間VSに記録された全てのベクトルを用いて第1主軸を求め、第1主軸の方向に存在する以外のベクトルを用いて第2主軸を求め、第1主軸及び第2主軸から第3主軸を求める。
第1主軸を求める場合、姿勢推定部14では、まず、クラスタリングを行うために、6軸クラスを設定する(図7(b)参照)。ちなみに、図7(b)に示す6軸クラスC6は、6軸クラスの初期位置であり、6つのクラス軸が(1,0,0)、(−1,0,0)、(0,1,0)、(0,−1,0)、(0,0,1)、(0,0,−1)である。そして,姿勢推定部14では、単位ベクトル空間に記録されている全点を6軸クラス上に記録する(図7(b)参照)。さらに、姿勢推定部14では、6軸クラスを3軸クラスに変換し、3軸クラスの各クラス軸に対して単位ベクトル空間の各点(各ベクトル)を配置させる(図7(c)参照)。
次に、姿勢推定部14では、各クラス軸に対して配置された点群(ベクトル群)の平均と分散を計算する。そして、姿勢推定部14では、3つのクラス軸に対する分散のうち最も小さい分散を示すクラス軸を選択し、そのクラス軸を主軸と仮定する。図7(c)に示す例では、3軸クラスC3の第1クラス軸A1には分散領域DA1が広がり、第2クラス軸A2には分散領域DA2が広がり、第3クラス軸A3には分散領域DA3が広がっている。その3つの分散領域DA1,DA2,DA3では、分散領域DA2が最も小さく、その分散領域DA2の第2クラス軸A2が主軸と仮定される。なお、分散領域は、各クラス軸に配置された単位ベクトル空間の点群(直線ベクトル及び法線ベクトルからなるベクトル群)の広がりを示す領域である。
さらに、姿勢推定部14では、多変量解析によって、主軸と仮定したクラス軸に配置された点群のうち信頼度の高い点のデータを抽出し、そのデータを使って新たに平均を計算する。そして、姿勢推定部14では、仮定した主軸(クラス軸)に対する回転角度を求め、そのクラス軸から回転角度分回転させた軸を第1主軸として記録する。この第1主軸は、ノイズデータ等の主軸を決定する上で好ましくないデータを除外して求められているので、データとしての信頼度が高く、分散領域の中央付近を通る。なお、データを抽出する際の信頼度としては、ステレオ画像におけるノイズ等を考慮して適宜の値が設定され、例えば、90%に設定される。図7(d)に示す例では、図7(c)の例で主軸として仮定した第2クラス軸A2に対して回転角度αが求められ、分散領域DA2の中央付近を通る主軸PA1が記録される。また、図8には、主軸と仮定されたクラス軸に配置された点群(直線ベクトル及び法線ベクトルからなるベクトル群の情報)の分布DDを示している。分布DDは、両側に広がる斜線部分DD1,DD2に信頼度の低いデータが含まれ、その内側の部分DD3に信頼度の高いデータが含まれる。信頼度の高い部分DD3のデータで平均を計算した場合にはDC1の値となり、その平均値DC1は分布DDのデータの集中領域である頂点付近に位置となる。信頼度の低い部分も含む分布DD全体のデータで平均を計算した場合にはDC2の値となり、その平均値DC2は分布DDのデータの集中領域である頂点付近から少しずれた位置となる。
そして、姿勢推定部14では、求めた回転角度が収束角度内か否かを判定する。収束角度内の場合、姿勢推定部14では、記録されている第1主軸を対象物体の姿勢を示す第1主軸PA1と決定する(図7(d)参照)。収束角度内でない場合、姿勢推定部14では、現在の3軸クラスを一定角度回転し、上記した処理により、回転角度及び主軸を再度求める。つまり、回転角度が3軸クラスのうちの分散領域が最も小さいクラス軸に対して収束するまで、3軸クラスを変えて上記処理繰り返し行う。なお、収束角度は、回転角度を収束させるための角度であり、クラス軸に対して分散領域が十分に小さくなったことを示す角度である。また、回転角度を収束させるのは、クラス軸に対する分散領域を極力小さくし、三次元物体の姿勢の推定精度を向上させるためのである。
ちなみに、最小の分散のクラス軸に配置された点群のデータのみで平均を計算するのでなく、3軸クラスに配置された全ての点群(ベクトル群の情報)のデータによって平均を計算した場合、その平均値はクラス軸に広がる分散領域内に位置せず、分散領域外に位置する。その場合、第1主軸を一意に決定することができない。
第1主軸PA1を求めると、姿勢推定部14では、単位ベクトル空間VSに記録されているベクトル群の中から第1主軸PA1の方向に存在するベクトルを除去する。つまり、第1主軸のクラスに属するベクトルを除去する(分散領域DA2に含まれるベクトルを除去する)(図7(c)参照)。そして、姿勢推定部14では、第1主軸PA1を法線としかつ第1主軸PA1が原点を通る単位ベクトル平面VPに形成し、分散領域DA2に含まれるベクトル除去後の単位ベクトル空間VSに記録されている残りのベクトルを単位ベクトル平面VPに投影する。図9(a)には、除去後の残りのベクトル群の情報を示す全点が記録された単位ベクトル平面VPを示している。
そして、姿勢推定部14では、残りのベクトル群に対してクラスタリングを行うために、4軸クラスを設定する(図9(b)参照)。ちなみに、図9(b)に示す4軸クラスC4は、4軸クラスの初期位置であり、4つのクラス軸が(1,0,0)、(−1,0,0)、(0,0,1)、(0,0,−1)である。そして,姿勢推定部14では、単位ベクトル平面VPに記録されている全点を4軸クラス上に記録する(図9(b)参照)。さらに、姿勢推定部14では、4軸クラスを2軸クラスに変換し、2軸クラスの各クラス軸に対して単位ベクトル平面VPの各点(各ベクトル)を配置させる。
次に、姿勢推定部14では、各クラス軸に対して配置された点群(ベクトル群)の平均と分散を計算する。そして、姿勢推定部14では、2つのクラス軸に対する分散のうち小さい分散を示すクラス軸を選択し、そのクラス軸を主軸と仮定する。図9(c)に示す例では、2軸クラスC2の第1クラス軸A4には分散領域DA4が広がり、第2クラス軸A5には分散領域DA5が広がっている。その2つの分散領域DA4,DA5では、分散領域DA5が小さく、その分散領域DA5の第2クラス軸A5が主軸と仮定される。なお、分散領域は、各クラス軸に配置された単位ベクトル平面VPの点群(直線ベクトル及び法線ベクトルからなるベクトル群)の広がりを示す領域である。
さらに、姿勢推定部14では、第1主軸を求めた場合と同様に、多変量解析によって、主軸と仮定したクラス軸に配置された点群のうち信頼度の高い点のデータを抽出し、そのデータを使って新たに平均を計算する。そして、姿勢推定部14では、仮定した主軸(クラス軸)に対する回転角度を求め、そのクラス軸から回転角度分回転させた軸を第2主軸として記録する。この第2主軸も、ノイズデータ等の主軸を決定する上で好ましくないデータを除外して求められているので、データとしての信頼度が高く、分散領域の中央付近を通る。図9(d)に示す例では、図9(c)の例で主軸として仮定した第2クラス軸A5に対して回転角βが求められ、分散領域DA5の中央付近を通る第2主軸PA2が記録される。
そして、姿勢推定部14では、第1主軸を求めた場合と同様に、求めた回転角度が収束角度内か否かを判定する。収束角度内の場合、姿勢推定部14では、記録されている第2主軸を対象物体の姿勢を示す第2主軸PA2と決定する(図9(d)参照)。収束角度内でない場合、姿勢推定部14では、現在の2軸クラスを一定角度回転し、上記した処理により、回転角度及び主軸を再度求める。つまり、回転角度が2軸クラスのうちの分散領域が小さいクラス軸に対して収束するまで、2軸クラスを変えて上記処理繰り返し行う。求められた第1主軸PA1と第2主軸PA2とは、互いに直交し、対象の三次元物体の重心で交差する。
第1主軸PA1及び第2主軸PA2を求めると、姿勢推定部14では、第1主軸PA1と第2主軸PA2とにそれぞれ直交する軸を求め、この軸を第3主軸PA3と決定する(図10参照)。したがって、第1主軸PA1、第2主軸PA2と第3主軸PA3とは、互いに直交するとともに対象の三次元物体の重心で交差し、対象の三次元物体の3方向の姿勢を表す。図10には、求められた3本の主軸PA1、PA2,PA3によって空間内の姿勢が表された円柱CSがXYZ空間XS内に配置されており、円柱CSの外形に接する直方体RPも示されている。
なお、クラスタリングとしては、NN[Nearest Neighbor]法やK−mean法等の適宜の手法を利用する。また、多変量解析としても、適宜の手法を利用する。
出力部15では、まず、決定した3本の主軸に基づいて、ノイズ除去部12でノイズを除去した後の三次元座標点を全て回転座標変換する。そして、出力部15では、その全ての変換座標点をXY平面、YZ平面、ZX平面にそれぞれ投影し、決定した3本の主軸に基づいてXY平面、YZ平面、ZX平面での回転を行う。つまり、3本の主軸をそれぞれ法線とする各平面に三次元座標点をそれぞれ投影する。これにより、対象の三次元物体の正面、側面、上面の各形状がXY平面、YZ平面、ZX平面にそれぞれ投影されることになる。例えば、対象の三次元物体が図11(a)に示す円柱の場合、第1主軸を法線とする平面には円が投影され(図11(b)参照)、第2主軸を法線とする平面には長方形が投影され(図11(c)参照)、第3主軸を法線とする平面には長方形が投影される(図11(d)参照)。
出力部15では、式(1)により、各平面に投影されている形状の円形度をそれぞれ計算する。円形度は、二次元の形状が円にどの程度近いかを表す指標である。さらに、出力部15では、式(2)により、各平面に投影されている形状の方形度を計算する。方形度は、二次元の形状が方形かあるいは円形かを判断するための指標である。図12に示すように、方形度が1を境界にして、方形度が1より大きい形状は楕円(円形)であり、方形度が1より小さい形状は長方形(方形)である。ここでは、方形度が1の場合には長方形とする。特に、楕円の形状の中でも、その形状の(短軸/長軸)が1の楕円は円である。また、長方形の中でも、その形状の(短軸/長軸)が1の長方形は正方形である。なお、ノイズ等を考慮して、(短軸/長軸)が1か否かを判定するのではなく、(短軸/長軸)が0.9〜1等のある程度幅をもたせて円や正方形を判定するほうがよい。
出力部15では、3つの平面に投影されている各形状の方形度が1より大きいか否かを判定することにより、その各形状が円形かあるいは方形かをそれぞれ判定する。そして、出力部15では、円形の個数により対象の三次元物体が直方体、円柱、球のうちのいずれの立体かを判定する。円形の個数が0個の場合、正面、側面、上面から見て全て方形なので、直方体と判定する。円形の個数が1個の場合、正面、側面、上面のうち一面だけが円形なので、円柱と判定する。円形の個数が2個以上の場合、正面、側面、上面のうち少なくとも2面が円形なので、球と判定する。以上の処理により対象の三次元物体の形状を決定することができるが、出力部15では、ノイズ等の影響を考慮し、更に高精度に形状を決定するために以下の処理を行う。
出力部15では、円形でないと(直方体又は円柱と)判定した場合、方形と判定した形状についてその形状の(短軸/長軸)が閾値以内かを判定する。球の場合には3つの平面における形状の(短軸/長軸)が全て1となるので(図12参照)、方向と判定した形状について(短軸/長軸)が1よりある程度小さい閾値で比較することにより球であるか否かを判定する。(短軸/長軸)が閾値以内の場合、出力部15では、以前に判定した通りに、長方体又は円柱と確定する。(短軸/長軸)が閾値より大きい場合、出力部15では、直方体又は円柱と判定されている三次元物体の体積を計算するとともに、平面に投影されている形状が円形の長軸(平面に投影されている形状に円形が無い場合には方形の長軸)を直径とした球の体積を計算する。そして、出力部15では、球の体積が直方体又は円柱の体積より相当大きいか否かを判定する。直方体又は円柱と判定された三次元物体が球であった場合には長軸を直径とした球の体積とその直方体又は円柱と判定された三次元物体の体積とはほぼ等しくなるが、直方体又は円柱と判定された三次元物体が直方体又は円柱であった場合には長軸を直径とした球の体積よりその三次元物体の体積はかなり小さくなる。球の体積が直方体又は円柱の体積より相当大きい場合、出力部15では、以前に判定した通りに、長方体又は円柱と確定する。球の体積が直方体又は円柱の体積よりあまり大きい場合、出力部15では、長方体又は円柱と判定していた三次元物体を球と確定する。対象の三次元物体の形状が確定すると、出力部15では、確定した形状の立体の外形に接する直方体をあてはめ、モニタ4にXYZ空間内に配置させた立体を表示させる(図10参照)。
図13には、対象の三次元物体の例を示している。図13(a)に示すように、ノートの場合、3本の主軸を法線とする3平面には全て方形が投影されるので、直方体と判定される。図13(b)に示すように、紙コップの場合、3本の主軸を法線とする3平面には2つの方形と1つの円形が投影されるので、円柱と判定される。図13(c)に示すように、コルクボールの場合、3本の主軸を法線とする3平面には全て円形が投影されるので、球と判定される。
図1を参照して、画像処理装置1における動作(画像処理方法)を図14のフローチャートに沿って説明する。図14は、本実施の形態に係る画像処理方法を示すフローチャートである。
カメラ2,3では、左右から対象の三次元物体を撮影し、そのステレオ画像を画像処理装置1に出力する。
画像処理装置1では、入力されたステレオ画像がアナログデータの場合にデジタルデータに変換し、デジタルデータからなるステレオ画像に対してカメラキャリブレーションを行い、左右のステレオ画像の平行化を行う(S1)。
続いて、画像処理装置1では、エッジ復元及びテクスチャ復元により、ステレオ画像から三次元物体の形状を示す三次元座標点データを求める(S2)(図2(b)、(c)参照)。さらに、画像処理装置1では、エッジ復元による三次元座標点データとテクスチャ復元による三次元座標点データによりノイズを除去する(S3)(図3参照)。なお、このノイズ除去処理については、後で詳細に説明する。
そして、画像処理装置1では、三次元座標点データの各座標点について直線を形成する座標点に対して直線ベクトルを生成し、曲線等の直線を形成しない座標点に対して法線ベクトルを生成する(S4)(図4参照)。なお、このベクトル処理については、後で詳細に説明する。
さらに、画像処理装置1では、クラスタリングによって、生成した直線ベクトル及び法線ベクトルの情報から対象の三次元物体の第1主軸及び第2主軸を求め、第1主軸及び第2主軸から第3主軸を求め、三次元物体の姿勢を推定する(S5)(図7、図9参照)。なお、この姿勢推定処理については、後で詳細に説明する。
三次元物体の姿勢を推定すると、画像処理装置1では、全ての三次元座標点を第1主軸〜第3主軸に基づいて回転座標変換する(S6)。そして、画像処理装置1では、回転変換された三次元座標点をXY平面、YZ平面、ZX平面に投影し(S7)、第1主軸〜第3主軸に基づいて各平面での回転を行う(S8)。つまり、3本の主軸を法線とする各平面に、対象の三次元物体の形状を示す三次元座標点を投影する。
さらに、画像処理装置1では、各平面に投影された形状から対象の三次元物体が直方体、円柱、球のうちのいずれの立体であるかを判定する(S9)。そして、画像処理装置1では、形状が確定した三次元物体にその外形に接する直方体をあてはめ、モニタ4にXYZ空間内に配置させた三次元物体を表示させる(図10参照)。なお、この立体形状決定処理については、後で詳細に説明する。
図1を参照して、図14のフローチャートのノイズ除去処理(S3)を図15のフローチャートに沿って詳細に説明する。図15は、図14のフローチャートにおけるノイズ除去処理を示すフローチャートである。
画像処理装置1では、エッジ復元により三次元物体のエッジの三次元座標点データ(座標点群)を取得するとともに(S10)、テクスチャ復元により三次元物体の表面の三次元座標点データ(座標点群)を取得する(S11)。
画像処理装置1では、エッジ復元による三次元座標点群とテクスチャ復元による三次元座標点群とにおける各座標点間の最短距離をそれぞれ計算する(S12)。そして、画像処理装置1では、各最短距離が閾値以上か否かを判定し、閾値以上の最短距離となるエッジ復元による三次元座標点データとテクスチャ復元による三次元座標点データを除去する(S13)。さらに、画像処理装置1では、テクスチャ復元の三次元座標点データが除去された部分を、カメラ2,3の光軸方向から平面を張り、補完する(S14)。
このように、画像処理装置1では、エッジ復元データとテクスチャ復元データとを利用することにより、両者の復元の特性に応じてそれぞれ混入するノイズをそれぞれ除去する。そして、画像処理装置1では、ノイズの影響を極力排除した対象の三次元物体の形状を示す三次元座標点データを用いて姿勢を推定する。
図1を参照して、図14のフローチャートのベクトル処理(S4)を図16のフローチャートに沿って詳細に説明する。図16は、図14のフローチャートにおけるベクトル処理を示すフローチャートである。
三次元物体の形状を示す三次元座標点データからノイズのデータを除去すると、画像処理装置1では、まず、全ての三次元座標点データに対してベクトル処理を行ったか否かを判定する(S20)。S20にて全てのデータに対して処理を行ったと判定した場合、画像処理装置1では、ベクトル処理を終了する。
S20にて全てのデータに対して処理を行っていないと判定した場合、画像処理装置1では、データのうちの任意の三次元座標点を選び、その三次元座標点を中心として球体を設定し、三次元座標点を球体で囲む(S21)(図4参照)。この球体内には、選んだ三次元座標点を中心として、10点程度の座標点からなる三次元座標点列が2方向以上存在する。そして、画像処理装置1では、球体内に存在する三次元座標点から球体表面近傍の三次元座標点を2点抽出する(S22)(図4参照)。続いて、画像処理装置1では、球体の中心となる三次元座標点と抽出した2点の三次元座標点との間で2つのベクトルを生成する(S23)(図4参照)。
画像処理装置1では、球体内に生成した2つのベクトルが平行か否かを判定する(S24)(図4参照)。つまり、球体の中心の三次元座標点が直線を形成するための座標点かあるいは直線を形成しない(曲線等を形成するための)座標点かを判定する。S24にて2つのベクトルが平行と判定した場合、画像処理装置1では、球体の中心の座標点を直線と判定する。そして、画像処理装置1では、既にベクトル処理が行われている三次元座標点のうちで判定範囲内に存在しかつ処理中の三次元座標点に隣接する三次元座標点を選び、その三次元座標点が直線と判定されているか否かを判定する(S25)。S25にて直線ではないと判定した場合、画像処理装置1では、処理中の三次元座標点を直線の開始点として記録し(S26)、S20の処理に戻る。S25にて直線と判定した場合、画像処理装置1では、処理中の三次元座標点が直線の終了点か否かを判定する(S27)。S27にて直線の終了点ではないと判定した場合、画像処理装置1では、処理中の三次元座標点を直線の一部であると記録し(S28)、S20の処理に戻る。
S27にて直線の終了点と判定した場合、画像処理装置1では、直線の開始点と記録されている三次元座標点と処理中の三次元座標点とを結び、直線ベクトルを生成する(S29)(図5参照)。この直線ベクトルは、その長さに応じて重み付けされており、長いほど重み付け値が大きい。
S24にて2つのベクトルが平行でないと判定した場合、画像処理装置1では、2つのベクトルから法線ベクトルを生成する(S30)(図4(a)参照)。さらに、画像処理装置1では、2つのベクトルがなす角度に応じて法線ベクトルに重み付けを行う(S31)(図6参照)。2つのベクトルのなす角度が90°に近いほど、直線でない確度が高いので、法線ベクトルの重み付け値が大きい。
直線ベクトル又は法線ベクトルを生成すると、画像処理装置1では、そのベクトルを、ベクトルの方向と重み付け値に応じて単位ベクトル空間に記録し(S32)(図7(a)参照)、S20の処理に戻る。
このように、画像処理装置1では、三次元座標点データの全ての座標点に対してベクトル処理を実行し、直線ベクトルと法線ベクトルを生成する。そして、画像処理装置1では、生成した直線ベクトルと法線ベクトルの情報を全て単位ベクトル空間に記録し、三次元座標点の姿勢を推定するための情報とする。
図1を参照して、図14のフローチャートの姿勢推定処理(S5)を図17のフローチャートに沿って詳細に説明する。図17は、図14のフローチャートにおける姿勢推定処理を示すフローチャートである。
全ての三次元座標点データに対してベクトル処理が終了すると、画像処理装置1では、現在の6軸クラスを記録し(S40)、単位ベクトル空間に記録されている点群(ベクトル群の情報)を6軸クラスに別ける(S41)(図7(a)、(b)参照)。そして、画像処理装置1では、6軸クラスを3軸クラスに変換する(S42)(図7(c)参照)。そのため、単位ベクトル空間に記録されている点群が、3軸クラスに別けられる。
続いて、画像処理装置1では、3軸クラスの各クラス軸に別けられた各ベクトル群の情報の平均及び分散を計算する(S43)。そして、画像処理装置1では、3つのクラスの分散から最も小さい分散のクラスを判定し、その判定したクラス軸を仮の主軸として記録する(S43)(図7(c)参照)。さらに、画像処理装置1では、多変量解析を用いて記録したクラス軸に配置されたベクトル群のデータのうち信頼度が90%のデータを抽出し、その抽出したデータによって新たに平均を計算する(S44)(図8参照)。
そして、画像処理装置1では、記録したクラス軸と再計算した平均値によってそのクラス軸(仮の第1主軸)からの回転角度を計算し、クラス軸から回転角度分回転させた軸を第1主軸として記録する(S45)(図7(d)参照)。この記録された第1主軸は、クラス軸に配置されたベクトル群のデータの分散領域の略中央を通る軸となる。第1主軸を記録すると、画像処理装置1では、計算した回転角度が収束角度内か否かを判定する(S46)。この判定によって、クラス軸に対する分散を極力小さくし、クラス軸に回転角度を収束させる。S46にて収束角度内と判定した場合には、画像処理装置1では、記録している第1主軸を三次元物体の姿勢を示す第1主軸と正式に決定する。S46にて収束角度内でないと判定した場合、画像処理装置1では、記録している第1主軸及び回転角度を削除し、記録されている3軸クラスを一定角度回転してS40の処理に戻る(S47)。
S46にて収束角度内と判定した場合、画像処理装置1では、単位ベクトル空間に記録されているベクトル群から、第1主軸のクラスに属するベクトル群を除去する(S48)。さらに、画像処理装置1では、単位ベクトル空間に記録されている残りベクトル群を、第1主軸を法線としかつ第1主軸が原点を通る単位ベクトル平面に投影する(S49)。
続いて、画像処理装置1では、現在の4軸クラスを記録し(S50)、単位ベクトル平面に記録されている点群(ベクトル群の情報)を4軸クラスに別ける(S51)(図9(a)、(b)参照)。そして、画像処理装置1では、4軸クラスを2軸クラスに変換する(S52)。そのため、単位ベクトル平面に記録されている点群が、2軸クラスに別けられる。
続いて、画像処理装置1では、2軸クラスの各クラス軸に別けられた各ベクトル群の情報の平均及び分散を計算する(S53)。そして、画像処理装置1では、2つのクラスの分散から小さい分散のクラスを判定し、その判定したクラス軸を仮の主軸として記録する(S53)(図9(c)参照)。さらに、画像処理装置1では、多変量解析を用いて記録したクラス軸に配置されたベクトル群のデータのうち信頼度が90%のデータを抽出し、その抽出したデータによって新たに平均を計算する(S54)(図8参照)。
そして、画像処理装置1では、記録したクラス軸と再計算した平均値によってそのクラス軸(仮の第2主軸)からの回転角度を計算し、クラス軸から回転角度分回転させた軸を第2主軸として記録する(S55)(図9(d)参照)。第2主軸を記録すると、画像処理装置1では、計算した回転角度が収束角度内か否かを判定する(S56)。S56にて収束角度内と判定した場合には、画像処理装置1では、記録している第2主軸を三次元物体の姿勢を示す第2主軸と正式に決定する。S56にて収束角度内でないと判定した場合、画像処理装置1では、記録している第2主軸及び回転角度を削除し、記録されている2軸クラスを一定角度回転してS50の処理に戻る(S57)。
このように、画像処理装置1では、直線ベクトル及び法線ベクトルからなる全てのベクトル群の情報から第1主軸を決定し、第1主軸のクラスの属するベクトルを除いたベクトル群の情報から第2主軸を決定する。さらに、画像処理装置1では、この2本の主軸から第3主軸を決定する。
図1を参照して、図14のフローチャートの立体形状決定処理(S9)を図18のフローチャートに沿って詳細に説明する。図18は、図14のフローチャートにおける立体形状決定処理を示すフローチャートである。
画像処理装置1では、XY平面に投影されている形状の円形度及び方形度を計算し、その方形度により投影されている形状が円形か否かを判定する(S60)。また、画像処理装置1では、YZ平面に投影されている形状の円形度及び方形度を計算し、その方形度により投影されている形状が円形か否かを判定する(S61)。また、画像処理装置1では、ZX平面に投影されている形状の円形度及び方形度を計算し、その方形度により投影されている形状が円形か否かを判定する(S62)。そして、画像処理装置1では、3つの判定において円形と判定した個数(i)をカウントし、その個数によって立体の形状を判定する(S63)。画像処理装置1では、円形の個数(i)が0個の場合には直方体と判定し(S64)、個数(i)が1個の場合には円柱と判定し(S65)、個数(i)が2個以上の場合には球と判定する(S66)。
直方体又は円柱と判定した場合、画像処理装置1では、円形でないと判定した形状(方形)の(短軸/長軸)が閾値以内かを判定する(S67)。S67にて(短軸/長軸)が閾値以内と判定した場合、画像処理装置1では、S64にて直方体と判定した三次元物体については直方体と確定し(S69)、S65にて円柱と判定した三次元物体については円柱と確定する(S70)。S67にて(短軸/長軸)が閾値より大きいと判定した場合、画像処理装置1では、平面に投影された形状の長軸を直径とした球の体積が直方体又は円柱と判定された三次元物体の体積より相当大きいか否かを判定する(S68)。S68にて球の体積が三次元物体の体積より相当大きいと判定した場合、画像処理装置1では、S64にて直方体と判定した三次元物体については直方体と確定し(S69)、S65にて円柱と判定した三次元物体については円柱と確定する(S70)。S68にて球の体積が三次元物体の体積よりあまり大きくないと判定した場合、画像処理装置1では、S64にて直方体と判定した三次元物体又はS65にて円柱と判定した三次元物体を球と確定する(S66)。
このように、画像処理装置1では、3つの平面に投影された形状が円形かあるいは方形かを判定し、その円形と方形の組み合せによって三次元物体の形状を判定する。さらに、画像処理装置1では、(短軸/長軸)及び体積により判定も加味することにより、更に高精度に三次元物体の形状を判定する。
この画像処理装置1によれば、対象となる三次元物体の形状データを予め保持していなくても、三次元物体の形状を示す三次元座標点群から求めた直線ベクトル又は法線ベクトルにより三次元物体の3方向の主軸を求めることができ、三次元物体の姿勢を推定することができる。そのため、画像処理装置1は、三次元物体のデータを入力する手段や様々な三次元物体のデータを保持するための記憶手段を必要としない。
さらに、画像処理装置1によれば、エッジ復元データとテクスチャ復元データと比較することにより、ノイズを除去でき、三次元物体の姿勢や形状を高精度に推定できる。また、画像処理装置1によれば、全てのベクトルを用いて第1主軸を求めた後に、第1主軸の位置するベクトルを除いた残りのベクトルを用いることにより、第2主軸も求めることができる。その結果、第1主軸及び第2主軸により第3主軸も求めることができ、3本の主軸により三次元物体の姿勢を明確に表すことができる。特に、3本の主軸を求めることにより、正方形に近い三次元物体の場合にはその主軸を正確に求めることができる。また、画像処理装置1によれば、3本の主軸を法線とした3つの平面にそれぞれ投影された各形状が円形かあるいは方形かの組み合せにより、三次元物体の形状を簡単に推定することができる。
以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。
例えば、本実施の形態では画像処理装置での処理結果をモニタに表示出力するように構成したが、工場の製造ロボットや二足ロボット等の他の用途で利用してもよい。
また、本実施の形態では三次元座標点に対して立体を設定し、その立体を利用して直線ベクトル又は法線ベクトルを求める構成としたが、三次元座標点群を用いて別の手法によりベクトルを求めてもよい。
また、本実施の形態では第1主軸及び第2主軸により第3主軸を求める構成としたが、第2主軸の位置する方向のベクトル群を除去した残りのベクトル群により第3主軸を求める構成としてもよい。
また、本実施の形態では3つの平面に投影された形状が円形である個数により長方体、円柱、球と判定した後に、(短軸/長軸)や体積による判定により長方体、円柱、球と確定する構成としたが、3つの平面に投影された形状が円形である個数により長方体、円柱、球と確定するだけでもよい。
また、本実施の形態では三次元座標点群から直線ベクトルあるいは法線ベクトルを直接求める構成としたが、三次元座標点間の関係から三次元物体の形状を構成する線分を求め、この求めた線分から直線ベクトルあるいは法線ベクトルを求める構成としてもよい。
1…画像処理装置、2,3…カメラ、4…モニタ、10…前処理部、11…三次元座標処理部、12…ノイズ除去部、13…ベクトル処理部、14…姿勢推定部、15…出力部