《OpenCV3学习笔记》3.1 :角点检测 Harris

本文深入探讨了OpenCV3中的Harris角点检测,包括基本原理、特征值推导、旋转不变性分析,以及OpenCV提供的`cornerHarris`接口和`Threshold`函数的应用。通过对图像灰度变化的敏感性,Harris角点检测在图像处理中用于识别图像的角点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、内容介绍

本节主要介绍OpenCV的imgproc模块的角点检测(Feature Detection)部分:
1、Harris角点函数 cornerHarris()

2、Threshold函数

定义:“如果某一点在任意方向的一个微小变动都会引起灰度很大的变化,那么我们就把它称之为角点”    

二、Harris角点基本原理

1、推导:

椭圆的扁率和尺寸是由M(x,y)的特征值λ1、λ2决定的,椭贺的方向是由M(x,y)的特征矢量决定的。

椭圆函数特征值与图像中的角点、直线(边缘)和平面之间的关系如下图所示。共可分为三种情况:

  • 图像中的直线。一个特征值大,另一个特征值小,λ1≫λ2λ1≫λ2或λ2≫λ1λ2≫λ1。自相关函数值在某一方向上大,在其他方向上小。
  • 图像中的平面。两个特征值都小,且近似相等;自相关函数数值在各个方向上都小。
  • 图像中的角点。两个特征值都大,且近似相等,自相关函数在所有方向都增大。

衡量标准

在3×33×3或5×55×5的邻域内进行非最大值抑制,局部最大值点即为图像中的角点。

非极大值抑制原理:在一个窗口内,如果有多个角点则用值最大的那个角点,其他的角点都删除,窗口大小这里我们用3*3,程序中通过图像的膨胀运算来达到检测极大值的目的,因为默认参数的膨胀运算就是用窗口内的最大值替代当前的灰度值。

2、特性:

旋转不变性

Harris角点检测算子使用的是角点附近的区域灰度二阶矩矩阵。而二阶矩矩阵可以表示成一个椭圆,椭圆的长短轴正是二阶矩矩阵特征值平方根的倒数。当特征椭圆转动时,特征值并不发生变化,所以判断角点响应值RR也不发生变化,由此说明Harris角点检测算子具有旋转不变性。

不具有尺度不变性

 

三、OpenCV接口

1、cornerHarris

void cornerHarris(InputArray src,OutputArray dst, int blockSize, int ksize, double k, intborderType=BORDER_DEFAULT )
  • src – 输入的单通道8-bit或浮点图像。
  • dst – 存储着Harris角点响应的图像矩阵,大小与输入图像大小相同,是一个浮点型矩阵。
  • blockSize – 邻域大小。
  • apertureSize – 扩展的微分算子大。
  • k – 响应公式中的,参数αα。
  • boderType – 边界处理的类型。

2、Threshold函数

double threshold(InputArray src,OutputArray dst, double thresh, double maxval, int type)

   该函数的典型应用是对灰度图像进行阈值操作得到二值图像。           

  • src – 输入的单通道8-bit或浮点图像。
  • dst – 存储着Harris角点响应的图像矩阵,大小与输入图像大小相同,是一个浮点型矩阵。
  • thresh,阈值的具体值。
  • maxval,当第五个参数阈值类型type取 CV_THRESH_BINARY 或CV_THRESH_BINARY_INV 阈值类型时的最大值.
  • type,阈值类型,。threshold( )函数支持的对图像取阈值的方法由其确定,具体用法如下图:

综合实例              

#include <opencv2/opencv.hpp>  
using namespace cv;

int main()
{
	Mat gray = imread("house.png",0);
	imshow("原图", gray);

	//Harris角点检测
	Mat cornerStrength;
	cornerHarris(gray, cornerStrength, 2, 3, 0.01);

	Mat harrisCorner;
	threshold(cornerStrength, harrisCorner, 0.00001, 255, THRESH_BINARY);
	imshow("效果图", harrisCorner);
	waitKey(0);
	return 0;
}

                                                                                                                                                                                                                                                                                                                                                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值