常规的角点检测算法输出的角点坐标是整数,即角点位置恰好与像素位置重合。
实际场景中角点位置是连续的,而相机的像素是离散的,两者总是有偏差。如果需要基于图像进行几何测量,这个偏差是不能容忍的。这就是亚像素角点检测问题的背景。相比常规角点检测,亚像素角点检测用实数取代整数来表示角点坐标。
亚像素角点检测算法
亚像素角点检测需要先运行常规的角点检测,得到整数表示的角点坐标。然后算法对每个角点做细化,得到实数表示的角点坐标
第一步: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() //细化角点位置;
void cornerSubPix(InputArray image, InputOutputArray corners

亚像素角点检测用于提升常规角点检测的精度,通过实数坐标减少图像几何测量中的偏差。通常先使用如goodFeaturesToTrack()检测角点,再设定TermCriteria进行迭代细化,最后用cornerSubPix()细化角点位置。该过程结合了图像处理和迭代算法,以提高角点定位的准确性。
最低0.47元/天 解锁文章
3060

被折叠的 条评论
为什么被折叠?



