兴趣点和角点检测

图像特征类型分为:
1.边缘
2.角点(感兴趣关键点)
3.斑点(Blobs)(感兴趣区域)

角点:
在任意方向上的一个微小变动都会引起灰度很大变换,称之为角点。在图像中可以轻易定位。

角点的具体描述:
1.一阶导数(灰度梯度)的局部最大所对应的像素点
2.两条及两条以上边缘的交点
3.图像中梯度值和梯度方向的变换速率都很高的点
4.角点处的一阶导数最大,二阶导数为0,它指示了物体边缘变化不连续的方向。

角点检测:
1.基于灰度图像:
基于梯度,
基于模板:考虑像素领域点的灰度变化,即图像亮度的变化,将与邻点亮度对比足够大的点定义为角点。(harris角点检测)
基于模板梯度
2.基于二值图像
3.基于轮廓曲线

harris角点检测
OpenCV中有cv2.cornerHarris(img,dst,blocksize,ksize,k),它的参数是:

Img:输入图像,应该是单通道8位和float32类型
blockSize:这是考虑边角检测的邻域大小
ksize:使用Sobel算子的孔径参数
k:harris Corner检测器的自由参数(0.04-0.06)

cv2.cornerHarris(gray, 2, 3, 0.04)
在这里插入图片描述
在这里插入图片描述

//harris Corner检测
//1.OpenCV中的函数cv2.cornerHarris()和cv2.cornerSubPix()
//2.cv2.cornerharris()参数:
   /* img:输入图像
    blockSize:这是考虑检测的领域大小
    ksize:使用Sobel衍生物的孔径参数
    k:harris Corner检测器的自由参数
    */
'''
import cv2
import numpy as np
 
filename = 'blox.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
 
# 结果是扩大标记的角落,不重要
dst = cv2.dilate(dst, None)
 
# 最佳值的阈值,它可能因图像而异
img[dst > 0.01 * dst.max()] = [0, 255, 0]
 
cv2.imshow('dst', img)
if cv2.waitKey(0) & 0xFF == 27:
    cv2.destroyAllWindows()

shi-Tomasi 角点检测
goodFeaturesToTrack函数
(img,corners,int maxCorners,double qualitylevel,double minDistance,mask)

img:输入图像
corners:检测到的角点的输出向量
int maxCorners:角点的最大数量
double qualitylevel:角点检测可接受的最小特征值,通常用的值为0.1或0.01,不超过1.
double minDistance:角点之间的最小距离像素值
mask:可选参数,表示感兴趣区域,(默认值noArray(),若此参数非空,需要为8UC1类型,与img有相同尺寸)
其他的参数均为默认即可

亚像素级角点检测
提供实数坐标值,进行几何测量
cornerSubPix()函数
(所以其实可以用多种角点检测测量结合。)

	void cv::cornerSubPix(
		cv::InputArray image, // 输入图像
		cv::InputOutputArray corners, // 角点(既作为输入也作为输出)
		cv::Size winSize, // 区域大小为 NXN; N=(winSize*2+1)
		cv::Size zeroZone, // 类似于winSize,但是总具有较小的范围,Size(-1,-1)表示忽略
		cv::TermCriteria criteria // 停止优化的标准
	);

第一个参数是输入图像,和 cv::goodFeaturesToTrack()中的输入图像是同一个图像。
第二个参数是检测到的角点,即是输入也是输出。

第三个参数是计算亚像素角点时考虑的区域的大小,大小为NXN; N=(winSize*2+1)。

第四个参数作用类似于winSize,但是总是具有较小的范围,通常忽略(即Size(-1, -1))。

第五个参数用于表示计算亚像素时停止迭代的标准,可选的值有cv::TermCriteria::MAX_ITER 、cv::TermCriteria::EPS(可以是两者其一,或两者均选),前者表示迭代次数达到了最大次数时停止,后者表示角点位置变化的最小值已经达到最小时停止迭代。二者均使用cv::TermCriteria()构造函数进行指定。
————————————————
版权声明:此段说明为CSDN博主「PHILOS_THU」的原创文章,
原文链接:https://blog.csdn.net/guduruyu/article/details/69537083

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值