360度動画からフォトグラメトリーで3Dモデル作成!(作成編)

フォトグラメトリーといえば、一般的には高解像度のカメラで写真を撮っていくもの、というイメージが強いかと思います。
例えば、「ぬいぐるみのデータを3Dモデルを作ってみたい!」など、ブツ撮りしたい時は問題なさそうですが、河原や公園など、空間の3Dモデルを作成したい場合には、写真をどの視点でどの方向に撮るのか、高さは?間隔は?…などなど、考えることがとても多く、ハードルが高いというのが正直なところだと思います。

ハードルが高いと思われがちが空間の3Dモデル化ですが、実は、RICOH THETAやInsta360,Qoocamなどの360度カメラで撮った動画から前後左右の画像を切り出すことで、(機材を揃えさえすれば)誰でも手軽に空間のフォトグラメトリーを行うことができます! 

そこで、今回は「3DF Zepher」を使い、360度動画からフォトグラメトリーを行う方法について、解説していきます。
今回は、「作成編」「公開編」の2編に分けてお届けします!

360度動画でフォトグラメトリー

まず、大まかな手順は以下のとおりです。
1)360度動画の撮影
2)元となる360度動画の作成
3)360度動画から前後左右の画像を切り出し→3DF Zepherでフォトグラメトリ実行
4)データの整形
5)3Dモデルのエクスポート
6)3Dモデルの公開

また、今回の検証では、取り込める画像が500枚までの「3DF Zepher Lite」を使用していますので、500枚の画像を取り込む前提で進めていきます。

それでは、早速いってみましょう!

1)360度動画の撮影

今回の使用機材は「Insta360 ONE X」です。
画質は5.7K、フレームレートは30FPSの設定で360度動画を撮影しました。

撮影では、以下に気をつけて撮影しました。
・カメラは自分の頭の上
 →後で前後左右に切り取った際に、自分が映らないようにします。
・なるべく1方向に進む
 →カメラの性質上、ターンすると映像がブレてしまうので、なるべく一方向に動いたほうが良いです。
・明るい時間帯で、直射日光が無いタイミングで撮影
 →これはフォトグラメトリー全般に言えますが、写真に影が写っていると、影が写った状態で3Dモデルが生成されてしまいます。

今回は高解像度を優先し、5.7K画質で動画撮影をしましたが、実はこのカメラ、4Kに画質を落とすと50FPS(1秒間あたり50コマ)で撮影できるのです!
高画質とコマ数、どちらを優先させるべきかもそのうち検証できればと思っています。

2)元となる360度動画の作成

Insta360の場合、撮影データは.insvという拡張子で保存されますので、これをMP4データとして保存します。
MP4データにするには、データをPCにコピーし、専用アプリ(Insta360 Studio 2019 https://www.insta360.com/download/insta360-onex)で読み込み、適宜トリミングをし、MP4で保存します。
※理由は後述しますが、「3DF Zepher Lite」を使用する場合、動画の長さは1分程度を目安にするのが望ましいと思います。

3)360度動画から前後左右の画像を切り出し→3DF Zepherでフォトグラメトリ実行

↓360度動画から切り出した画像イメージ

↓これを、前後左右の画像で切り出しするとこのようになります。

※前提として、3DF Zepher Liteでは読み込める画像が500枚の制限があるため、125枚のパノラマ画像から前後左右の画像を切り出して、125枚*4=500枚でフォトグラメトリーを行います。

今回試した方法は2通りあります。

方法①:360度動画を直接3DF Zepherに読み込み、画像を切り出す
方法②:AviUtlというフリーソフトを用いて画像を切り出す

仕上がりについては、今回の場合は方法②のほうが再現度が高かったです。
しかし、方法①が3DF Zepherだけで完結するので楽なのに比べ、方法②は、要求スペックが高い(メモリは最低で10GBは必要と思われる)のと、AviUtlをインストール後に別途プラグインを追加したり、iniファイルを修正してデフォルト設定を変更したりと、難易度が上がるので、状況に応じて方法を検討してみてください。
それぞれの手順について、簡単に解説していきます。

方法①:360度動画を直接3DF Zepherに読み込み、画像を切り出す

こちらは至ってシンプルです。
1)「ワークフロー>新規プロジェクト」をクリック
2)プロジェクトウィザード画面でオプションを生成/オプションの追加
の4つのすべてのチェックをONにして次へをクリックする。
3)プロジェクトウィザード画面で「ビデオから写真を入力」をクリック
4)ビデオファイルからフレームを抽出画面で、パラメータをいじる。

「フレームの抽出とワークスペースの入力」をクリック
※今回の検証では、フレームの事前選択で尺を90秒として、サンプルレートを1.50fpsとすることで、約90秒の尺から146枚のパノラマ画像を生成されたので、そこから125枚のパノラマ画像を選抜しました。

5)一旦、プロジェクトウィザード上に追加されたパノラマ画像を全削除し、「パノラマ画像からの入力」をクリックします。

6)パノラマ写真を分解という画面に生成されたパノラマ画像を追加し、”左・正面・右・後”の4つにチェックが入っていることを確認しOKをクリックします。

7)プロジェクトウィザードに生成された画像が追加されていることを確認し、このまま次へをクリックします。
※このとき、「いくつかの画像が…」というダイアログが表示されるので、「はい」をクリック

8)マスキング画面はそのまま次へをクリックします(ステータスに「見つかりません」という赤文字が出てますが、焦らなくてOKです)。

9)カメラ較正ページで、項目「較正」の内容がSpherical Image(球状イメージ)となっていることを確認し、問題なければ次へをクリックします。

10)各種プリセットを適宜変更し、モデル化開始を実行します。
※PCのスペックにもよりますが、処理に3時間はかかります。

方法②:AviUtlを使って360度動画から画像を切り出す


3DF Zepherの操作手順としては、方法①の1,2,6,7,8,9,10の手順を踏みます。
事前にAviUtl で画像の切り出しを行い、方法①の6以降の手順で画像を手動で追加することになります。

フリーソフトAviUtlの設定方法について解説します。
※この設定を行うと、360度動画の編集が行えるようになるので、ぜひこの機会にセットアップしてみましょう!

*AviUtlの環境セットアップ手順
・AviUtlのインストール
→最新のversion1.10にしないと、360度動画を読み込み時に十分なメモリが確保できず
AviUtlが動作しないので注意してください。
AviUtlのお部屋(http://spring-fragrance.mints.ne.jp/aviutl/
AviUtl – version1.10

・AviUtlインストールフォルダ内に、プラグイン追加用のフォルダ「Plugins」を作成
※フォルダ名を間違えないように注意してください

・AviUtlでmp4の読み込み・書き出しができるようプラグイン追加
→RePOPn(https://pop.4-bit.jp/

・AviUtlで動画を連番画像として出力するプラグイン追加
→「連番BMP出力」という出力プラグインを追加します。
AviUtlのお部屋(http://spring-fragrance.mints.ne.jp/aviutl/
出力Plugin – 連番BMP出力 version0.06
ダウンロードしたフォルダ中「bmp_output.auo」を、AviUtlフォルダ配下の「Plugins」フォルダの中に格納します。

*AviUtlでの操作手順
1)ファイルを読み込めるように環境設定を行います。

今回は5.7K動画を読み込むため、「ファイル>環境設定>システムの設定」をクリックし、システムの設定画面の最大画像サイズを「5760×2880」とします。
※このとき、最大画像サイズを変更しなかったり、インストールしたバージョンが古かったりすると、「メモリが足りません」などといったエラーになります。
*編集しやすいように以下のチェックもいれておきましょう。
「ファイル>環境設定>システムの設定」
・「再生ウィンドウの動画再生をメインウィンドウに表示する」にチェック
・「編集ファイルが閉じられる時に確認ダイアログを表示する」にチェック
「表示>拡大表示>WindowSize」を選択
「設定>拡張編集の設定」をクリック(拡張編集ウィンドウが開きます)

2)360度動画ファイル(mp4)を読み込みます。
「拡張編集」ウィンドウに読み込みたい動画をドラッグ&ドロップします。

3)画像切り出し用に動画を編集します。

・映像(青い部分)を右クリック→分割
・映像(青い部分)を右クリック→長さを調節
・動画ファイル[標準描画]の「再生速度」
などを使いながら、125フレームの動画を作成します。
※当然ながら、元の動画の長さがながければ長いほど切り出した画像の重複度合いは下がってしまいます。目安としては、60秒前後の動画からの切り出しで試してみると良いと思います。(もしくは、撮影時にゆっくり歩いて60秒程度を目安に撮影を区切ると良いと思います。)

4)「ファイル>プラグイン出力>連番BMP出力」をクリックし、出力先を指定して連番の画像ファイルを切り出します。

5)方法①の手順6以降を行い、モデル化開始を実行してください。

※画像ファイルの切り出し時、どうしてもフレーム調整がうまく行かない場合は、エクセルでcopyコマンドを作成して、コマンドプロンプトにコピー&ペーストして10枚置きに一括コピーするなどの方法もあります。

まず、エクセルに上記のようなコマンド一覧を作成します。

copy ” C:\Users\hue82\Desktop\bmp_Test\test_0000.bmp ” ” C:\Users\hue82\Desktop\bmp_Test\work2\test_0000.bmp ”

という列を作成し、ファイルパスの末尾「test_0000.bmp」の下のセルを「test_0010.bmp」として、この2つのセルを選択した状態で、カーソルの右下の■をクリックして下に引っ張ります。

エクセルでコピーしたい分のコマンドを作成したら、全選択してコピーしたものを、コマンドプロンプトに貼り付け、copyコマンドを実行します(コマンドプロンプトは、タスクバーの「ここに入力して検索」に”cmd”と入力してEnterで起動できると思います)。

まとめ

いかがでしたか?
今回は、360度動画の撮影、編集、画像切り出し、フォトグラメトリー実行までの流れを解説しました。
3DF Zepherの標準機能での取り込みが手っ取り早いですが、余裕のある方はぜひ、AviUtlからの画像切り出しにも挑戦してみていただければと思います!

次回は、「手軽で簡単!360度動画からフォトグラメトリーで3Dモデル作成!(公開編)」として、

4)データの整形
5)3Dモデルのエクスポート
6)3Dモデルのアップロード

をお送りします!3Dモデルが出来上がってからが本番!
公開時、ちょっとした苦労がありました。。笑
それでは、次回をお楽しみに!