首页 > 其他 > 详细

OpenCV教程(43) harris角的检测(1)

时间:2014-02-13 14:59:13      阅读:576      评论:0      收藏:0      [点我收藏+]

      计算机视觉中,我们经常要匹配两幅图像。匹配的的方式就是通过比较两幅图像中的公共特征,比如边,角,以及图像块(blob)等,来对两幅图像进行匹配。在这篇教程中,我们来学习如何在图像中检测harrs特征角。

      角是两条边的交叉点,它在两个方向梯度变化明显。我们可以通过这个特征来检测角。下面我们看看harris角的计算方法:

    对于灰度图像 bubuko.com,布布扣,我们在窗口bubuko.com,布布扣内,用x方向的偏移u和y方向的偏移v,扫过所有像素,得到一个图像灰度值的变化和。

bubuko.com,布布扣

  • bubuko.com,布布扣 表示在 bubuko.com,布布扣位置的窗口。
  • bubuko.com,布布扣bubuko.com,布布扣位置的图像灰度值。
  • bubuko.com,布布扣 是位置 bubuko.com,布布扣的图像灰度值。

     由于我们要在一个窗口内查找harris特征角,所以我们必须找到变化最大的窗口,这个窗口内肯定存在特征角,所以我们定义下面的方程,并用泰勒级数展开式子:
  • bubuko.com,布布扣

  • bubuko.com,布布扣

  • bubuko.com,布布扣

  • 表示成矩阵乘法形式:

    bubuko.com,布布扣

  • 假设

    bubuko.com,布布扣

  • 则有:

    bubuko.com,布布扣

  • 对每一个窗口计算得到一个分数,根据分数的大小来判定窗口内是否存在harris特征角,分数R根据下面公式计算得到:

    bubuko.com,布布扣

    这里:(bubuko.com,布布扣是矩阵的2个特征值,k是一个指定值,这是一个经验参数,需要实验确定它的合适大小,通常它的值在0.05和0.5之间)。

    • det(M) = bubuko.com,布布扣
    • trace(M) = bubuko.com,布布扣

    在opencv中,我们可以通过函数cv::cornerHarris 计算特征角,

C++: void cornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, intborderType=BORDER_DEFAULT )

Parameters:

  • src – 单通道8位或者浮点图像。
  • dst – 存储 Harris 角的结果图像,它的格式为:CV_32FC1,图像大小和源图像一直
  • blockSize – 就是扫描时候窗口的大小。
  • ksizeSobel() 算子使用的值。
  • k – 上面介绍的计算R时候的k参数值
  • borderType –像素插值方法。

下面的代码显示一副图像的harris角检测结果:

// 读入输入图像
cv::Mat image= cv::imread("../church01.jpg",0);
if (!image.data)
    return 0;

// 显示图像
cv::namedWindow("Original Image");
cv::imshow("Original Image",image);

// 检测 Harris Corners
cv::Mat cornerStrength;
cv::cornerHarris(image,cornerStrength,
    3,     // neighborhood size
    3,     // aperture size
    0.01); // Harris parameter

//二值化harris角的检测结果
cv::Mat harrisCorners;
double threshold= 0.0001;
cv::threshold(cornerStrength,harrisCorners,
    threshold,255,cv::THRESH_BINARY_INV);

// 显示结果
cv::namedWindow("Harris Corner Map");
cv::imshow("Harris Corner Map",harrisCorners);

下面是程序的运行结果:

bubuko.com,布布扣bubuko.com,布布扣

程序代码:参考工程文件FirstOpenCV48

OpenCV教程(43) harris角的检测(1)

原文:http://www.cnblogs.com/mikewolf2002/p/3547436.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!