《OpenCV3编程入门》学习笔记10 角点检测(三)亚像素级角点检测

10.3 亚像素级角点检测

10.3.1 亚像素级角点检测原理

1.原理:
  假设起始角点在实际亚像素角点附近,检测所有q-p向量,下面两种情况点p梯度与q-p向量的点积均为0:(1)点p附近图像均匀,即点p处梯度为0(2)边缘的梯度与沿边缘方向的q-p向量正交(向量与其正交向量点积为0),如下图:
          在这里插入图片描述
  则可以在p点周围找到很多组梯度以及相关向量q-p,令其点积为0,求解方程组,解即为角点q的亚像素级精度位置。
2.作用:
  将角点位置精确到亚像素级精度(精确的浮点类型位置),可用于几何测量、摄像机标定、跟踪并重建摄像机的轨迹。

10.3.2 寻找亚像素级角点:cornerSubPix()函数

1.作用:
  寻找亚像素级角点
2.函数原型:

void cornerSubPix(InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, TermCriteria criteria)

3.参数说明:
(1)输入图像
(2)输入角点的初始坐标和精确的输出坐标
(3)搜索窗口一半,若 winSize=Size(5,5),表示使用(5*2+1)*(5*2+1)=11*11大小窗口
(4)死区一半,死区为不对搜索区的中央位置做求和运算的区域,用来避免自相关矩阵出现的某些可能的奇异性,值(-1,-1)表示没有死区
(5)求角点的迭代过程的终止条件。即角点位置的确定,迭代数大于或精确达到某设定值,此参数为最大迭代数或精确度或它们的组合

10.3.3 综合示例

/*
  程序说明:在Shi-Tomasi角点检测示例程序基础上,在on_GoodFeaturesToTrack()回调函数中加上亚像素角点检测代码,完成亚像素级角点检测
*/
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
//定义辅助宏
#define WINDOW_NAME "【亚像素级角点检测】"
//全局变量
Mat g_srcImage, g_grayImage, g_dstImage;
int g_maxCornerNumber = 30;
int g_maxTrackbarNumber = 500;
RNG g_rng(12345);
//全局函数
void
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值