RealityCaptureで複数のカメラで撮影した画像群を一度にアライメントしようとすると、特定のカメラのほとんどが無視されるような状況になることがあります。例えば、私が取り組んだプロジェクトで以下のような例がありました。
アライメントしようとした画像
- Sony Cyber-shot DSC-RX-100(コンデジ)で撮影した画像100枚
- Sony α7IV(フルサイズ)で撮影した画像50枚
- Sony α7IVで別日に撮影した画像1000枚
このとき、すべての画像を入力してアライメントをすると、コンデジとフルサイズで同日に撮影した150枚のみがアライメントされ、別日にフルサイズで撮影した1000枚が無視されてしまいました。

このとき、無視された画像は特徴点が「0」となって、「小さなコンポーネント」も生成されないという状態になります。アライメント設定から検出感度を「高」や「ウルトラ」にしたり、1画像あたりの最大特徴点数を80000点に引き上げても変わりません。
ISOが高すぎたのか(撮影場所が暗所だったため6000~12800でした)、画像サイズが大きすぎるのか、使用する画像の枚数に制限があるのかなど、いろいろ悩みました。
結論としては、RealityCaptureは画像の入力順にアライメントしているようで、周辺環境が大きく変わっている場合、先に入力された画像を優先して処理し、後の画像を無視するような処理をしているようです。無視された1000枚の画像のみを入力してアライメントすると、何も問題なくアライメントできました。個人的には、後から撮影した写真の方が枚数が多いので、こちらを基準にモデルを作成してほしかったのですが、あくまで入力順でアライメントしているようです。
よって、RealityCaptureで複数日・複数カメラで撮影された画像をアライメントするときは、メインとなる画像を先に入力してアライメントし、カメラごとに入力を追加して再アライメントすることが必要です。
複数日に撮影された写真を使用する場合
例えば、最近、ある建物を対象に1万枚の画像のアライメントをしました。この時の構成は以下のような形でした。
- DJI Marvic3(ドローン)の写真2000枚
- DJI Mini 3 Pro(ミニドローン)の写真500枚
- コンデジAの写真3000枚(内外観)
- コンデジBの写真3000枚(内外観)
- フルサイズの写真1500枚(内観)
これらは、同日に撮影されたものではなく、3年間にわたって別々の人が撮影したものです。この期間中、足場が設けられたり、建物が解体されたり、状況がかなり変化しています。これらを一括してアライメントすることは不可能です(やろうとして失敗しました)。
成功した方法は以下の通りです。
まずは、ドローンで同日に撮影された2000枚の写真をアライメントし、外観の基準となるコンポーネントを作成します。その後、ミニドローンで撮影した500枚を加えて再アライメントし、外観の形を整えます。続いて、コンデジA・Bで撮影した画像の中から、外観部分に関係する画像のみを入力し、再アライメントして外観のディテールを完成させます。小さなコンポーネントが発生した場合には、適宜コントロールポイントを追加して場所を教えてあげます。位置推定が全く違う写真、あまりにも接写で役に立たない写真は思い切って「アライメントで使用」「メッシュ作成で使用」「テクスチャと色付けで使用」の3項目を無効にして、モデルから切り離します。
内部は、別のプロジェクトとして作成し、コンデジA・Bの内観写真を入力しておおよその位置をアライメントします。続いてフルサイズの写真をアライメントして精度を上げます。問題なくアライメントできていれば、Exportからコンポーネントを保存します。このコンポーネントをメインのプロジェクト側で読み込んで、共通点となる場所をコントロールポイントに設定し、アライメントします。

これで、内外にまたがる完全なアライメントができます。アライメントを複数回するということは、それだけ時間がかかりますが、仕方ありません。
基準となる画像を先に入力して全体像をアライメントし、小さなコンポーネントができた場合にはその都度コントロールポイントを付け足してマージしながら、さらにディテールを撮影した画像を入力してアライメントを繰り返すことが必要です。