Novel View Synthesis (NVS)
新規視点合成は、深度ワーピング、NeRF、ガウシアンスプラッティング、拡散モデルを用いて、撮影されていないカメラ位置からシーンの画像を描画します。
新規視点合成(NVS)とは、1枚以上の入力画像をもとに、撮影されていないカメラ位置から見たシーンの画像を生成するタスクです。モデルは、表面の位置や新しい角度からの見え方、さらにどの入力カメラにも写らなかった領域を埋めるものを推定する必要があります。NVSは自由視点映像、バーチャルツアー、3Dビデオ通話、記録済みの走行を新しい経路から再生するシミュレーターに活用されます。また、保留した写真から新しい角度でのシーン表現の妥当性を直接評価できるため、3D コンピュータービジョンモデルの標準的なテストにもなっています。
新規視点合成の仕組み#
最も単純な手法は、ピクセルを再投影することです。すべてのピクセルの深度値があれば、各点を新しいカメラから見える位置に移動できます。これは深度画像ベースレンダリングと呼ばれる手法です。カメラに近い点ほど遠方の点より大きく移動します。また、入力では隠れていたものの新しい位置から見える表面には穴が残り、これをディスオクルージョンと呼びます。穴は埋める必要があります。この例では、Middleburyステレオペアの左画像と視差(逆深度の一種)から右視点を合成し、ワープ処理が参照していない実際の右画像と比較します。
import numpy as np
from skimage import data
from skimage.metrics import peak_signal_noise_ratio as psnr
# Left view, the real right view (held out), and per-pixel disparity (inverse depth) for the left view
left, right, disp = data.stereo_motorcycle()
ys, xs = np.nonzero(np.isfinite(disp))
xt = np.round(xs - disp[ys, xs]).astype(int) # column where the right camera, 0.19 m away, sees each pixel
# Paint far to near so the nearest surface wins where several pixels land on one spot
order = np.argsort(disp[ys, xs])
ys, xs, xt = ys[order], xs[order], xt[order]
keep = xt >= 0 # drop pixels that leave the frame
novel = np.zeros_like(left)
novel[ys[keep], xt[keep]] = left[ys[keep], xs[keep]]
# Holes are spots no left pixel reached, such as surfaces the left camera never saw
filled = novel.any(axis=2)
print(f"Holes: {1 - filled.mean():.1%} of the novel view")
print(f"PSNR, synthesized view: {psnr(right[filled], novel[filled]):.1f} dB")
print(f"PSNR, left view copied: {psnr(right[filled], left[filled]):.1f} dB")合成ビューのピーク信号対雑音比は、実際の写真を使って測定すると26.9 dBです。左画像をそのまま再利用した場合の12.9 dBを上回りますが、新しいビューの17.0%には穴が残ります。1枚の写真の場合、視差は単眼深度推定から得られます。Ultralytics YOLO26の深度モデルは各ピクセルの深度をメートル単位で予測し、任意のカメラ移動量に対応する視差に変換できます。CVPR 2020でMeng-Li Shih氏らが発表した3D写真手法はこの方法に従い、学習済みの画像インペインティングで穴を埋めます。
高密度な撮影データでは、シーンごとの最適化が可能です。通常はStructure from Motionでカメラ姿勢を推定した、数十枚から数百枚の写真を使います。2020年にBen Mildenhall氏らが発表したニューラル放射場では、任意の3D点における色と密度を返すネットワークを適合させ、各カメラ光線に沿ったボリュームレンダリングで新しいビューを描画します。2023年にBernhard Kerbl氏らが発表したガウシアンスプラッティングでは、ネットワークを数百万個の3Dガウスに置き換え、リアルタイムでラスタライズします。速度は1080pで毎秒30フレーム以上です。どちらも、レンダリング結果と入力写真を比較する微分可能レンダリングで学習します。
入力が1枚か数枚しかない場合、生成モデルがカメラに写らなかった情報を補います。2023年にコロンビア大学が発表したZero-1-to-3など、入力画像と相対的なカメラ姿勢を条件とする拡散モデルは、物体の裏側のもっともらしいビューを生成します。また、マルチビュー拡散手法では、整合性のある複数のビューを生成してから、それらに合わせて3D表現を適合させます。
品質は、保留した写真を使い、PSNR、構造類似度指数(SSIM)、学習型知覚距離のLPIPSで測定します。ベンチマークには、NeRF論文の合成Blenderシーンや、Mip-NeRF 360の境界のない実シーンなどがあります。
関連概念#
ニューラルレンダリングは、ニューラルネットワークを基盤とする幅広いグラフィックス技術群であり、NVSに加えて、リライティング、アバター、画像編集も含みます。3D再構成ではメッシュなどの計測可能なジオメトリを目指しますが、NVSはレンダリング画像だけで評価されるため、ジオメトリがぼやけていても放射場で説得力のある描画が可能です。ステレオビジョンでは逆方向にワープを実行し、2つの実際のビューから視差を測定します。フレーム補間では固定視点から新しい時間の映像を生成します。また、カメラ制御による動画生成では両方を組み合わせ、生成したシーン内で仮想カメラを動かします。動的シーンでは、4Dガウシアンスプラッティングなどの手法を使ってNVSを時間方向に拡張します。
実際のアプリケーション#
- 3Dビデオ通話: Google Beam(旧Project Starline)は、複数のカメラで参加者を撮影し、ライトフィールドディスプレイ上で視聴者の目の位置から見た映像をレンダリングします。
- 仮想現実と複合現実: 撮影した部屋、製品、ランドマークを探索可能なシーンに変換し、ヘッドセットが頭の位置に合わせて再レンダリングします。
- 運転シミュレーション: 記録した走行をニューラルネットワークで再構成し、実際には車が走らなかった経路からカメラ映像をレンダリングして、認識機能のテスト用合成センサーデータを生成します。WaymoとGoogleの研究者は、280万枚の画像からBlock-NeRFを構築し、サンフランシスコの近隣地域全体をレンダリングしました。










