OpenCV图像角点检测(18) 第一部分
  Jk5625xsZPHl 2023年11月02日 80 0

角点检测(Corner Detection)是计算机视觉系统中用来获取图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中,也称为特征点检测。角点检测被定义为两条边的交点,更严格的说法是,角点的局部领域应该具有两个不同区域的不同方向的边界。而实际应用中,大多数所谓的角点检测方法检测的是拥有特定特征的图像点,而不仅仅是“角点”。这些特征点在图像中有具体的坐标,并具有某些数学特征,如局部最大或最小灰度、某些梯度特征等。

Harris角点检测

计算过程

OpenCV图像角点检测(18) 第一部分_高等数学

角点检测中使E(u,v)E(u,v)的值最大。利用一阶泰勒展开有:

OpenCV图像角点检测(18) 第一部分_特征值_02

可用sobel算子计算,推导过程如下:

OpenCV图像角点检测(18) 第一部分_高等数学_03

M矩阵决定了E(u,v)的取值,下面我们利用M来求角点,M是关于x和 y方向导数的二次项函数,可以表示成椭圆的形状,椭圆的长短半轴由MM的特征值λ1和λ2决定,方向由特征矢量决定,如下图所示:

OpenCV图像角点检测(18) 第一部分_高等数学_04

椭圆函数特征值与图像中的角点、直线(边缘)和平面之间的关系如下:

  • 图像中的直线:一个特征值大,另一个特征值小
  • 图像中的平面:两个特征值都小,且近似相等
  • 图像中的角点:两个特征值都大,且近似相等

OpenCV图像角点检测(18) 第一部分_高等数学_05

Harris给出的角点计算方法并不需要计算具体的特征值,而是计算一个角点响应值R来判断角点。R的计算公式为

OpenCV图像角点检测(18) 第一部分_高等数学_06

  • detM:矩阵M的行列式,即λ*1\λ2
  • traceM:为矩阵M的迹,即λ1+λ2
  • α:常数,取值范围为0.04~0.06

R与图像中的角点、直线(边缘)和平面之间的关系如下:

  • 当R为大数值的正数时是角点
  • 当R为大数值的负数时是边界
  • 当R为小数是认为是平坦区域

OpenCV图像角点检测(18) 第一部分_特征值_07

API介绍

void cornerHarris( InputArray src, OutputArray dst, int blockSize,int ksize, double k,int borderType = BORDER_DEFAULT );
/*******************************************************************
*			src: 			输入图				
*			dst:	        输出图
*			blockSize:		邻域的大小
*			ksize:  		Sobel()算子孔径大小
*			k:				Harris参数
*			borderType:		边界处理模式
*********************************************************************/
//图像增强  saturate_cast(|α*src+β|)
void convertScaleAbs(InputArray src, OutputArray dst,double alpha = 1, double beta = 0);
/*******************************************************************
*			src: 			输入图				
*			dst:	        输出图
*			alpha:			α
*			beta:  		    β
*********************************************************************/
//归一化
void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());
/*******************************************************************
*			src: 			输入图				
*			dst:	        输出图
*			alpha:			归一化最小值
*			beta:  		    归一化最大值
*			norm_type:		归一化的类型
*			dtype:			图像通道数
*			mask:			操作掩膜
*********************************************************************/
//norm_type取值
enum NormTypes {
     NORM_INF       = 1,	//无穷范数	   (元素中绝对值最大的数值)
     NORM_L1        = 2,	//L1范数		(所有元素的绝对值的和)
     NORM_L2        = 4,	//L2范数		(所有元素平方和的开平方)
     NORM_L2SQR     = 5,	//L2范数平方   (所有元素平方和)
     NORM_HAMMING   = 6,	//汉明范数	   CV_8U图像

     ORM_HAMMING2  = 7,		//汉明范数2
     NORM_TYPE_MASK = 7, 	//特定掩码范数
     NORM_RELATIVE  = 8, 	//相对范数
     NORM_MINMAX    = 32 	//特定区域范数
};

写不动了,明天在更.

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Jk5625xsZPHl