Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.
  • きっかけ
  • データ用意
  • つくる
  • 見る

きっかけ

はぁ。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

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

output_dense/omvs/scene_dense_mesh_refine_texture.ply

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

見る。

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

anime.gif

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

はい。ではまた。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away