2枚の画像に写った「同じ平面」——机の天板、ポスター、道路面——の対応点は、一般の3次元シーンよりずっと単純な関係で結ばれる。カメラがどこにあっても、その平面上の点同士は1枚の 3\times3 行列だけで変換できる。この行列がホモグラフィ(homography、射影変換)である。エピポーラ幾何入門がシーンの奥行きを前提にした対応拘束を扱うのに対し、ホモグラフィは奥行きに依存しない対応を扱う点が対照的であり、両者を使い分けられて初めて2視点幾何の全体像がつかめる。
0. 30秒要約
- ホモグラフィ H は、同一平面上の点、またはカメラが純回転する場合の画像対応 \tilde{\mathbf{x}}'\sim H\tilde{\mathbf{x}} を表す 3\times3 行列である。スケール不定を除いて自由度8を持つ。
- DLT(Direct Linear Transform)法は、対応点1組につき2本の線形方程式を作り、4組以上の対応から H をSVDで線形に解く。数値安定化にはHartleyの正規化が有効である。
- 実際の対応には誤対応が混ざるため、RANSACで外れ値を除いてから最終推定する。最小サンプル数は4点であり、Essential/Fundamental Matrix推定よりロバスト推定の反復回数を抑えやすい。
- 校正済みカメラなら H=K(R+\mathbf{t}\mathbf{n}^\mathsf{T}/d)K^{-1} という形で、回転 R、並進の方向、平面法線 \mathbf{n} へ分解できる。ただし一般に複数の物理的候補解が残り、追加情報で絞り込む必要がある。
- 平面シーンや純回転では、EssentialやFundamental Matrixよりホモグラフィの方が適切なモデルになる。この縮退を検出できないと、奥行きの復元がそもそも成立しない状況で無理に3次元復元を試みることになる。
1. ホモグラフィとは何か:平面射影変換
2枚の画像上の同次座標 \tilde{\mathbf{x}}=(x,y,1)^\mathsf{T}、\tilde{\mathbf{x}}'=(x',y',1)^\mathsf{T} の間に、ある 3\times3 行列 H を使って
という関係が成り立つとき、H をホモグラフィと呼ぶ。\sim はスケールを除いて等しいという意味で、H を任意の非ゼロ定数倍しても同じ変換を表すため、H の自由度は 9-1=8 である。
物理的にホモグラフィが成立する条件は大きく2つある。第一に、対応するすべての3D点が1枚の平面上にあること。第二に、シーンが一般の3次元構造でも、カメラが並進せず純粋に回転(パン・チルト)するだけなら、奥行きに関係なくホモグラフィで説明できる。これはカメラが回転しかしない場合、視差そのものが発生しないためである。
2. DLT法による推定
対応 (x,y)\to(x',y') 一組から、H の各要素 h_1,\dots,h_9(\mathbf{h}=\operatorname{vec}(H))に関する線形制約を導く。\tilde{\mathbf{x}}'\times H\tilde{\mathbf{x}}=\mathbf{0} という外積がゼロになる条件を展開すると、対応1組につき次の2本の独立な方程式が得られる。
4組の対応があれば8本の式ができ、自由度8の H を(一般位置なら)一意に決められる。5組以上ある現実的な場合は、全対応を積んだ行列 A に対して A\mathbf{h}=\mathbf{0} の最小二乗解、すなわち A の最小特異値に対応する右特異ベクトルをSVDで求める。これがDLT(Direct Linear Transform)法である。
エピポーラ幾何の8点法と同様に、画素座標をそのまま使うと数値的に悪条件になりやすい。各画像の点群を重心ゼロ・平均距離 \sqrt{2} に正規化する相似変換 T,T' を適用してから解き、H=T'^{-1}H_{\text{norm}}T で座標を戻すHartleyの正規化DLTが標準的な実装である。
3. RANSACによるロバスト推定
実際の対応点にはミスマッチが混ざるため、DLTをそのまま全対応へ適用すると外れ値が解を大きく歪める。RANSACは次を繰り返す。
- 4組の対応を無作為に選び、DLTで H の仮説を作る。
- 全対応について、H による予測位置と実際の対応点との再投影誤差を計算する。
- 閾値以内の対応(インライア)が最も多い仮説を採用する。
- 最終的なインライア全部で再度DLTを解き、必要なら非線形最適化(再投影誤差の直接最小化)で仕上げる。
必要な反復回数は、インライア率 w、最小サンプル数 s=4、目標成功確率 p に対し
で見積もれる。同じインライア率でも s=4 のホモグラフィは、s=5〜8 を要するEssential/Fundamental Matrix推定より少ない反復で済む。これはSIFTやORBのマッチング直後に、まず粗くホモグラフィで幾何検証してから本格的な3次元推定に進む、という実装がよく見られる理由の一つである。
4. Hの分解:回転・並進・平面法線を取り出す
カメラが校正済みで内部パラメータ K_1,K_2 が既知なら、正規化ホモグラフィ \tilde H = K_2^{-1}HK_1 は、平面の単位法線 \mathbf{n}(カメラ1座標系)、平面までの距離 d、相対姿勢 R,\mathbf{t} を用いて
という形に書ける。カメラが純回転で並進がなければ \mathbf{t}=\mathbf{0} となり \tilde H=R、すなわち回転行列そのものになる。
\tilde H から R,\mathbf{t}/d,\mathbf{n} を復元する処理をホモグラフィ分解と呼ぶ。Faugeras–Lustmanの古典的な手法やMalis–Vargasの解析的な手法など複数のアルゴリズムが知られており、\tilde H^\mathsf{T}\tilde H の固有値分解を利用して閉形式の解を得る。ただし数式だけからは、物理的にあり得る解が最大4通り残る(符号反転や鏡映に対応する解を含む)。実務では次の情報で絞り込む。
- 正の深度(cheirality):三角測量した点が両カメラの前方にあること。
- 平面法線の妥当性:地面や壁面など、応用上あらかじめ分かっている大まかな法線方向との整合。
- 複数フレームでの一貫性:単一フレームで曖昧でも、時系列で追跡すると不自然な解は連続性を欠く。
OpenCVのdecomposeHomographyMatは、この分解を行い、複数候補とその評価に使えるフィルタ関数(既知の平面法線に近い解を選ぶfilterHomographyDecompByVisibleRefpointsなど)を提供している。
5. エピポーラ幾何との関係:いつHが正解になるか
エピポーラ幾何入門で見たように、一般の3次元シーンでの2視点対応はFundamental/Essential Matrixで説明される。ホモグラフィはその特殊ケースであり、次の表のように使い分ける。
| 状況 | 適したモデル | 理由 |
|---|---|---|
| 一般の3D構造、並進あり | F(未校正)/E(校正済み) | 視差が奥行きに依存し、1枚の平面に押し込めない |
| シーン全体、または着目領域が1平面 | H | 平面上の点はホモグラフィで厳密に説明できる |
| カメラが純回転(パン・チルトのみ) | H | 並進がなく視差が生じないためF/Eは退化する |
| 遠景を見ている、または視差が極小 | H(実務上の近似) | 奥行きの違いによる視差が画素ノイズに埋もれる |
問題は、「Hのインライアが多い」ことと「本当にシーンが平面・純回転である」ことが、観測だけからは区別しにくい場合があることだ。一般の3次元シーンでも、視野の大部分を占める壁や机がホモグラフィに強く適合してしまうことがある。ORB-SLAMの初期化処理は、この曖昧さに対してHとFの両方をRANSACで並行に推定し、それぞれの適合度をスコア化して、シーンの構造とカメラ運動に応じたモデルを自動選択する設計を採っている。単純にインライア数だけで比較するのではなく、モデルの自由度差を考慮したスコア(GRICに類する考え方)を使う点が実装上の要点である。
6. 応用:画像スティッチング・AR平面追跡・地面平面推定
画像スティッチング(パノラマ合成)は、カメラをその場で回転させて撮った複数枚の画像を1枚に貼り合わせる処理で、ホモグラフィの代表的な応用である。隣接画像間のホモグラフィを推定し、共通の基準フレームへワープしてブレンドする。カメラが純回転に近いという前提が崩れる(歩きながら撮る、近距離の被写体がある)と、視差によるゴースト・二重像が生じる。
ARにおける平面アンカー追跡では、机やポスターのような平面を初期フレームで検出し、以降のフレームとの間のホモグラフィを追跡することで、平面に対する相対姿勢を毎フレーム安定して求められる。分解して得た R,\mathbf{t}/d を使えば、平面座標系に固定した仮想オブジェクトを違和感なく重畳できる。
地面平面推定は、路面や床面という「ほぼ平面」であるという強い事前知識を利用する。車載カメラやロボットの床面検出では、連続フレーム間のホモグラフィを追跡し、そこから外れる領域(障害物、路面以外の物体)を検出する手法が使われる。これは物体そのものを認識するのではなく、幾何学的な整合性の破れを検出するアプローチである。
7. OpenCVでの実装例
import cv2 as cv
import numpy as np
orb = cv.ORB_create(nfeatures=3000)
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
matches = cv.BFMatcher(cv.NORM_HAMMING).knnMatch(des1, des2, k=2)
good = [m for m, n in matches if m.distance < 0.75 * n.distance]
p1 = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
p2 = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
# threshold は画素単位の再投影誤差許容量。RANSACの代わりにUSAC_MAGSACも選べる。
H, mask = cv.findHomography(p1, p2, method=cv.RANSAC, ransacReprojThreshold=3.0)
inliers = mask.ravel().astype(bool)
# K が既知なら候補解を分解する
num_solutions, Rs, ts, ns = cv.decomposeHomographyMat(H, K)
findHomographyが返すHはスケール不定であることに注意する。分解して得られる並進ベクトルも、エピポーラ幾何のEssential Matrixと同様に方向のみが定まり、絶対スケールは別の手段(既知の平面距離、ステレオ基線、慣性センサなど)で与える必要がある。
8. 苦手な条件
- 平面性の破れ:見かけ上は平面に見えても、厚みのある物体(本、看板の縁、植栽)が混在すると、それらの点は系統的な外れ値になる。RANSACの閾値を安易に緩めると、非平面点まで取り込んでH自体が歪む。
- 純回転の仮定が崩れる:スティッチングで手持ち撮影がわずかに並進すると、近い被写体ほど大きくずれるゴーストが出る。三脚使用やレンズ光学中心付近での回転が望ましい。
- 退化構図:対応点が画像の一直線上や狭い領域に集中すると、DLTの行列が悪条件になり、H の外挿部分(対応点から離れた領域)で誤差が急増する。
- 反復模様・低テクスチャの平面:タイル張りの床、格子窓のような反復模様では、局所記述子だけでは正しい対応か1周期ずれた誤対応かを区別できない。
- 分解の多義性:K が不正確、あるいはノイズが大きい場合、分解で得られる複数候補のうち物理的に正しいものを一意に選べないことがある。追加の事前知識(法線の向き、正深度)を必ず併用する。
9. まとめ
ホモグラフィは、平面上の対応、あるいはカメラの純回転という2つの限定的だが実務上頻出する状況を、たった1枚の 3\times3 行列で正確に表現する枠組みである。DLT法は最小二乗の出発点、RANSACは外れ値対策、分解は物理的な回転・並進・法線を取り出す最終段である。何より重要なのは、いつホモグラフィが正しいモデルで、いつFundamental/Essential Matrixに切り替えるべきかという判断であり、この境界を誤ると、平面しかないシーンから存在しない奥行きを復元しようとして破綻する。
参考資料
- Hartley & Zisserman, Multiple View Geometry in Computer Vision(著者公式ページ)
- Fischler & Bolles, Random Sample Consensus(Communications of the ACM, 1981)
- Malis & Vargas, Deeper Understanding of the Homography Decomposition for Vision-based Control(INRIA Research Report RR-6303, 2007)
- Mur-Artal, Montiel & Tardós, ORB-SLAM: A Versatile and Accurate Monocular SLAM System(IEEE TRO, 2015)
- OpenCV — Basic concepts of the homography explained with code
- OpenCV — findHomography / decomposeHomographyMat リファレンス
- OpenCV — Image Stitching module
コメント
コメントの投稿にはログインが必要です
まだコメントはありません。