写真から寿司を生成するためのメモ

フォトグラメトリはやべぇ技術だと思うんだけど、なんか気軽に使うには敷居が高いように見えるので、出来る範囲で Tips とか書きます。

とりあえず始めるフォトグラメトリ(2) 低密度点群~高密度点群の生成

今回は、写真から3Dデータを出力する前段階の部分をちょっと詳細に説明します。
※ 高密度点群に対してはメッシュ生成以外なにもしないので、ここに含めます。
f:id:manabuokajima:20180411105056p:plain

 

始めに

全てを一気に行うのはあまりオススメできない

最初の記事…

では 3DF Zephyr で行う工程全てを一気に実行するようにしてましたが、実は各工程で行うべき作業があります。それを行わないと計算時間が長くなったり生成される3Dモデルデータのクオリティが下がってしまいます。
「昼飯食ってくるので、処理に時間がかかっても構わない」みたいな理由がない限り、プロジェクトウィザードの最初の画面で、下図のようにチェックをしないようにしましょう。

f:id:manabuokajima:20180411110224p:plain

低密度点群の生成

3DF Zephyr では最初に、たくさんの写真を比較しながら、用意した写真(カメラ)を 3D 空間に配置していきます。(この説明は省略。めんどい)

f:id:manabuokajima:20180411114138p:plain

f:id:manabuokajima:20180411114222p:plain

それを行う過程で生まれる(っぽい)荒いスキャン結果を「低密度点群」と呼びます。

「低密度点群」から、最終的な3Dスキャン結果が得られるので最重要ポイントでもあります。


低密度点群と配置されたカメラを確認すれば、「この方向からの写真が足りない」が判ります。
だいたいの場合、そこから再度撮影をやり直すことは難しいと思いますが、そういう状態でメッシュを生成しても出来損ないしか生まれません。

f:id:manabuokajima:20180411115730j:plain
僕は大蛇丸くらいの出来なら満足ですよ

不要な領域の削除

生成された「低密度点群」のデータを使って、次の「高密度点群」を生成し、それを使って「メッシュ」を生成します。つまり、”たくさんの点があると計算処理に時間がかかる”のです。

f:id:manabuokajima:20180411184908p:plain

ということで、この段階で不要な領域を削除しておきましょう。

  1. 上部のパネルから [多角形選択] を選択

    f:id:manabuokajima:20180411185029p:plain
    ※ 投げ縄 ツールみたいなもんです

  2. 不要な点群を囲む(クリックするごとに多角形の頂点が打たれます)f:id:manabuokajima:20180411185158p:plain

  3. 選択された点群は赤くハイライト表示されるので、キーボードの Delete キーを押して削除
    f:id:manabuokajima:20180411185408p:plain

  4.  これを繰り返せばスッキリ

    f:id:manabuokajima:20180411185536p:plain

  5. [多角形選択] ツールウィンドウの [X] を押してツールを閉じる

境界ボックスの表示、スケール

こうやって不要な点群を削除してしまえば何の問題もないのですが、3DF Zephyr には3Dスキャンする範囲を指定する「境界ボックス(バウンダリボックス)」という仕組みがあります。
計算処理をボックスの範囲内に限定することで無駄な計算を省略しようというわけですね。

その「境界ボックス」は、「低密度点群」の生成時に自動で設定されているのですがデフォルトでは非表示になっています。これを表示し、適切な範囲にボックスを調整しましょう。

  1. [シーン] の [境界ボックス] → [境界ボックスを表示/非表示] を選択

    f:id:manabuokajima:20180411190252p:plain

  2. 境界ボックスが表示されるので、ボックスの大きさを確認
    f:id:manabuokajima:20180411190301p:plain

  3. 境界ボックスのサイズが適切でなかったら、
    [ツール] の [境界ボックス] → [境界ボックスをスケール] を選択

    f:id:manabuokajima:20180411190617p:plain

  4. 境界ボックスのを掴めるようになったので…
    f:id:manabuokajima:20180411190708p:plain
    立体化したい領域がすっぽり収まるように、ボックスのサイズを調整

    f:id:manabuokajima:20180411190714p:plain

  5. 終わり。
    もう一度 [シーン] の [境界ボックス] → [境界ボックスを表示/非表示] を選択すると表示されなくなります。

後は高密度点群を生成するだけです。高密度点群の表示は負荷が高くて扱いづらいです。
生成した後、特に何もせずメッシュを生成しましょう。

Tips: 低密度点群が上手く生成できなかった場合の救済策

理由は良く判らないんですが、たまに写真の位置推測が上手くいかない場合があります。

f:id:manabuokajima:20180411194711p:plain

基本的には撮影が良くないのですが、撮り直し出来ない場合も多いですよね…

そんな場合には、低密度点群を生成する際の [カメラ方向プリセット] を [深い(Deep)] にすると救済できる可能性があります。

f:id:manabuokajima:20180411195050p:plain

説明によると…

解像度は増加、バンドル調整、繰り返し数、キーポイント: デフォルトより低速、デフォルトモードでカメラを失った場合このプリセットを使用してください

 と書かれている通り、時間がかかるけど写真の位置推定に成功しやすいようです。

 

実際に使ってみると…64枚中15枚(デフォルト)だったのが、69枚中56枚(深い)と確かにカメラの数が増えてます。
f:id:manabuokajima:20180411195611p:plain

ただし、処理時間は大幅に増加(その後の高密度点群の生成も時間がかかるようになる!)するし、生成された点群は非常にノイジーになります。

f:id:manabuokajima:20180411200034p:plain
エッグタルトから花粉が飛んでいるような状態に…

生成されるメッシュは綺麗なのでオススメできない機能ってわけではないのですが、あくまで「ダメだった時のリカバリー策」に留めるのが良いのではないでしょうか…