日記的「駄目」プログラミング Yet Another Hacking Life

続Harris Corner Detectのヘッセ行列の固有値の符号の話というかSIFTの話

10.26.2010 · Posted in ビジョン

一個前のエントリ「Harris Corner Detectのヘッセ行列の固有値の符号の話というかSIFTの話」を書いた後、気づいたことと思い違いをしていたことがあったので続きを書いてみる。

前回「ヘッセ行列の固有値の絶対値が大きい方を正にするように、符号を調整すればエッジ判定はできるような気がしないでもなきにしもあらず」と書いたんだが、符号の調整って面倒くさい。単に絶対値をとっちゃあかんのん?ってのが引っかかってた。

で、αとβは絶対値でいい。と、思う。注目点の画素とその周辺の画素を二次関数と見なすと、ヘッセ行列の固有値は勾配の大きさ。で、曲面が楕円型でも双曲型でも(αとβの符号がどうであっても)固有値の絶対値が両方とも大きければ原点は周辺から孤立した値をとるし、両方とも小さければのっぺりしてる。片方だけだけ大きい場合はある軸はのっぺりしてて、ある軸は急(つまりエッジ)。

だと、思っ、た。これが気づいたこと。

思い違いはSIFTは(Harris Corner Detectも?)固有値を直接使わずトレースがα+β、デターミナントがαβということからTr^2 / Detでαとβの比を判定できる。というように読める。で、Detがマイナスだったら閾値の設計がなんだかじゃない?というのがそもそも勉強会で質問にあがってことだったということ。問題はDetの符号であって、固有値の符号のことではないということ。

α、βまで出してしまえば絶対値でできそうなんだが、TrもDetも各軸の二次微分が絡むのでうかつに絶対値にしていいのかどうなのか。

もう一度考え直してみる。αとβの比率を考えるのでα = γβと置く。γがαとβの比率になる。

Tr = α + β、Det = αβ。これを使ってTrとDetだけでγ(比率)を表して判定しようというのがTr^2 / Det = (r + 1)^2 / γの式なのか。

γを|γ|に置き換えるのはTrの値が比率を保存せずに変わるのでよろしくない。

では全体の絶対値をとることは・・・よくわからない。Detの符号の変化ともとの二次関数の形状の変化のイメージがつかない。Det = αβから考えれば多分比率を保存した値の変化になるのでいけそうな気がするけど、例によって証明形式に書き下せない。

結局よくわからなかったというお話。

直後に追記:あぁ、Detは関数の性質としてのDetではなくてαβと同じというDetなのか。そう考えるのだったら絶対値とっていいよね。

Leave a Reply