前回に引き続きゴリゴリプログラムを書いてます。
C++は不得手なのでC言語です。

参考にしているのは、
キーポイントの検出とSIFT記述子の計算
  とか
SIFTを1から組むブログ 0
  とか
Gradientベースの特徴抽出 - SIFTとHOG -
  のPDF
などです。

画像のXY方向の変化を見るだけではなく、ガウシアンフィルタの掛け具合σ方向においても極限値を見つけて、画像が拡大縮小されても場所が移動しないキーポイントを探していることが、やっとわかってきました。

↓PDF抜粋ですが、まったく同じ図が上記リンクにも出てます。


今日やったのはこの上図をそのままプログラムにすること。論文上の詳しい理論はわかりません(^^;)が、実際にいろんな値を入れているうちに感覚がつかめてきます。


ゆくゆくは星の写真で星の中心座標リストを得るために、最初はこんなテスト図形を書いてプログラムがどんな値を出力するかやってみました。

元の図形


同じオクターブで大きなガウシアンをかけた(もっとも大きくボケさせた)画像


DoG(Difference of Gaussian)画像を経て、極値を求め、座標にプロットしてみたもの。


プログラムの出力はこんな感じです。
-[0][0](33,237),-[0][0](47,237),-[0][0](24,227),-[0][0](56,227),-[0][0](24,211),-[0][0](56,211),-[0][0](74,168),-[0][0](93,168),-[0][0](64,165),-[0][0](103,165),-[0][0](56,161),-[0][0](111,161),-[0][0](48,155),-[0][0](119,155),-[0][0](42,148),-[0][0](125,148),-[0][0](34,130),-[0][0](133,130),-[0][0](34,114),-[0][0](133,114),-[0][0](130,105),-[0][0](42,96),-[0][0](48,89),-[0][0](56,83),-[0][0](64,79),-[0][0](103,78),-[0][0](74,76),-[0][0](96,76),-[0][0](84,75),-[0][0](89,75),
-[0][1](38,140),-[0][1](129,140),-[0][1](34,122),-[0][1](38,104),
+[0][2](136,104),
-[1][0](36,129),-[1][0](130,129),-[1][0](36,115),-[1][0](130,115),-[1][0](74,79),
-[1][1](156,35),-[1][1](36,25),
+[2][1](84,123),
-[2][2](40,219),-[2][2](160,195),+[2][2](52,183),+[2][2](132,167),+[2][2](56,63),
+[3][0](48,63),
-[4][0](80,127),

大円の周りに現れる小さな特徴点はさておき、出力リスト中、赤く反転させた座標は5つの円のほぼ中心を指しており(うちひとつは重複)、なんだか使えそうな予感がしてきました^^。
周囲に比べて(-)極小点であることもわかってきました。
これだけ出てきたリストから要らないものを取り除けるかがカギです。

論文の先の方に具体的に絞り込む方法が書いてあるので再び格闘します。