Archive
以前行った、
位相限定相関(POC)で求めたピーク値を探し出せば、移動量が求められるのですが、
画像は整数の値しかとらない格子なので、サブピクセルのレベルで移動していた場合詳細は求められません。
スズメレンダラー・クマ将棋の開発日記さんの記事ではSinc関数に当てはめて求める方法が記載してあります。
ちなみに、Sinc関数とは以下のような関数です
=\frac{sin(\pi x)}{\pi x})
調べてみたところ、最急降下法などで関数のフィッティングを行い厳密な値を求めていきます。
・・・ですが、
私のような凡人にはちょいと難しかったので、もっと簡単な方法を探してました。
x方向だけで考えると移動量dは、
-R(1)}{2R(-1)-4R(0)%2B2R(1)})
と表すことができます。ここで、
・R(0)はピーク値(位相限定相関画像の値)
・R(-1)はピーク値の一つ前の座標の相関値
・R(1)はピーク値の一つ先の座標の相関値
です。
このパラボラフィッティングを使えば、Sinc関数よりは精度は落ちますが楽にサブピクセル精度で移動量を算出できます。
また、等角直線フィッティングもあるそうですが、
1次関数でのフィッティングであるため、パラボラフィッティングの2次関数の方が精度はよいと考えられます。
位相限定相関(POC)で求めたピーク値を探し出せば、移動量が求められるのですが、
画像は整数の値しかとらない格子なので、サブピクセルのレベルで移動していた場合詳細は求められません。
スズメレンダラー・クマ将棋の開発日記さんの記事ではSinc関数に当てはめて求める方法が記載してあります。
ちなみに、Sinc関数とは以下のような関数です
調べてみたところ、最急降下法などで関数のフィッティングを行い厳密な値を求めていきます。
・・・ですが、
私のような凡人にはちょいと難しかったので、もっと簡単な方法を探してました。
x方向だけで考えると移動量dは、
と表すことができます。ここで、
・R(0)はピーク値(位相限定相関画像の値)
・R(-1)はピーク値の一つ前の座標の相関値
・R(1)はピーク値の一つ先の座標の相関値
です。
このパラボラフィッティングを使えば、Sinc関数よりは精度は落ちますが楽にサブピクセル精度で移動量を算出できます。
また、等角直線フィッティングもあるそうですが、
1次関数でのフィッティングであるため、パラボラフィッティングの2次関数の方が精度はよいと考えられます。