OpenCV学习笔记(八)检测兴趣点

一、检测图像中的角点

1、定义
角点是指两条边缘线的结合点,是一种二维特征,Harris特征检测是检测角点的经典方法。

2、函数实现
在OpenCV中用cv::cornerHarris函数实现角点检测。首先用cornerHarris函数计算出Harris值,,然后检测角点。

3、总结一下最近遇到的函数
①void minMaxLoc(const MatND& src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0, const MatND& mask=MatND() )寻找矩阵(一维数组当作向量,用Mat定义) 中最小值和最大值的位置
参数1:InputArray类型的src,输入单通道数组(图像)。
参数2:double*类型的minVal,返回最小值的指针。若无须返回,此值置为NULL。
参数3:double*类型的maxVal,返回最大值的指针。若无须返回,此值置为NULL。
参数4:Point*类型的minLoc,返回最小位置的指针(二维情况下)。若无须返回,此值置为NULL。
参数5:Point*类型的maxLoc,返回最大位置的指针(二维情况下)。若无须返回,此值置为NULL。
参数6:InputArray类型的mask,用于选择子阵列的可选掩膜。
②cv::compare()主要用于两个图像之间进行逐像素的比较,并输出比较的结果
 

cv::compare()
	bool cv::compare(
	cv::InputArray src1, // 输入数组1
	cv::InputArray src2, // 输入数组2
	cv::OutputArray dst, // 输出数组
	int cmpop // 比较操作子,见下表 
);

4、角点定义
在Harris特征检测中,角点的定义:在假定的兴趣点周围放置一个小窗口,在所有方向上计算平均强度变化值,若不止一个方向变化值很高,就认为是角点,用均方差之和表示。Harris测试步骤为:首先获得平均强度值变化最大的方向,然后检测垂直方向上平均强度变化值,若也是很大,则认为是角点,可以用泰勒展开近似计算,写成矩阵形式是一个协方差矩阵,定义了图像的一阶导数,因此和Soble算子有关系。判断一个角点的条件是协方差矩阵最小特征值要大于指定的阈值。

5、改进
为解决特征点聚集问题,使用了GFTT算法,限制两个监测点之间的距离。GFTT是一个检测器,使用检测器创建函数创建检测器,该函数会返回一个智能指针,然后用这个指针调用检测方法。

二、快速检测特征

FAST特征点算子(加速分割测试获得特征)

1、原理
它也是一个检测器,使用了智能指针。以某个点为圆心做圆,若存在一段圆弧,连续长度超过周长的3/4,并且它上面的像素值与圆心的强度值明显不同,就认定为一个关键点。可以只检测上下左右四个点来判断是否为关键点,也有九点检测类型。

2、绘图的通用函数
drawKeypoints,在图像上绘制关键点。

3、若特征点分布不均匀,可以将图像分割成网格状,对每个小图像进行单独检测,叫做网格适配特征检测。

三、尺度不变特征的检测

在多种尺度下拍摄同一个物体,都可以检测到一致的关键点。

1、SURF特征检测,加速稳健特征。它也是一个检测器,该检测器得到的关键点的圆,圆的尺寸与每个特征检测得到的尺寸成正比,并每个特征关联了一个方向,使特征具有旋转不变性。使用了高斯内核

2、SUFR算法是SIFT(尺度不变特征转换)算法的加速版。使用了拉普拉斯滤波器响应。

3、Hessian矩阵(海森矩阵)
用来衡量一个函数的局部曲率。

四、多尺度FAST特征的检测(涉及到图像金字塔)

1、BRISK(二元稳健恒定可扩展关键点)检测法
基于FAST特征检测。

2、ORB检测法(定向FAST和旋转BRIEF)
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值