cv::cornerSubPix (サブピクセル推定) アルゴリズムの詳細
OpenCVにはcv::cornerSubPixという関数があるが、これの原理に関する説明が非常に簡素でわかりづらい。
特徴検出 — opencv 2.2 documentation
上記ページに書いてある3つの式の意味についてまとめる。
式1について
上記OpenCVの説明ページで「各点に向かう画像勾配と直交する」にあたる部分。これについては下記記事がわかりやすかった。
Fundamentals of Features and Corners: Subpixel Corners: Increasing accuracy - AI Shack
式2について
式1から式2の間がちょっとぶっ飛びすぎているし、いろいろと間違っていると思う。
- 「を0とすることで」(英語版では"A system of equations may be set up with set to zero")は違うと思う
- 突然が式2から消えてなくなっているが間違いだと思う
式1~式2の間には次の論理が省略されていると思う。一言で言えば「二乗誤差の最小化」である。
詳細
探索窓内のすべての点について式1で定義されるの二乗の総和をEとする。
これに式1を代入すると、
この総和が最小値をとるようなを求めればよい。それはつまり、についての微分がゼロになるときである。よって、
と書き換えられるので、
これを展開すると
(★)
この左辺が式2である。繰り返しになるが、が書かれてしかるべきだと思う。
式3について
突然1次勾配、2次勾配という言葉が出てくるが、次の論理が省略されている。
詳細
上述の式(★)より
はには依存しないので、
ここで、
と置くと、上述の式は次のように書き換えらえる。
ゆえに、今求めたいは
となり、式3となる。