はじめに
この記事は Babylon.js Advent Calendar 2025 の、14日目の記事です
3回に分けて、ガウシアンスプラットについて書かせていただきます。
1.Scaniverseによるスキャンと、Babylon.jsで表示する手順
2.ガウシアンスプラットの特長について
3.Babylon.jsでガウシアンスプラットのデータの編集
この記事は2番目、ガウシアンスプラットの特長についての前半、フォトグラメトリについてです。
半分くらい過去のものと重複しますが、一連の情報として記載します。
ガウシアンスプラッティングの仕組みの前に、まずはフォトグラメトリについて
前回の記事では、ScaniverseでスキャンしたデータをBabylon.jsで表示する方法を紹介しました。今回は、ガウシアンスプラッティング(3D Gaussian Splatting、以下3DGS)と比較のためフォトグラメトリについてです。
フォトグラメトリとガウシアンスプラッティングは、どちらも3Dにしたい物体を様々な角度から撮影し、写真の特徴点を起点に写真がどの位置から撮影されたかを推定します。
フォトグラメトリについて雑に理解する
フォトグラメトリは、この後写真の特徴点を詳細に計測します。以下はオフィスビルの写真に特徴点検出処理をした結果です。

複数の写真に対して同じ処理をして、ひもづっく特徴点がどの程度動いたかを計測します。(下図の赤い線が移動した幅)

実際に2枚の写真について特徴点検出とマッチングをした結果が下図になります。

手前に近づくにつれて横に移動した幅が大きくなっているのがわかります。
例えば2枚の写真が横に1m移動して撮影しているのであれば、特徴点の移動した角度から、撮影箇所から特徴点までの距離が計算できます。中学でやった三角比ですね。
これで特徴点の3次元位置の推定が可能になります。
あとは、3次元空間上で、特徴点間の紐づけを行い面を作成すれば立体化が可能になりますが、フォトグラメトリは以下のように柱が欠けたり上手く行かない場合があります。

フォトグラメトリは特徴点に由来して立体を構成しますが、写真ではなく図形を対象に特徴点抽出処理を実行すると特徴点抽出がどのように行われるかわかりやすいです。下図が図形に対して特徴点抽出処理を実行した結果です。
直線部分に特徴点が生成されないことが確認できます。

特徴点部分を拡大します。
①が特徴点となっています。①は白ですが、周辺は同じ白は3マス、異なる黒が5マスです。自身の色と異なるマスが5/8と多いため、特徴点として検出されます。
②も白黒が異なるだけで同じですね。
「x」のマスは黒いマスですが、同じ黒色が5/8マスと過半数のため特徴点として検出されません。

このように、直線部分、又は無地の部分は周囲と同じ色が多いため特徴点が生成されず、結果先ほどの柱の例のようにフォトグラメトリの再現性が落ちます。
このような問題に有効な手段としてLiDARセンサーがあります。
LiDARセンサーはレーザーを照射してその光が反射して戻るまでの時間で目標までの距離を測定します。
この方式では特徴点がなくても距離が計測できるため、特徴点では計測できない無地の扉(下図中央の画像)も、計測することができます(下図右側の画像)

ただし、LiDARは解像度がカメラ(4K~)ほど高解像度ではないので、細い部分など計測できない場合があります。
下図は、USBケーブルをスキャンした結果ですが、今度はフォトグラメトリで作成できたUSBケーブル(下図中央の画像)が、LiDARでは消えてしまっています。(下図右側の画像)

フォトグラメトリまとめ
このように、フォトグラメトリは特徴点から処理が始まるため、
直線と無地は死ぬ
という特性があります。
次はガウシアンスプラットについて記述します。
(長くなったので記事を分けます。)


