• 《opencv学习笔记》-- Harris角点检测


    图像特征类型可以被分为三种:

            边缘

            角点(感兴趣关键点)

            斑点(Blobs)(感兴趣区域)

    角点的具体描述:

            1、一阶导数(即灰度的梯度)的局部最大所对应的像素点;

            2、两条及两条以上边缘的交点;

            3、图像中梯度值和梯度方向的变化速率都很高的点;

            4、角点处的一阶导数最大,二阶导数为零,它指示了物体边缘变化不连续的方向。

    角点检测算法可归纳为三类:

            基于灰度图像的角点检测(分为基于梯度、基于模板、基于模板梯度)

                            基于模板:主要考虑像素领域点的灰度变化,即图像亮度的变化,将与邻点

                                              亮度对比足够大的点定义为角点。

            基于二值图像的角点检测

            基于轮廓曲线的角点检测

    Harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性高,尤其对L型角点检测精度高。但由于采用了高斯滤波,运算速度相对较慢,角点信息有丢失和位置偏移的现象,而且角点提取有聚簇现象。
     

    实现Harris角点检测: cornerHarris()函数

    cornerHarris函数对于每一个像素(x,y)在 blockSize X blockSize邻域内,计算2 X 2梯度的协方差矩阵 M(x.y),计算如下式子:

     可以找出输出图中的局部最大值,即找出了角点。

    1. void cornerHarris(InputArray src, OutputArray dst, int blockSize,
    2. int kSize, double k, int borderType = BORDER_DEFAULT)

    参数1,InputArray类型的src,输入图像,填Mat类的对象,为单通道8位或者浮点型图像。

    参数2,OutputArray类型的 dst,Harris角点检测的输出结果,和源图片有一样的类型。

    参数3,int类型的blockSize,表示邻域的大小。

    参数4,int类型的ksize,表示 Sobel()算子的孔径大小。

    参数5,double类型的k,Harris参数。

    参数6, int类型的 borderType,图像像素的边界模式,默认值 BORDER DEFAULT。

                       

                 

    1. Mat srcImage = imread("E:\\img\\logo6.png", 0);
    2. imshow("原始图", srcImage);
    3. //进行Harris角点检测找出角点
    4. Mat cornerStrength;
    5. cornerHarris(srcImage, cornerStrength, 2, 3, 0.01);
    6. //对灰度图进行阈值操作,得到二值图并显示
    7. Mat harrisCorner;
    8. threshold(cornerStrength, harrisCorner, 0.00001, 255, THRESH_BINARY);
    9. imshow("角点检测后的二值效果图", harrisCorner);
  • 相关阅读:
    ROS学习笔记一(安装、节点、发布者和订阅者)
    buffers与cached的异同
    STM32 HAL库 SPI主从机通信
    批量Batch and 动量Momentum
    MATLAB——径向基神经网络预测程序
    Audified U73b压缩器和U78饱和器发布升级版
    【21天python打卡】第14天 网络爬虫(5)
    Spring框架(八):基于xml方式Bean的配置
    ARM64异常之异常入口和异常返回
    Spring Boot集成Quartz快速入门Demo
  • 原文地址:https://blog.csdn.net/qq_41653875/article/details/126474939