(実施の形態)
以下、本発明の実施の形態における、三次元データ生成装置、三次元データ生成方法、及びプログラムについて、図1〜図18を参照しながら説明する。
なお、以下の実施の形態は説明のためのものであり、本発明の範囲を制限するものではない。従って、当業者であればこれらの各要素または全要素を、これらと均等なものに置換した実施形態を採用することが可能であり、それらの実施形態も本発明の範囲に含まれる。
[三次元データ生成装置の概略構成]
最初に、図1〜図7を用いて本実施の形態における三次元データ生成装置の構成を説明する。図1は、本発明の実施の形態における三次元データ生成装置の概略構成を示すブロック図である。
図1に示す本実施の形態における三次元データ生成装置100は、ステレオペアの左右画像から、視差データを算出し、算出した視差データを用いて、三次元オブジェクトのモデリングにおいて重要となる情報、即ち、実空間に存在する平面(以下「実在の平面」とも表記する。)の三次元データを生成する。ステレオペアの左右画像とは、異なる角度から同一対象を撮影して得られた2つの二次元画像をいう。
本実施の形態では、ステレオペアの左右画像は、例えば、一般的なデジタルカメラを用い、異なる視点から分析対象を撮影することによって取得される。
また、図1に示すように、本実施の形態における三次元データ生成装置100は、共面点クラスター抽出部30と、三次元平面抽出部40と、三次元平面修正部50と、を備え、これらによって、高精度の三次元データを生成する。
このうち、共面点クラスター抽出部30は、まず、ステレオペアの左右画像上の対応点ペアから求められた視差データに基づいて、仮想三次元空間内に三次元点を生成する。このとき、視差データを算出する際の計算精度に制限があるため、本来実空間の一つの平面は、仮想三次元空間内に多数のXY平面と平行な単一視差面になる。従って、共面点クラスター抽出部30は、まず三次元点から単一視差面を抽出する。
更に、共面点クラスター抽出部30は、一定の結合ルールに従い、多数の単一視差面に対して結合処理を行い、結合処理の結果から、実空間の一つの平面に属する三次元点の集合を特定し、そして、特定した三次元点の集合を共面点クラスターとして抽出する。
また、三次元平面抽出部40は、共面点クラスター抽出部30によって抽出された共面点クラスターを用いて、仮想三次元空間内に存在する平面の三次元データを抽出する。なお、この平面の三次元データ(以下「三次元平面」と表記する)は、実在の平面に対応している。即ち、この三次元データは、実在の平面を表現している。
そして、三次元平面修正部50は、まず、三次元平面抽出部40によって抽出された三次元平面それぞれ毎に、各三次元データの抽出に用いられた共面点クラスター、即ち、三次元点の集合に対して、一定のサンプリングルールでサンプリングを実行する。更に、三次元平面修正部50は、このサンプリングによって取得した三次元点(以下「サンプル点」と表記する。)を用いて、先に抽出された三次元平面を修正する。
このように、本実施の形態では、ステレオ画像から抽出された直線ではなく、実在の平面に属する多数の三次元点が視差計算の精度の制限下で構成する特別な分布特徴(単一視差面)から、実在の平面に対応する三次元点の集合が抽出される。また、本実施の形態では、抽出された三次元点の集合から三次元平面が生成され、更に、生成された三次元平面は、高信頼度のサンプル点によって修正され、より高精度の三次元平面となる。
従って、本実施の形態によれば、任意形状の輪郭を持った平面の3次元データを生成することができる。
[三次元データ生成装置の具体的構成]
続いて、図2〜図7を用いて、本実施の形態における三次元データ生成装置の構成を更に具体的に説明する。図2は、本発明の実施形態における三次元データ生成装置のより具体的な構成を示すブロック図である。
図2に示すように、本実施の形態では、三次元データ生成装置100は、上述した共面点クラスター抽出部30、三次元平面抽出部40、及び三次元平面修正部50に加えて、視差データ生成部10と、処理パラメータ入力部20と、処理パラメータ記憶部21とを備えている。以下各部について具体的に説明する。
[視差データ生成部]
視差データ生成部10は、ステレオペアの左右画像の入力を受け付け、この入力を受け付けた左右画像に基づいて視差データを生成し、そして、生成した視差データを、共面点クラスター抽出部に入力する。
具体的には、視差データ生成部10は、既存の処理方法を用いて、ステレオペアを構成する左画像と右画像との重なり部分上に対応点ペアを特定し、特定した対応点ペア毎に、左画像上の点と右画像上の点との位置ずれ、即ち、「視差」を計算する。この対応点ペア毎に計算された視差の値が視差データとなる。また、計算によって得られる「視差」の値(視差値)の単位はピクセル数となる。
また、本実施の形態では、ステレオペアの左右画像としては、市販のデジタルカメラによって異なる視点から撮影された2つの画像が挙げられるが、これに限定されるものではない。例えば、アナログカメラによって撮影されたアナログ写真をスキャニングなどのデジタル処理することによって得られるデジタル画像であってもよい。
更に、本実施の形態では、ステレオペアの左右画像から生成した視差データは、その全体がこの後の三次元平面(三次元データ)生成の処理対象とされても良いし、その一部のみが三次元平面生成の処理対象とされても良い。具体的には、ある領域内の視差データにノイズが存在する場合(例えば、左右画像に芝生が生えている領域が存在する場合、左右画像に水面となっている領域が存在する場合等)、ノイズが存在する領域の視差データは、三次元平面生成の処理対象から除外される。
また、三次元平面の生成の処理対象となる視差データであるか、処理対象とならない視差データであるかは、例えば、ユーザーが予め設定することができる。具体的には、ユーザーは、処理対象となる視差データが得られる領域にマスク値として「1」を設定し、処理対象とならない視差データが得られる領域にマスク値として「0」を設定することができる。この場合、視差データ生成部10は、マスク値が「1」に設定された領域の視差データだけを次の処理ステップ(共面点クラスター抽出部30)に送る。
また、視差データ生成部10は、ステレオペアの左右画像の重なり領域における各対応点の視差値を、一定のルールで0〜255の範囲内の値に変換し、変換によって得られた値から視差画像を生成する。そして、視差データ生成部10は、既存の画像分割方法を用いて、視差画像を、平滑領域と非平滑領域とに分割し、平滑領域から得られる視差データのみを次の処理ステップに送ることもできる。更に、視差データ生成部10は、より多くの領域の視差データを処理対象とするため、視差データの生成前(ステレオマッチングの実行前)に、ステレオペアの左右画像に対して、画像の平滑化を目的としたフィルタリングを実行しても良い。
[処理パラメータ入力部、処理パラメータ記憶部]
処理パラメータ入力部20は、ユーザーからの、三次元データの生成に必要となる全てのパラメータ、即ち、後述する共面点クラスター抽出処理と三次元平面修正処理とで必要となるパラメータの入力を受け付ける。
ユーザーから処理パラメータ入力部20に入力されるパラメータとしては、カメラに関連するパラメータ、撮影時の基線長といった撮影時の状況に関するパラメータ、及び上記の処理に必要な他のパラメータ等が挙げられる。また、このうち、カメラに関連するパラメータには、ステレオペアの左右画像の撮影に使用されたカメラにおける、焦点距離、変形係数等が含まれる。
また、他のパラメータのうち、共通点クラスター抽出処理に用いられるパラメータとしては、単一視差面の結合処理に用いる面積の閾値、マージ面の結合処理に用いる角度及び距離の閾値、隣接する単一視差面の判定に用いる視差値の差の最大許容値等が挙げられる。また、三次元平面の修正処理に用いられるパラメータとしては、後述するサンプル点の数の算出に用いられる比例値等が挙げられる。
また、処理パラメータ入力部20は、入力されたパラメータを、処理パラメータ記憶部21に出力し、そこで保存させる。また、共面点クラスター抽出部30、三次元平面抽出部40、及び三次元平面修正部50は、それぞれの処理に必要なパラメータを、適宜、処理パラメータ記憶部21から取得する。
[共面点クラスター抽出部]
共面点クラスター抽出部30は、本実施の形態では、まず、視差データ生成部10によって生成された視差データから三次元点を生成し、更に、単一視差面を取得する。単一視差面は、視差画像上の視差値が同一の点で構成された連結領域に対応する三次元点の集合によって構成されている。続いて、共面点クラスター抽出部30は、隣り合う単一視差面を、それぞれにおける視差値及び面積を制限する条件下で結合して第1マージ面を生成する。
そして、共面点クラスター抽出部30は、隣り合う第1マージ面を、第1マージ面間の位置関係を制限する条件下で結合して第2マージ面を生成する。更に、第2マージ面を、第2マージ面間の位置関係及び面積を制限する条件下で結合して拡張平面を生成する。最後に、共面点クラスター抽出部30は、拡張平面毎に、各拡張平面の生成に係わる三次元点の集合を、一つの共面点クラスターとして抽出する。
具体的には、共面点クラスター抽出部30は、まず、視差データ生成部10から入力された視差データに基づいて、三次元点の座標(X,Y,Z)を計算するため、計算に必要な情報を、処理パラメータ記憶部21から取得する。三次元点の座標の計算に必要な情報として、撮影時に使用したカメラの焦点距離、変形係数などの特徴量、及び撮影時の基線長等である。なお、以降の説明において、座標(X,Y,Z)中のZ軸は、奥行きを表わしている。
次に、共面点クラスター抽出部30は、取得した情報を用いて、エピポーラ拘束に基づき、ステレオペアの対応関係から、左画像撮影時のカメラと右画像撮影時のカメラとの間の、相対的な向き及び距離を取得する。そして、共面点クラスター抽出部30は、取得した数値を視差データとともに用いて、三次元点の座標(X,Y,Z)を計算する。
次に、共面点クラスター抽出部30は、入力された視差データから視差画像を生成し、視差画像上において、輝度値が同一の点(つまり、視差値が同一の点)で構成された連結領域を特定する。そして、共面点クラスター抽出部30は、先に計算で取得した多数の三次元点のうち、特定した連結領域に対応する三次元点群を「単一視差面」として抽出する。また、視差データから三次元点の座標を計算する際の計算過程から分かるように、このようにして抽出された単一視差面は、仮想三次元空間内では、座標系のXY面と平行な平面となる(図3(a)〜(c)参照)。
ところで、仮に、サブピクセルレベルの精度で視差値が取得されているのであれば、視差値から、スムーズに変化する三次元平面が生成されるので、「単一視差面」のような面が抽出されることはない。しかし、実際に取得可能な視差データは、ピクセルレベルの精度で取得される視差データであるので、上述のように、実空間に存在する本来の平面に対応する部分は、一つのスムーズな平面ではなく、段階的な多数の単一視差面になってしまうのである。
例えば、視差値の差が1ピクセルだけの2つの連結領域は、視差画像上で隣接する。そして、視差画像上で隣接する2つの連結領域は、三次元空間では、ともにXY面と平行な平面(単一視差面)となり、この2つの単一視差面の間にはZ軸方向において一定の距離が存在する。また、この一定の距離は、三次元変換計算に影響する様々な特徴に応じて決定される。この「様々な特徴」としては、上述したカメラ関連の係数及び撮影時の状況などが挙げられる。
また、以後の説明では、単一視差面に対応する連結領域がもつ視差値が、「単一視差面の視差値」であるとする。更に、以後の説明では、2つの単一視差面それぞれに対応する2次元の連結領域が隣接する場合は、「2つの単一視差面が隣接している」とみなす。加えて、このような、対応する連結領域が隣接している「2つの単一視差面」は、「隣接する2つの単一視差面」、または「隣り合う2つの単一視差面」と表記する。
図3は、本発明の実施の形態で抽出された隣接する2つの単一視差面の一例を示す図である。図3(a)は、2つの単一視差面それぞれに対応している連結領域の視差画像上での状態を示し、図3(b)は、三次元空間に存在している2つの単一視差面の状態を示し、図3(c)は、2つの単一視差面がXY平面に投影された状態を示している。
図3(a)に示すように、隣り合う2つの単一視差面は、視差画像上では、連結領域R1と連結領域R2とで表わされる。なお、連結領域R1と連結領域R2との視差値の差は、1ピクセルだけとなっている。
そして、連結領域R1及び連結領域R2それぞれにおいて、同一の領域内にある点の視差値は全て同じである。また、視差データから三次元点の座標を計算する際の計算過程により、図3(b)に示すように、仮想三次元空間において、連結領域R1からはXY平面と平行な単一視差面S1が取得され、連結領域R2からはXY平面と平行な単一視差面S2が取得される。
更に、図3(c)に示すように、単一視差面S1及び単一視差面S2それぞれをXY平面に投影すると、単一視差面S1は、XY平面上の領域S1xyとなり、単一視差面S2は、XY平面上の領域S2xyとなる。
ところで、実際の世界では、物体の表面はスムーズに変化していることから、このような表面を三次元データによって表現するためには、対応点ペアを細かく設定し、それに合せて視差を算出する必要がある。つまり、ピクセルレベルではなく、サブピクセルレベルで視差を算出して、三次元空間中に少しずつ変化している奥行きを細かく表現する必要がある。
しかしながら、上述したように、実際には、ピクセルレベル精度でしか視差データを取得できないので、XY平面と平行な面である単一視差面しか取得できない状況にある。そして、図3(b)に示しているように、段階的な多数の単一視差面は、実在の平面に対応するが、実在の平面そのものを表現しているわけではない。一方、これらの単一視差面の互いの位置関係から、実在の平面の向きを表現することができる。この点について図4を用いて説明する。
図4は、実空間に存在する平面と単一視差面との比較を示す図である。図4(a)は、実空間に存在する平面を三次元座標に表示した状態を示し、図4(b)は、段階的な多数の単一視差面を三次元座標に表示した状態を示している。
図4(a)に示すように、実空間においては、表面がスムーズに変化する平面Mが存在している。よって、この平面Mを撮影することによって得られた左右画像からピクセルレベル精度の視差データを計算し、得られた各視差データに基づいて単一視差面を生成すれば、実在の平面Mに近似した複数の単一視差面が得られる。例えば、図4(b)に示すように、単一視差面S1、単一視差面S2、及び単一視差面S3の三つの単一視差面が得られる。
このような特性から、実在の平面に属している全ての単一視差面を取り出せば、各単一視差面から、実在の平面の向きを特定する情報と、実在の平面の位置を特定する情報とが取得でき、実在の平面を復元できる。
このため、本実施の形態では、共面点クラスター抽出部30は、実在の平面に対応した三次元点の集合を取得するため、以下に示す、「第1の処理」、「第2の処理」、及び「第3の処理」を実行する。また、以下の説明においても、単一視差面は、上述したように、視差画像上の視差値(輝度値)が同一の点で構成された連結領域から、生成される。また、連結領域の取得は、視差画像に対して画像分割を行ない、分割された部分毎に、一つの連結領域として抽出する手法、例えばRegion Growing法によって行なうことができる。
第1の処理:
第1の処理として、共面点クラスター抽出部30は、複数の単一視差面を一つの平面領域にマージする処理を実行する。具体的には、共面点クラスター抽出部30は、まず、視差値が最大(最大視差値N)となる単一視差面S1を特定し、更に、その最大視差値より値が1小さい視差値(つまり、視差値が「N−1」)となる単一視差面を探す。
そして、共面点クラスター抽出部30は、探し出された単一視差面の中に、単一視差面S1と空間的に隣り合う単一視差面が存在しているかどうかを判定し、存在している場合は、存在している単一視差面(以下「単一視差面S2」とする。)と単一視差面S1との面積が一定の基準を満たすかどうかを判定する。
続いて、共面点クラスター抽出部30は、両者の面積が一定の基準を満たす場合は、単一視差面S1と単一視差面S2とをマージ(結合)して、これらを一つの平面とする。なお、このマージ処理によって生成された平面が、上述した「第1マージ面」である。
また、このようなマージ処理は、マージの対象となる単一視差面と第1マージ面との差(以下「マージ誤差」と表記する。)を小さくするため、一定の基準に従って実行される必要がある。例えば、マージの対象となる単一視差面上の点から第1マージ面までの距離の平方の総和を「マージ誤差」」とすると、マージ誤差を最小値とするために、マージ処理は、最小二乗法を用いて実行される。また、マージ処理がロバスト的となるようにするため、マージ処理においては、M推定法、RANSAC方法(Random Sample Consensus)といったロバスト推定方法が用いられても良い。
ここで、マージ処理について更に具体的に説明する。まず、マージされる単一視差面S1と単一視差面S2との視差値の差が1ピクセルに設定されているとする。この場合、隣接する単一視差面S1及びS2が共に同じ実在の平面に属し、かつ単一視差面S1と単一視差面S2の視差値が1ピクセル異なる程度の変化が存在することになる。また、この隣接する二つの単一視差面間の変化を、以下においては「最小視差変化ペース」と表記する。
但し、実際には、撮影方向と実在の平面とがなす角度が小さい場合は、実空間の同じ平面において隣接する二つの単一視差面であるにも拘らず、両者における視差の差が2ピクセル以上となる場合もある。このような場合は、上述の設定では、単一視差面を探し出してマージすることは不可能となる。
一方、単一視差面のマージ処理の条件を変更し、マージされる単一視差面S1と単一視差面S2との視差値の差を2ピクセル以上に設定することも考えられるが、この場合は、同じ実在の平面に属していない隣接する複数の単一視差面をマージしてしまい、実在の平面を正確に抽出することができない可能性がある。
なお、上述したように、マージされる単一視差面S1と単一視差面S2との視差値の差を1ピクセルに固定して処理を行なう場合は、視差変化のペースが2ピクセル以上の実在の平面のケースにおいて、マージ処理を実行できなくなる。
以上の点から、本実施の形態では、共面点クラスター抽出部30は、視差変化ペースが2ピクセル以上の実在の平面に対応するため、例えば、最初に、視差変化ペースが1ピクセルの実在の平面のケースを処理し、次に、視差変化ペースが2ピクセルの実在の平面のケースを処理する。つまり、共面点クラスター抽出部30は、視差変化ペースの値毎にマージ操作を行なうことにより、全ての実在の平面について処理を実行することができる。
具体的には、まず、共面点クラスター抽出部30は、視差値の差が1ピクセルの2つの単一視差面をマージ処理の対象に設定し、視差値の差が1ピクセルとなる単一視差面同士をマージして第1マージ面を生成する。続いて、共面点クラスター抽出部30は、後述する第2の処理を実行し、一定のルール下で、第1マージ面同士を結合し第2マージ面を生成する。更に、共面点クラスター抽出部30は、後述する第3の処理を実行して、一定のルール下で、第2マージ面に、未だマージされていない第1マージ面、及び未だマージされていない単一視差面を結合して、拡張平面を生成する。
次に、共面点クラスター抽出部30は、以上の第2及び第3の処理の完了後、まだマージされていない単一視差面が存在している場合は、マージ処理の対象を、視差値の差が2ピクセルの2つの単一視差面に設定する。そして、共面点クラスター抽出部30は、まだマージされていない、視差値の差が2ピクセルとなる単一視差面同士をマージして、第1マージ面を生成する。また、この場合も、共面点クラスター抽出部30は、後述する第2の処理と第3の処理とを実行して、新しい拡張平面を生成する。
次に、共面点クラスター抽出部30は、視差値の差を2ピクセルに設定した後の第2及び第3の処理が完了しても、まだマージされていない単一視差面が存在している場合は、更に、マージ処理の対象を、視差値の差が3ピクセルの2つの単一視差面に設定する。そして、共面点クラスター抽出部30は、まだマージされていない、視差値の差が3ピクセルとなる単一視差面同士をマージして、第1マージ面を生成する。また、この場合も、共面点クラスター抽出部30は、後述する第2の処理と第3の処理とを実行して、新しい拡張平面を生成する。
ところで、実空間では、視差変化ペースが激しい平面も存在するが、仮想三次元空間では、隣接する2つの単一視差面の間の視差値の差が大きくなるほど、この2つの単一視差面が実空間において同一の平面に属している可能性は低くなる。このため、本実施の形態では、上述したように、現在処理するデータの状況に応じ、「単一視差面間の視差値の差の最大許容値」が、パラメータとしてユーザーによって入力される。共面点クラスター抽出部30は、この許容値以上の視差変化ペースの平面に対しては、共面点クラスターの抽出処理を行わない。以上のような処理で、細かく視差変化する平面(小さい視差変化ペースの実在の平面)も、激しく視差変化する平面(大きい視差変化ペースの実在の平面)も、抽出できるようになる。
また、本実施の形態では、単一視差面S1と単一視差面S2とが空間的に隣り合う関係かどうかの判定は、仮想三次元空間に展開された状態ではなく、二次元の視差画像上で、これらに対応している連結領域に基づいて行なわれる。そうする理由は、2つの単一視差面は、仮想三次元空間に展開されると、視差の段階的な変化のせいで、実空間では互いに隣り合う場合であっても、XY面と平行な平面になってしまいので、両者が隣り合うかどうかを判定することが困難となるからである。このため、仮想三次元空間に展開された状態より、二次元の視差画像に基づく方が、単一視差面が隣り合う関係かどうかを判定し易くなる。
従って、本実施の形態では、共面点クラスター抽出部30は、例えば、視差画像上において、単一視差面S1に対応する二次元の連結領域と、単一視差面S2に対応する二次元の連結領域との間の境界線の存在の有無に基づいて、両者が隣り合う関係かどうかを判定する。
また、本実施の形態では、共面点クラスター抽出部30は、単一視差面S2を単一視差面S1にマージした後、単一視差面S1の存在状態を単一視差面から第1マージ面に変更し、マージされた単一視差面S2を削除することができる。更に、共面点クラスター抽出部30は、一つの単一視差面を、複数の単一視差面とマージすることもできる。この場合、共面点クラスター抽出部30は、最初に処理対象となった単一視差面を、他の単一視差面と一つずつマージした後、その存在状態を単一視差面から第1マージ面に変更し、マージされた他の単一視差面を削除する。
また、マージされる単一視差面S1と単一視差面S2との面積に対しては、一定の基準、具体的には、両者の面積が共に一定の面積(面積についての閾値)以上であることが求められる。なお、マージされる2つの単一視差面の面積が共に一定の面積以上であることが求められるのは、視差ノイズによる単一視差面への影響を小さくするためである。また、この面積についての閾値は、上述したように、ユーザーによって処理のパラメータとして入力され、処理パラメータ記憶部21に記憶されている。
また、本実施の形態では、三次元データ生成装置100は、ユーザーが、面積についての適切な閾値を入力できるようにするために、推奨範囲をユーザーに提示することもできる。この場合、共面点クラスター抽出部30は、推奨範囲における最小値と最大値とを、現在の処理対象となっているステレオペアの左右画像の重なり領域のサイズに基づいて、設定する。
具体的には、共面点クラスター抽出部30は、まず、右側の画像と左側の画像とを対比して、両者において重なっている領域を特定し、特定された領域の面積(単位:ピクセル)に、予め設定された最小の推奨範囲の割合と最大の推奨範囲の割合とを乗算する。そして、共面点クラスター抽出部30は、最小の推奨範囲の割合の乗算値を推奨範囲の最小値に設定し、最大の推奨範囲の割合の乗算値を推奨範囲の最大値に設定する。例えば、特定された領域の面積が100ピクセル、最小の推奨範囲の割合が20%、最大の推奨範囲の割合が100%である場合は、共面点クラスター抽出部30は、20ピクセル〜100ピクセルを推奨範囲として提示する。
また、上述の二つの単一視差面の面積の差についての条件は、例えば、実在の平面における変化の状態に基づいて設定される。理想的には、実在の平面がスムーズに変化している場合は、奥行きの値(Z軸)は少しずつ変化するので、その実在の平面に属する各三次元点に対応する視差もサブピクセルレベルで少しずつ変化すべきである。例えば、このような場合は、視差値は、1、2、3、4といった整数ではなく、実際には、1.16といった小数を含む値で細かく表現されるはずである。
しかしながら、視差データの計算精度には制限があるため、小数を含む細かい視差値の取得は困難である。このため、本実施の形態では、視差値は、1、2、3、4のように段階的に変化し、更に、この視差値の変化のペースは各平面において一定となってしまう。そして、各平面において視差値の変化のペースが一定である場合は、実在の同じ平面上に属しいている各単一視差面の面積は類似していると判断される(図4(b)参照)。但し、この場合に、実在の同じ平面に対応する各単一視差面の面積を「単位面積」とすると、単位面積は、実在の平面毎に異なる値となるので、視差値として整数しか用いることができない場合であっても実在の平面を抽出することが可能となる。
また、本実施の形態では、共面点クラスター抽出部30は、単一視差面S1及びS2が空間的に隣り合い、且つ両方の面積が共に一定の面積以上であった場合に、両者の面積の差に応じて、以下の(1)及び(2)に示すように、異なるマージ処理を実行する。
(1)単一視差面S1と単一視差面S2との面積の差が、一定値(面積差についての閾値)以下の場合は、共面点クラスター抽出部30は、直接に単一視差面S1と単一視差面S2とをマージする。
(2)単一視差面S1と単一視差面S2との面積の差が、面積差についての閾値より大きい場合は、共面点クラスター抽出部30は、単一視差面S1と単一視差面S2とのうち、面積が小さい方(後述の図5の例では、単一視差面S1)の面積を基準として、マージ処理を実行する。この場合のマージ処理について図5を用いて説明する。
図5は、本発明の実施の形態で実行されるマージ処理であって、単一視差面間の面積の差がそれについての閾値より大きい場合を説明するための図である。図5(a)〜(c)は、マージ処理における一連のステップを示している。具体的には、まず、図5(a)に示すように、単一視差面S1と単一視差面S2とが隣接している状態で存在しているとする。
次に、図5(b)に示すように、上記(2)では、共面点クラスター抽出部30は、まず、単一視差面S2の中から、単一視差面S1と隣接し、且つ、面積が単一視差面S1の面積と同一となる領域S2aを特定する。そして、共面点クラスター抽出部30は、特定した領域S2aと単一視差面S1とをマージする。
これにより、図5(c)に示すように、第1マージ面Mが形成される。また、共面点クラスター抽出部30は、単一視差面S2からS2aを特定した後、単一視差面S2の残った領域S2bを、一つの独立の単一視差面として保持する。
なお、単一視差面S1に隣接する領域S2aの特定は、2つの単一視差面が空間的に隣り合う関係かどうかを判定する場合と同様に、二次元の視差画像に基づいて行なうことができる。また、残った領域S2bは、新しい単一視差面として、別の単一視差面とマージされても良い。
以上で説明したように、第1の処理が完了すると、仮想三次元空間は、第1マージ面だけが存在している状態、または第1マージ面とマージされていない単一視差面とが共存している状態となる。
第2の処理:
第2の処理として、共面点クラスター抽出部30は、同じ実在平面に属している第1マージ面同士を進行的に結合し、更に大きい範囲の実在平面を復元する処理を実行する。第2の処理によって生成される平面は、上述した第2マージ面である。
第2の処理では、共面点クラスター抽出部30は、例えば、画像処理の分野で既存のRegion Growing処理といった進行的な処理を用いて、視差値が最大となる第1マージ面、つまり、奥行きの値(Z値)が最大となる第1マージ面M1から、処理を実行する。
具体的には、共面点クラスター抽出部30は、まず、第1マージ面M1と隣り合う第1マージ面のなかに、第1マージ面M1と平行であり、且つ、第1マージ面M1との距離が閾値以下となる第1マージ面が存在するかどうかを判定する。判定の結果、存在する場合は、共面点クラスター抽出部30は、条件を満たす第1マージ面(以下「第1マージ面M2」と表記する。)は、同じ実在平面Rに属していると判定する。
次に、共面点クラスター抽出部30は、第1マージ面M2と隣り合う第1マージ面の中に、上述の平行についての条件と距離についての条件とを満たし、且つ、第1マージ面M2より奥行きの値が小さい第1マージ面が存在しているかどうかを判定する。そして、存在する場合は、この場合も、共面点クラスター抽出部30は、条件を満たす第1マージ面(以下「第1マージ面M3」と表記する。)は、同じ実在平面Rに属していると判定する。
その後、共面点クラスター抽出部30は、第1マージ面M3に対しても、上述の第1マージ面M2と同様の処理を行ない、更に第1マージ面M4を特定する。共面点クラスター抽出部30は、このような進行的な処理によって、同じ実在平面Rに属している全ての隣接し合う第1マージ面を見つけ出す。その後、共面点クラスター抽出部30は、見つけ出した第1マージ面を結合して、更に大きな面積を持った平面、即ち、第2マージ面を生成する。
また、第2の処理でも、共面点クラスター抽出部30は、第1マージ面同士が隣り合っているかどうかを、上述の第1の処理での単一視差面同士の場合と同じように、二次元の視差画像に基づいて判定することができる。更に、共面点クラスター抽出部30は、第2の処理において、隣り合う第1マージ面M1と第1マージ面M2とのなす角度が、予め設定された閾値以下となる場合は、両者は平行であると判定することができる。
また、上述の隣り合う第1マージ面M1と第1マージ面M2との距離についての閾値は、カメラ関連の係数及び撮影方式の関連係数を参照した上で、ユーザーによって設定される。また、上述の角度についての閾値、及び距離についての閾値は、上述したように、共に、ユーザーによってパラメータとして入力され、処理パラメータ記憶部21に格納されている。共面点クラスター抽出部30は、処理の際に、処理パラメータ記憶部21から、必要に応じて、これらの閾値を取得する。
また、共面点クラスター抽出部30は、一つの第1マージ面を、複数の第1マージ面と結合することもできる。この場合、共面点クラスター抽出部30は、最初に処理対象となった第1マージ面を、他の第1マージ面と一つずつマージした後、その存在状態を第1マージ面から第2マージ面に変更し、マージされた他の第1マージ面を削除する。
上述した第2の処理が完了すると、仮想三次元空間は、第2マージ面だけが存在している状態、第2マージ面と未だマージされていない第1マージ面とが共存している状態、または第2マージ面と、未だマージされていない第1マージ面と、未だマージされていない単一視差面とが共存している状態となる。
実際の場合、様々な複雑な状況があり、第2マージ面の生成が行なわれた後でも、同じ実在の平面に属している第1マージ面が全てマージされているわけではない。また、同じ実在の平面に属している単一視差面が、未だマージされずに存在している可能性もある。このような状況を対処するため、共面点クラスター抽出部30は、第3の処理を実行する。
第3の処理:
第3の処理として、共面点クラスター抽出部30は、まず、未だマージされていない第1マージ面、及び未だマージされていない単一視差面を特定する。次に、共面点クラスター抽出部30は、特定した第1マージ面及び単一視差面の中から、第2の処理で生成した各第2マージ面と同じ実在の平面に属しているものを探索する。そして、共面点クラスター抽出部30は、見つけ出した面を、この第2マージ面に結合する処理を実行する。このような面を拡張する処理(拡張操作)によって取得された面が、上述した「拡張平面」である。
具体的には、共面点クラスター抽出部30は、一つの第2マージ面P1を対象として、まず、これに隣り合う第1マージ面及び単一視差面を特定する。そして、共面点クラスター抽出部30は、特定した第1マージ面及び単一視差面が、この第2マージ面P1と同じ実在の平面に属しているかどうかを判定する。
このとき、第1マージ面及び単一視差面が第2マージ面P1と隣り合うかどうかの判定は、上述の第1の処理での単一視差面同士の場合、上述の第2の処理での第1マージ面同士の場合と同じように、二次元の視差画像に基づいて行なわれる。
また、例えば、隣り合うかどうかの判定の結果、第2マージ面P1に隣り合う第1マージ面M1と、同じく第2マージ面P1に隣り合う単一視差面S1とが、それぞれ存在すると判定されたとする。この場合、第2マージ面P1と第1マージ面M1とが同じ実在の平面に属しているかどうかの判定は、上述の第2の処理の説明で述べた、第1マージ面同士をマージすべきかどうかの判定に準じて行なわれる。また、第2マージ面P1と単一視差面S1とが同じ実在の平面に属しているかどうかの判定も、同様である。なお、第3の処理では、判定に用いられる角度についての閾値及び距離についての閾値は、必要に応じて、第2の処理とは異なる値であっても良い。
そして、判定の結果、第2マージ面P1と第1マージ面M1とが同じ実在の平面に属している場合は、共面点クラスター抽出部30は、両者をマージする。このとき形成された面を「第2マージ面P1M1」とすると、共面点クラスター抽出部30は、この後、更に、第2マージ面P1M1について、隣り合う第1マージ面及び単一視差面の特定、実在の同じ平面に属しているかどうかの判定を実行する。このような進行的な処理が実行され、第2マージ面P1に対して、本来これと同じ実在平面に属している、全ての第1マージ面と単一視差面とが結合されるので、最終的に、より実在平面に近づいた拡張平面Q1が生成される。
また、共面点クラスター抽出部30は、一つの第2マージ面に、未だマージされていない多数の単一視差面及び第1マージ面を結合することもできる。更に、この場合、共面点クラスター抽出部30は、処理対象となる第2マージ面に、未だマージされていない単一視差面及び第1マージ面それぞれを、一つずつ結合し、処理対象となる第2マージ面の存在状態を第2マージ面から拡張平面に変更する。また、その後、共面点クラスター抽出部30は、このとき結合された単一視差面及び第1マージ面を削除する。
また、一つの第2マージ面に、1つずつ、第1マージ面又は単一視差面を結合することによって面を拡張している過程においては、第2のマージ面と結合される面の視差が第2のマージ面の視差より大きい場合と、第2のマージ面の視差より小さい場合とがある。但し、本実施の形態ではいずれの場合でも、共面点クラスター抽出部30は、結合対象となる単一視差面及び第1マージ面と、第2のマージ面とを結合する。
更に、本実施の形態では、周りに結合対象となる面が存在していなかった第2マージ面の存在状態は、そのまま、拡張平面に変更される。また、共面点クラスター抽出部30は、全ての第2マージ面の拡張処理が完了した後、第2マージ面に結合されなかった第1マージ面及び単一視差面のうち、面積が閾値以下のものをノイズとして削除する。一方、共面点クラスター抽出部30は、面積が閾値を超える第1マージ面については、そのまま拡張平面とする。また、共面点クラスター抽出部30は、面積が閾値を超える単一視差面については、そのまま残し、これを、「視差変化ペース」の値を上げて実行される次の結合処理の入力データとして用いる。
このような処理を行なうのは、例えば、第1マージ面が、ある第2マージ面と同じ実在の平面に属しているが、両者の間に他の物体が存在しているため、両者が隣り合う関係でないと判定された場合は、両者を直接に結合することができないためである。
上述した第3の処理が完了すると、仮想三次元空間は、拡張平面だけが存在している状態、拡張平面と未だマージされていない単一視差面とが共存している状態となる。また、このようにして生成された各拡張平面は、面積及び輪郭が様々であり、輪郭が必ず直線で構成されることはない。
ここで、図6を用いて、第1の処理から第3の処理の具体例について説明する。図6は、本実施の形態で実行される第1の処理〜第3の処理を説明する図であり、図6(a)〜(e)は一連の各ステップを示している。なお、上述したように、各単一視差面は、XY面と平行な面となるため、ZX面上では、X軸に平行な直線となる。よって、各面の位置関係と向きとをより分かり易くするため、図6(a)〜(e)それぞれでは、各面のZX面への投影像が示されている。
図6(a)に示すように、まず、共面点クラスター抽出部30は、仮想三次元空間内に、単一視差面S1〜S9を生成する。そして、共面点クラスター抽出部30は、これらの単一視差面のうち、S1とS2、S3とS4、S6とS7、S8とS9が空間的に隣り合い、且つ、結合時に要求される面積についての条件と距離についての条件とを満たすと判定する。
次に、図6(b)に示すように、共面点クラスター抽出部30は、第1の処理として、隣り合う単一視差面同士をマージして、第1マージ面M1〜M4を生成する。この場合において、単一視差面S5は、マージされずに残存している。
次に、図6(c)に示すように、共面点クラスター抽出部30は、第2の処理として、第1マージ面同士を結合して、第2マージ面P1を生成する。この場合において、単一視差面S5、第1マージ面M3、及び第1マージ面M4は、マージされずに残存している。
次に、図6(d)に示すように、共面点クラスター抽出部30は、第3の処理として、第2マージ面P1に、未だマージされていない単一視差面S5をマージして、拡張平面Q1を生成する。また、共面点クラスター抽出部30は、未だマージされていない第1マージ面M3及びM4については、それぞれの面積は閾値以上であるので、これらをそのまま拡張平面Q2とQ3とする。以上の処理により、図6(e)に示すように、仮想三次元空間には、拡張平面Q1〜Q3が生成される。
このように、本実施の形態では、多数の単一視差面が一度にマージされたり、多数の単一視差面が少しずつマージされたりせずに、まず、2つの単一視差面だけがマージされ、後に、第1マージ面同士がマージされる。このため、本実施の形態によれば、視差ノイズによる影響が低減される。
つまり、一度に多数の単一視差面がマージされる場合は、視差ノイズが存在すると、結果として生成される平面の向きが、実空間の平面と異なってしまう可能性がある。また、多数の単一視差面が少しずつマージされる場合は、マージが行なわれる度に、マージによって得られた面の向きが少しずつ変化する。そして、マージの際に要求される一つの条件が、マージ対象となる面が互いに平行関係にあることであるので、マージによって得られた面の向きが少しずつ変化した場合は、次にマージ対象とすべき単一視差面を特定することが困難となる。
これに対して、本実施の形態によれば、隣接する単一視差面だけをまずマージするため、マージによって得られた面の向きが少しずつ変化することがないので、最終的に得られる拡張平面の向きが、実空間の平面と異なってしまう可能性は大きく低減される。また、本実施の形態では、単一視差面から生成される第1マージ面の向き及び位置の精度が高くなるため、第1マージ面同士を進行的に結合する手法が採用され、そして、第2マージ面を生成した上で、最後の拡張平面が生成される。
また、共面点クラスター抽出部30は、上述の第1の処理〜第3の処理を実行して、拡張平面を生成すると、最後に、1つの拡張平面に属している全ての三次元点は、実空間の同じ平面に属していると判定する。そして、共面点クラスター抽出部30は、拡張平面毎に、拡張平面に属している三次元点の集合を、一つの共面点クラスターとして抽出する。
[三次元平面抽出部]
三次元平面抽出部40は、上述したように、共面点クラスター抽出部30によって抽出された共面点クラスターを用いて、仮想三次元空間内に存在する平面の三次元データを抽出する。
言い換えると、三次元平面抽出部40は、平面フィティングを行い、一つの共面点クラスター内にある全部の点の三次元座標から平面を表わす式の係数を計算する。具体的には、三次元空間において、一つの平面は、Z=AX+BY+Cと表現される。従って、三次元平面抽出部40は、例えば、最小二乗法を用いて、全部の点から最終的に得られる平面までの距離の平方の和が、最小となるように、平面を表現する上記の等式中の係数A、B、Cを計算する。
また、第2の処理において、共面点クラスターを生成する際に、同じ平面に属している点について、平面の形状及びサイズに関する特別な条件は付与されていないため、上記の処理により、任意の形状を有し且つ任意サイズを持った平面を抽出することができる。
[三次元平面修正部]
三次元平面修正部50は、まず、三次元平面抽出部40によって抽出された三次元平面の情報、即ち、三次元平面を表わす式の係数を、実在の各平面に対応した共面点クラスターに対するサンプリングによって得られた三次元点(サンプル点)を利用して修正する。
具体的には、三次元平面修正部50は、まず、三次元平面抽出部40での三次元データの抽出に用いられた共面点クラスターから、一定数の三次元点(サンプル点)をランダムに抽出し、これらのサンプル点により三次元平面を修正する。また、このとき、抽出されるサンプル点は、信用度の高いものであるのが好ましい。「信用度」については後述する。
ところで、上記のサンプル点の抽出は、三次元データの修正対象となる三次元平面において、出来るだけ分散されて行なわれるのが良い。これは、局部に集中しているサンプル点が抽出されていると、抽出されたサンプル点に、視差ノイズによる影響を受けたサンプル点が含まれる可能性が高くなり、後述する三次元平面の修正の精度が低下するからである。このため、本実施の形態では、三次元点の抽出は、図7に示すように、以下の手法によって行なわれる。
図7は、本発明の実施の形態で実行される三次元平面の修正処理において対象となる三次元平面の一例及びその分割領域を示す図であり、図7(a)及び(b)それぞれは、輪郭が異なる三次元平面を示している。
例えば、予め、三次元平面上に垂直方向及び水平方向において一定のステップ値が設定されている場合は、図7(a)及び(b)に示すように、三次元平面修正部50は、ステップ値に応じて、三次元平面を格子状に分割する。
次に、三次元平面修正部50は、三次元平面の格子状への分割によって得られた各部分(以下「分割領域」と表記する。)から1点ずつランダムに、信用度の高い三次元点を抽出する。なお、この場合において、抽出される三次元点は、この三次元平面が対応する、共面点クラスターに含まれる三次元点の一つである。また、修正の対象となる三次元平面の範囲は必ず規則的な輪郭を有する必要はないので、図7(b)に示すように、輪郭の近辺における分割領域は、他の分割領域に比べて小さくなる場合もある。
また、三次元平面の生成に利用した共面点クラスターに含まれる三次元点が、三次元平面の各分割領域内に存在しているかどうかは、この三次元点を三次元平面に投影して得られた点が、この分割領域の範囲内に位置しているかどうかによって判定される。
また、本実施の形態においては、抽出された各三次元点の信用度は、各三次元点の視差画像上の対応する点(ピクセル)の近隣領域における視差分布の平滑度合いに応じて定義される。つまり、三次元点の対応ピクセルの近隣領域における視差分布の平滑度合いが高い場合は、この三次元点の信用度は高いと定義される。一方、三次元点の対応ピクセルの近隣領域における視差分布の平滑度合いが低い場合、即ち、この近隣領域における視差の変動が大きく、視差ノイズが存在している場合は、三次元点の信用度は低いと定義される。
ここで、信用度の具体例について図19(a)及び(b)を用いて説明する。図19(a)及び(b)は、それぞれ、信用度の判定対象となる三次元点の視差画像上の対応ピクセルとその近隣領域とにおける視差分布の一例を示す図である。また、図19(a)及び(b)は、視差分布の大きさが3×3ピクセルである場合を示している。
図19(a)の例では、判定対象となる三次元点の対応ピクセルの視差値(輝度値)は「5」であるのに対して、近隣領域の視差値も全て「5」となっており、判定対象となる三次元点の対応ピクセルの視差値と近隣領域の視差値との差は一定である。従って、図19(a)の例では、視差分布の平滑度合いは高いので、判定対象となる三次元点の信用度も高いと判断される。
一方、図19(b)の例では、判定対象となる三次元点の対応ピクセルの視差値(輝度値)は「7」であるのに対して、近隣領域の視差値は「5」〜「9」に変化しており、判定対象となる三次元点の対応ピクセルの視差値と近隣領域の視差値との差も変化している(−2〜+2)。従って、図19(b)の例では、視差分布の平滑度合いは低いので、判定対象となる三次元点の信用度も低いと判断される。
このように、本実施の形態では、判定対象となる三次元点の信用度は、判定対象となる三次元点の対応ピクセルの視差値と近隣領域の視差値との差の変化に基づいて判定される。なお、判定の基準となる閾値は、実験等に基づいて適宜設定される。
従って、三次元平面修正部50は、各分割領域から三次元点を抽出する際、信用度が高い点だけを抽出するように処理を行なうが、ある分割領域においては、いずれの点を抽出しても信用度が低い場合がある。このような場合、この分割領域は「信用度が低い分割領域」と認識され、三次元平面修正部50は、信用度が低い分割領域からの三次元点の抽出を行なわずに、代わりに他の分割領域から、更に高信用度の1点をランダムに抽出することができる。
具体的には、三次元平面修正部50は、まず、いずれの点を抽出しても信用度が低い分割領域の数Mを特定する。次に、三次元平面修正部50は、信用度が高い分割領域から1点ずつ三次元点を抽出し、更に、信用度が高い分割領域の中からランダムにM個の分割領域を選択する。そして、三次元平面修正部50は、選択した分割領域それぞれから、未だ選択されておらず、且つ、信用度が高い三次元点を抽出する。
また、本実施の形態において、修正の対象となる三次元平面から抽出すべき点の数は、各三次元平面の面積に応じて定義される。具体的には、三次元平面修正部50は、修正の対象となる各三次元平面の面積を特定し、特定した面積に、予め設定された比例値を乗算することによって、抽出すべき点の数を算出することができる。この場合に用いられる比例値は、上述したように、ユーザーによって入力されるパラメータであり、処理パラメータ記憶部21に記憶されている。また、ロバストな処理を実現するためには、出来るだけ、抽出される点の数は多い方が良いが、点の数が多すぎると処理効率が低下することから、比例値は、ユーザーによって、その経験に基づいて、効果と効率との両方のバランスを考慮して設定される。
また、上述した、修正の対象となる三次元平面を分割する際に用いるステップ値は、各分割領域から抽出すべき点の数に応じて設定される。ここで、ステップ値の計算方法の一例について以下に説明する。
例えば、修正の対象となる三次元平面Pから、三次元平面Pを構成する全ピクセル数の20%に相当する数の点が最低でも抽出される場合を考える。この場合、各分割領域から1点が抽出されるので、ステップ値は2.236(=(1/0.2)0.5)又はそれより小さい値に設定される必要がある。
次に、三次元平面修正部50は、抽出した各三次元点に基づき、各点の座標からその点が属している三次元平面までの距離を計算し、計算した距離に基づいて、三次元平面の向き及び位置を修正する。具体的には、三次元平面が、例えばZ=AX+BY+Cで表現されているとすると、三次元平面修正部50は、係数A、B、Cの値を修正する。
また、この場合の修正処理には、修正処理の精度を高める点から、例えば、大量の点を用いるRANSAC法等のロバスト推定法が用いられるのが良い。また、修正処理は、一つの三次元平面を一つの処理単位として行なわれる。
なお、このように、ランダムサンプリングによって抽出された三次元点を使用して三次元平面を修正する理由は、共面点クラスターの三次元点の集合に基づいて算出された三次元平面には、共面点クラスターの抽出により単一視差面などのマージによって発生した誤差が含まれている可能性があるからである。
最後に、三次元平面修正部50は、修正後の三次元平面上の点、例えば、その平面上の全ての点について、サブピクセルレベルの視差を計算する。これにより、三次元データが取得された領域について、サブピクセルレベルの視差を取得することができる。
本実施の形態によれば、表面がスムーズに変化する三次元平面をより高い精度で取得することができる。
[装置動作]
次に、本発明の実施の形態における三次元データ生成装置100の動作について図8〜図17を用いて説明する。また、本実施の形態では、三次元データ生成装置100を動作させることによって、三次元データ生成方法が実施される。よって、本実施の形態における三次元データ生成方法の説明は、以下の三次元データ生成装置100の動作説明に代える。なお、以下の説明では、適宜、図1〜図7を参酌する。
[全体の処理]
最初に、三次元データ生成装置100で実行される処理全体について、図8を参照して説明する。図8は、本発明の実施の形態における三次元データ生成装置の動作全体を示すフロー図である。
まず、前提として、三次元データ生成装置100において、外部からステレオペアの左右画像が入力され、視差データ生成部10が、入力されたステレオペアの左右画像を用いて視差データを生成し、これを共面点クラスター抽出部30に入力する。また、ユーザーが、処理に必要な各種パラメータを入力すると、処理パラメータ入力部20は、入力されたパラメータを受け付け、入力を受け付けたパラメータを処理パラメータ記憶部21に記憶させる。その後、図8に示す三次元データの生成処理が開始される。
最初に、図8に示すように、三次元データ生成装置100において、共面点クラスター抽出部30が、入力された視差データを用いて、仮想三次元空間内に拡張平面を生成し、この平面から共面点クラスターを抽出する(ステップS100)。つまり、共面点クラスター抽出部30は、いくつかの異なるサイズの拡張平面を生成し、生成した拡張平面毎に、各拡張平面の生成に係わる三次元点の集合を共面点クラスターとして抽出する。
次に、三次元データ生成装置100において、三次元平面抽出部40が、ステップS100で抽出された共面点クラスターを用いて、仮想三次元空間内に存在する平面の三次元データを抽出する(ステップS200)。つまり、平面抽出部40は、共面点クラスターに基づき、任意形状を有し、且つ、サイズが異なる平面を生成する。
そして、三次元データ生成装置100においては、三次元平面修正部50が、ステップS200で抽出された平面の三次元データに対して修正を実行する(ステップS300)。つまり、三次元平面修正部50が、三次元平面抽出部40によって抽出された平面の三次元データを修正する。
[共面点クラスター抽出処理]
続いて、図8に示したステップS100〜S300の詳細を図9〜図17を参照して説明する。まず、図9を参照して、図8に示した共面点クラスター抽出処理(ステップS100)について説明する。図9は、図8に示した共面点クラスター抽出処理を具体的に示すフロー図である。
図9に示すように、まず、共面点クラスター抽出部30は、視差データ生成部10からの視差データの入力を受け付ける(ステップS101)。
次に、共面点クラスター抽出部30は、処理パラメータ記憶部21に記憶されているカメラ関連の係数及び撮影時の状況を示す係数を取得し、これらを利用して、視差データに基づいて、三次元空間における三次元点の座標を計算する。そして、共面点クラスター抽出部30は、計算によって得られた三次元座標を用いて、単一視差面を生成する(ステップS102)。
次に、共面点クラスター抽出部30は、マージ対象となる単一視差面間の視差変化ペース、つまり、空間的に隣り合う2つの単一視差面間の視差値の差tを、初期値である「1」に設定する(ステップS103)。
次に、共面点クラスター抽出部30は、現在のtの値が、予め設定された「単一視差面間の視差値の差の最大許容値」より小さいかどうかを判定する(ステップS104)。ステップS104の判定の結果、現在のtの値が最大許容値より小さくない場合は(ステップS104;No)、共面点クラスター抽出部30は、ステップS111を実行する。
一方、ステップS104の判定の結果、現在のtの値が最大許容値より小さい場合(ステップS104;Yes)は、共面点クラスター抽出部30は、マージ対象となる単一視差面を抽出する(ステップS105)。
次に、共面点クラスター抽出部30は、ステップS105で抽出された、空間的に隣り合い、且つ、マージ条件を満たす、単一視差面をマージして第1マージ面を生成する(ステップS106)。続いて、共面点クラスター抽出部30は、第1マージ面の結合条件を満たす第1マージ面同士をマージして第2マージ面を生成する(ステップS107)。
次に、共面点クラスター抽出部30は、未だマージされていない第1マージ面、及び未だマージされていない単一視差面を特定する。そして、共面点クラスター抽出部30は、特定した第1マージ面及び第一視差面のうち、ステップS107で抽出した各第2マージ面と同じ実在の平面に属しているものを、この第2マージ面にマージして、拡張平面を生成する(ステップS108)。
次に、共面点クラスター抽出部30は、未だマージされていない単一視差面が存在しているかどうか判定する(ステップS109)。ステップS109の判定の結果、未だマージされていない単一視差面が存在している場合(ステップS109;Yes)は、共面点クラスター抽出部30は、tの値を所定値分(例えば1ピクセル)増加させる(ステップS110)。その後、共面点クラスター抽出部30は、再度ステップS104を実行する。
一方、ステップS109の判定の結果、未だマージされていない単一視差面が存在していない場合(ステップS109;No)は、共面点クラスター抽出部30は、ステップS111を実行する。
ステップS111では、共面点クラスター抽出部30は、生成した全ての拡張平面それぞれ毎に、拡張平面に係わっている全ての三次元点を共面点クラスターとして抽出する。これにより、共面点クラスターの抽出処理が終了し、その後、ステップS200が実行される。
第1マージ面生成処理:
ここで、図10を参照して、上述したステップS106における第1マージ面の生成処理について説明する。図10は、図9に示した第1マージ面生成処理をより具体的に示すフロー図である。
図10に示すように、共面点クラスター抽出部30は、まず、ステップS105で抽出された全ての単一視差面に対して、その奥行きの値(Z値)に基づいて、順位を設定する(ステップS106−1)。
次に、共面点クラスター抽出部30は、未処理面数Sの初期値を、現在の未処理の単一視差面の数に設定する(ステップS106−2)。次に、共面点クラスター抽出部30は、未処理面数Sの値が1より小さいかどうかを判定する(ステップS106−3)。
ステップS106−3の判定の結果、未処理面数Sの値が1より小さい場合(ステップS106−3;Yes)は、共面点クラスター抽出部30は、ステップS106を終了し、続いて、ステップS107を実行する。
一方、ステップS106−3の判定の結果、未処理面数Sの値が1より小さくない場合(ステップS106−3;No)は、共面点クラスター抽出部30は、マージ対象となる単一視差面のうち最も奥行きの値が大きい単一視差面を選択する(ステップS106−4)。
次に、共面点クラスター抽出部30は、マージ対象となる単一視差面の中から、選択された単一視差面とマージできる(マージ条件を満たす)未処理の単一視差面が存在しているかどうかを判定する(ステップS106−5)。
ステップS106−5の判定の結果、マージできる未処理の単一視差面が存在する場合(ステップS106−5;Yes)は、共面点クラスター抽出部30は、選択された単一視差面とマージ条件を満たす単一視差面とを一つずつマージする(ステップS106−6)。
次に、共面点クラスター抽出部30は、マージ完了後に、選択された単一視差面の状態を第1マージ面に設定し、この単一視差面にマージされた単一視差面を削除する(ステップS106−8)。
次に、共面点クラスター抽出部30は、未処理面数Sの値から、1を減算すると共に、削除した単一視差面の数も減算し(ステップS106−9)、その後、再度ステップS106−3を実行する。
また、ステップS106−5の判定の結果、マージできる未処理の単一視差面が存在しない場合(ステップS106−5;No)は、共面点クラスター抽出部30は、選択された単一視差面の状態を、「未マージの単一視差面」に設定する(ステップS106−7)。次に、共面点クラスター抽出部30は、未処理面数Sの値から1を減算し(ステップS106−10)、その後、再度ステップS106−3を実行する。
このように、ステップS106では、マージ対象となる単一視差面の数(未処理面数S)の値が、1より小さくなるまで、ステップS106−3からS106−10までが繰り返し実行され、第1マージ面が生成される。また、ステップS106−4では、順に奥行きの値が小さい単一視差面が選択される。その後、S107において、共面点クラスター抽出部30は、生成された第1マージ面を用いて第2マージ面を生成する。
第2マージ面生成処理:
続いて、図11を参照して、上述したステップS107における第2マージ面の生成処理について説明する。図11は、図9に示した第2マージ面生成処理をより具体的に示すフロー図である。
図11に示すように、共面点クラスター抽出部30は、まず、ステップS106で生成された全ての第1マージ面に対して、その対応する奥行きの値(Z値)に基づいて、順位を設定する(ステップS107−1)。
次に、共面点クラスター抽出部30は、未処理面数Uの初期値を、現在の未処理の第1マージ面の数に設定する(ステップS107−2)。次に、共面点クラスター抽出部30は、未処理面数Uの値が1より小さいかどうかを判定する(ステップS107−3)。
ステップS107−3の判定の結果、未処理面数Uの値が1より小さくない場合(ステップS107−3;No)は、共面点クラスター抽出部30は、マージ対象となる第1マージ面のうち最も奥行きの値が大きいマージ面を選択する(ステップS107−4)。なお、ステップS107で選択された第1マージ面を、以下においては「第1マージ面P」と表記する。
次に、共面点クラスター抽出部30は、第1マージ面Pとマージできる全ての第1マージ面を特定するため、マージ可能な全ての第1マージ面の集合を示す行列Rを作成する(ステップS107−5)。また、行列Rにおいて、エレメントR(m)〜エレメントR(n)は第1マージ面である。また、共面点クラスター抽出部30は、初期設定では、行列の頭を示すmの値を「0」に設定し、行列の尾を示すnの値を「1」に設定し、更に、行列Rに含まれるエレメントR(0)を第1マージ面Pのみに設定する。
次に、共面点クラスター抽出部30は、行列内における未確認のエレメントの存在を特定するため、mの値がnの値より小さいかどうかを判定する(ステップS107−6)。
ステップS107−6の判定の結果、mの値がnの値より小さい場合(ステップS107−6;Yes)は、行列内に未確認のエレメントが存在する。よって、共面点クラスター抽出部30は、現在のエレメントR(m)と結合できる未処理の第1マージ面が存在するかどうかを判定する(ステップS107−7)。
ステップS107−7の判定の結果、エレメントR(m)と結合できる第1マージ面が存在しない場合(ステップS107−7;No)は、共面点クラスター抽出部30は、現在のエレメントR(m)の処理を完了し、mの値をインクリメントする(ステップS107−8)。その後、共面点クラスター抽出部30は、現在の行列内の状態を確認するため、再度ステップS107−6を実行する。
一方、ステップS107−7の判定の結果、エレメントR(m)と結合できる第1マージ面が存在する場合(ステップS107−7;Yes)は、エレメントR(m)とその第1マージ面とをマージする(ステップS107−9)。なお、このときマージされる第1結合面を以下「第1マージ面Q」と表記する。
次に、共面点クラスター抽出部30は、第1マージ面Qを行列Rに格納するため、これをエレメントR(n)設定する(ステップS107−10)。そして、共面点クラスター抽出部30は、次のエレメントを格納するため、nの値をインクリメントする(ステップS107−11)。次に、共面点クラスター抽出部30は、エレメントR(m)と結合できる他の第1マージ面が存在しているかどうかを判定するため、再度、ステップS107−7を実行する。
また、上述のステップS107−6の判定の結果、mの値がnの値より小さくない場合(ステップS107−6;No)は、共面点クラスター抽出部30は、行列のエレメントの数を表わすnの値が「1」であるかどうかを判定する(ステップS107−12)。
ステップS107−12の判定の結果、nの値が「1」である場合(ステップS107−12;Yes)は、行列Rのエレメントは第1マージ面Pのみとなる。よって、第1マージ面Pと結合できる第1マージ面は存在していないので、共面点クラスター抽出部30は、第1マージ面P(エレメントR(0))の状態を、「未マージの第1マージ面」に設定する(ステップS107−14)。
一方、ステップS107−12の判定の結果、nの値が「1」でない場合(ステップS107−12;No)は、行列Rのエレメントは第1マージ面Pのみではなく、第1マージ面Pと結合できる、エレメントR(1)からR(n−1)までの第1マージ面が存在する。従って、共面点クラスター抽出部30は、行列Rを構成するエレメントR(0)〜R(N−1)をマージして、第2マージ面を生成し、マージ後の第1マージ面P(面R(0))の状態を第2マージ面に設定する(ステップS107−13)。また、このとき、共面点クラスター抽出部30は、結合されたエレメントR(1)からR(n−1)までを削除する。
ステップS107−13又はS107−14が実行されると、第1マージ面Pについての処理は完了するので、共面点クラスター抽出部30は、次の未処理の第1マージ面の処理を実行するため、現在残る未処理の第1マージ面の数をU−nにアップデートする(ステップS107−15)。その後、共面点クラスター抽出部30は、再度、ステップS107−3を実行する。
また、上述のステップS107−3の判定の結果、未処理面数Uの値が1より小さい場合(ステップS107−3;Yes)は、共面点クラスター抽出部30は、ステップS107を終了する。その後、ステップS108において、共面点クラスター抽出部30は、生成した第2マージ面を用いて拡張平面を生成する。
拡張平面生成処理:
次に、図12を参照して、上述したステップS108における拡張平面生成の処理について説明する。図12は、図9に示した拡張平面生成処理をより具体的に示すフロー図である。
図12に示すように、共面点クラスター抽出部30は、まず、ステップS107で生成された全ての第2マージ面に対して、その対応する奥行きの値(Z値)に基づいて順位を設定する(ステップS108−1)。
次に、共面点クラスター抽出部30は、未処理面数Mの初期値を、全ての第2マージ面の数に設定する(ステップS108−2)。また、共面点クラスター抽出部30は、第1マージ面の生成処理(ステップS106)で残った「未マージの単一視差面」の数Gと、第2マージ面の生成処理(ステップS107)で残った「未マージの第1マージ面」の数Hとを取得する(ステップS108−2)。
次に、共面点クラスター抽出部30は、未処理面数Mの値が1より小さいかどうかを判定する(ステップS108−3)。ステップs108−3の判定の結果、未処理面数Mの値が1より小さい場合(ステップS108−3;Yes)は、未処理の第2マージ面は一つも残っていない状況である。よって、共面点クラスター抽出部30は、全ての第2マージ面の処理の後に、未マージの単一視差面と未マージの第1マージ面との処理を実行し(ステップS108−12)、その後、拡張平面の生成処理を終了する。ステップS108−12については後述する。
一方、ステップS108−3の判定の結果、未処理面数Mの値が1より小さくない場合(ステップS108−3;No)は、共面点クラスター抽出部30は、マージ対象となる第2マージ面のうち最も奥行きの値が大きい第2マージ面を選択する(ステップS108−4)。
次に、共面点クラスター抽出部30は、そして、現在の未マージの単一視差面の数Gと、未マージの第1マージ面の数Hとが、共に「0」であるかどうかを判定する(ステップS108−5)。
ステップS108−5の判定の結果、G及びHの両方が「0」となっている場合(ステップS108−5;Yes)は、第2マージ面への結合対象となる単一視差面及び第1マージ面は存在しない。よって、共面点クラスター抽出部30は、ステップS108−4で選択された第2マージ面の状態を拡張平面に設定する(ステップS108−10)。また共面点クラスター抽出部30は、未処理面数Mの値を1減らし(ステップS108−11)、その後、次の第2マージ面を対象として、再度ステップS108−3を実行する。
一方、ステップS108−5の判定の結果、G及びHの両方が「0」となっていない場合(ステップS108−5;No)は、共面点クラスター抽出部30は、未マージの単一視差面及び第1マージ面の中に、選択された第2マージ面と結合の条件を満たす面が存在するかどうかを判定する(ステップS108−6)。
ステップS108−6の判定の結果、結合の条件を満たす面が存在しない場合(ステップS109−6;No)は、共面点クラスター抽出部30は、上述したステップS108−10及びS108−11を実行する。
一方、ステップS108−6の判定の結果、結合の条件を満たす面が存在する場合(ステップS108−6;Yes)は、共面点クラスター抽出部30は、選択された第2マージ面に、条件を満たす単一視差面又は第1マージ面を一つずつ結合する(ステップS108−7)。更に、共面点クラスター抽出部30は、結合された未マージの単一視差面及び第1マージ面を削除する(ステップS108−8)。
次に、共面点クラスター抽出部30は、Gの値を、現在残っている未マージの単一視差面の数に更新し、更に、Hの値を、現在残っている未マージの第1マージ面の数に更新する(ステップS108−9)。その後、共面点クラスター抽出部30は、上述したステップS108−10及びS108−11を実行する。
ここで、図13を参照して、上述したステップS108−12における未マージの単一視差面及び未マージの第1マージ面の処理について説明する。図13は、図12に示した未マージの単一視差面及び第1マージ面の処理をより具体的に示すフロー図である。
図13に示すように、共面点クラスター抽出部30は、判定条件「残っている未マージの単一視差面(処理対象となる単一視差面)の数Gが0である」に該当するかどうかを判定する(ステップS108−12−1)。
ステップS108−12−1の判定の結果、判定条件に該当する場合(ステップS108−12−1;Yes)は、共面点クラスター抽出部30は、後述するステップS108−12−7を実行する。これは、処理対象となる単一視差面の数Gが0である場合は、単一視差面についてマージ処理を行なう必要がないからである。
一方、ステップS108−12−1の判定の結果、判定条件に該当しない場合(ステップS108−12−1;No)は、共面点クラスター抽出部30は、処理対象となる単一視差面のいずれか一つを選択する。そして、共面点クラスター抽出部30は、選択した単一視差面の面積が、処理パラメータ記憶部21に予め記憶されている面積の閾値より大きいかどうかを判定する(ステップS108−12−2)。
ステップS108−12−2の判定の結果、選択された単一視差面の面積が閾値より大きい場合(ステップS108−12−2;Yes)は、共面点クラスター抽出部30は、選択された単一視差面をそのまま残す。(ステップS108−12−3)。
一方、ステップS108−12−2の判定の結果、選択された単一視差面の面積が閾値より大きくない場合(ステップS108−12−2;No)は、共面点クラスター抽出部30は、選択された単一視差面を削除する(ステップS108−12−4)。
そして、ステップS108−12−3及びS108−12−4のいずれかが実行されると、共面点クラスター抽出部30は、処理対象となっている全ての単一視差面について処理が終了したかどうかを判定する(ステップS108−12−5)。
ステップS108−12−5の判定の結果、処理対象となっている全ての単一視差面について処理が終了していない場合(ステップS108−12−5;No)は、共面点クラスター抽出部30は、処理対象となる単一視差面の中から次の未処理の単一視差面を選択し(ステップS108−12−6)、再度ステップS108−12−6を実行する。
一方、ステップS108−12−5の判定の結果、処理対象となっている全ての単一視差面について処理が終了している場合(ステップS108−12−5;Yes)は、共面点クラスター抽出部30は、ステップS108−12−7を実行する。
ステップS108−12−7では、ステップS108−12−7は、未マージの第1マージ面を処理するため、まず、残っている未マージの第1マージ面(処理対象となる第1マージ面)の数Hが0(ゼロ)であるかどうかを判定する(ステップS108−12−7)。
ステップS108−12−7の判定の結果、Hが0(ゼロ)である場合(ステップS108−12−7;Yes)は、共面点クラスター抽出部30は、ステップS108−12における処理を終了する。
一方、ステップS108−12−7の判定の結果、Hが0(ゼロ)でない場合(ステップS108−12−7;No)は、共面点クラスター抽出部30は、処理対象となる第1マージ面のいずれか一つを選択する。そして、共面点クラスター抽出部30は、選択した第1マージ面の面積が予め設定された閾値より大きいかどうかを判定する(ステップS108−12−8)。
ステップS108−12−8の判定の結果、選択された第1マージ面の面積が予め設定された閾値より大きい場合(ステップS108−12−8;Yes)は、共面点クラスター抽出部30は、選択された第1マージ面の状態を拡張平面に設定する(ステップS108−12−9)。
一方、ステップS108−12−8の判定の結果、選択された第1マージ面の面積が予め設定された閾値より大きくない場合(ステップS108−12−8;No)は、共面点クラスター抽出部30は、選択された第1マージ面を削除する(ステップS108−12−10)。
そして、ステップS108−12−9及びS108−12−10のいずれかが実行されると、共面点クラスター抽出部30は、処理対象となっている全ての第1マージ面について処理が終了したかどうかを判定する(ステップS108−12−11)。
ステップS108−12−11の判定の結果、処理対象となっている全ての第1マージ面について処理が終了していない場合(ステップS108−12−11;No)は、共面点クラスター抽出部30は、処理対象となる第1マージ面の中から次の未処理の第1マージ面を選択し(ステップS108−12−12)、再度、ステップS108−12−8を実行する。
一方、ステップS108−12−11の判定の結果、処理対象となっている全ての第1マージ面について処理が終了している場合(ステップS108−12−11;Yes)は、共面点クラスター抽出部30は、上述したステップS109を実行する。
[三次元平面抽出処理]
続いて、図14を参照して、図8に示した三次元平面抽出処理(ステップS200)について説明する。図14は、図8に示した三次元平面抽出処理を具体的に示すフロー図である。
図14に示すように、三次元平面抽出部40は、まず、ステップS100で抽出された共面点クラスター毎に、各共面点クラスターに属している全ての三次元点の三次元情報(三次元座標)を取得する(ステップS201)。
次に、三次元平面抽出部40は、一つの共面点クラスターを選択し、選択した共面点クラスターについて、取得された三次元情報を用いて、これらの点が属している三次元平面の式における係数を計算する(ステップS202)。そして、三次元平面抽出部40は、全ての共面点クラスターについて処理が終了しているかどうかを判定する(ステップS203)。
ステップS203の判定の結果、全ての共面点クラスターについて処理が終了していない場合(ステップS203;No)は、三次元平面抽出部40は、次の未処理の共面点クラスターを選択し(ステップS204)、再度ステップS202を実行する。一方、ステップS203の判定の結果、全ての共面点クラスターについて処理が終了している場合(ステップS203;Yes)は、三次元平面抽出部40は、ステップS200の処理を終了する。
[三次元平面修正処理]
続いて、図15を参照して、図8に示した三次元平面修正処理(ステップS300)について説明する。図15は、図8に示した三次元平面修正処理を具体的に示すフロー図である。
図15に示すように、まず、三次元平面修正部50は、ステップS200で取得された仮想三次元空間における三次元平面の一つを選択し、選択した三次元平面に対してサンプリングを行なって、ランダムにサンプル点(三次元点)を抽出する(ステップS301)。
次に、三次元平面修正部50は、ステップS301で抽出したサンプル点に基づいて、三次元平面を表わす式の係数を修正する(ステップS302)。
その後、三次元平面修正部50は、全ての三次元平面について処理が終了しているかどうかを判定する(ステップS303)。ステップS303の判定の結果、全ての三次元平面について処理が終了していない場合(ステップS303;No)は、三次元平面修正部50は、次の未処理の三次元平面を選択し(ステップS304)、再度ステップS301を実行する。一方、ステップS303の判定の結果、全ての三次元平面について処理が終了している場合(ステップS303;Yes)は、三次元平面修正部50における処理は終了する。
サンプル点の抽出処理:
ここで、図16を参照して、上述したステップS302における三次元平面からのサンプル点の抽出処理について説明する。図16は、図15に示した三次元平面からのサンプル点の抽出処理をより具体的に示すフロー図である。
図16に示すように、まず、三次元平面修正部50は、処理パラメータ記憶部21に予め記憶されている比例値に基づいて、三次元平面を分割する際に用いるステップ値を計算する(ステップS301−1)。
次に、三次元平面修正部50は、分割によって得られる各分割領域のうちの信用度が低い分割領域の数Nについて、初期値を「0」に設定する(ステップS301−2)。
次に、三次元平面修正部50は、一つの分割領域を選択し、選択した分割領域の全範囲の信用度が低いかどうかを判定する(ステップS301−3)。ステップS301−3の判定の結果、全範囲の信用度が低い場合(ステップS301−3;Yes)は、三次元平面修正部50は、Nの値を1増加し(ステップS301−4)、その後、ステップS301−8を実行する。
一方、ステップS301−3の判定の結果、全範囲の信用度が低くない場合(ステップS301−3;No)は、三次元平面修正部50は、選択した分割領域を信用度が高い分割領域に設定する(ステップS301−5)。そして、三次元平面修正部50は、選択した分割領域から、ランダムに1点のサンプル点を抽出する(ステップS301−6)。
次に、三次元平面修正部50は、抽出したサンプル点が高信用度点かどうかを判定する(ステップS301−7)。ステップS301−7の判定の結果、抽出したサンプル点が高信用度点でない場合(ステップS301−7;No)は、三次元平面修正部50は、再度、ステップS301−6を実行する。三次元平面修正部50は、高信用度のサンプル点が抽出されるまで、ステップS301−6〜S301−7を繰り返し実行する。
一方、ステップS301−7の判定の結果、抽出したサンプル点が高信用度点である場合(ステップS301−7;Yes)は、三次元平面修正部50は、全ての分割領域について処理が終了したかどうかを判定する(ステップS301−8)。
ステップS301−8の判定の結果、全ての分割領域について処理が終了していない場合(ステップS301−8;No)は、三次元平面修正部50は、次の未処理の分割領域を選択する(ステップS301−9)。その後、三次元平面修正部50は、再度ステップS301−3を実行する。
一方、ステップS301−8の判定の結果、全ての分割領域について処理が終了している場合(ステップS301−8;Yes)は、三次元平面修正部50は、全範囲の信用度が低い分割領域が存在していたかどうか、即ち、Nの値が0より大きいかどうかを判定する(ステップS301−10)。
ステップS301−10の判定の結果、Nの値が0より大きい場合(ステップS301−10;Yes)は、三次元平面修正部50は、N個のサンプル点を新たに抽出する必要があるので、信用度が高いと設定された分割領域の中から、ランダムに一つの分割領域を選択し、そして、選択した分割領域からランダムに1点のサンプル点を抽出する(ステップS301−11)。
次に、三次元平面修正部50は、判定条件「ステップS301−11で抽出したサンプル点の信用度が低い」及び「ステップS301−11で抽出したサンプル点が既に抽出されている高信用度点と同一」のいずれかに該当するかどうかを判定する(ステップS301−12)。
ステップS301−12の判定の結果、いずれかの判定条件に該当する場合(ステップS301−12;Yes)は、再度ステップS301−11を実行する。三次元平面修正部50は、ステップS301−11で選択した分割領域から既に抽出した高信用度点と異なる高信用度点を取得できるまで、ステップS301−11を繰り返し実行することになる。
一方、ステップS301−12の判定の結果、いずれかの条件に該当しない場合(ステップS301−12;No)は、三次元平面修正部50は、Nの値を1減算し(ステップS301−13)、その後、再度ステップS301−10を実行する。
また、上述のステップS301−10の判定の結果、Nの値が0より大きくない場合(ステップS301−10;No)は、三次元平面修正部50は、ステップS301の処理を終了する。
三次元平面修正処理:
ここで、図17を参照して、上述したステップS302における抽出サンプル点に基づいた三次元平面の修正処理について説明する。図17は、図15に示した抽出サンプル点に基づいた三次元平面の修正処理をより具体的に示すフロー図である。
図17に示すように、三次元平面修正部50は、ステップS301で抽出された各サンプル点(三次元点)の三次元座標を用いて、各サンプル点から三次元平面までの距離を計算し(ステップS302−1)、各サンプル点について計算した距離に基づいて、三次元平面の向き及び位置を修正する(ステップS302−2)。以上の処理により、三次元平面修正部50は、ステップS302の処理を終了する。
以上のように、本実施の形態における、図8〜図17に示した三次元データ生成処理を行なえば、ステレオ画像に対して、仮想三次元空間上の平面分析等を行なうことができる。そして、この分析結果に基づいて、実際の世界に存在する任意形状の境界線を有し、且つ、サイズが異なる平面を特定できる。
[プログラム]
本発明の実施の形態におけるプログラムは、コンピュータに、図8〜図17に示した各ステップを実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における三次元データ生成装置100と三次元データ生成方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、視差データ生成部10、共面点クラスター抽出部30、三次元平面抽出部40及び三次元平面修正部50として機能し、処理を行なう。
ここで、本実施の形態におけるプログラムを実行することによって、三次元データ生成装置を実現するコンピュータについて図18を用いて説明する。図18は、本発明の実施の形態における三次元データ生成装置を実現するコンピュータの一例を示すブロック図である。
図18に示すように、コンピュータ110は、CPU111と、メインメモリ112と、記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。
CPU111は、記憶装置113に格納された、本実施の形態におけるプログラム(コード)をメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。
また、記憶装置113の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。
データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
また、記録媒体120の具体例としては、CF(Compact Flash(登録商標))及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記憶媒体、又はCD−ROM(Compact Disk Read Only Memory)などの光学記憶媒体が挙げられる。
また、本実施の形態における三次元データ生成装置100は、上述の視差データ生成部10、共面点クラスター抽出部30、三次元平面抽出部40及び三次元平面修正部50として機能する電子回路によって構成されていても良い。この場合、三次元データ生成装置100は、この電子回路が組み込まれたLSI(Large Scale Integration)などのハードウェア部品として提供される。
上述した実施の形態の一部又は全部は、以下に記載する(付記1)〜(付記15)によって表現することができるが、以下の記載に限定されるものではない。
(付記1)
異なる角度から同一対象を撮影して得られた2つの二次元画像を用いて三次元データを生成する装置であって、
前記2つの二次元画像上の対応点ペアから取得された視差データに基づいて、仮想三次元空間内に三次元点を生成し、更に、生成された三次元点によって構成される単一視差面のうち、隣接する前記単一視差面同士を結合することによって、実空間の平面に属する三次元点の集合を特定し、これらを共面点クラスターとして抽出する、共面点クラスター抽出部と、
前記共面点クラスター抽出部によって抽出された共面点クラスターを用いて、各共面クラスターから、前記実空間の平面を表現する三次元データを抽出する、三次元平面抽出部と、
前記三次元平面抽出部による前記三次元データの抽出に用いられた前記共面点クラスターに対してサンプリングを実行し、サンプリングによって得られた三次元点を用いて、前記三次元データを修正する、三次元平面修正部と、
を備えていることを特徴とする三次元データ生成装置。
(付記2)
前記視差データが、前記2つの二次元画像上の対応点ペア毎に算出された視差値を含み、
前記共面点クラスター抽出部が、まず、隣り合う単一視差面を、それぞれにおける視差値及び面積を制限する条件下で結合して第1マージ面を生成し、続いて、隣り合う第1マージ面を、第1マージ面間の位置関係を制限する条件下で結合して第2マージ面を生成し、更に、第2マージ面に、いずれにも結合されていない前記単一視差面及び前記第1マージ面を、位置関係及び面積を制限する条件下で結合して拡張平面を生成し、そして、生成した前記拡張平面毎に、その生成に係わった三次元点の集合を、一つの共面点クラスターとして抽出する、
付記1に記載の三次元データ生成装置。
(付記3)
前記共面点クラスター抽出部が、前記第2マージ面の生成後に、いずれにも結合されていない単一視差面、及び他の第1マージ面に結合されていない第1マージ面を特定し、特定された前記単一視差面及び前記第1マージ面と、生成された前記第2マージ面とが、実空間の同じ平面に属していることを条件に、これらを結合することによって、前記拡張平面を生成する、
付記2記載の三次元データ生成装置。
(付記4)
隣り合う前記単一視差面それぞれにおける前記視差値を制限する条件下として、両者の視差値の差が一定値であることが用いられ、そして、前記一定値が、予め定められた最大値まで段階的に設定されている場合において、
前記共面点クラスター抽出部が、段階的に設定された前記一定値毎に、前記第1マージ面の生成、前記第2マージ面の生成、及び前記拡張平面の生成を実行する、
付記2または3に記載の三次元データ生成装置。
(付記5)
前記三次元平面修正部が、
抽出された前記三次元データによって構築される平面を分割し、分割された部分毎に、当該部分に存在する前記三次元点をランダムに抽出し、抽出した前記三次元点を用いて、前記三次元データが表現する前記実空間の平面の向き及び位置を修正することによって、前記三次元平面を修正する、
付記1〜4のいずれかに記載の三次元データ生成装置。
(付記6)
異なる角度から同一対象を撮影して得られた2つの二次元画像を用いて三次元データを生成するための方法であって、
(a)前記2つの二次元画像上の対応点ペアから取得された視差データに基づいて、仮想三次元空間内に三次元点を生成し、更に、生成された三次元点によって構成される単一視差面のうち、隣接する前記単一視差面同士を結合することによって、実空間の平面に属する三次元点の集合を特定し、これらを共面点クラスターとして抽出する、ステップと、
(b)前記(a)のステップによって抽出された共面点クラスターを用いて、各共面クラスターから、前記実空間の平面を表現する三次元データを抽出する、ステップと、
(c)前記(b)のステップによる前記三次元データの抽出に用いられた前記共面点クラスターに対してサンプリングを実行し、サンプリングによって得られた三次元点を用いて、前記三次元データを修正する、ステップと、
を有することを特徴とする三次元データ生成方法。
(付記7)
前記視差データが、前記2つの二次元画像上の対応点ペア毎に算出された視差値を含み、
前記(a)のステップにおいて、まず、隣り合う単一視差面を、それぞれにおける視差値及び面積を制限する条件下で結合して第1マージ面を生成し、続いて、隣り合う第1マージ面を、第1マージ面間の位置関係を制限する条件下で結合して第2マージ面を生成し、更に、第2マージ面に、いずれにも結合されていない前記単一視差面及び前記第1マージ面を、位置関係及び面積を制限する条件下で結合して拡張平面を生成し、そして、生成した前記拡張平面毎に、その生成に係わった三次元点の集合を、一つの共面点クラスターとして抽出する、
付記6に記載の三次元データ生成方法。
(付記8)
前記(a)のステップにおいて、前記第2マージ面の生成後に、いずれにも結合されていない単一視差面、及び他の第1マージ面に結合されていない第1マージ面を特定し、特定された前記単一視差面及び前記第1マージ面と、生成された前記第2マージ面とが、実空間の同じ平面に属していることを条件に、これらを結合することによって、前記拡張平面を生成する、
付記7記載の三次元データ生成方法。
(付記9)
隣り合う前記単一視差面それぞれにおける前記視差値を制限する条件下として、両者の視差値の差が一定値であることが用いられ、そして、前記一定値が、予め定められた最大値まで段階的に設定されている場合に、
前記(a)のステップにおいて、段階的に設定された前記一定値毎に、前記第1マージ面の生成、前記第2マージ面の生成、及び前記拡張平面の生成を実行する、
付記7または8に記載の三次元データ生成方法。
(付記10)
前記(c)のステップにおいて、
前記(b)のステップで抽出された前記三次元データによって構築される平面を分割し、分割された部分毎に、当該部分に存在する前記三次元点をランダムに抽出し、抽出した前記三次元点を用いて、前記三次元データが表現する前記実空間の平面の向き及び位置を修正することによって、前記三次元平面を修正する、
付記6〜9のいずれかに記載の三次元データ生成方法。
(付記11)
コンピュータによって、異なる角度から同一対象を撮影して得られた2つの二次元画像を用いて三次元データを生成するためのプログラムであって、
前記コンピュータに、
(a)前記2つの二次元画像上の対応点ペアから取得された視差データに基づいて、仮想三次元空間内に三次元点を生成し、更に、生成された三次元点によって構成される単一視差面のうち、隣接する前記単一視差面同士を結合することによって、実空間の平面に属する三次元点の集合を特定し、これらを共面点クラスターとして抽出する、ステップと、
(b)前記(a)のステップによって抽出された共面点クラスターを用いて、各共面クラスターから、前記実空間の平面を表現する三次元データを抽出する、ステップと、
(c)前記(b)のステップによる前記三次元データの抽出に用いられた前記共面点クラスターに対してサンプリングを実行し、サンプリングによって得られた三次元点を用いて、前記三次元データを修正する、ステップと、
を実行させるプログラム。
(付記12)
前記視差データが、前記2つの二次元画像上の対応点ペア毎に算出された視差値を含み、
前記(a)のステップにおいて、まず、隣り合う単一視差面を、それぞれにおける視差値及び面積を制限する条件下で結合して第1マージ面を生成し、続いて、隣り合う第1マージ面を、第1マージ面間の位置関係を制限する条件下で結合して第2マージ面を生成し、更に、第2マージ面に、いずれにも結合されていない前記単一視差面及び前記第1マージ面を、位置関係及び面積を制限する条件下で結合して拡張平面を生成し、そして、生成した前記拡張平面毎に、その生成に係わった三次元点の集合を、一つの共面点クラスターとして抽出する、
付記11に記載のプログラム。
(付記13)
前記(a)のステップにおいて、前記第2マージ面の生成後に、いずれにも結合されていない単一視差面、及び他の第1マージ面に結合されていない第1マージ面を特定し、特定された前記単一視差面及び前記第1マージ面と、生成された前記第2マージ面とが、実空間の同じ平面に属していることを条件に、これらを結合することによって、前記拡張平面を生成する、
付記12記載のプログラム。
(付記14)
隣り合う前記単一視差面それぞれにおける前記視差値を制限する条件下として、両者の視差値の差が一定値であることが用いられ、そして、前記一定値が、予め定められた最大値まで段階的に設定されている場合に、
前記(a)のステップにおいて、段階的に設定された前記一定値毎に、前記第1マージ面の生成、前記第2マージ面の生成、及び前記拡張平面の生成を実行する、
付記12または13に記載のプログラム。
(付記15)
前記(c)のステップにおいて、
前記(b)のステップで抽出された前記三次元データによって構築される平面を分割し、分割された部分毎に、当該部分に存在する前記三次元点をランダムに抽出し、抽出した前記三次元点を用いて、前記三次元データが表現する前記実空間の平面の向き及び位置を修正することによって、前記三次元平面を修正する、
付記11〜14のいずれかに記載のプログラム。