この写真を keypoints に食わせて、520個の特徴点を検出しました。
写真内で相対等級を決めて、「自分より明るい一番近い星」条件でリンク表を作ります。
520本の矢印を書くと図が見づらいので明るさベスト70(と判断した)恒星のリンクのみ表示すると以下のようになります。
10等級までの恒星をDBから取り出し、2016年版として固有運動を加味した約54万件のデータについてもマスターリンク表(件数も同じく約54万件)を作ります。上の写真領域に存在するリンクはたったこれだけ。
520個の特徴点を出発点として連続する2つの相似三角形をマスターリンク表(つまり全天)から見つけ出します。わずか16秒!
出力結果。5件がマッチしました。どれも同じ天空領域(L,M,Nは方向余弦)を示しています。
これらを図示してみます。矢印が重なってしまうので2枚に分けます。緑、黒、青の3つ分。
残り2つ。緑、青。最後は重なっているので太さを変えました。
これら5つの矢印群はDBから作ったものと一致している部分だというのがわかると思います。
写真上での等級判断が誤っていて矢印が逆向きなため検出されなかったものや、誤差で検出できなかったものも見て取れます。(あと2つは検出できたはず)
2辺のなす角度の精度1%未満、2辺の比率の精度1%未満の条件で、最初の相似三角形を検出すると約54万件のうち80件程度になりますが、連続する次の三角形(ピンポイントで写真とマスター1:1なので高速)をチェックに使うと1件に収束します。
計算量は、今回の例でいえば、特徴点520個x54万=2.8億回の比較程度です。
GHz級の昨今のコンピュータなら、CPUタイムで0.1秒未満で計算できる量です。
マスターリンク表を圧縮したり、細かい点を修正して使えるレベルにまで持って行きたいと思います。