最近のフォトグラメトリ作例とざっくり解説
冬コミ受かってました!!!やっていくぞ!!
— 桐生あんず@C97月曜ホ-29a (@anzu_mmm) November 1, 2019
あなたのサークル「桐湯出版」は、コミックマーケット97で「月曜日南地区 "ホ " 29b」に配置されました!コミケWebカタログにてスペース配置場所公開中です! https://t.co/tQpFsC5IYt #C97WebCatalog
- コミケ受かりました。
今回はフォトグラメトリ始めてから三年間の流れ?、どういうふうに勉強してきたのかをまとめた薄い本を出そうと思います。
まだ決めていませんが。
- 最近の作例
水神社・石神井公園
今日スキャンしてきたばかりの水神社とその周辺。ほかほかです。
場所:
2011年頃には違う形の土台が建ってたのが確認しましたので、こちらの水神社は少なくとも二代目か。
撮影は社のみと周辺を2回に分けて(SDカード容量のせいで仕方なく)、Sketchfabに映っていないところ含めて合計1500枚程度。
別々撮影したところはControl Pointで繋げました。
休日の朝は起きれないので2回とも午後の3時半ぐらいから撮影開始。暗くなったら撤収という感じでした。
機材は
α7R3, Samyang 14mm F2.8 ED AS IF UMC.
ISO 1000-1600, SS 1/50 - 1/100, 絞り5.6-8。
しょうがない。暗かったから。
MFフォーカスはだいぶ慣れてきまして、被写体から1m離れてしまえば大体無限遠までピントが合います。ほぼ接写する時に注意すればOK。
MFレンズで撮る時は手ぶれ補正もManualに14mmに設定します。
まあ…オートフォーカスのSAMYANG AF 18mm F2.8 FEが欲しいですね。
価格.com - SAMYANG AF 18mm F2.8 FE 価格比較
それとも最短撮影距離の短いタムロン20mmを待つかどうか
切り株・石神井公園
Huawei P30で撮りました。
周りがかなり暗くなってる中で撮影、仕方なくISOを200ぐらいあげました。
スマホのISO 200はつらかった。体感的にa7R3のISO 6400ぐらいあったかなと思います。
472枚。42mpx(メガピクセル、RealityCaptureのMax features per mpxもこれ)
現像がしんどかった。
もうHuawei P30はJPG撮って出しにしようと思いました。
葉っぱが撮れてよかった。この作例はそれだけでした。
Single Camera Head Scanning (タイトル自体が撮影ヒント)
16枚と17枚。
a7R3, SEL55F18Z, SS最優先。
撮影のコンディション(時間帯が悪かった、椅子無しなど)がよくなかったのでまだ改善する余地がありますが、朝弱い。
終了。
現像している間テクスチャ無しローポリの水神社をRCのSimplifyツールで作りました。
こういうゲームシーンありそうか。ないか
石神井公園,水神社. Shakujii Park - 3D model by Yu (@FFT_kedar) - Sketchfab
回転台がない、背景布もないけど、被写体の底面も綺麗にフォトグラメトリしたい。
前言ってた要らないネタ集の中で書きたい1つ、 「回転台がない、背景布もないけど、被写体の底面も綺麗にフォトグラメトリしたい」。普通のスタジオだったら回転台と照明を使えばめちゃくちゃ楽にスキャンできるからこの技要らないしね。
フォトグラメトリやってて、Metashapeの経験者でしたら今回載せてるスクショだけでどうスキャンして処理したのかがわかるはず?
(スキャンしたのがずいぶん前なので撮影方法がへたくそ、しかも携帯で撮ったので()
Chunk1 Top
Chunk2 Bottom
Chunk3,4 MASK
Photoshopや背景布、回転台など一切使わずに底面が撮れました。
完成です。
(周りの照明環境だけをちょっと見たほうがいいと思います。)
Alignmentがうまくいかないときの4つの対処法。 #フォトグラメトリ
今回はAlignmentがうまくいかないときの対処法について適当に自分の考えを書きたい。
Alignmentがうまくいかない
こんな感じのものとか。
写真がきれいに撮れてる(かもしれない)のにアラインされない。
こんな感じのものとか。水吹きですね。
二つの被写体が生成されたり。
そんな時の対処法
1.撮り直そう
撮りなおす前になぜアライメントがうまくいかなかったのかを考えよう。
- その被写体が本当にフォトグラメトリに向いてるのか。
- うまく撮れてたのか→手ぶれしたのか、オーバーラップ率どれぐらいだったか、撮影枚数足りてたか。
- アライメントの設定、パラメータの意味を理解できてたのか。 →アライメントの精度(高)はどういう意味なのか。
- Photogrammetryソフトのせいにしないこと
2.もう一回アライメント
Metashapeの場合
- ワークフロー→アライン→「現在のアライメントをリセット」をチェックはずして、もう一回アライメントすれば、アライメントできなかった画像もこれでうまくいける可能性がある。
- 位置が間違ってる画像を選択して右クリック→「カメラのアライメントをリセット」(→ツール→カメラ最適化)→(「現在のアライメントをリセット」をチェック外す)もう一回アライメント
- 位置が間違ってる画像を見つける方法。投げ縄ツールでタイポイントを選択して右クリック→タイポイントで写真をフィルタリング。
RealityCaptureの場合
3.(背景を)マスクかけよう
- (主に回転台)
- そもそもマスクかけずにどうアライメントしてもうまくいかない
- Metashape→マスク適用先「タイポイント」、あるいは他のソフト
- RealityCapture→Photoshopなど他のソフトから
- ポイント制限によるマスク
- MetashapeはKey/Tie pointsを0にして無制限にすることができるが、それは逆に間違ったカメラ位置が推定される恐れがある。
- 同じくRealityCaptureも、detector sensitivityを上げすぎると(ultraとか)、その分の推定エラーが出る、featureも制限をかけたほうがよいと思われる。
4.撮り直そう
以上です。 撮り直しが一番です。
どうしても撮り直しができないときはこれらの対処法を実験してもいいと思います。
5.人が書いたチュートリアルを鵜呑みにしない
自分で試したり勉強するのが大事
次の技術書典7で「フォトグラメトリスタジオでほとんど使う必要のない小技、ネタ集」を出したい
友達のサークルが技術書典7受かったので、今回は委託で参加させていただこうかなと考えてる。
昨日思いついたトピック
「フォトグラメトリスタジオでほとんど使う必要のない小技、ネタ集」
- 劣悪の照明環境の中でいかにして最高クオリティのRaw Photogrammetry Scanを出せたのか
- 一台のカメラでフェイシャルスキャン(照明無し、ヘッドレスト無し)
- 回転台がない、背景布もない、が被写体の底面も綺麗にスキャンしたい。
- タイムラプスフォトグラメトリ
- ネコと和解せよ
- .....
それぞれ実際に自分で作ったモデルで説明しようと思う
1.照明なし、ごく普通の家にある蛍光灯のみでのスキャン
2.ヘッドレストがなく、ライティングももちろんなかったけど、撮影と処理を頑張ればこれぐらいのスキャンはできるはず
3.だた机の上に置いてスキャンしただけ、Photoshopも使わなかった
4.。。。モデルはまだ準備段階
5.ネコと和解せよ
頑張って書くか…
今回は原稿を落とさないように
Alignmentの話 PART2 画像読み込みの実例とプリキャリブレーション
のつづき。
ちょうどSamyang 14mm f2.8 ED AS IF UMCを持って撮影してきたので、そのデータを使って前回のつづきを書きたい。
(また、7/6に母校立命館で一日フォトグラメトリの授業を担当してきて、そこで教えたMetashapeの小技を少しだけ)
まず復習を
- 「同じカメラ+同じレンズ」で撮った写真の歪みが同じなはず(特殊な状況を除く)
- フォトグラメトリソフトで画像処理する際に、同じ歪みを持つ画像群を「1つ(1セット)の歪みパラメーター」でアライメントしたい
- Metashape(RC)などでは自動で写真データをグループ化し、同じクループ内にある写真の歪みを同じパラメーターで処理するが、それは常に正しくグループ化されるわけではない
- 「同じカメラ+同じレンズ」で撮った画像のデータセットを「1つの歪みパラメーター」→つまり「同じグループ」に指定したい
2019.08追記
最近はそこから一方進んでがちでカメラのキャリブレーションを勉強したらまた新しい知見が得たので、おそらくこの2回の記事を読んだ人記事の内容を全部信用しなくていい
2019.09追記
厳密にいうと、シャッターを切るたびにレンズのパラメータが少しだけ変わってしまう。
→フォーカスの違いで変わる焦点距離(望遠であればあるほど違いが大きい)
→手振れ補正機構による歪み
つまりさらなる高い精度を追求するのであれば、一度グループ化してアライメントしたあとに、もう一回グループ解除してキャリブレーションする必要がある。
- RealityCapture
実際に今回これを作ったときの処理について説明したい。
一般的なデジタルカメラで撮った画像ならこちら(Workflow→Setting)をTrueにするといいだろう。
するとインポートされた画像が自動的にグループ化される。(もし複数台の同じカメラ+レンズでスキャンする場合はFalseにして、手動グループするほうがよいかと)
しかし
今回使ったSamyang 14mm f2.8はそもそも電子接点がついてないマニュアルフォーカスのレンズだ。Group Calibration by ExifをTrueにしてもグループ化されないままだ。
インポートされた画像を選択して、グループ値が -1 → グループされない。
もちろんこの場合のアライメント結果は画像それぞれが違うカメラと認識され、各画像に別々のレンズDistortionが付与される。
ちなみにレンズExifがないからこちらも効かない。(Imagesを選択することで見える)
となると、Calibration GroupとLens Groupの-1のところを書き変えて、マニュアル的にグループすればいい。
0か1かなんでもいい値に。 (一つ以上のカメラグループを作りたいならそれぞれのグループに違う値を与える。)
ーーーーーーーーーここからのワークフローに疑問が涌いたので中断
Alignmentの話 PART1 画像の読み込み
Alignmentの精度(SfM精度?)について書いていいかどうか迷ってた、なにせ趣味でフォトグラメトリをやっている人だったらそこまでこだわる必要ないし、仕事/研究でやっている人間だったら大体僕より詳しい。
そもそもこの記事で書かれている内容が間違っているかもしれない。
画像データの読み込み
おそらくどのソフトも共通
前提
- 「同じカメラ+同じレンズ」で撮った写真の歪みが同じなはず(特殊な状況を除く)
- フォトグラメトリソフトで画像処理する際に、同じ歪みを持つ画像群を「1つ(1セット)の歪みパラメーター」でアライメントしたい
- Metashape(RC)などでは自動で写真データをグループ化し、同じクループ内にある写真の歪みを同じパラメーターで処理するが、それは常に正しくグループ化されるわけではない
- 「同じカメラ+同じレンズ」で撮った画像のデータセットを「1つの歪みパラメーター」→つまり「同じグループ」に指定したい
(わざとグループ分けただけ)
するとそのやり方は
Importする前に画像の回転を揃える。
ExifToolGUIなどで自動回転を消して、Importして確認。
ソフトが画像データをグループ化するときに、向きの違う画像群を別々にグループ化される恐れがあって、自動回転Tagを消して向きを直せばOK。
(しなくても同じカメラで撮った画像データが大体一つのグループにまとまるけど、縦に撮った写真が90度か270度に認識されることがあって、違うグループにされるかもしれないらしい。自分はグループ化されないときだけはこれをやる。
また、RAWデータの現像処理は自分でも実はよくわかってないから割愛、Vladさんのチュートリアル参照)
Agisoft Metashapeの場合
- 「ツール」→「カメラキャリブレーション」
Metashapeでは自動的にImportされた画像をEXIFデータごとに(イメージセンサーとレンズで)グループ化し、予めそれぞれのグループをプリキャピブレーションする(→カメラのfの値をEXIFから読み込み、それを大体の基準として写真をアライメントする)。
fというのは、画面距離(厳密にはレンズの焦点距離ではなく、撮影時のイメージセンサと光学中心との距離を1画素の大きさで除したもの)で、3次元空間を2次元の画像に投影するときの縮尺倍率を決めるものであり、最も重要な内部パラメータである。
EXIFデータがない場合は、Metashapeは全部の画像データをカメラのイメージセンサー/画像の解像度でグループ化し、そのレンズを35mm相当の焦点距離50mmと仮定し、写真をアライメントしようとする。
結果的にそのまま1回目のアライメントではよくないデータが返ってくる。
一方、EXIFデータがなくても、Metashapeでピクセルサイズ(イメージセンサのサイズ/画素数;つまりセンサ面上の1画素の大きさ)と焦点距離を入力すればfの値が出てくる。
(あるいはそのままf値を入力する。
- 「ツール」→「カメラキャリブレーション」→「タイプ」→「Auto」を「予備測定」に変更→入力
極一部のケースではこれをする必要があるが、僕はやってる、めっちゃやってる。
例えば電子接点のついてないレンズを使わなければいけないスキャン案件などなど)
また、Importする前に写真のEXIFデータを(exiftoolなどで)いじってデータを手動入力することもできる。
RealityCaptureの場合
を参照しましょう。
importされた画像をグループ化する方法。
(デフォルト設定ではグループ化しないらしい)
“Clear Calibration Groups” – Ungroup and “Group Calibrations w.r.t. EXIF” – Group.
か
Enable grouping on image import.
WorkFlow - Setting - ImportSettings [Group Calibration by exif] - True
Camera grouping by EXIFはできるが、焦点距離のマニュアル入力などはできないようだ。 もできる。
Calibration Groupの下に
ここまでが画像をimportする時のSfM的に正しいやり方だと考えるが、実際これやるとどうなるの?
- タイポイントのノイズが減る
- より綺麗なメッシュが得られる
でどのぐらいの効果かというと、
趣味やAR/VR程度の3Dモデルだったら全くやる必要がない。 Exif情報が取れるカメラ/レンズで撮影して、普通にアライメントして失敗した時にこれやってもダメ、鏡面反射の強い被写体も諦めて別の方法でスキャンしよう。
(ビデオから画像を切り出してExifデータがなく、しかもズームしたりしてカメラグループがめちゃくちゃ? そんなの知らない )
[完]