地面の目印 -エスワン-

さまざま、気の向いたとき
数学関係は、今後 https://fifthtaxi.hatenadiary.jp/ へ

SfM事始め

2022-03-14 07:59:32 | 3D

 SfMを少しかじり始めた。手始めに手元にあったカモのデコイをテーブルに置き、ぐるっと撮影して3Dモデルを作成してみた。結果がこれである。その試みについて備忘録としてメモしておく。

カモのデコイ

 

1.作成の流れ

 以下の順序で作成を行った。

(1)撮影

(2)SfMソフト Regard3Dによる3Dモデルの作成

(3)3次元データ表示・編集ソフト Meshlabによる加工

(4)3DCGアニメーション作成ソフト Blender等による動画作成

 

2.撮影

 所有しているスマホ(Huawei nova lite2)のカメラで、テーブルに置いたカモのデコイの周囲を26枚撮影した。画像のサイズは4160×3120 である。ブログの記事に「斜め上から取り囲むようにして」とあったので、そのように撮影した。

 

3.SfMソフト Regard3Dによる3Dモデルの作成

 ネットで調べて、フリーのSfMソフトには、いろいろなものがあることが分かった。その記事のコメントを読み、Regard3Dを使ってみることとした。上でも紹介したよいブログの記事があったので、これに沿って3Dモデルを作成することとした。

(1)Regard3Dのダウンロードとインストール

 https://www.regard3d.org  よりWindows版をダウンロードして、インストール。特に問題はなかった。

(2)実行

 1)プロジェクトの作成と画像の追加

 duck.r3dというプロジェクトを作成し、2で撮影した26枚の画像を読み込んだ。ブログの記事には、「サイズは1200x900程度で十分(これより高解像度だと計算に時間がかかってしまう)」とあったが、これより前の予備的な実験で、1200×900にリサイズした画像での実験結果が思わしくなかったので、元の解像度のままの画像(4160×3120)を追加した。

 2)センササイズの指定

 sensor_database.csv に使用したスマホカメラのデータがなかったので、

            HUAWEI;704HW;5.75

を1行追加した。カメラのセンササイズに関する情報を見つけられなかったので、5.75 という数字を入力しておいた。

 3)特徴点の検出と特徴点のマッチング

 「compute matches...」をクリックする。パラメータはデフォルトのままとした。マッチングに要した時間は4分半であった。以下が結果である。左右の画像を結ぶ線が多いほどマッチングがうまくいったことを示す。この写真ペアでは結果は良好であるが、他のペアではそうではない場合もある。

 4)三角測量

 「Triangulation」をクリックする。これもパラメータの設定はデフォルトのままとした。Triangulation に要した時間は30秒弱であった。以下が結果である。

 5)密な点群の作成

 「Create dense pointcloud...」をクリックする。これもパラメータはデフォルトのままとした。以下が結果である。

 6)メッシュ生成

 「Create Surface...」をクリックする。これもパラメータはデフォルトのままとした。以下が結果である。

 7)Meshlabへの出力

  6)で見たようにメッシュ化した画像には、周辺にノイズがたくさんあるので、これらの消去等を行うためMeshlabへの入力用のファイルを出力する。Meshlabでは3D点群を扱えるので、「Export point cloud」をクリックし、pointcloud.plyを作成した。

以上でRegard3Dでの作業は終わりである。ここまででも3Dモデルの出来栄えはわかる。以降の作業は、見栄えをよくしたり、アニメーションを作成するための作業である。

 

4.3次元データ表示・編集ソフト Meshlabによる加工

 Meshlabについては、以下の2つのブログの記事を参考にした。

  a. MeshLab で Kinect v2 の点群データからテクスチャ付きメッシュを作成する

  b. MeshLabで点群メッシュ化の際に色情報をテクスチャ画像にする

(1)Meshlabのダウンロード、インストール

 https://www.meshlab.net からWindows64版をダウンロードし、インストールした。特に問題はなかった。

(2)点群データのインポート

 3.(2)7)で作成したpointcloud.plyをインポートする。その様子を以下に示す。

(3)不要データの削除

 点群データの不要部分の削除は以下の①、②、③の操作を繰り返す。図に関係する画面上の操作を同じ丸数字で示した。

 ① 「Select Vertices」を選択する。

 ② 削除したい範囲を矩形で囲む。すると選択した点が赤色で表示される。

 ③ 「Delete Selected Vertices」をクリックし、②で選択された点を削除する。

 以下が最終的に不要部分を削除した結果である。

(4)法線の計算

 Filters > Point Set > Compute normals for point sets により行う。

(5)点群の削減

 Filters > Sampling > Clustered Vertex Subsampling で行う。パラメータの設定にもよるが点数を削減すると画像が暗くなる。最終的にある程度点数を削減したか、あるいはこの工程をパスしたか、記憶が定かでない。

(6)メッシュの作成

Filters > Remeshing, Simplification and Reconstruction > Surface reconstruction: Ball Pivotting

で行う。4.bの記事では、Ball PivottingではなくVCGで適用しているが、これだとエラーが出てしまうので、Ball Pivottingを適用した。その後、

Filters > Remeshing, Simplification and Reconstruction > Surface reconstruction: Screened Poisson

を適用した結果がこれである。poisson_mesh.plyとして保存した。

 4.a,4.bでは Screened Poissonを実施せずに、その後の処理を行っているが、うまくいかなかったことと、Screened Poissonである程度の結果が得られたので、Meshlabでの作業はここまでとした。

 

5.3DCGアニメーション作成ソフト Blender等による動画作成

 4.までで作成した3Dモデルの動画を作成するためにBlenderを用いることとした。このソフトは、広く使われているようでマニュアル本なども出版されている。ここでは、以下のサイトを参考にアニメーションを作成した。

(1)3D モデルの読み込み

 Belnderをインストールしたあと、ファイル>インポート により4.で作成したpoisson_mesh.plyを読み込む。するとこのようなグレーのカモが表示される。

 

(2)オブジェクトの移動と回転

 上の図で分かるようにカモと原点(緑と赤の線の交点)の位置がずれているので、カモの中心が原点付近に来るように、カモを選択したあと 「右クリック>原点を設定>ジオメトリを原点に移動」とすると、このようになる(拡大表示した)

 左側の縦に並んだアイコンから「回転」を選択すると図のようになる。

 次に、カモ(Blenderでは、このような対象をオブジェクトと呼ぶようだ)を見やすい位置に来るように赤、緑、青の回転軸を動かす。回転が決まったら、「オブジェクトモード」になっていることを確認し、「オブジェクト>適用>回転」とする。そのあと、左側のアイコンを「ボックス選択」に戻す。

(3)オブジェクトの色付け

 表示したカモに色付けするには、画面左上の「オブジェクトモード」を 「頂点ペイント」の変える。するとカモが着色される。

(4)アニメーション作成のための設定

 次に、アニメーション作成のための設定を行う。画面上部の 「animation」をクリックすると図のような画面になる。

 ここでは、アニメーションとしてZ軸の周りに360度回転し、その後ズームするものを作成する。 青の縦線の数値が1になっていることを確認したら、画面右側の「回転:Z 0°」の右側の黒い小さな点をクリックする。そうすると、1の青線上に黄色い点が4点表示される。

 次に青線をクリックし、そのまま200の数値ところまでドラッグする。ここで、Zの数値を360°とし、右側の◇マークをクリックすると、黄色点が4点表示される。ここまでが、360度回転するアニメーションの設定である。数値200をより大きな数値にすると回転が遅くなる。

 次にオブジェクトにズームインするための設定を行う。青線を250のところに移動し、右側のスケールのX,Y,Zに2を設定する(これは2倍にする設定)。X,Y,Zの右側の小さな黒い点をクリックすると黄色い点が4点表示される。以上の設定後の画面を下に示す。画面下部の▶をクリックすると、この設定でどのようなアニメーションになるかを見ることができる。なお、画面上部左側がアニメーションの画面である。中央に白枠がある場合は、「三>ビュー>ローカルビュー>ローカルビュー切り替え」 でなくなる。

(5)Windowsで画面キャプチャ

 Blenderの中でアニメーションを記録することはできると思うが、やり方がわからなかったので、Windowsの機能(WindowキーとGを同時に押下)で画面録画した。

(6)AviUtlとWindowsムービーメーカーで最後の仕上げ

 (5)の動画は、アニメーション画面だけではなく,Blenderの画面全体が録画されるので、AviUtlというソフトをインストールし、アニメーション画面のみの切り抜きと動画の前後の不要部分の削除を行った。以下の記事を参考にした。

 また、画面全体が暗かったので、Windowsムービーメーカーで、動画を読み込み、「視覚効果>明るさ」で明るさを調節した。こうして、冒頭に示したYoutube動画を作成した。



最新の画像もっと見る

コメントを投稿