04 — 解析手法 / ブログ
特別な機材なしで、だれでも簡単にできる
スマートフォンで撮った動画から、実世界のスケールを保ったまま植物体を3次元復元し、データとして保存することができます。また、本記事では、復元した3次元データから草高・表面積・体積を取得する方法について解説します。使うのは、動画から立体を復元するクラウドサービス「LumaAI」と、3Dデータを扱う無料ソフト「Meshmixer」の2つだけです。
かたちを3次元のデータとして残すことには、数値の記録にはない意義があります。計測とは、植物のかたちをいくつかの数字に要約すること、つまり情報を減らすことです。3Dデータを保存しておけば、元の情報は減りません。あとから別の項目を測り直すことも、そのときの姿をもう一度観察することもできます。
このページでは、動画の取り込みから計測までの流れを、順を追って紹介します。
3D計測は、対象の植物をポットに植えた状態で行います。まずは計測したい植物を用意するところから始めます。
植物を採取するときは、傷つけないように丁寧に掘り上げます。根やまわりの土ごとそっと取り出すと、その後の生育への影響を抑えられます。
採取した植物を、ポットに植え替えます。撮影と計測の基準になるので、まっすぐ立つように植えておきましょう。
※桂圭佑教授(京都大学)によるイネのイラストを使用
ポットの直径や側面の長さは、あとで実寸の基準(スケール)として使えます。サイズがわかっているポットを選んでおくと、あとの手順が楽になります。
植物のまわりをスマートフォンでぐるりと2周し、その1本の動画から3Dモデルを作ります。きれいなモデルに仕上がるかどうかは、この撮影のしかたで大きく変わります。次の動画のように、一定の速さでゆっくり回りながら撮影します。
うまく撮るためのポイントは、次のとおりです。
1周目と2周目は、1本の動画に切れ目なく続けて収めるのがコツです。撮影できたら、次のステップで LumaAI にアップロードします。
撮影した動画を LumaAI Capture にアップロードすると、動画から立体的な3Dモデルが自動で復元されます。次のように、動画からそのまま全周の立体が起き上がります。
lumalabs.ai/dashboard/captures を開き、「Create」から動画をアップロードするだけで使えます。使用回数の制限はなく、一度に3件まで同時に処理できます。スマートフォン用のアプリもあります。はじめて使うときは、ご自身のメールアドレスでのサインインが必要です。
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 で体積や表面積を計測できます。
モデルができたら、ビューアで植物がきちんと背景から分かれているかを確認します。角度を変えながら、余計なものが入り込んでいないかを見ておきましょう。
背景の削除がうまくいかない、植物体の形が崩れているなど、復元がうまくいかないことがあります。その場合は、2周分の動画のうち1周分だけを切り出してアップロードし直すと改善することがあります。それでも直らないときは、動画を撮影し直してみてください。
余分な背景が含まれている場合は、バウンディングボックス(囲みの枠)で必要な範囲だけを残すように切り取ります。
仕上がりに問題がなければ、モデルをダウンロードします。書き出し形式は OBJ を選び、できるだけ形を保ちたいので high poly(高精細)を指定します。high poly はデータが大きく、PCによってはこの後の処理が重くなることがあります。動作がつらいと感じたら medium poly や low poly も試して、精細さと扱いやすさのバランスを取ってください。
ダウンロードされるのは ZIP形式の圧縮ファイルです。Windows なら右クリック →「すべて展開」で解凍してから使います。このとき、解凍したフォルダの名前と、フォルダを置く場所のパスに日本語を含めないでください。日本語が含まれていると、Meshmixer で開いたモデルに色が付きません。フォルダ名は半角英数字にして、C:\lumaai のような浅い場所に置くと確実です。
Meshmixer を起動し、「Import」をクリックして、解凍したフォルダの中の OBJ ファイルを選択して開きます。
読み込んだ直後は、モデルが傾いていたり、床が斜めになっていたりすることがあります。「Edit → Transform」を開くと、モデルに矢印と円弧のハンドルが表示されます。矢印をドラッグすると移動、円弧をドラッグすると回転です。植物がまっすぐ立つように、向きと位置を整えておきましょう。
向きや位置は「Edit → Align」でも調整できます。基準にしたい面や点を指定すると、それに合わせてモデル全体がまっすぐそろう機能です。たとえば底面を床に合わせたいときは、Transform で手で回すより早く決まることがあります。
右ボタンでドラッグすると視点が回転し、ホイール(中ボタン)を押し込みながらドラッグすると視点が平行移動します。
マウスのないノートパソコンでは、Alt を押しながら左クリックしたままドラッグすると回転、Alt+Shift を押しながら同じようにドラッグすると平行移動になります。右クリックしたままドラッグしても回転できます。拡大・縮小は2本指の上下スワイプでできます。
いずれもモデルではなく「見る位置」を動かす操作なので、Transform と組み合わせて使うと作業しやすくなります。
3Dモデルは、そのままでは寸法の基準を持っていません。「Analysis → Units/Dimensions」を開き、まず単位(cm など)を選びます。次に、長さがわかっている部分をモデル上で左ドラッグして基準線を引き、「Set Target Length」欄にその実寸を入力します。これでモデル全体のスケールが実寸に合います。
ここが精度の要です。体積や表面積の正確さは、この基準合わせで決まります。ポットの直径や、立方体の箱、あらかじめ置いた定規など、長さがはっきりわかるものを撮影時に一緒に写しておくと安心です。
鉢や地面など、計測に含めたくない部分を取り除きます。「Edit → Plane Cut」を開き、切断面を回転・移動させて位置を決めます。「Cut Type」は「Cut (Discard Half)」、「Fill Type」は「Remeshed Fill」を選び、「Accept」を押すと、面の下側がまとめて切り落とされます。
このとき、切り口の断面は「Remeshed Fill」によって自動で面にふさがれます。断面が開いたままだと体積を正しく測れないので、カット後にモデルの底を見て、穴なく埋められていることを確認しておきましょう。
動画から作ったモデルには、細かな穴や、浮いた小さなノイズが残ることがあります。「Analysis → Inspector」を開くと、問題のある箇所に印がつきます。青は穴、ピンクは微小なかけら、赤は不正な形状です。「Hole Fill Mode」を「Flat Fill」にし、取り除くノイズの大きさを「Small Thresh」で調整してから、「Auto Repair All」を押すと、まとめて修復されます。印がすべて消えれば完了です。
スケールを設定し、植物体だけになったモデルは、ここでファイルとして保存し直しておきましょう。まず、保存先として半角英数字の名前を付けた新しいフォルダを作ります(例:C:\lumaai\rice01)。フォルダ名や置き場所のパスに日本語が入ると、開き直したときにモデルに色が付かなくなるためです。
フォルダができたら、「File → Export」を開き、形式に OBJ を選んで、そのフォルダの中に半角英数字の名前で保存します。元のダウンロードファイルとは別に、「計測に使ったそのままの状態」のデータが手元に残ります。
冒頭で触れたとおり、3Dデータが残っていれば、あとから別の項目を測り直すことも、当時の姿をもう一度観察することもできます。ファイル名に撮影日や個体番号を入れておくと、あとから探しやすくなります。
書き出すと .obj のほかに .mtl とテクスチャ画像も一緒に保存されます。色の情報はこの付属ファイルの側にあるので、3つをひとつのフォルダにまとめたまま保管してください。.obj だけを移動すると、開いたときに色のないモデルになります。なお、修復で穴を埋めた箇所には色が付きませんが、計測結果には影響しません。
計測に入る前に、モデルの高さ(草高)を確認します。「Analysis → Units/Dimensions」を開くとモデルの寸法(X・Y・Z)が表示されるので、縦方向(Y)の値を見ます。実際の草高とかけ離れていなければ、スケールは正しく設定できています。
ポットを削除したのに、寸法の枠がポットのあった領域まで囲ってしまい、Y の値が実際の草高より大きく出ることがあります。その場合は、スケールを設定したときと同じように、植物体の上を左ドラッグして直線を引いてください。「Real length」欄にその線の実際の長さが表示されるので、草高を直接確認できます。
整えたモデルから、体積と表面積を読み取ります。「Analysis → Stability」を開くと、「Volume」(体積)と「Surface Area」(表面積)が表示されます。得られた数値が現実的な範囲かどうかも、あわせて確認しましょう。
極端に大きい・小さい値が出たときは、スケール設定か、モデルの修復に見落としがあるかもしれません。前の手順に戻って確かめてください。
株全体ではなく、茎や葉など特定の部分だけを測りたいこともあります。その場合は「Select」を開き、「Brush Mode」を「Unwrap Brush」にして、「Size」でブラシの大きさを調整します。測りたい部分を左クリックでなぞると、選んだ場所が黒く表示されます。
切り分けたら「View → Show Objects Browser」で一覧を開くと、パーツごとに選んで扱えます。あとは全体のときと同じように、Inspector での修復と Stability での計測をパーツごとに行います。
スマートフォンの動画と無料ソフトだけで、ここまで植物の形を数値にできます。破壊せずに測れるので、同じ株の変化を追いかけたいときにも役立ちます。撮影とスケール設定さえ丁寧に行えば、気軽に始められる計測方法です。