常规的角点检测算法输出的角点坐标是整数,即角点位置恰好与像素位置重合。
实际场景中角点位置是连续的,而相机的像素是离散的,两者总是有偏差。如果需要基于图像进行几何测量,这个偏差是不能容忍的。这就是亚像素角点检测问题的背景。相比常规角点检测,亚像素角点检测用实数取代整数来表示角点坐标。
亚像素角点检测算法
亚像素角点检测需要先运行常规的角点检测,得到整数表示的角点坐标。然后算法对每个角点做细化,得到实数表示的角点坐标
第一步:goodFeaturesToTrack() //检测角点
第二步:TermCriteria() //设置迭代算法的终止条件
TermCriteria(int type,int max_iter, double epsilon);
参数
type:终止条件类型;
CV_TERMCRIT_ITER--max_iter达到最大值后停止算法;
CV_TERMCRIT_EPS--当算法依赖的精确度低于epsilon后,停止算法;
CV_TERMCRIT_ITER+CV_TERMCRIT_EPS--当max_iter达到最大值或算法依赖的精确度低于epsilon任一个满足时,停止算法;
max_iter:最大迭代次数;
epsilon:要求精度;
第三步:cornerSubPix() //细化角点位置;