角点检测与滤波.docVIP

  • 4
  • 0
  • 约3.49万字
  • 约 9页
  • 2017-08-23 发布于河南
  • 举报
角点检测与滤波

角点检测及滤波变换 角点检测 角点:曲线上曲率大的地方,一般来说这些地方法线方向不唯一。例如:两条直线构成角时的交点。 1.1 PreCornerDetect 功能:计算用于角点检测的特征图, 格式:void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 ); 参数:image:输入图像. corners:保存候选角点的特征图 aperture_size:Sobel 算子的核大小(见cvSobel). 函数 cvPreCornerDetect 计算函数 Dx2Dyy+Dy2Dxx - 2DxDyDxy 其中 D? 表示一阶图像差分,D?? 表示二阶图像差分。 角点被认为是函数的局部最大值: // 假设图像格式为浮点数 IplImage* corners = cvCloneImage(image); IplImage* dilated_corners = cvCloneImage(image); IplImage* corner_mask = cvCreateImage( cvGetSize(image), 8, 1 ); cvPreCornerDetect( image, corners, 3 ); cvDilate( corners, dilated_corners, 0, 1 ); cvSubS( corners, dilated_corners, corners ); cvCmpS( corners, 0, corner_mask, CV_CMP_GE ); cvReleaseImage( corners ); cvReleaseImage( dilated_corners ); 1.2 CornerEigenValsAndVecs 功能:计算图像块的特征值和特征向量,用于角点检测 格式:void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv, int block_size, int aperture_size=3 ); 参数:image:输入图像. eigenvv:保存结果的数组。必须比输入图像宽 6 倍。 block_size:邻域大小 (见下面说明部分). aperture_size:Sobel 算子的核尺寸(见 cvSobel). 说明:对每个象素,函数 cvCornerEigenValsAndVecs 考虑 block_size × block_size 大小的邻域 S(p),然后在邻域上计算图像差分的相关矩阵: 然后它计算矩阵的特征值和特征向量,并且按如下方式(λ1, λ2, x1, y1, x2, y2)存储这些值到输出图像中,其中: λ1, λ2为 M 的特征值,没有排序; ( x1, y1)为对λ1的特征向量; (x2, y2)为对λ2的特征向量。 1.3 CornerMinEigenVal 功能:计算梯度矩阵的最小特征值,用于角点检测 格式:void cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval, int block_size, int aperture_size=3 ); 参数:image:输入图像. eigenval:保存最小特征值的图像. 与输入图像大小一致 block_size:邻域大小 (见函数 cvCornerEigenValsAndVecs的说明部分). aperture_size:Sobel 算子的核尺寸(见 cvSobel). 当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数. 说明:函数 cvCornerMinEigenVal 与 cvCornerEigenValsAndVecs 类似,但是它仅仅计算和存储每个象素点差分相关矩阵的最小特征值,即前一个函数的 min(λ1, λ2) 1.4 FindCornerSubPix 功能:寻找精确的角点位置 格式:void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners, int count, CvSize win, CvSize zero_zone, CvTermCriteria criteria ); 参数:image:输入图像. corners:输入角点的初始坐标,也存储精确的输出坐标 count

文档评论(0)

1亿VIP精品文档

相关文档