04 — 解析手法 / ブログ

スマートフォンで撮影した動画から
植物体の3次元形態を復元し保存する

特別な機材なしで、だれでも簡単にできる

スマートフォンで撮った動画から、実世界のスケールを保ったまま植物体を3次元復元し、データとして保存することができます。また、本記事では、復元した3次元データから草高・表面積・体積を取得する方法について解説します。使うのは、動画から立体を復元するクラウドサービス「LumaAI」と、3Dデータを扱う無料ソフト「Meshmixer」の2つだけです。

かたちを3次元のデータとして残すことには、数値の記録にはない意義があります。計測とは、植物のかたちをいくつかの数字に要約すること、つまり情報を減らすことです。3Dデータを保存しておけば、元の情報は減りません。あとから別の項目を測り直すことも、そのときの姿をもう一度観察することもできます。

このページでは、動画の取り込みから計測までの流れを、順を追って紹介します。

用意するもの(すべて無料)

01 植物体を採取し、ポットに植え替える

3D計測は、対象の植物をポットに植えた状態で行います。まずは計測したい植物を用意するところから始めます。

植物を採取するときは、傷つけないように丁寧に掘り上げます。根やまわりの土ごとそっと取り出すと、その後の生育への影響を抑えられます。

植物体を傷つけないように採取する
根を傷めないよう、土ごとそっと採取します。

採取した植物を、ポットに植え替えます。撮影と計測の基準になるので、まっすぐ立つように植えておきましょう。

採取した植物をポットに植え替える
まっすぐ立つようにポットへ植え替えます。

※桂圭佑教授(京都大学)によるイネのイラストを使用

ポットの直径や側面の長さは、あとで実寸の基準(スケール)として使えます。サイズがわかっているポットを選んでおくと、あとの手順が楽になります。

02 スマートフォンで360度動画を撮影する

植物のまわりをスマートフォンでぐるりと2周し、その1本の動画から3Dモデルを作ります。きれいなモデルに仕上がるかどうかは、この撮影のしかたで大きく変わります。次の動画のように、一定の速さでゆっくり回りながら撮影します。

植物とポット全体が入る距離を保ち、ゆっくり2周します。
撮影者の動きも含めた様子。一定の距離を保ったまま、ゆっくり歩いて回ります。

うまく撮るためのポイントは、次のとおりです。

1周目と2周目は、1本の動画に切れ目なく続けて収めるのがコツです。撮影できたら、次のステップで LumaAI にアップロードします。

03 LumaAIで動画から3Dモデルを作る

撮影した動画を LumaAI Capture にアップロードすると、動画から立体的な3Dモデルが自動で復元されます。次のように、動画からそのまま全周の立体が起き上がります。

LumaAI Capture の使い方

lumalabs.ai/dashboard/captures を開き、「Create」から動画をアップロードするだけで使えます。使用回数の制限はなく、一度に3件まで同時に処理できます。スマートフォン用のアプリもあります。はじめて使うときは、ご自身のメールアドレスでのサインインが必要です。

動画から復元された3Dモデル。全周が立体になります。
LumaAIの中では何が起きているのか

LumaAIは、公式プラグインの配布ページ公式のWeb描画ライブラリ(GitHub)で、NeRF(Neural Radiance Fields)3D Gaussian Splattingという2つのAI表現を使っていることを明らかにしています。NeRF は空間の色と密度をニューラルネットワークに学習させる方法、3D Gaussian Splatting は無数の小さな「ぼかした楕円体」の集まりでシーンを表す方法で、表示が軽い後者が現在の主流です。手法の原典論文はどちらも公開されています:NeRF(Mildenhall et al., 2020)3D Gaussian Splatting(Kerbl et al., 2023)

処理の詳細は非公開ですが、これらの手法は「各フレームがどこから撮られたか」の情報を必要とするため、前段でカメラ位置を推定する処理(SfM:Structure from Motion に類する写真測量の処理)が走っていると考えられます。ダウンロードされる OBJ ファイルは、かつての公式APIで「メッシュ化(meshing)」と呼ばれていた工程の産物で、こうした表現から表面を取り出してポリゴンメッシュに変換したものです(具体的なアルゴリズムは非公開です)。メッシュになっているからこそ、Meshmixer で体積や表面積を計測できます。

モデルができたら、ビューアで植物がきちんと背景から分かれているかを確認します。角度を変えながら、余計なものが入り込んでいないかを見ておきましょう。

LumaAIのビューアで3Dモデルを確認する
ビューアで復元された3Dモデルを確認します。
別の角度から植物の分離具合を確認する
角度を変えて、植物が背景から分かれているかを見ます。

背景の削除がうまくいかない、植物体の形が崩れているなど、復元がうまくいかないことがあります。その場合は、2周分の動画のうち1周分だけを切り出してアップロードし直すと改善することがあります。それでも直らないときは、動画を撮影し直してみてください。

余分な背景が含まれている場合は、バウンディングボックス(囲みの枠)で必要な範囲だけを残すように切り取ります。

バウンディングボックスで不要な範囲を切り取る
枠を調整して、植物のまわりだけを残します。

仕上がりに問題がなければ、モデルをダウンロードします。書き出し形式は OBJ を選び、できるだけ形を保ちたいので high poly(高精細)を指定します。high poly はデータが大きく、PCによってはこの後の処理が重くなることがあります。動作がつらいと感じたら medium polylow poly も試して、精細さと扱いやすさのバランスを取ってください。

Your Capturesからモデルをダウンロードする
「Your Captures」からモデルをダウンロードします。
書き出し形式でOBJのhigh polyを選ぶ
OBJ の high poly を選んで書き出します。

ダウンロードされるのは ZIP形式の圧縮ファイルです。Windows なら右クリック →「すべて展開」で解凍してから使います。このとき、解凍したフォルダの名前と、フォルダを置く場所のパスに日本語を含めないでください。日本語が含まれていると、Meshmixer で開いたモデルに色が付きません。フォルダ名は半角英数字にして、C:\lumaai のような浅い場所に置くと確実です。

04 MeshmixerにOBJを読み込み、向きを整える

Meshmixer を起動し、「Import」をクリックして、解凍したフォルダの中の OBJ ファイルを選択して開きます。

Meshmixerの起動画面でImportを選ぶ
起動画面の「Import」→ OBJ ファイルを選択して読み込みます。

読み込んだ直後は、モデルが傾いていたり、床が斜めになっていたりすることがあります。「Edit → Transform」を開くと、モデルに矢印と円弧のハンドルが表示されます。矢印をドラッグすると移動、円弧をドラッグすると回転です。植物がまっすぐ立つように、向きと位置を整えておきましょう。

向きや位置は「Edit → Align」でも調整できます。基準にしたい面や点を指定すると、それに合わせてモデル全体がまっすぐそろう機能です。たとえば底面を床に合わせたいときは、Transform で手で回すより早く決まることがあります。

視点の動かし方

右ボタンでドラッグすると視点が回転し、ホイール(中ボタン)を押し込みながらドラッグすると視点が平行移動します。

マウスのないノートパソコンでは、Alt を押しながら左クリックしたままドラッグすると回転、Alt+Shift を押しながら同じようにドラッグすると平行移動になります。右クリックしたままドラッグしても回転できます。拡大・縮小は2本指の上下スワイプでできます。

いずれもモデルではなく「見る位置」を動かす操作なので、Transform と組み合わせて使うと作業しやすくなります。

読み込んだモデルの向きを調整する
モデルの向きを整えます。
モデルの位置を調整する
植物がまっすぐ立つように位置を合わせます。
05 スケール(実寸)を設定する

3Dモデルは、そのままでは寸法の基準を持っていません。「Analysis → Units/Dimensions」を開き、まず単位(cm など)を選びます。次に、長さがわかっている部分をモデル上で左ドラッグして基準線を引き、「Set Target Length」欄にその実寸を入力します。これでモデル全体のスケールが実寸に合います。

単位をmmからcmに変更する
まず、単位を mm から cm に変更します。
モデル上に基準線を引く
長さのわかる部分に基準線を引きます。
基準線に実際の長さを入力する
その線の実寸を入力してスケールを合わせます。

ここが精度の要です。体積や表面積の正確さは、この基準合わせで決まります。ポットの直径や、立方体の箱、あらかじめ置いた定規など、長さがはっきりわかるものを撮影時に一緒に写しておくと安心です。

06 植物だけを取り出す

鉢や地面など、計測に含めたくない部分を取り除きます。「Edit → Plane Cut」を開き、切断面を回転・移動させて位置を決めます。「Cut Type」は「Cut (Discard Half)」「Fill Type」は「Remeshed Fill」を選び、「Accept」を押すと、面の下側がまとめて切り落とされます。

このとき、切り口の断面は「Remeshed Fill」によって自動で面にふさがれます。断面が開いたままだと体積を正しく測れないので、カット後にモデルの底を見て、穴なく埋められていることを確認しておきましょう。

平面カットで鉢などを取り除く
平面でカットして、計測したい植物だけを残します。
07 3Dモデルを修復する

動画から作ったモデルには、細かな穴や、浮いた小さなノイズが残ることがあります。「Analysis → Inspector」を開くと、問題のある箇所に印がつきます。青は穴、ピンクは微小なかけら、赤は不正な形状です。「Hole Fill Mode」を「Flat Fill」にし、取り除くノイズの大きさを「Small Thresh」で調整してから、「Auto Repair All」を押すと、まとめて修復されます。印がすべて消えれば完了です。

モデルの穴やノイズを検出する
穴や余分なかけらを検出します。
自動修復でモデルを整える
自動修復で、計測できる状態に整えます。
08 整えた植物体モデルを保存し直す

スケールを設定し、植物体だけになったモデルは、ここでファイルとして保存し直しておきましょう。まず、保存先として半角英数字の名前を付けた新しいフォルダを作ります(例:C:\lumaai\rice01)。フォルダ名や置き場所のパスに日本語が入ると、開き直したときにモデルに色が付かなくなるためです。

フォルダができたら、「File → Export」を開き、形式に OBJ を選んで、そのフォルダの中に半角英数字の名前で保存します。元のダウンロードファイルとは別に、「計測に使ったそのままの状態」のデータが手元に残ります。

冒頭で触れたとおり、3Dデータが残っていれば、あとから別の項目を測り直すことも、当時の姿をもう一度観察することもできます。ファイル名に撮影日や個体番号を入れておくと、あとから探しやすくなります。

書き出すと .obj のほかに .mtl とテクスチャ画像も一緒に保存されます。色の情報はこの付属ファイルの側にあるので、3つをひとつのフォルダにまとめたまま保管してください。.obj だけを移動すると、開いたときに色のないモデルになります。なお、修復で穴を埋めた箇所には色が付きませんが、計測結果には影響しません。

09 草高(高さ)を確認する

計測に入る前に、モデルの高さ(草高)を確認します。「Analysis → Units/Dimensions」を開くとモデルの寸法(X・Y・Z)が表示されるので、縦方向(Y)の値を見ます。実際の草高とかけ離れていなければ、スケールは正しく設定できています。

モデルの草高を確認する
高さが実物とほぼ合っていれば、スケール設定は正しくできています。

ポットを削除したのに、寸法の枠がポットのあった領域まで囲ってしまい、Y の値が実際の草高より大きく出ることがあります。その場合は、スケールを設定したときと同じように、植物体の上を左ドラッグして直線を引いてください。「Real length」欄にその線の実際の長さが表示されるので、草高を直接確認できます。

10 体積と表面積を確認する

整えたモデルから、体積と表面積を読み取ります。「Analysis → Stability」を開くと、「Volume」(体積)と「Surface Area」(表面積)が表示されます。得られた数値が現実的な範囲かどうかも、あわせて確認しましょう。

体積と表面積の計測結果
体積・表面積の計測結果を確認します。

極端に大きい・小さい値が出たときは、スケール設定か、モデルの修復に見落としがあるかもしれません。前の手順に戻って確かめてください。

11 メッシュを分けて、部分ごとに測る

株全体ではなく、茎や葉など特定の部分だけを測りたいこともあります。その場合は「Select」を開き、「Brush Mode」を「Unwrap Brush」にして、「Size」でブラシの大きさを調整します。測りたい部分を左クリックでなぞると、選んだ場所が黒く表示されます。

Unwrap Brushで測りたい部分を選択する
測りたい部分をブラシでなぞって選択します(黒く表示)。
Edit → Separate で選択部分を切り分ける
「Edit → Separate」で選択した部分を切り分けます。

切り分けたら「View → Show Objects Browser」で一覧を開くと、パーツごとに選んで扱えます。あとは全体のときと同じように、Inspector での修復と Stability での計測をパーツごとに行います。

パーツごとに体積・表面積を計測する
パーツごとに体積・表面積を計測できます。

スマートフォンの動画と無料ソフトだけで、ここまで植物の形を数値にできます。破壊せずに測れるので、同じ株の変化を追いかけたいときにも役立ちます。撮影とスケール設定さえ丁寧に行えば、気軽に始められる計測方法です。