2019/12/03はじめに対象物体の表面形状を3Dデータ化することを目的として、以下の条件を満たした上で実現可能な技術を調査し、3D計測技術の中からSfM/MVS技術を採用しました。対象物体が大型な場合とする対象物体が離れた場所にあるとする(10m~20m)使用機材は導入しやすいものとし、特殊な機材は使わないこと低コストであること3Dデータ化したい対象物体を、市販のカメラで複数枚撮影するだけで3Dデータを作成できるのがSfM/MVS技術です。Motion)多視点画像からの3D形状復元」で生成されるのは、低密度な点で構成された3Dデータです。Stereo)多眼ステレオ」を使います。対象物体が大きい/離れた場所にあるなどの場合に、3D計測技術の中でもこのSfM/MVS技術が適しています。必要な機材も市販のカメラがあればよく、低コストで導入できるのもたいへん魅力的です。ドローンによる空撮画像にこの技術を使い、地形測量や遺跡調査もおこなわれています。SfMでは大きさ(スケール)は算出されませんので、測量用途の場合は指標となるマーカーも含めて撮影し、生成された3Dデータの寸法を補正する必要があります。複数枚の写真に写る対象物体がSfM/MVS技術を使って3Dデータ化されるプロセスを、実例と合わせてご紹介します。3Dデータ生成の実例:凹凸のある壁まずは、こちらの結果をご覧ください。表面に適度な凹凸をもつ大きな壁を対象物体としました。いうフリーソフトで表示します。対象物体から3mほど離れた場所から撮影した17枚の画像を使用しました。約3分30秒3Dデータ生成までのプロセス下記のプロセスで3Dデータを生成します。Stereo)多眼ステレオ高密度点群データを生成テクスチャ付きのポリゴンモデルを生成この中で特に「撮影」は、結果を左右する最も重要なプロセスです。隣接画像で共通する特徴点を抽出するために、特徴点を十分に得られる写真を撮らなければならないからです。SfMではOpenMVG、MVSではOpenMVSというライブラリをそれぞれ使用します。特徴点を十分に得られる写真を撮るために、以下のような撮影条件の注意点があります。同じ領域が複数枚の写真に映るように撮影することをオーバーラップといいます。連続する2枚の写真の80%が同じ領域となるように撮影します。対象物体の大きさや撮影距離、凹凸の具合に応じた撮影方法があります。石像や岩など(小~中型)カメラを対象物体に向けて円を描くように複数の角度から高密度に撮影します。地形や建物など(大型)対象物に対して平行移動で撮影します。正面から撮影した写真ばかりだと、実際とは異なる歪みが生じる(ドーミング)ため、対策と精度の向上のために、20度を超えない角度で内側に向けて斜めに撮影した写真を追加します。撮影した画像データの質は、生成される3Dデータの精度に影響を与えます。対象物体がブレていたり画像にノイズが入っていると期待する結果を得られない可能性が高いです。質の高い画像データを得るために、カメラの設定を行う場合は、撮影場所の環境に合わせて次のことを意識して調整してください。F値:高めに(高すぎると画質が低下する)シャッタースピード:可能な限り短くする(ブレを防ぐ)ISO感度:可能な限り低くする(ノイズを減らして画質を高める)焦点距離:画像ごとに変わらないよう固定する※明るさが不十分な場合はソフトウェアで調整する実例の対象物体は、「環境が違っても、誰が撮っても、十分な精度の結果が得られること」を前提としていたためオートモードで撮影しました。焦点距離が異なる画像が含まれていると3Dデータの生成に失敗したため焦点距離を固定して撮影しました。次に、SfM/MVS処理をおこなうための環境を構築します。(Linux)環境での構築例を示します。GT2)OSの種類:64ビットディスク:500GB下準備ライブラリをインストールするために、以下のツールを準備しました。C/C++コンパイラC++11対応のコンパイラが必要です。Studio、GCC、ClangCMakeを実行するために使用します。開発環境に合わせたビルドファイルを生成するツールです。ライブラリをビルドするために使用します。ファイルの変更履歴を保持するバージョン管理システムです。ライブラリのソースコードをGitHubからクローンしてビルドするために使用します。複数枚の画像からSfM技術で低密度点群データを生成するライブラリです。低密度点群データを使用して、MVS技術で高密度点群データを生成するライブラリです。下図の構成になるよう新規フォルダを作成します。実行ファイル以下の順番でツールを実行します。SfMTest/outReconstruction/scene.mvs時間がかかる処理もあるので、以下のようなシェルスクリプトファイルを作成して実行すれば、上記の実行ファイルが一括処理されるので簡単です。3Dデータの表示・編集・変換などをおこなう無料ソフトウェアです。ファイルを読み込むと確認することができます。撮影条件を満たしていない画像や、色や形状の特徴が対象物体として適さない場合は、結果に大きな影響を与えることが分かりました。失敗例と原因は次のようなものです。点字ブロック写真の赤い丸どうし、緑の丸どうしが同じ場所を示していますが、オーバーラップ率が低すぎるため特徴点を十分に得られず、次のような結果になりました。写真のように同じ模様の繰り返しで特徴的な部分が少ない物体の場合は、オーバーラップ率の高い写真を多く撮影しても特徴点が取れないため、欠けた状態で出力されてしまいました。8枚の写真を使いましたがカメラ位置(左画像の緑点)が3点しか取れていないことからも分かります。SfMMVS工事現場の仮囲いこちらも同様に単調な形状のため、期待する結果は得られませんでした。物体の形状もカメラ位置も正しいものがありません。造花の置物そこまで明るい/暗いと感じない部分まで抜けてしまいました。特徴の少ない白や黒い物体はこのような結果になる可能性が高いです。その他に、透明なものや光沢があるものも対象物体としては向いていません。フォトレタッチソフトで画像を加工するとこの問題が解消される可能性はあります。処理をおこなうソフトウェアはいろいろあります。使用するよりも簡単で高速に高精度の3Dデータを生成できます。オープンソースの無料ソフトで、OpenMVGの機能をGUIで使えるようにしたツールです。高密度データの生成も可能です。有料ソフトですが、無料の評価版を試すことができます。起動すると以下のような選択画面になるので、いずれかを選んでください。mode」はプレビューとして使うには十分でした。codeライセンスキーを入力して製品版を使えます。traial30日間無料試用版です。全機能が利用でき、プロジェクトの保存や生成したモデルの出力も可能です。modeデモモードです。プロジェクトの保存や生成したモデルの出力はできずプレビューのみが可能です。機能的な制限はなく使えます。以下の初期設定をすると使いやすくなります。「GPU」タブ内にデバイスが検出されていれば、チェックを入れます。高精度の結果が必要な場合はハイスペックな環境が推奨されます。高解像度でオーバーラップ率の高い多くの画像を収集することが有効です。オーバーラップ率を意識した撮影の難しさ撮影時にオーバーラップ率を考えながら撮るのは手間がかかるため、動画撮影やドローンの自動飛行で撮影する等の自動化が有効です。映像のリアルタイム処理SfM/MVGは計算量が多いため、撮影しながらリアルタイムに3Dデータを生成することは困難です。撮影したデータからバッチ処理するのに向いた技術といえます。おわりにSfM/MVSは市販のカメラやスマートフォンで撮影した画像さえあれば3Dデータを生成できるため、様々なシーンに活用できます。解像度や必要枚数の制約はありますが、過去に撮りためた映像や、不特定多数の観光客が撮った写真から3Dデータを生成できる場合もあるでしょう。精度向上にはドローンを活用した自動撮影やオーバーラップ率を計算するシステム等の導入も有効です。弊社はシステム開発を会社として、パッケージソフトの販売ではなくお客様のニーズに合わせた”受託開発”を専門としています。本記事に記載された技術に関するご質問や、利活用のご相談などがございましたらお気軽にお問い合わせください。