Metashapeを用いたSfM入門

# 1. はじめに
　SfM(Structure from Mortion)は、カメラを少しずつ動かしながら撮影した画像を組み合わせて、被写体の3次元構造を復元する技術です。遺跡・仏像などの文化財、橋梁・橋げたなどのインフラ構造物の記録・調査・点検に幅広く用いられています。ここではこのSfMでできることとその基本的な流れについて、Metashapeというアプリを用い、最も短い手順で説明します。
https://www.agisoft.com/features/professional-edition/
MetashapeはAgisoft合同会社のソフトウェア製品です。
# 2. 導入
## 2.1 ダウンロード
　まず、次のサイトからインストーラをダウンロードします。
https://www.agisoft.com/downloads/installer/
　ここではWindowsOSでの導入について説明しますので、Professional EditionのWindowsのリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/c294b9ac-f14e-2c8a-753d-176d533c12c0.png)
　ダウンロードが始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/4badcb4e-0805-5a2b-d062-c3c6bc51a29c.png)
　ダウンロードが完了したらプロパティを開き、セキュリティの「許可する」にチェックを入れ、「OK」を押して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/c08a1076-38ad-cbf4-e731-743d4a6a443f.png)
## 2.2 インストール
　ダウンロードしたファイルを右クリックし、「インストール」を選択します。
　次の画面が現れるので「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/1d6ef242-ee21-8a6b-a0ea-1416cad73157.png)
　次の画面のライセンス条項を読み、問題が無ければチェックボックスにチェックを入れて「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/0150665a-0239-c32a-55d7-84d2f6003dfd.png)
　インストールオプションの設定画面が出ますがそのまま「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/ac308fee-30a1-cf26-4bc3-e8332f7eb10d.png)
　Create desktop shortcut for this program.にチェックを入れて、「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/7bd1ea0d-98c1-6bb0-b27c-7e9578c21cad.png)
　インストール対象が"Professional"になっていることを確認して、「Install」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/85320fa4-b3ca-bef2-b02b-f27d070f6637.png)
　画面が切り替わり「このアプリがデバイスに変更を加えることを許可しますか？」と出るので「はい」をクリックすると、インストールが始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/1eeeaa15-1d35-c170-f19e-7d6da6eb4404.png)
　完了すると次のメッセージが出るので「Finish」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/62c67b6c-3e75-b13b-4323-92791b2f306b.png)
## 2.3 起動
　デスクトップに作られたアイコンをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/401adbc0-e42b-44cd-4ec1-b42d4f26645c.png)
　最初に次のように表示されますが、そのまま少し待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/4c2b441b-798b-a4f2-e8ff-e81fdd461479.png)
　すると今度は次の画面が出ます。ライセンスを取得済みの場合はコードを入力しますが、デモモードで試用することとして説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/e313d098-1b3e-2efc-029b-dbfb8beeb211.png)
　Continue using Metashape Professional in demo modeにチェックを入れ、OKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/f41d6733-fac6-1ec3-126f-ca6ca4c356db.png)
　これで起動は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/0fcc86ec-f8d5-afe6-8345-d721fe47efe9.png)
## 2.4 日本語化
　以降日本語環境で説明しますので、GUIの表記を日本語に変更します。Toolsからpreferencesを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/273e1779-207e-2f66-93d8-dfdbe2a3d7bd.png)
　LanguageからJapaneseを選択して「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/4b4fbd34-353e-7646-dc52-200b6a27f554.png)
　GUI表記が日本語化されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/5d6bfc9d-dd11-ba0b-4ec6-ee9886e17827.png)
# 3. 操作
## 3.0 写真撮影
　冒頭で説明したように、「カメラを少しずつ動かしながら撮影した画像」が必要です。これは、この技術が、ある写真に写っている点がその他の写真のどこに写っているかを辿るという手順を必要とするためです。なので、例えばある物体を上下・左右・手前・奥の6方向から撮影した画像は不適です。ビデオカメラでゆっくり舐めるように撮影するとよいので、ここでは例としてトイドローンを用いて撮影したビデオを使うことにします。被写体は白板に貼り付けた猫のマグネットにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/155a8379-e8f8-c3e1-7e4e-3bd304217b6c.png)
　ここでは、ビデオから1秒間に5フレームの静止画を抜き出したものを入力することとします。用意した64枚の画像はこのようなものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/e248a121-df05-13d4-aae8-49b9e4e6ba25.png)
　画像はこちらからダウンロードできます。
[画像サンプル](https://drive.google.com/file/d/1OHQ3_mwRc0V2BsMwiQQN0RT-kliPVpwp/view?usp=sharing)
## 3.1 画像の読み込み
　まずは画像を読み込みます。「ワークフロー」から「写真を追加」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/3ca71ecf-5622-741e-03a6-d52a7ccf5428.png)
　画像が置かれているフォルダを開き、追加する写真を選択します。フォルダ内のすべての画像を選択する場合はCtrl+Aキーを押します。選択できたら「開く」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/96fc5278-1eac-3954-71ae-301e79317701.png)
　「写真」の領域に写真の一覧が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/3e4fda6d-42d2-1267-fc0c-7cdf93dd8f8b.png)
## 3.2 特徴点の3次元座標計算
　ここからが昨今のSfMのすごいところです。それまでは、カメラパラメーターの設定・特徴点の抽出・対応付け・カメラの位置推定・特徴点の3次元座標計算と順を追い、場合によって反復を繰り返して四苦八苦する手順が、たったのワンクリックで実行できます。カメラパラメーターはデフォルトの初期値から自動計算されるので一切の入力が不要です。「ワークフロー」から「写真のアライメント」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/c0745acf-af4a-bafa-ea85-4f477773376c.png)
　オプションが指定できますが、一先ずデフォルト設定のまま進みます。「OK」をクリックして下さい。Celeronのようなpoorなマシンでも3分程度で完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/467f3579-24fe-06bd-5e77-1ad90ad69c19.png)
　処理実行中の画面が次のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/3a9626d4-3a8d-562f-33e6-e7b12cb1d9cf.png)
　実行結果は次のようになります。表示されているのは写真間で対応が見つかった特徴点です。「モデル」領域におぼろげながら、被写体の猫ちゃんたちが並んでいるのがわかるかと思います。この領域の表示は、マウスの左右ボタンを使ってドラッグすることで調整することができます。まず、点群の中央付近の点の1つをダブルクリックして回転中心を決めます。その後、ボタン左で回転、ボタン右で平行移動ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/0fc597a8-b18e-9f97-a53b-3db715817471.png)
　次に、近い特徴点同士をつないで表面データを作成します。「ワークフロー」から「メッシュ構築」を選択して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/f75137e6-42b9-a4cb-1f37-b0271c5f546c.png)
　オプションが表示されますが変更せずに、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/3a7b9878-e4ab-3741-bd34-1775cc7e50f7.png)
　次はテクスチャの作成です。「ワークフロー」から「テクスチャ構築」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/8a2bb38e-e32d-147b-87de-f0b82ec75c89.png)
　オプションが表示されますが変更せずに、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/8fa03a81-246c-42b0-8840-439fb7378a24.png)
　3次元モデルが復元されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565347/76d4ade8-d520-a2fe-09e5-d58b048a69a2.png)
# 4. おわりに
　今回は入門ということで、復元品質を度外視して被写体の3次元モデルの作成までの最短手順を説明しました。ここでは触れませんでしたが、カメラパラメーターの入力やタイポイントの設定などにより、復元品質を向上させることができます。また、SfMの目的は測量ですが、このままでは長さや高さを測ることはできません。このためには「ジオリファレンス」と呼ぶ操作が必要になりますので、興味のある人は他記事を参照して下さい。