以下、本発明の最良の実施形態について添付図面を参照しつつ説明する。
<実施形態>
本発明の実施形態に係る撮影装置100は、デジタルカメラであり、図1(a)に示すような、携帯可能な所謂コンパクトカメラの形状を模している。撮影装置100は、図2(a)に示すように撮影位置を変更され、変更されたそれぞれの撮影位置で被写体(つまり、撮影対象物)を複数回に亘って撮影する。撮影装置100は、それぞれの撮影位置で取得したそれぞれの撮影画像に基づいて、図2(b)から図2(d)に示すような被写体の三次元モデルを複数生成し、生成した複数の三次元モデルを合成する。その後、撮影装置100は、合成された三次元モデルに基づいて三次元画像を生成する。
撮影装置100は、図1(a)に示すように、正面にストロボ発光窓101、並びに撮影レンズ102a及び102bを有する。ストロボ発光窓101は、必要に応じてキセノンフラッシュが発光したストロボ光を被写体に向けて照射する。
また、図1(b)に示すように、撮影装置100の背面には、液晶モニタ画面である表示部103、電源キー104p、3D(dimension)モデリングキー104d、及び操作キー105を有する。
表示部103は、ファインダーとして機能するLCD(Liquid Crystal Display)パネルを有する。また、表示部103のLCDパネルは、撮影装置100の操作に必要な種々の画面、撮影時のライブビュー画像、撮影装置100が撮影した画像(以下、撮影画像という)及び撮影画像に基づいて生成された三次元画像を表示する。さらに、LCDパネルの表示面は、透明なタッチパネルで覆われており、タッチパネルは、ユーザによるタッチ操作に応じた信号(例えば、タッチ位置の座標値を表す信号など)を出力する。
電源キー104pは、撮影装置100の電源がONである場合に長押しをされると、撮影装置100の電源をOFFにするように命じる信号を入力し、撮影装置100の電源がOFFである場合に押されると、撮影装置100の電源をONにするように命じる信号を入力する。
3Dモデリングキー104dは、トグル動作をし、押される度に通常の撮影を行う通常撮影モードと、三次元画像を生成する3D(Dimension)モデリングモードとの二者を択一に切り替える信号を入力する。
操作キー105は、十字キー及び決定キーを有する。十字キーは、撮影モードの切替時又は表示切替時に表示部103に表示されるアイコンを選択するユーザの選択操作に応じた信号を撮影装置100へ入力する。決定キーは、選択されたアイコンに対応付けられた命令(つまり、コマンド)を実行させることを決定するユーザの決定操作に応じた信号を撮影装置100へ入力する。
さらに、撮影装置100は、図1(c)に示すように、右側面に、USB(Universal Serial Bus)接続端子である外部インターフェース部(以下、外部I/F部という)106を有する。尚、外部I/F部106は、ビデオ出力端子であっても良い。また、撮影装置100は、図1(d)に示すように、上面に、シャッターボタン109を有する。
次に、撮影装置100の回路構成について説明する。
撮影装置100は、図3に示すような2つの撮影部110a及び110b、データ処理部120、及びインターフェース部130(以下単に、I/F部130という)で構成される。
撮影部110aと撮影部110bとは、平行ステレオとなるように配置されている。つまり、撮影部110aが有する図1(a)の撮影レンズ102aと、撮影部110bが有する撮影レンズ102bとは、撮影装置100の外面を構成する同一平面上に配置され、かつそれぞれの中心位置が、シャッターボタン109を上に向けた使用時における撮影装置100の水平方向の同一線上に位置するように配置されている。つまり、撮影部110aと撮影部110bとを同時に動作させて同一被写体を撮影すると、撮影部110aで取得された撮影画像における光軸位置と、撮影部110b取得された撮影画像における光軸位置とが撮影画像の横方向に互いにずれる。撮影部110aと撮影部110bとは、それぞれの光軸が平行で、かつそれぞれの画像座標系における座標軸が同一直線上で同一方向になる配置に固定されている(つまり、平行ステレオである)ためである。尚、撮影部110aの構成と撮影部110bの構成とは、それぞれ同様であるので、撮影部110bの説明を省略する。
撮影部110aは、光学装置111a及びイメージセンサ部112aで構成される。光学装置111aは、図1(a)の撮影レンズ102a、並びに不図示の絞り機構及びシャッター機構を有し、被写体の撮影に関する光学的動作を行う。この光学的動作は、撮影レンズ102aを用いて入射光を集光すると、焦点距離及び絞りを調節すると共にシャッタースピードを調整する動作をいう。つまり、光学的動作は、画角、ピント、及び露出といった光学的な要素を調整する動作である。尚、光学装置111aが有するシャッター機構はいわゆるメカニカルシャッターである。しかし、イメージセンサの動作によってシャッター動作を行う場合には、光学装置111aは、シャッター機構を有さなくても良い。
イメージセンサ部112aは、CCD(Charge Coupled Device:電荷結合素子)で構成される。イメージセンサ部112aは、光電変換を行うことで、光学装置111aによって集光された入射光に応じた電気信号を発生させると共に、発生させた電気信号をデータ処理部120に出力する。尚、イメージセンサ部112aは、CMOS(Complementary Metal Oxide Semiconductor:相補型金属酸化物半導体)で構成されても良い。
データ処理部120は、撮影部110a又は撮影部110bから出力された電気信号を処理することで、撮影部110a又は撮影部110bが撮影した撮影画像を表すデジタルデータを生成すると共に、生成したデータが表す撮影画像に対する画像処理を行う。尚、データ処理部120は、制御部121、記憶部122、外部記憶部123、画像処理部124、画像メモリ125、及び画像出力部126で構成される。
制御部121は、不図示のCPU(Central Processing Unit:中央演算処理部)及びRAM(Random Access Memory)で構成され、記憶部122に格納されたプログラムを実行することで、撮影装置100の各部を制御する。
記憶部122は、ROM(Read Only Memory)で構成され、制御部121が実行するプログラム及びプログラムの実行時に使用されるパラメーター及び演算式を表すデータを格納する。尚、記憶部122は、フラッシュメモリであっても良い。
外部記憶部123は、撮影装置100に着脱可能な記憶装置であるメモリカードで構成され、撮影画像を表す画像データ及び撮影画像に基づいて生成した三次元画像を表すデータ(以下、3Dモデリングデータという)を格納する。
画像処理部124は、不図示のADC(Analog‐Digital Converter:アナログ・デジタル変換器)、バッファメモリ、画像処理用のプロセッサ(いわゆる、画像処理エンジン)で構成される。画像処理部124は、イメージセンサ部112a又112bから出力されたアナログ電気信号をADCでデジタル信号に変換すると共に、変換したデジタル信号で表されるデータを順次バッファメモリに格納する。次に、画像処理部124は、バッファメモに格納したデジタルデータに対して、画像処理用のプロセッサが現像処理を行うことで、撮影画像の画質の調整及び画像データの圧縮を行う。
画像メモリ125は、画像処理部124によって生成された画像データ、及び制御部121によって処理される画像データを一時的に格納する。
画像出力部126は、RGB信号を生成する回路で構成され、画像メモリ125に展開された画像データをRGB信号に変換して表示部103及び外部I/F部106へ出力する。
I/F部130は、撮影装置100と、撮影装置100の使用者(つまり、ユーザ)又は撮影装置100と接続する外部装置とのインターフェースを提供する。尚、I/F部130は、図1(b)の表示部103、図1(c)の外部I/F部106、及び操作部131で構成される。操作部131は、図1の電源キー104p、3Dモデリングキー104d、操作キー105、及び表示部103の上に重ねて設置された不図示のタッチパネルとタッチパネルのコントローラとで構成される。
次に、撮影装置100が図3に示したハードウェアを用いて三次元画像を生成するために実行する三次元画像生成処理について説明を行う。図3の制御部121は、図4に示すような三次元画像生成処理を実行することで、図5(a)に示すような撮影制御部141、画像取得部142、モデル群更新部143、モデル群編集部144、三次元画像生成部145、及び三次元画像表示制御部146として機能する。
ユーザが図1(b)の3Dモデリングキー104dを操作して3Dモデリングモードを選択すると、制御部121は、3Dモデリングキー104dから出力される信号を検出して図4の三次元画像生成処理を開始する。三次元画像生成処理が開始されると、図5(a)の撮影制御部141は、三次元画像を生成するために撮影が行われた回数を計数する撮影回数カウンタの値を「1」として初期化する(ステップS01)。次に、撮影制御部141は、シャッターボタン109がユーザによって押し下げられたか否かを、シャッターボタン109から出力される信号に基づいて判別する(ステップS02)。
ステップS02において、シャッターボタン109が押し下げられなかったと判別すると(ステップS02;No)、撮影制御部141は、終了イベントが発生したか否かを判別する(ステップS03)。具体例としては、撮影制御部141は、例えば、シャッターボタン109が所定時間を超えて押し下げられる終了イベントが発生したか(つまり、長押しされたか)否かを、シャッターボタン109が出力する信号に基づいて判別する。このときに、終了イベントが発生したと判別すると(ステップS03;Yes)、撮影制御部141は、三次元画像生成処理の実行を終了する。これに対して、撮影制御部141は、終了イベントが発生しなかったと判別する場合には(ステップS03;No)、ステップS02に戻り上記処理を繰り返す。
ステップS02において、シャッターボタン109が押し下げられたと判別すると(ステップS02;Yes)、撮影制御部141は、被写体の撮影を行うように撮影部110aと撮影部110bとを制御する(ステップS04)。次に、画像取得部142は、撮影部110aと撮影部110bとから、それぞれの撮影画像を取得する(ステップS05)。尚、平行ステレオに配置された撮影部110aの撮影画像(以下、撮影画像Aという)と撮影部110bの撮影画像(以下、撮影画像Bという)との組み合わせをペア画像(又はステレオ画像)という。
次に、モデル群更新部143は、ステップS05で取得されたペア画像に基づいて被写体の三次元モデルを生成し、かつ前回までに生成された複数の三次元モデルで構成される三次元モデル群に対して、今回に生成された三次元モデルを追加することで、三次元モデル群を更新するモデル群更新処理を実行する(ステップS06)。尚、モデル群更新部143は、図5(b)に示すようなモデル生成部143a、撮影状態推定部143b、頂点座標値変換部143c、ノイズ除去部143d、及び頂点方向算出部143eで構成され、図6(a)に示すようなモデル群更新処理をこれらの構成を用いて実行する。
図6(a)のモデル群更新処理の実行を開始すると、モデル生成部143aは、図4のステップS05で取得されたペア画像に基づいて、撮影された被写体の三次元モデルを生成する(3Dモデリングともいう)(ステップS21)。尚、三次元モデルとは、被写体を表す複数の点の位置を表す三次元座標の座標値の集まりをいう。
一例として、モデル生成部143aは、非特許文献1「デジタル画像処理」の第259頁に開示された方法を用いてペア画像から三次元モデルを生成する。この方法は、図7に示すような撮影部110aと撮影部110bとの透視投影モデルに表されるように、以下の式(1)から(3)を用いて、被写体の三次元モデルを構成する点Mの座標値(Xm,Ym,Zm)を算出する方法である。
Xm=(b*u)/(u−u’)・・・(1)
Ym=(b*v)/(u−u’)・・・(2)
Zm=(b*f)/(u−u’)・・・(3)
尚、記号u及びvは、撮影画像Aに被写体上の点Mが表された位置maの座標値(u,v)を表し、記号u’及びv’は、撮影画像Bに点Mが表された位置mbの位置座標(u’,v’)を表す。また、記号bは、撮影部110aの主点Caと撮影部110bの主点Cbとの距離である基線長を表し、記号fは、撮影部110aの主点Caと焦点faとの焦点距離を表す。ここで、撮影部110aの構成と撮影部110bの構成とは同一であるため、焦点距離fは、撮影部110bの主点Cbと焦点fbとの距離に等しい。また、位置maを表す座標値(u,v)は、撮影部110aの投影面に投影された撮影画像Aの左上の角を原点とし、かつ撮影画像Aの縦方向(副走査方向)及び横方向(主走査方向)に一致した座標軸u及びvからなる画像座標系Paにおける座標値である。同様に、位置mbを表す座標値(u’,v’)は、撮影部110bの投影面に投影された撮影画像Bの左上の角を原点とし、かつ撮影画像Bの縦方向(副走査方向)及び横方向(主走査方向)に一致した座標軸u及びvからなる画像座標系Pbにおける座標値である。
さらに、点Mの座標値(Xm,Ym,Zm)は、今回の処理で用いられる世界座標系(ワールド座標系)で表され、今回の処理で用いられる世界座標系の原点は、今回の撮影位置における撮影部110aの主点Caの位置を原点とし、今回の処理で用いられる世界座標系のX軸及びY軸は、今回の撮影位置における画像座標系Paのu軸及びv軸とそれぞれ平行であり、今回の世界座標系のZ軸は、撮影部110aの光軸la(及び撮影部110bの光軸lb)と平行である。つまり、ステップS21で座標値を算出される頂点が被写体上の同じ点であっても、撮影装置100の撮影位置及び撮影方向によって異なる値として算出される。座標系が異なるためである。
三次元モデルを生成した後に、モデル生成部143aは、ペア画像から生成した三次元モデルを構成する各座標値で表される点(以下、三次元モデルを構成する点という)に対してドルネー(ドロネー:Delaunay)分割を行うことで、三角形ポリゴンを表すポリゴン情報を取得し、ポリゴン情報を三次元モデルを表す情報に追加する。
図6(a)のステップS21の後に、撮影状態推定部143bは、初回の撮影状態(つまり、撮影カウンタの値が「1」のときにペア画像を撮影した撮影位置及び撮影方向)を基準とした今回の撮影状態を推定する、図6(b)に示すような撮影状態推定処理を実行する(ステップS22)。尚、ペア画像の撮影方向は、撮影部110aの光軸方向(又は撮影部110bの光軸方向)をいうとして説明する。
図6(b)の撮影状態推定処理の実行を開始すると、撮影状態推定部143bは、初回に生成された三次元モデルと、今回に生成された三次元モデルとの双方から特徴点を取得する(ステップS31)。例えば、撮影状態推定部143bは、それぞれの三次元モデルを構成する頂点の内で、ペア画像におけるコーナー強度が高く、かつステレオマッチングの一致度が高い点に相当する頂点を特徴点として選択する。
次に、撮影状態推定部143bは、初回の三次元モデルから3つの特徴点を選択した後に、今回に生成された三次元モデルが有する3つの特徴点を頂点とする三角形の中から、選択された3つの特徴点を頂点とする三角形と合同な三角形の組を複数探索する(ステップS32)。初回の三次元モデルの点と、今回の三次元モデルの点とから同じ被写体上の点を表す点(つまり、対応点ペア)をそれぞれ特定するためである。尚、撮影状態推定部143bは、3辺それぞれにおける長さの相違がそれぞれ所定値以下であれば、2つの三角形を合同であると判別する。
撮影状態推定部143bは、探索された複数の三角形が有する頂点のそれぞれに対して値「1」から始まる番号を付番する。次に、撮影状態推定部143bは、番号「1」が付された(今回の三次元モデルを構成する)頂点の座標値(x1,y1,z1)と、探索された三角形と合同な三角形の頂点であって、当該頂点に対応する(初回の三次元モデルを構成する)頂点の座標値(x’1,y’ 1,z’1)とをそれぞれ以下の式(4)及び(5)に代入することで、対応点ペアp1及びp1を設定し、かつ同様に番号「2」から「N」が付された他の頂点についても対応点ペアpi及びp’i(但し、i=2からN、かつNはペア数)を設定する。(ステップS33)。
ここで、初回の撮影位置及び撮影方向を基準にした今回の撮影位置及び撮影方向との関係は、図8に示すように、初回の撮影位置Spから今回の撮影位置Sp’への移動を表す移動ベクトルt(以下、併進ベクトルtという)と、撮影装置100の回転を表す回転行列Rとで表される。このため、式(4)で表される対応点piは、式(5)で表される対応点p’iと、回転行列Rと併進ベクトルtとを用いた式(6)で表される。
ここで、撮影状態推定部143bは、式(6)から直接的に回転行列Rと併進ベクトルtとを算出する構成を採用し得る。しかし、ノイズの影響を軽減し、回転行列Rを安定的かつ精度良く算出するために、以下の処理を実行する。
ステップS33の後に、撮影状態推定部143bは、以下の式(7)を用いて対応点pの重心を算出し、以下の式(8)を用いて対応点p’の重心を算出する(ステップS34)。次に、撮影状態推定部143bは、算出した重心を基準とした対応点pの分布d1を以下の式(9)を用いて算出し、重心を基準とした対応点p’の分布d2を以下の式(10)を用いて算出する(ステップS35)。
ここで、対応点pと対応点p’とは、同じ被写体上の複数の点を表すので、対応点piの重心を基準とした分布d1と、対応点p’iの重心を基準とした分布d2とは、ほぼ一致する。また、重心を基準としているので、分布d1と分布d2との関係は、併進ベクトルtによって定められず、回転量列Rのみによって定められる。このため、分布d1と分布d2とは、以下の式(11)を満足する。
上記の式(11)から回転行列を算出するため、ステップS35の後に、撮影状態推定部143bは、式(12)及び(13)に示すように、分布d1及びd2を特異値分解して、ユニタリ行列U1及びU2、特異値の対角行列S1及びS3、並びに随伴行列V1*及びV2*をそれぞれ算出する。(ステップS36)。但し、特異値は、降順に並べられているものとし、記号*は複素共役転置を表す。
ここで、上記の式(12)及び(13)と上記の式(11)とから、回転行列Rは、以下の式(14)で表される。
ここで、行列U1と行列U2*とを関連付ける行列を、以下の式(15)に示すような関連付け行列Kとすると、回転行列Rは、以下の式(16)で表される。
ここで、ユニタリ行列U1及びU2の列ベクトルは、それぞれ分布d1の固有ベクトル及び分布d2の固有ベクトルに相当する。よって、行列U1及びU2*を関係付ける関係付け行列Kの要素は、それぞれの固有ベクトルが対応する場合は「1」又は「-1」であり、そうでない場合は「0」である。ここで、分布d1と分布d2が等しいため、それぞれが分解される特異値も等しい(つまり、特異値の対角行列S1及びS3も等しい)。しかし実際には、分布d1と分布d2とには誤差が含まれているため、誤差を丸める必要がある。このため、関連付け行列Kは、例えば、四捨五入を行うround関数を用いた下記の式(17)で表される。
このため、図6(b)のステップS36の後に、撮影状態推定部143bは、上記の式(17)に対して、ステップS36で算出された随伴行列1*及びV2*を用いて関連付け行列Kを算出する(ステップS37)。次に、撮影状態推定部143bは、算出された関連付け行列Kと、ステップS36で算出されたユニタリ行列U1及びU2とを上記の式(16)に代入することで、回転行列Rを算出する(ステップS38)。
ここで、それぞれの対応ペアの重心からそれぞれの対応点へ向かうベクトルは、回転行列Rによって回転させるとそれぞれ等しいため、以下の式(18)が成立し、以下の式(18)を変形すると以下の式(19)が得られる。
ここで、上記の式(19)で表されるpiを上記の式(6)に代入することで、併進ベクトルtの算出に用いられる以下の式(20)が得られる。
このため、ステップS38の後に、撮影状態推定部143bは、上記の式(20)に対して、ステップS34で算出された重心t1及びt2を用いて併進ベクトルtを算出する(ステップS39)。その後、撮影状態推定部143bは、撮影状態推定処理の実行を終了する。
図6(a)のステップS22の後に、図5(b)の頂点座標値変換部143cは、ステップS21で生成されたモデルを構成するポリゴン頂点の座標値を、今回の処理で用いられる世界座標系の座標値から初回の処理で用いられた世界座標系の座標値へ変換する(ステップS23)。具体的には、頂点座標値変換部143cは、ステップS22で推定された撮影装置100の撮影位置を表す併進ベクトルt及び撮影方向を表す回転行列Rを以下の式(21)に用いることで、今回の世界座標系における座標値Wを初回の世界座標系における座標値W’に変換する。その後、頂点座標値変換部143cは、変換後の頂点座標値で構成されるモデルを表すデータを、撮影カウンタの値と対応付けて外部記憶部123に保存する。
W’=inv(R)(W−t)・・・(21)
但し、inv(R)は、回転行列Rの逆行列を表す。
ステップS23の後に、図5(b)のノイズ除去部143dは、今回に生成された三次元モデルを構成するポリゴン面の向きを利用してノイズを三次元モデルから除去する、図9(a)に示すような第1除去処理を実行する。尚、ノイズ除去部143dが除去するノイズは、例えば、被写体上の点に対応しない三次元モデルの点を含む。
第1除去処理の実行を開始すると、先ず、ノイズ除去部143dは、ステップS21で生成された三次元モデルを構成する各ポリゴン面の頂点座標値に基づいて、各ポリゴン面の法線ベクトルを取得する(ステップS41)。尚、ステップS41で取得されるポリゴン面の法線ベクトルは、撮影装置100のカメラ視線(つまり、撮影部110aの光軸方向)と同じ向きの(つまり、カメラ視線との内積が正の値となる)ベクトルと逆向きのベクトルとの2種類のベクトルの内で、カメラ視線と同じ向きのベクトルとする。処理の便宜のためである。
次に、ノイズ除去部143dは、図6(b)のステップS38で算出された回転行列Rによって今回のカメラ視線の方向を特定した後に、特定したカメラ視線と各ポリゴン面の法線ベクトルとの内積を算出する(ステップS42)。その後、ノイズ除去部143dは、算出された内積の値が所定の閾値TH_NP以下のポリゴン面を、三次元モデルから削除する(ステップS43)。
次に、ノイズ除去部143dは、ポリゴン面の画定に使用されていない頂点をノイズであると判定する(ステップS44)。その後、ノイズ除去部143dは、ノイズであると判定した頂点を、今回生成された三次元モデルから削除する(ステップS45)。その後、ノイズ除去部143dは、第1除去処理の実行を終了する。
これらの構成によれば、ポリゴン面のカメラ視線に対する向きに基づいて、ポリゴン面を画定する頂点がノイズであるか否かを精度良く判定できる。カメラ視線との内積値が低い面ほどカメラ視線に対して正対していないため、三次元モデルの生成に用いられたペア画像にモデルを生成するのに十分な情報が表されていないことが多く、ノイズを有する可能性が高いためである。
図6(a)のステップS24の後に、頂点方向算出部143eは、三次元モデルを構成する各頂点に対して頂点方向を算出する(ステップS25)。一例として、頂点方向算出部143eは、ある頂点で画定されるポリゴン面が1つである場合には、当該ポリゴン面の法線方向を当該頂点の頂点方向とする。ある頂点で画定されるポリゴン面が複数存在する場合には、当該複数のポリゴン面が有する法線方向の単純平均又は面積を重みとした加重平均を当該頂点の頂点方向とする。
次に、ノイズ除去部143dは、撮影カウンタの値が所定値K1をより大きいか否かを判別する(ステップS26)。撮影カウンタの値が所定値K1より大きいと判別した場合には(ステップS26;Yes)、ノイズ除去部143dは、今回に生成された三次元モデルを、今回の撮影カウンタの値及び図6のステップS22で推定された撮影状態とに対応付けて、三次元モデル群に追加する(ステップS27)。次に、ノイズ除去部143dは、撮影位置を利用してノイズを除去する、図9(b)に示すような第2除去処理を実行する(ステップS28)。第2除去処理によりノイズを除去するためには、所定個数より多い三次元モデルが必要であるためである。
図9(b)に示す第2除去処理の実行を開始すると、ノイズ除去部143dは、今回の撮影状態に近い前回までの撮影状態(つまり、過去の撮影状態)をK2個選出する(ステップS51)。
具体的には、ノイズ除去部143dは、現在の撮影カウンタの値との差異がK2以内の撮影カウンタの値と対応付けて三次元モデル群に追加された三次元モデルを、差異が小さい順に選出する。この構成によれば、少ない計算量で今回の撮影状態に近い過去の撮影状態を選出できる。
また、これに限定される訳ではなく、ノイズ除去部143dは、今回推定された回転行列Rとの距離(行列の各要素の差分の2乗和)が所定の閾値TH_R1よりも小さい回転行列と対応付けて三次元モデル群に追加された三次元モデルを、距離が小さい順に選出しても良い。この構成によれば、撮影カウンタの値に基づいて今回の撮影状態に近い過去の撮影状態を選出する方法よりも精度が良いだけでなく、後述する併進ベクトルtに基づいて今回の撮影状態に近い過去の撮影状態を選出する方法よりも計算量が少ない。
さらに、これらに限定される訳ではなく、ノイズ除去部143dは、今回推定された併進ベクトルtとの差異が所定の閾値TH_T1よりも小さい併進ベクトルと対応付けて三次元モデル群に追加された三次元モデルを、差異が小さい順に選出しても良い。この構成によれば、回転行列Rに基づいて今回の撮影状態に近い過去の撮影状態を選出する方法よりも精度が良い。
図9(b)のステップS51を実行した後に、ノイズ除去部143dは、選出された撮影状態に対応付けられた三次元モデルを、三次元モデル群からK2個選出した後に(ステップS52)、選出された全ての三次元モデルを構成する全ての頂点について以下のステップS54からS56の処理を実行したか否かを判別する(ステップS53)。このとき、未だ全頂点に対して処理が行われていないと判別された場合には(ステップS53;No)、ノイズ除去部143dは、未処理の頂点の内1つを処理対象とする頂点(以下単に、対象頂点という)とし、対象頂点で構成される三次元モデルを対象モデルとする。次に、ノイズ除去部143dは、対象頂点から所定距離(以下、近傍距離という)までの空間範囲(以下、近傍範囲という)に含まれる対象モデルと異なる他の三次元モデルの頂点の数を算出する(ステップS54)。その後、ノイズ除去部143dは、近傍範囲に含まれる他の三次元モデルの頂点数が所定の閾値TH_N以下であるか否かを判別する(ステップS55)。
ステップS55において、ノイズ除去部143dは、近傍範囲に含まれる他の三次元モデルの頂点数が所定の閾値TH_N以下であると判別すると(ステップS55;Yes)、対象頂点をノイズであると判定し、対象頂点で構成されていた三次元モデル及び三次元モデル群から対象頂点を削除する(ステップS56)。その後、ノイズ除去部143dは、ステップS53に戻り上記処理を繰り返す。
具体的には、図10に示すように、対象頂点TP1から近傍距離ds以内の近傍範囲SPには、対象頂点TP1と同様に20回目の撮影により得られたペア画像を用いて生成された三次元モデル(以下、20回目の三次元モデルという)を構成する頂点が3つ含まれるが、16回目の三次元モデルを構成する頂点が1つしか含まれない。このため、閾値TH_Nが値「1」である場合には、対象頂点TP1はノイズであると判別される。
ここで、被写体を複数回撮影すると、同じ対象物上の点が複数のペア画像に表されるので、対象物上のある点に対応する点は、通常、複数の三次元モデルに含まれる。このため、これらの構成によれば、ある点の近傍範囲SPに含まれる他の三次元モデルを構成する点の数に基づいて、当該点がノイズであるか否かを精度良く判定できる。また、撮影回数が増える程、生成される三次元モデルの数が増えるため、撮影回数が増える程、三次元モデルの点がノイズであるか否かを精度良く判定できる。
ステップS55において、ノイズ除去部143dは、近傍範囲に含まれる他の三次元モデルの頂点数が所定の閾値TH_Nよりも大きいと判別すると(ステップS55;No)、対象頂点はノイズでないと判定し、ステップS53に戻り上記処理を繰り返す。
具体的には、図10に示すように、対象頂点TP2の近傍範囲SPには、16回目の三次元モデルを構成する頂点が3つ含まれ、11回目の三次元モデルを構成する頂点が2つ含まれる。このため、閾値TH_Nが値「1」である場合には、対象頂点TP1はノイズではないと判別される。
その後、図9(b)のステップS53において、全頂点に対してステップS54からS56の処理が行われたと判別すると(ステップS53;Yes)、ノイズ除去部143dは、第2ノイズ除去処理の実行を終了する。
図6(a)のステップS28を実行した後に、ノイズ除去部143dは、撮影時刻を利用してノイズを除去する、図9(c)に示すような第3除去処理を実行する(ステップS29)。
第3除去処理の実行を開始すると、ノイズ除去部143dは、図9(b)のステップS51と同様の処理を実行して、今回の撮影状態に近い撮影状態を選出する(ステップS61)。次に、ノイズ除去部143dは、選出された撮影状態の数(以下、選出撮影状態数)が所定の閾値THcn+1以上であるか否かを判別する(ステップS62)。このとき、選出撮影状態数が所定の閾値THcn以下であると判別すると(ステップS62;No)、ノイズ除去部143dは、第3除去処理の実行を終了する。第3除去処理の実行に必要な数の撮影状態が選出されていないためである。
ステップS62において、選出撮影状態数が所定の閾値THcn+1以上であると判別すると、ノイズ除去部143dは、撮影時刻が新しい(つまり、撮影カウンタの値が大きい)撮影状態から順にTHcn個の撮影状態を抽出する(ステップS63)。次に、ノイズ除去部143dは、抽出した撮影状態以外の撮影状態に対応付けられた(つまり、抽出した撮影状態以外の撮影状態において撮影されたペア画像を用いて生成された)三次元モデルの頂点を三次元モデル群から削除する(ステップS64)。その後、ノイズ除去部143dは、第3除去処理の実行を終了する。
ここで、同じ撮影位置及び撮影方向から同じ被写体を撮影した場合であっても、撮影時刻が異なると、例えば、被写体を照らす照明、被写体の背景、又は被写体自体の動作などにより、撮影されたペア画像に表される被写体の情報が異なる。このためこれらの構成によれば、古い撮影時刻に撮影されたペア画像を用いて生成された三次元モデルの頂点を三次元モデル群から除去するため、ペア画像に表される被写体の情報の相違を軽減し、均一な三次元モデルで構成される三次元モデル群を生成できる。
図4のステップS06の後に、図5(a)のモデル群編集部144は、ステップS06で更新された三次元モデル群を編集する、図11に示すようなモデル群編集処理を実行する(ステップS07)。
図11に示すモデル群編集処理の実行を開始すると、モデル群編集部144は、図3の操作部131を構成するタッチパネルに対してタッチ操作がなされたか否かを、操作部131から出力される信号に基づいて判別する(ステップS71)。このとき、タッチ操作がなされたと判別すると(ステップS71;Yes)、モデル群編集部144は、図12(a)に示すような表示メニューMNを図1(b)の表示部103に表示させる(ステップS72)。この表示メニューは、図12(a)に示すようなモデル表示エリアDAMに表示される三次元モデルの拡大又は縮小を命じる命令に関連付けられたズームアイコンICZ、三次元モデルの表示視点を変える命令と関連付けられた自由視点アイコンICF、三次元モデルに対するノイズ除去を命じる命令と関連付けられたノイズ除去アイコンICN、及び現在の3Dモデリングモードから通常撮影モードへの復帰を命じる命令と関連付けられた撮影モードアイコンICMで構成される。
ステップS72を実行した後に、モデル群編集部144は、タッチパネルから出力されたタッチ位置の座標値を表す信号と、表示部103に表示させた各アイコンの位置座標とに基づいて、タッチ操作が行われた位置に表示されていたアイコン(つまり、ユーザによりタッチされたアイコン)が撮影モードアイコンICMであるか否かを判別する(ステップS73)。
ステップS71において、タッチ操作がなされなかったと判別した場合(ステップS71;No)、又はステップS73において、撮影モードアイコンICMがタッチされたと判別した場合に(ステップS73;Yes)、モデル群編集部144は、現在の撮影視線の方向から三次元モデル群を構成する各三次元モデルの頂点(以下単に、点群という)を表した画像を、表示部103のモデル表示エリアDAMに表示させる(ステップS74)。その後、モデル群編集部144は、モデル群編集処理の実行を終了する。
ステップS73において、撮影モードアイコンICMがタッチされなかったと判別した場合には(ステップS73;No)、モデル群編集部144は、ステップS73と同様に、ノイズ除去アイコンICNがタッチされたか否かを判別する(ステップS75)。このとき、ノイズ除去アイコンICNがタッチされたと判別すると(ステップS75;Yes)、モデル群編集部144は、タッチパネルから入力されたノイズ除去レベルに基づいて三次元座標群からノイズを取り除いた後に、ノイズを取り除かれた三次元座標群の頂点を表示部103に表示させる、図13(a)に示すようなノイズ除去表示処理を実行する(ステップS76)。その後、モデル群編集部144は、ステップS73に戻り上記処理を繰り返す。
図13(a)のノイズ除去表示処理の実行を開始すると、モデル群編集部144は、図12(b)に示すようにノイズ除去アイコンICNをハイライト表示するように表示部103を制御する(ステップS81)。尚、モデル群編集部144は、ノイズ除去アイコンICNを反転表示させても良い。次に、モデル群編集部144は、モデル表示エリアDAMの下側に、ノイズ除去レベルを表すレベルバーLBを表示させる。
次に、モデル群編集部144は、三次元モデル群の各頂点について、図6(a)のステップS25で算出された頂点方向と、図6(b)のステップS38で算出された回転行列Rで定まる撮影視線の方向との内積を算出する(ステップS83)。
次に、モデル群編集部144は、タッチパネルから出力されるタッチ座標値を表す信号に基づいて、ユーザによって指定されたノイズ除去レベル(以下単に、指定レベルという)を取得する(ステップS84)。例えば、タッチパネルが出力する座標値が、表示部103に表示されたレベルバーの中心位置を表す場合には、モデル群編集部144は、最小の内積値「0」と最大の内積値「1」との中間値「0.5」を指定レベルとして取得する。その後、モデル群編集部144は、図12(c)に示すように、取得した指定レベルをレベルバーLBに表示させる(ステップS85)。
次に、モデル群編集部144は、ステップS84で取得した指定レベルより高い内積値の算出に用いられた頂点方向を有する頂点を表示するように表示部103を制御する(ステップS86)。これに対して、モデル群編集部144は、指定レベルより低い内積値の算出に用いられた頂点方向を有する頂点を表示しないように表示部103を制御する(ステップS87)。このため、ノイズ除去レベルが値「0.5」に指定されると、図12(b)に示されていたポリゴン面PN1からPN3の頂点の内で、視線方向と正対する度合いが高く、ノイズを有する可能性が低い面PN1(つまり、内積値が「0.5」以上の面)の頂点だけが表示される。
その後、モデル群編集部144は、ノイズ除去アイコンICN以外の他のアイコンに対してタッチ操作がなされたか否かを判別する(ステップS88)。このとき、他のアイコンに対してタッチ操作がなされなかったと判別すると(ステップS88;No)、モデル群編集部144は、ステップS84に戻り上記処理を繰り返す。
ステップS88において、他のアイコンに対してタッチ操作がなされたと判別すると(ステップS88;Yes)、ステップS87において非表示とした頂点をモデル群から削除する(ステップS89)。その後、モデル群編集部144は、表示部103に対して、ノイズ除去アイコンICNのハイライト表示を終了し、かつレベルバーの表示を終了させた後に(ステップS90)、ノイズ除去表示処理の実行を終了する。
これらの構成によれば、被写体を撮影すると直ぐに、生成された三次元モデル群を表示するだけでなく、ユーザの操作により指定されたノイズ除去レベルに応じて三次元モデル群のノイズを除去し、ノイズを除去した三次元モデル群を表示する。このため、ユーザは、被写体を複数回に亘って撮影しながら、生成された三次元モデル群を直ちに確認できるだけでなく、確認結果に基づいて三次元モデル群に対して行うノイズ除去のレベルを容易かつ迅速に指定できるので、ユーザの撮影装置100に対する利便性が向上する。
図11のステップS75において、ノイズ除去アイコンICNがタッチされなかったと判別した場合には(ステップS75;No)、モデル群編集部144は、ステップS73と同様に、ズームアイコンICZがタッチされたか否かを判別する(ステップS77)。このとき、ズームアイコンICZがタッチされたと判別すると(ステップS77;Yes)、モデル群編集部144は、タッチパネルから入力されたサイズに基づいて三次元座標群の表示サイズを変更する、図13(b)に示すようなズーム表示処理を実行した後に(ステップS78)、ステップS73に戻り上記処理を繰り返す。
図13(b)のズーム表示処理の実行を開始すると、モデル群編集部144は、図12(d)に示すようにズームアイコンICZをハイライト表示するように表示部103を制御する(ステップS91)。次に、モデル群編集部144は、モデル表示エリアDAMの下側に、サイズを表すサイズバーLZを表示させる。
次に、モデル群編集部144は、タッチパネルから出力されるタッチ位置の座標値を表す信号に基づいて、ユーザによって指定された三次元モデルの表示サイズ(以下単に、指定サイズという)を取得する(ステップS93)。例えば、タッチパネルが出力する座標値がサイズバーLZの中心位置を表す場合に、モデル群編集部144は、デフォルトの表示サイズを指定サイズ(つまり、100%)として取得する。また例えば、タッチパネルが出力する座標値が、サイズバーLZの右端を表す場合には、モデル群編集部144は、デフォルトの表示サイズの2倍(つまり、200%)を指定サイズとして取得する。その後、モデル群編集部144は、図12(d)及び(e)に示すように、取得した指定サイズをサイズバーLZに表示させる(ステップS94)。
次に、モデル群編集部144は、ステップS93で取得した指定サイズで三次元モデル群を表示するように表示部103を制御する(ステップS95)。つまり、図12(d)に示すように、指定サイズがデフォルトサイズの180%の大きさである場合には、モデル群編集部144は、図12(a)に示すようなデフォルトのサイズの三次元モデル群を1.8倍の大きさに拡大した三次元モデル群を表示させる。また図12(e)に示すように、指定サイズがデフォルトサイズの30%の大きさである場合には、デフォルトサイズの三次元モデル群を0.3倍の大きさに縮小した三次元モデル群を表示させる。
その後、モデル群編集部144は、ズームアイコンICZ以外の他のアイコンに対してタッチ操作がなされたか否かを判別する(ステップS96)。このとき、他のアイコンに対してタッチ操作がなされなかったと判別すると(ステップS96;No)、モデル群編集部144は、ステップS93に戻り上記処理を繰り返す。
ステップS96において、他のアイコンに対してタッチ操作がなされたと判別すると(ステップS96;Yes)、ズームアイコンICZのハイライト表示を終了し、かつサイズバーLZの表示を終了させた後に(ステップS97)、ズーム表示処理の実行を終了する。
図11のステップS77において、ズームアイコンICZがタッチされなかったと判別した場合には(ステップS77;No)、モデル群編集部144は、ステップS73と同様に、自由視点アイコンICFがタッチされたか否かを判別する(ステップS79)。このとき、自由視点アイコンICFがタッチされなかった(つまり、タッチ操作がなかった)と判別すると(ステップS79;No)、モデル群編集部144は、ステップS73に戻り上記処理を繰り返す。これに対して、自由視点アイコンICFがタッチされたと判別すると(ステップS79;Yes)、モデル群編集部144は、タッチパネルから入力されたタッチ位置から被写体の三次元モデル群に向かう視線の方向を特定し、特定した視線の方向から三次元モデル群を表示部103に表示させる、図13(c)に示すような自由視点表示処理を実行する(ステップS80)。
図13(c)の自由視点表示処理の実行を開始すると、モデル群編集部144は、自由視点アイコンICFをハイライト表示するように表示部103を制御する(ステップS101)。次に、モデル群編集部144は、タッチパネルから出力される信号に基づいて、ユーザによって指定された視線の始点位置を検出し、検出した始点から三次元モデル群へ向かう視線(以下単に、指定視線という)を取得する(ステップS102)。
次に、モデル群編集部144は、指定視線に応じて三次元モデル群を上下左右に回転させることで、指定視線から三次元モデル群を表示部103に表示させる(ステップS103)。具体例としては、モデル群編集部144は、指定視線をユーザの視線(つまり、表示部103の表示方向の逆向き)とするような回転行列を算出し、算出した回転行列に基づいて三次元モデル群の頂点座標を変換し、変換した三次元モデル群を表示部103に表示させる。
その後、モデル群編集部144は、自由視点アイコンICF以外の他のアイコンに対してタッチ操作がなされたか否かを判別する(ステップS104)。このとき、他のアイコンに対してタッチ操作がなされなかったと判別すると(ステップS104;No)、モデル群編集部144は、ステップS102に戻り上記処理を繰り返す。
ステップS104において、他のアイコンに対してタッチ操作がなされたと判別すると(ステップS104;Yes)、自由視点アイコンICFのハイライト表示を終了させた後に(ステップS105)、自由視点表示処理の実行を終了する。
図4のステップS07の後に、図5(a)の撮影制御部141は、図1(a)のシャッターボタン109がユーザによって押し下げられたか否かを再度判別する(ステップS08)。このとき、シャッターボタン109が押し下げられたと判別すると(ステップS08;Yes)、撮影制御部141は、撮影カウンタを値「1」だけインクリメントする(ステップS09)。その後、ステップS04から上記処理が繰り返される。
ステップS08において、シャッターボタン109が押し下げられていないと判別すると(ステップS08;No)、撮影制御部141は、ステップS03と同様に、所定期間において終了イベントが発生したか否かを判別する(ステップS10)。このとき、所定期間において終了イベントが発生しなかったと判別された場合には(ステップS10;No)、ステップS07から上記処理が繰り返される。
ステップS10において、終了イベントが発生したと判別された場合には(ステップS10;Yes)、図5(a)の三次元画像生成部145は、撮影装置100のモードが、ポリゴン画像を表示するポリゴン表示モードであるか否かを判別する(ステップS11)。このとき、ポリゴン表示モードでないと判別すると(ステップS11;No)、三次元画像生成部145は、三次元画像生成処理の実行を終了する。尚、撮影装置100が3Dモデリングモードである場合には、ポリゴン表示モードに設定されるとして良い。また、撮影装置100がポリゴン表示モードに設定されていない場合としては、例えば、図11のモデル群編集処理の実行中に、撮影装置100が通常撮影モードに設定された場合を一例として挙げることができる。
ステップS11において、撮影装置100がポリゴン表示モードに設定されていると判別すると、三次元画像生成部145は、例えば、アルファ・シェイプ(Alpha-Shapes)法を用いて、三次元モデル群の点群から三次元画像であるポリゴン画像を生成する(ステップS12)。具体的には、三次元画像生成部145は、点群を用いてドロネー分割を行うことでポリゴン候補を作成する。次に、三次元画像生成部145は、直径Alphaの球を、各ポリゴン候補を画定する各頂点に置き、各頂点に置かれた球によってポリゴン候補内が満されるものを有効とし、満たされないものを無効とする。
その後、図5(a)の三次元画像表示制御部146は、生成された被写体のポリゴン画像(つまり、三次元画像)を表示部103に表示させた後に(ステップS13)、三次元画像生成処理の実行を終了する。
これらの構成によれば、図9(b)の第2除去処理において、三次元モデルに含まれる点が、当該三次元モデルの生成に用いられた撮影画像の撮影位置と異なる位置から撮影された撮影画像を用いて生成された三次元モデルに含まれているか否かに基づいて当該点がノイズであるか否かを判定される。またこれらの構成によれば、ノイズであると判定された点を除去されたモデルに基づいて三次元画像を生成するため、精度の良い被写体の三次元画像を生成できる。
またこれらの構成によれば、図9(b)の第2除去処理において、あるモデルに含まれるある点がノイズであるか否かを、当該点の所定距離内(つまり、近傍範囲)に他のモデルに含まれる点が存在するか否かに基づいて判定するため、撮影回数が増すほど精度良くノイズ判定できる。同一の点が複数の撮影画像に表されている場合には、それぞれの撮影画像に基づいて算出された同一点の三次元座標は、誤差により生じる距離を超えて離れることがないためである。
さらにこれらの構成によれば、図9(c)の第3除去処理において、三次元モデルを生成するために用いられた撮影画像の撮影位置における差異に基づいて、対応する三次元モデルの点から他の点よりもノイズである可能性が高い点を抽出し、かつ抽出した点を三次元モデルから除去するため、精度の良い三次元画像を生成できる。通常、複数の撮影画像の撮影位置における差異が小さい場合の方が、差異が大きい場合に比べて、複数の撮影画像に同一の点が表されている可能性が高いので、複数の撮影画像から生成された複数の三次元モデルの対応点にノイズが含まれる可能性が低いためである。またこれに対して、複数の撮影画像の撮影位置における差異が大きい場合の方が、差異が小さい場合に比べて、複数の撮影画像に同一の点が表されている可能性が低いので、複数のモデルに含まれる対応点にノイズが含まれる可能性が高いためである。
またこれらの構成によれば、図9(a)の第1除去処理において、撮影視線の方向とポリゴン面の法線との相違が所定よりも大きい場合に、当該ポリゴン面の頂点はノイズであるとして当該三次元モデルから除去するため、精度の良い被写体の三次元画像を生成できる。ポリゴン面の法線方向と撮影視線の方向との相違が大きくなる程、ポリゴン面の生成に用いられる撮影画像中の情報量が少なくなるので、ポリゴン面にノイズが生じ易くなるからである。
さらにこれらの構成によれば、図13(a)のノイズ除去表示処理において、撮影視線の方向と頂点の方向との相違が所定よりも大きい場合に、当該頂点はノイズである可能性が高いとして当該三次元モデルから除去されるため、精度の良い被写体の三次元画像を生成できる。これは、頂点の方向と撮影視線の方向との相違が大きくなる程、頂点を画定する複数のポリゴン面の生成にそれぞれ用いられる撮影画像中の情報量の総量が少なくなるので、これらのポリゴン面にノイズが生じ易くなり、ノイズが生じ易いポリゴン面で画定される頂点はノイズである可能性が高いからである。
<変形例>
本実施形態において、図9(a)の第1除去処理によって、隣接するポリゴン面を有する頂点は、隣接する全てのポリゴン面の法線ベクトルと撮影視線との内積値が閾値TH_NP以下である場合にノイズであるとして除去されるとして説明した。しかし、図14に示すように、少なくとも1つの隣接するポリゴン面の法線ベクトルと撮影視線との内積値が閾値TH_NPX以下である場合に、当該頂点はノイズであるとして除去されるとしても良い。
この変形例において、図14に示すような第1除去処理の実行を開始すると、ノイズ除去部143dは、今回の三次元モデルを構成する全頂点について、以下のステップS112からS117の実行が終了したか否かを判別する(ステップS111)。このとき、全頂点についてステップS112などの処理が終了していないと判別すると(ステップS111;No)、ステップS112などの処理の対象とされていない頂点の1つを対象頂点とし、対象頂点に隣接する複数のポリゴン面を特定する(ステップS112)。
次に、ノイズ除去部143dは、特定されたポリゴン面の法線ベクトルを取得する(ステップS113)。その後、ノイズ除去部143dは、各ポリゴン面の法線ベクトルと、図6(b)の撮影状態推定処理で推定された撮影視線との内積をそれぞれ算出する(ステップS114)。その後、ノイズ除去部143dは、算出された内積値の内で最も小さい内積値を選択し(ステップS115)、選択した内積値が閾値TH_NPX以下であるか否かを判別する(ステップS116)。このときに、選択された内積値が閾値TH_NPXより大きいと判別されると(ステップS116;No)、ノイズ除去部143dは、ステップS111に戻り上記処理を繰り返す。
ステップS116において、選択された内積値が閾値TH_NPX以下であると判別されると(ステップS116;Yes)、ノイズ除去部143dは、対象頂点をノイズと判定し、今回の三次元モデルから当該対象頂点を削除する(ステップS117)。その後、ノイズ除去部143dは、ステップS111から上記処理の実行を繰り返す。
これらの構成によれば、ある頂点に隣接するポリゴン面の内で、少なくとも1つのポリゴン面の法線ベクトルと撮影視線との内積値が閾値TH_NPX以下である場合に、当該頂点はノイズであるとして除去される。このため、例えば、ある頂点に隣接する全てのポリゴン面の法線ベクトルと撮影視線との内積値が閾値TH_NP以下である場合に当該頂点がノイズであるとして除去される場合と比べて、ノイズを確実に除去できる。
尚、本発明に係る機能を実現するための構成を予め備えた撮影装置として提供できることはもとより、プログラムの適用により、既存の撮影装置を本発明に係る撮影装置として機能させることもできる。すなわち、上記実施形態で例示した撮影装置100による各機能構成を実現させるための制御プログラムを、既存の撮影装置を制御するコンピューター(CPUなど)が実行できるように適用することで、本発明に係る撮影装置100として機能させることができる。また、本発明に係る撮影装置の制御方法は、撮影装置100を用いて実施できる。
このようなプログラムの配布方法は任意であり、例えば、メモリカード、CD−ROM、又はDVD−ROMなどの記録媒体に格納して配布できる他、インターネットなどの通信媒体を介して配布することもできる。
以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施例に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。