対応点マッチング — 2枚の画像の「同じ場所」を結ぶ

視点を変えて撮った2枚の写真。その中から「これとこれは同じ場所だ」というペアを機械に見つけさせるのが対応点マッチングです。パノラマ合成・AR・3D復元、すべての入口になるこの技術を、星座マッチングのデモで体感します。

1. 「同じ場所」はどうやって見つける? — 記述子

前のレッスンで、画像の中から「目印になりやすい点(特徴点)」を見つけられるようになりました。次の問題は、別の写真に写った同じ点を探し当てることです。視点が変われば位置も向きも変わるので、「座標が近いから同じ」という作戦は使えません。

そこで各特徴点について、その点の周りの模様を数の並びに要約したものを作ります。これを記述子(ディスクリプタ)と呼びます。人間でいえば指紋のようなもの。「周りがどんな見た目か」を数値化しておけば、2枚の画像の間で記述子どうしの距離(違いの大きさ)を測り、いちばん似ている相手=最近傍を対応候補にできます。

POINT — 記述子は特徴点の「指紋」 記述子は、特徴点の周辺パターン(明暗の勾配の向きなど)を要約した数十〜百数十個の数の並び。同じ場所なら視点が少し変わっても似た値になるように設計されている。対応探しは「記述子ベクトルの距離がいちばん小さい相手を探す」計算になる。

下のデモは、同じ星空のようなシーンを視点を変えて撮った2枚の「画像」です。各星が特徴点で、それぞれ記述子を持っています。距離のしきい値を動かして、対応線がどう増減するか見てください。

対応線で結ぶ — 記述子の距離が近いペアを線でつなぐ
緑=正しい対応、赤=誤対応。しきい値を下げる(厳しくする)と怪しい対応から消えて精度が上がりますが、正しい対応まで捨ててしまいます。ひときわ長い赤線の正体は「画像2では隠れて写っていない点」— 相手がいないのに、無理やり誰かと結ばれてしまうのです。
注意 — 最近傍が正しいとは限らない 「いちばん似ている相手」は必ず見つかってしまう。本当の相手が隠れて写っていなくても、繰り返し模様(窓・タイル・星)でそっくりな点が他にあっても、機械は平気で間違った相手と結ぶ。誤対応(アウトライア)をどう省くかがマッチングの本当の勝負どころ。

2. 自信のある対応だけ残す — レシオテスト

誤対応を省く定番のアイデアがレシオテストです。発想はシンプルで、「2位に大差をつけた1位だけを信じる」というもの。

d1 / d2 < 0.8 なら採用 d1=最近傍との距離、d2=2番目に近い候補との距離。比が小さい=1位が圧勝=自信あり

下のデモでは、1つのクエリ点(画像1の星)に対する候補たちとの距離をランキング形式で表示します。比のしきい値を動かすと、どの対応が生き残るか、そして全体の精度がどう変わるかがライブで見えます。

レシオテスト — 「2位に大差の1位」だけを信じる
★印が本当の相手。接戦(比が1に近い)のクエリは、だいたい間違えているか、そもそも相手が写っていない点です。しきい値0.8あたりで誤対応がほぼ全滅する一方、正しい対応も少し犠牲になる — 「量より質」のトレードオフです。
POINT — 捨てる勇気が精度を作る レシオテストは対応の数を減らして質を上げるフィルタ。後段の処理(パノラマの変換推定など)は少数でも高品質な対応があれば成立するので、怪しいものは迷わず捨てるのが正解になることが多い。

3. 応用 — 対応点からパノラマが生まれる

対応点が手に入ると何がうれしいのか。代表例がパノラマ合成です。重なりのある2枚の写真で対応点ペアを見つけると、「画像2をどう動かせば画像1にぴったり重なるか」という変換(ずらし・回転・伸縮)を逆算できます。あとはその変換で2枚を貼り合わせるだけ。

パノラマ合成の直感 — 対応点が導く変換で2枚が重なる
正しい対応(緑)だけなら稜線がつながって1枚のパノラマになります。「誤対応を混ぜる」をオンにすると、間違ったペア(赤)に引っ張られて変換の推定がズレ、合成結果が歪みます。合成後にトグルを切り替えて見比べてみてください。

この「対応点 → 変換の推定」という流れは、パノラマだけのものではありません。

一歩先へ — 実際に使われる道具たち 記述子の代表格は SIFT(勾配の向きのヒストグラム、レシオテストもSIFTの論文で提案された)や高速な ORB。さらに実戦では、レシオテストを生き残った対応の中の誤りもRANSACという多数決アルゴリズムで排除してから変換を推定する。最近は記述子そのものをニューラルネットで学習する手法も主流になりつつある。

4. まとめ