目标

本教程中我们将涉及:

  • 有哪些特征?它们有什么用?
  • 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点.

理论

有哪些特征?

在计算机视觉中,我们通常需要寻找两张图上的匹配关键点。为什么?因为一旦我们知道了两张图是相关联的,我们就可以使用 *both 图像来提取它们中的信息。

是指

  • 匹配关键点 是指在场景中可以很容易识别出来的 特性 . 这些特性就是这里所说的 特征 。
  • 因此,特征应该有什么样的特性呢?
    • 应该具有 可识别的独一无二性

图像特征类型

图像特征类型:

  • 边缘
  • 角点 (感兴趣关键点)
  • 斑点(Blobs) (感兴趣区域)

本教程涉及 角点 特征。

为什么角点是特殊的?

  • 因为角点是两个边缘的连接点,它代表了两个边缘变化的方向上的点。图像梯度有很高的变化。这种变化是可以用来帮助检测角点的。

如何工作?

  • 由于角点代表了图像像素梯度变化,我们将寻找这个”变化”。

  • 考虑到一个灰度图像 . 划动窗口  (with displacements  在x方向和  方向)  计算像素灰度变化。

    其中:

    •  is the window at position 
    •  is the intensity at 
    •  is the intensity at the moved window 
  • 为了寻找带角点的窗口,我们搜索像素灰度变化较大的窗口。于是, 我们期望最大化以下式子:

  • 使用 泰勒(Taylor)展开式:

  • 式子可以展开为:

  • 一个举证表达式可以写为:

  • 表示为:

  • 因此我们有等式:

  • 每个窗口中计算得到一个值。这个值决定了这个窗口中是否包含了角点:

    其中:

    • det(M) = 
    • trace(M) = 

    一个窗口,它的分数  大于一个特定值,这个窗口就可以被认为是”角点”

代码

这个教程的代码如下所示。还可以通过 这个链接下载到源代码

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>using namespace cv;
using namespace std;/// Global variables
Mat src, src_gray;
int thresh = 200;
int max_thresh = 255;char* source_window = "Source image";
char* corners_window = "Corners detected";/// Function header
void cornerHarris_demo( int, void* );/** @function main */
int main( int argc, char** argv )
{/// Load source image and convert it to graysrc = imread( argv[1], 1 );cvtColor( src, src_gray, CV_BGR2GRAY );/// Create a window and a trackbarnamedWindow( source_window, CV_WINDOW_AUTOSIZE );createTrackbar( "Threshold: ", source_window, &thresh, max_thresh, cornerHarris_demo );imshow( source_window, src );cornerHarris_demo( 0, 0 );waitKey(0);return(0);
}/** @function cornerHarris_demo */
void cornerHarris_demo( int, void* )
{Mat dst, dst_norm, dst_norm_scaled;dst = Mat::zeros( src.size(), CV_32FC1 );/// Detector parametersint blockSize = 2;int apertureSize = 3;double k = 0.04;/// Detecting cornerscornerHarris( src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT );/// Normalizingnormalize( dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );convertScaleAbs( dst_norm, dst_norm_scaled );/// Drawing a circle around cornersfor( int j = 0; j < dst_norm.rows ; j++ ){ for( int i = 0; i < dst_norm.cols; i++ ){if( (int) dst_norm.at<float>(j,i) > thresh ){circle( dst_norm_scaled, Point( i, j ), 5,  Scalar(0), 2, 8, 0 );}}}/// Showing the resultnamedWindow( corners_window, CV_WINDOW_AUTOSIZE );imshow( corners_window, dst_norm_scaled );
}

解释

实验结果

原始图像:

检测到的角点被黑色圈标记了

翻译者

Shuai Zheng, <kylezheng04@gmail.com>, http://www.cbsr.ia.ac.cn/users/szheng/

Harris 角点检测子相关推荐

  1. OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测

    Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...

  2. 图像局部特征(二)--Harris角点检测子

     一.角点定义 有定义角点的几段话: 1.角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测.图像匹配.视频跟踪.三维建模和目标识别等领域 ...

  3. OpenCV Harris 角点检测子

    目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视觉中,我们通常需要寻找两张 ...

  4. Harris角点检测算法

    Harris角点检测算法 一.算法原理 二.代码 三.运行结果与分析 (一)纹理.角点丰富场景 (二)纹理平坦场景 (三)垂直或水平边缘多场景 四.总结 PS:为了消除参数k的影响,也可采用商来计算响 ...

  5. harris角点检测_角点检测(2) - harris算子 - 理论与Python代码

    数字图像,图像=矩阵,[m*n]从[0,255]的灰度值 角点检测:物体边缘的拐点 ->应用:图像匹配与检索.图像物体形变恢复(摄像机标定).三维重建 Harris角点检测(早期,原理简单,视频 ...

  6. 【机器视觉学习笔记】Harris 角点检测算法(C++)

    目录 原理 算法步骤 优缺点 源码 效果 原图 输出 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文摘自2.Harris角点检测算法 -- ...

  7. Harris角点检测及数据分析

    Harris角点检测及其数据分析 文章目录 Harris角点检测及其数据分析 一.针对角点的概述 二.HARRIS角点检测思想 三.HARRIS角点检测数学表达 四.HARRIS角点计算流程 五.HA ...

  8. OpenCV + CPP 系列(卅三)图像特征提取(Harris角点检测、Shi-Tomasi角点检测、自定义角点检测)

    文章目录 一.常用图像特征描述 二.Harris角点检测 演示Harris角点检测 三.Shi-Tomasi角点检测 四.自定义角点检测器 一.常用图像特征描述 SIFT.SURF.HOG.Haar. ...

  9. 计算机视觉(二)HARRIS角点检测算法与SIFT

    文章目录 前言 一.HARRIS角点检测算法 1.什么是角点(corner points) 2.角点检测算法的基本思想 3.什么是好的角点检测算法 4.角点特征的数学刻画 5.度量角点响应 6.HAR ...

  10. Python计算机视觉——Harris角点检测

    Python计算机视觉--Harris角点检测 文章目录 Python计算机视觉--Harris角点检测 写在前面 1 Harris角点检测基本思想 2 Harris角点检测公式推导 3 实验分析 写 ...

最新文章

  1. redux 和 react-redux 部分源码阅读
  2. Python__configparser模块
  3. java线程切换 notify_浅谈 Java线程状态转换及控制
  4. 工作234:按钮禁用
  5. 更新macOS Monterey后遇到的各种Bug问题及解决方法
  6. 超简单的Tomcat安装过程
  7. ThinkCMF变量输出+使用函数
  8. 封装和@property
  9. windows创建任务计划(周期执行bat脚本)
  10. angular6、7 兼容ie9、10、11
  11. 极限学习机(ELM)从原理到程序实现(附完整代码)
  12. 二进制炸弹--拆弹实验
  13. WebRTC[7]-Failed to set remote offer sdp: Called with SDP without DTLS fingerprint
  14. Elasticsearch用java api 创建mapping
  15. mysql内存回收_mysql占用内存过多
  16. 【在线可测】通用中文点选验证码识别
  17. 2020春季学期哈工大软件构造学习心得一
  18. pandas、pyecharts绘制基金走势图-01
  19. C语言中的文件是流式文件吗,c语言文件流
  20. PHP高效生成一个不重复随机数

热门文章

  1. win32 sdk绘制ListBox控件
  2. RHEL 5基础篇—管理系统计划任务
  3. 页面可用性之浏览器默认字体与CSS 中文字体
  4. 软件公司的管理规范化了、编制都齐全了,一般小公司是承受不了的这么庞大的开支的...
  5. NullableTypes for .NET
  6. python基础--闭包函数和装饰器
  7. Q:判断链表中是否存在环的相关问题
  8. 动态控制C4C UI元素的显示和隐藏
  9. 个人笔记------无级分类格式化
  10. Kubernetes Job Controller源码分析