OpenCV(四十二):Harris角点检测

这篇具有很好参考价值的文章主要介绍了OpenCV(四十二):Harris角点检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Harris角点介绍

什么是角点? 角点指的是两条边的交点,图中红色圈起来的点就是角点。

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

Harris角点检测原理:首先定义一个矩形区域,然后将这个矩形区域放置在我的图像中,求取这个区域内所有的像素值之和,之后沿着多个方向移动我这个区域,再次计算新区域的像素值之和,如果移动前和移动后的像素值两者的差值比较小,那么就不是Harris角点,如果两者之间差值比较大,就认定移动前覆盖的区域内存在Harris角点。

如图:下图两条线形成角点,而矩形区域分别表示平面、边界、角点三种位置:

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

2.Harris角点计算

Harris角点检测原理:当移动窗口,窗口内像素值变化大就有Harris角点

Harris角点检测原理公式:

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

权重系数的引入是为了更加方便地去确定某一个点是Harris角点。

Harris角点检测原理公式写成矩阵形式:

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

由此可得出梯度协方差矩阵M

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

Harris评价函数来测量每个像素的角点程度 ,与梯度协方差矩阵M相关

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

     在这个公式中,R是角点响应函数的值,M是一个2x2的矩阵,描述了局部区域中像素的梯度信息,det(M)表示矩阵的行列式,trace(M)表示矩阵的迹,k是一个常数,用于调节响应函数的敏感度。

Harris评价函数可以用特征向量来表示。λ1和λ2分别是M的两个特征值。

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

通过对特征值λ1和λ2进行求解,我们可以计算Harris评价函数R,并据此来判断像素是否为角点。

  • 当λ1和λ2都较大且接近时,表示图像局部区域存在角点。
  • 当λ1和λ2都比较小或者差异较大时,表示图像局部区域是平坦或者边缘区域。

3.检测Harris角点函数cornerHarris()

void cv::cornerHarris ( InputArray  src,

OutputArray dst,

int   blockSize,

int   ksize,

double   K,

int         borderType = BORDER_DEFAULT

  • src:待检测Harris角点的输入图像,图像必须是CV 8U或者CV 32F的单通道灰度图像
  • dst: 存放Harris评价系数的R矩阵,数据类型为CV 32F的单通道图像,与输入图像具有相同的尺寸
  • blockSize:邻域大小
  • ksize: Sobel算子的半径,用于得到梯度信息   
  • k:计算Harris评价系数R的权重系数
  • borderType:像素外推算法标志

4.绘制角点函数drawKeypoints()

void drawKeypoints(InputArray image,

const std::vector<KeyPoint>& keypoints,

OutputArray outImage,

const Scalar& color = Scalar::all(-1),

int flags = DrawMatchesFlags::DEFAULT

)

参数说明:

  • image: 输入图像,可以是任意类型的Mat对象。

  • keypoints: vector类型的关键点,每个关键点包含其在图像中的位置和其他信息(如尺度、方向等)。

  • outImage: 输出图像,用于存储绘制了特征点的图像。可以与输入图像相同的尺寸和类型。

  • color: 绘制特征点的颜色,可以是Scalar对象或CV_RGB(R, G, B)宏定义,默认为Scalar::all(-1)表示随机颜色。

  • flags: 绘制标志,用于控制绘制方式。可以是以下常量之一:

    • DrawMatchesFlags::DEFAULT: 默认绘制方式,显示关键点的位置和大小。

    • DrawMatchesFlags::DRAW_OVER_OUTIMG: 将关键点绘制在输出图像上,而不是创建新的输出图像。

    • DrawMatchesFlags::DRAW_RICH_KEYPOINTS: 绘制丰富的特征点,显示位置、尺度、方向等详细信息。

5.示例代码:

void Harris_f(Mat image){
    //转成灰度图像
    Mat gray;
    cvtColor(image,gray,COLOR_BGR2GRAY);
    // 执行Harris角点检测
    Mat harris;
    cornerHarris(gray,harris,2,3,0.04);
    //归一化便于进行数值比较和结果显示
    Mat harrisn;
    normalize(harris,harrisn,0,255,NORM_MINMAX);
    //将图像的数据类型变成CV_8U
    convertScaleAbs(harrisn,harrisn);
    //寻找Harris角点
    vector<KeyPoint> keyPoints;
    for(int row=0;row<harrisn.rows;row++){
        for(int col=0;col<harrisn.cols;col++){
            int R=harrisn.at<uchar>(row,col);
            if(R<180){
                //将角点存入KeyPoint中
                KeyPoint keyPoint;
                keyPoint.pt.y=row;
                keyPoint.pt.x=col;
                keyPoints.push_back(keyPoint);
            }
        }
    }
    //绘制角点
    drawKeypoints(image,keyPoints,image,Scalar(0,0,255,255));
    //与显示结果
    imwrite("/sdcard/DCIM/harrisn.png",harrisn);
    imwrite("/sdcard/DCIM/result.png",image);
}

opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉opencv 角点检测,Android之OpenCV,opencv,C++,计算机视觉

              (系数矩阵)                                               (绘制Harris角点) 文章来源地址https://www.toymoban.com/news/detail-733107.html

到了这里,关于OpenCV(四十二):Harris角点检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV基本图像处理操作(十)——图像特征harris角点

    角点 角点是图像中的一个特征点,指的是两条边缘交叉的点,这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中,角点是重要的特征,因为它们通常是图像中信息丰富的区域,可以用于图像分析、对象识别、3D建模等多种应用。 角点的识别可以帮助在进

    2024年04月23日
    浏览(35)
  • Harris角点检测

    图像特征的分类:边缘、角点、纹理。 角点检测(准确来说角点不是特征,但检测出来的角点可以用来提取和表示总结为特征)也被称为特征点检测,Harris是基于角点的特征描述子,主要用于图像特征点的匹配,属于图像的局部特征。 在局部小范围里,如果在各个方向上移

    2024年02月08日
    浏览(37)
  • 基于Python手动实现Harris角点检测

    最近在上数字图像处理课程,需要使用Python手动编写Harris角点检测算法,但是网上几乎没有找到手动编写的,只能手敲。 同时作为自己的第一篇博客,在这里记录一下。 原理(略) 可以参考博主 拾牙慧者 的博客 角点检测(Harris角点检测法)_拾牙慧者的博客-CSDN博客_harri

    2023年04月14日
    浏览(26)
  • opencv_角点检测

    文章内容 一个opencv检测角点的程序 运行效果

    2024年01月17日
    浏览(33)
  • OpenCV实战(16)——角点检测详解

    在计算机视觉中,兴趣点 ( interest points ) 也称为关键点 ( keypoints ) 或特征点 ( feature points ),广泛用于解决对象识别、图像匹配、视觉跟踪、 3D 重建等领域的问题。与其将图像作为一个整体进行评估,不如选择可以用于局部分析的点,以获得将该点应用于局部或全局的信息。

    2023年04月18日
    浏览(27)
  • 基于MATLAB的Harris角点检测完成图片全景拼接

    目录 作业概要 1 原理及实现 1 2.1. 模块1 Harris角点检测 1 根据角点响应函数计算每个像素点的角点响应值; 2 2.2. 模块2 关键点的描述及其匹配 3 2.2.1. 生成描述向量 3 2.2.2. 匹配描述子 4 输出matched_points和匹配点对数count; 5 2.3. 模块3 转换矩阵的估计 5 输出仿射变换矩阵H。 6 2

    2024年01月17日
    浏览(28)
  • 【opencv】教程代码 —TrackingMotion 角点检测

    角点检测 执行角点检测并在可能的角点周围画一个圆 对图像中的角点位置进行检测和细化 Shi-Tomasi方法检测图像角点 1. cornerDetector_Demo.cpp 角点检测 这段代码是一个用于检测图像中角点的完整示例程序,使用了OpenCV库。它实现了两种角点检测方法:Harris角点检测和Shi-Tomasi角点

    2024年04月17日
    浏览(29)
  • opencv学习-几种角点检测方法

    角点通常被定义为两条边的交点,或者说,角点的局部邻域应该具有两个不同区域的不同方向的边界。角点检测(Corner Detection)是计算机视觉系统中获取图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维重建和目标识别等,也可称为特征点检测。 目前,角

    2024年02月12日
    浏览(26)
  • Opencv之角点 Harris、Shi-Tomasi 检测详解

    角点,即图像中某些属性较为突出的像素点 常用的角点有以下几种: 梯度最大值对应的像素点 两条直线或者曲线的交点 一阶梯度的导数最大值和梯度方向变化率最大的像素点 一阶导数值最大,但是二阶导数值为0的像素点 API简介: 主要用于检测图像中线段的端点或者两条

    2024年02月16日
    浏览(28)
  • Harris和Shi-tomasi角点检测笔记(详细推导)

            一般来说,角点就是极值点,在某些属性上强度最大或者最小的孤立点、线段的终点或拐点等。其实理解角点可以按照我们的直觉来理解,以下图为例,图中用颜色标注的地方都是角点:         原图地址:理解经典角点检测算法–Harris角点 | 码农家园         

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包