[[太田研 公開用Wiki]] *画像群による3Dプリンタのモデル形成手法 [#v8a7a360] #contents *はじめに [#dbd1528b] **研究背景 [#t7a33fdc] 近年では、画像処理などの 2 次元の処理だけでなく 3 次元を利用した処理が盛んに研究されている。その証拠に今では3Dプリンタが製造業だけでなく個人までもが所有することができるまで敷居は低くなった。 しかし3Dプリンタを使用するには3Dモデルデータを用意する必要がある。~ ここで簡単に実際の物体をモデリングできれば便利であると考え,bundlerという同一シーンで異なる複数のアングルから撮影された物体の画像群から3次元頂点を復元するフリーソフトを使用して3Dモデルデータを作成するという研究をすることにした。 **研究目的 [#r978eee6] 研究の目的はbundlerを用いて画像群から3次元頂点群を生成しこれを3Dプリンタ用モデルにすることが最終的な目的である。 *Bundler [#kc61adc0] **bundlerとは [#we62a654] bundlerとはstructure form Motion (以下SFM)の処理を容易に実行できるオープソースソフトウェアであり、ある同一シーン上の対象物を様々な位置から撮影し以下の画像のような画像群を用意することで実行でき、出力としてカラーの3次元頂点群を得ることができる。~ 得られる3次元頂点群というのは画像群から特徴点を抽出し得られた特徴点群の対応が得られたものとなっている。 因みにbundlerとは別途で特徴量を抽出するプログラムが必要となるが本研究ではSIFT特徴量を使用している。 #ref(text3035-0.png,center,600x300) **SIFT特徴量 [#md9b3c2a] 画像間の対応点を求めるために必要な局所特徴量を抽出するには,対象となる画像から特徴点を検出する必要があり、bundlerも特徴点を扱っている。 そこで局所特徴量を抽出アルゴリズムはたくさんあるがSIFTを選択した。そしてSIFT特徴量の特徴は回転・スケール変化等に不変で照明変化等にも強い特徴量を記述できるアルゴリズムとなっている。 **structure form Motion [#lf1ea3a0] bundlerの中心部分であるSFMとは、ある同一シーンをカメラの位置を変えながら複数枚撮影した画像からカメラ位置とそのシーンの3次元形状の両方を同時に復元する手法のことである。 *実験 [#nf05e49d] **実験目的 [#g73d4df8] 本研究の目的はbundlerを用いて画像群から3次元頂点群を生成しこれを3Dプリンタ用モデルにすることが最終的な目的であるが実際これを行うにあたってbundlerは本当に3Dプリンタ用モデル生成に有用であるかを検証するための実験である。 **実験方法 [#m0ea1b9b] 以下に実験手順を示す。 -''3Dモデルデータを作成し、それを3Dプリンタで出力する''~ -''3Dプリンタで出力されたオブジェクトにテクスチャを貼る''~ -''そのオブジェクトを複数枚撮影してbundlerに入力する''~ 手順を順番に説明する。最初の手順では3Dモデルデータ作成とあるがこれは3DCGモデリングソフトであるblenderを使用して作成し、それを3Dプリンタで使用できるファイル形式であるstl形式で出力してこれを3Dプリンタで出力する。 以下にある3Dモデルデータの画像が用意したものである。左の画像をモデル1,右の画像をモデル2として2つのデータに対してそれぞれ実験していく。 そしてなぜ実際に存在している物体で画像群を作成してbundlerで行わないかというと、実際の物体はデータとしてないためbundlerの出力としてできた3次元頂点群と比較ができないが、このように元のデータから物体を作ることで3次元でのデータ比較が可能になるからである。~ 次の手順では3Dプリンタで出力されたオブジェクトにテクスチャを貼るとあるがこれは、オブジェクトは白色の模様なしの状態であるためこのまま撮影しても特徴量が足らずあまり良い結果が得られないのは明白である。そのため画像のようなカラフルなテクスチャを用意し、その上に展開図が描かれている。そして画像がテクスチャを貼ったオブジェクトとなっていて、これを複数枚撮影してbundlerに入力する。~ #ref(model_texture.png,center,300x400) そして以下の入力画像群が得られた。画像上では6枚となっているが実際にはモデル1は45枚(640x480)とモデル2は33枚(640x480)となっている。 #ref(input_imgs.png,center,400x250) **実験結果 [#d7e2b86c] 以下の画像群が実験の結果である。1列目がモデル1の出力結果で2列目は出力結果画像に近い入力画像である。3列4列目 はモデル2の画像となっている。 #ref(output.png,center,425x254) **実験の考察 [#n50fa542] 実験結果の画像を見るとモデル1ではある程度3次元頂点が復元されていたと思われるが、モデル2では3次元頂点群が想像よりも得られなかった。 考えられる理由としてはモデル1はエッジが出やすい形状をしているのに対してモデル2は曲面が多くてうまく特徴量を抽出できなかったのかもしれない。両方のモデルに言えることだがやはり影が強く出るところは特徴量を抽出できず3次元頂点群が得られないことがわかるし、3次元頂点が得られても点が粗いことがわかる。~ そして画像を見てもわかるとおり、対象物体以外の机などの背景の3次元頂点が復元されている。 これは不要な頂点群となるので削除する必要がある。因みに背景の頂点群が必要でないならば撮影条件を拘束する、例えば背景は一様の色(対象物が含まないような)にするなど、ことで不要な頂点群復元されなくなると考えたので実際に実験してみたところ、bundlerがエラーで止まって出力が得られない状態になった。これはおそらく背景を一様にしたため特徴点が減りカメラの初期位置が決まらなかったことが原因であると思われる。そのため今回の実験ではあえて模様のある机を背景として撮影している。 ***問題点 [#odbd7f5f] これらの考察をまとめ,問題点を挙げると -''特徴点の得られない画像の対処方法''~ -''背景が復元されてしまうこと''~ -''復元された頂点群が粗いため面がうまく張れないこと''~ この3点になる。今後はこれらの課題に対処する必要がある。 *まとめ [#bcae3784] bundlerを用いて画像群から3次元頂点群を生成して、3Dプリンタ用のモデル形成手法の研究という事で、実際に bundlerは本当に3Dプリンタ用モデル生成に有用であるかを実験にて検証した。 実験の考察から3つの問題点が挙げられたものの、これらの問題がある程度妥協できるラインまで解消されれば3Dプリンタ用モデル生成に有用であると判断した。~ 今後の展開としては、以下のことを行いたいと思う。~ -''定量的な3Dオブジェクトの比較プログラム作成''~ -''対象オブジェクト以外、つまり背景削除及び復元頂点群の平坦化''~ -''頂点群から3Dモデルデータにするプログラムの作成''~ 1の課題に関して本論文では頂点データの比較がほとんどできていなく画像を見て判断していたため定量的な比較を行えるようにする必要がある。定量的な比較が出来れば様々な撮影方法や条件で実験しても定量的に検討できるからである。 次に課題は復元された3次元頂点群に対する処理のことであるが、これはpcl(point cloud library)という3次元頂点群を処理するためのC++のライブラリがあるためこれを使い実装していく。 最後の課題はつまるところ3次元頂点群から面を張るプログラムを作成するという事であるがただ面を張ればいいわけではなく、 必ず3Dモデルデータが閉じらている必要がある。3次元頂点群がうまく得られればこのプログラムは既存のプログラムで解決する。閉じられているという状態は面の法線が全て外を向き、面の裏側が見えない状態のことである。 今後はこれらの課題に取り組み、画像群から33Dプリンタ用のモデル形成手法を確立していきたいと思う。 *参考文献 [#h77e6a22] [1]Noah Snavely,"Bundler: Structure from Motion (SfM) for Unordered Image Collections",http://www.cs.cornell.edu/~snavely/bundler/~ [2]David Lowe,"Scale-invariant feature transform",http://sift.jcvi.org/~ [3]徐 剛,辻 三郎 著 "3次元ビジョン "(1998年 発行 共立出版)~