亚像素角点
角点的定义就是在原图上很突出的点,一般意义上,这种点在两个正交方向上的梯度都很明显,所以就先将其理想为国际象棋棋盘的样子。
那么要求角点的亚像素精度的坐标,需要的就是找坐标的约束。
如上图所示,如果一个点q是可能的角点,那它周围的点p就有两种情况。
- p点在平坦处,其梯度为0.
- p点在边缘,其梯度方向与pq向量方向垂直。
不难发现,这两种情况下p的梯度与pq向量的点积都为0.
那么求角点的原理就是在可能的点q的周围找许多点p,求其梯度与pq向量的点积,采用优化算法令这些点积接近于0,变量是q点的坐标,不断优化可以得到越来越精确的q的坐标。
所以在opencv里面的求亚像素坐标的函数如下:
其中win就是找p的窗口大小,而zero-zone则是将特别靠近q点的p点删掉的窗口大小,即p点是在win内且不在zero-zone内的点。