LoginSignup
33
37

More than 3 years have passed since last update.

GoogleEarthから3Dモデルをあっという間に生成する。(openMVG + openMVS)

Last updated at Posted at 2018-11-30
  • きっかけ
  • データ用意
  • つくる
  • 見る

きっかけ

はぁ。aphex twinのT69 CollapseのMVかっこいいなぁって思うことありますよね。はいあります。
そうすると、はぁ。街のモデルほしいなぁって思う事ありますよね。はいあります。(渋谷とかは街のfreeモデル配布されてたりします。)
正攻法としてはOpenStreetMapを使うんだろうけど、OpenStreetMapではモデルデータない事とかあります。
そんなときに、「GoogleEarthの3Dモデル入手できないんか??」って思いますよね。
どうやらUnityでGoogle Maps APIが使えるようになるらしいんだけど、問い合わせしないといけないしお金かかりそうだしとかで、お手軽じゃなさそうな感じです。
リアルなゲーム | Google Maps Platform  |  Google Maps Platform  |  Google Cloud

そういやAutoDeskのRemakeってアプリで画像データから3Dデータ生成できたな?
え?もうMac版のアプリ存在してない?(windows使えよ)まじかよ。
そんならそんなプログラムどっかにあるのでは。
あるんですよね。世の中の偉い方々ありがとうございます。

openMVG(Open Multiple View Geometry)
複数視点画像から3次元の点群を推定するぞってライブラリらしいです。
Structure from motionっていう手法らしい。

openMVS
そしてopenMVGで作った点群からさらに精密な点群を生成するのが
Multi-View Stereoってのらしくてそのライブラリ。

もろもろ詳しくはこのブログが参考になりましたありがとうございます。
NegativeMindさんありがとうございます。
NegativeMindException | Multi-View Stereoによる3次元復元ライブラリ『OpenMVS』
NegativeMindException | 複数視点画像から3次元形状を復元するライブラリ『openMVG』

こいつらを使って生成していきます。

データの用意

google earthからquicktimeで雑に一周画面を録画します。

anime.gif

そして連番で画像ファイル作ります。作り方はなんでもok

ffmpeg -i tokyo_tower.mov -vcodec mjpeg -r 1 image_%03d.jpg

つくる

こういうライブラリは環境作りが大変です。変なところで詰まると1日とか平気で消えます。
ぼくは専門家じゃないので詳しく知らなくて良いからとりあえず3Dデータくれっていう悪いエンジニア的思想から
「環境作るの面倒臭いなぁ。。せやDockerで環境ないんか」
あるんですありがとうございます。
GitHub - rennu/dpg: OpenMVG + OpenMVS Pipeline

まずclone

git clone git@github.com:rennu/dpg.git
cd dpg

そのあとはreadme通りに

docker build -t dpg .

します。

そして

mkdir images

imagesディレクトリ作って先ほどの素材を入れます。

.
├── Dockerfile
├── images
│   ├── image_001.jpg
│   ├── image_002.jpg
│   ├── image_003.jpg
│   ├── image_004.jpg
│   ├── image_005.jpg
│   ├── image_006.jpg
│   ├── image_007.jpg
│   ├── image_008.jpg
│   ├── image_009.jpg
│   ├── image_010.jpg
│   └── image_011.jpg
├── install
├── pipeline.py
├── scripts
   └── colmap_sparse_reconstruct.sh

こんな感じかな

docker run -v $(pwd):/datasets --rm -it dpg

でdockerを動かす。

/opt/dpg/pipeline.py --input /datasets/images --output /datasets/output_dense --flength 2553 --sfmtype incremental --geomodel f --runopenmvg --runopenmvs --densify

※[2020/05/01] 最新のバージョンではoption名に変更があったようです。コメント欄を参照ください。

でコマンド打って待ちます。画像多いと時間かかる。今回は5min待ちました。
--flength 焦点距離を指定するんだけど、カメラの場合はcmodel指定する。
とりあえず width * 1.2でも良いみたい。今回はそれで。

output_dense/omvs/scene_dense_mesh_refine_texture.ply

うまくいくとこいつができています。

見る。

MeshLabで見てobjとmlt吐き出して、
houdiniでみて見るとこんな感じ。

anime.gif

あ、あんまり綺麗でない。。
うまくできたりできなかったりするから色々調整して綺麗にできる方法探りたいですね。。教えてください。

はい。ではまた。

33
37
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
37