OpenCV Harris 角点检测子
目标
本教程中我们将涉及:
- 有哪些特征?它们有什么用?
- 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点.
理论
有哪些特征?
是指
- 匹配关键点 是指在场景中可以很容易识别出来的 特性 . 这些特性就是这里所说的 特征 。
- 因此,特征应该有什么样的特性呢?
- 应该具有 可识别的独一无二性
图像特征类型
图像特征类型:
- 边缘
- 角点 (感兴趣关键点)
- 斑点(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/
from: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.html#harris-detector
OpenCV Harris 角点检测子相关推荐
- OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测
Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...
- 图像局部特征(二)--Harris角点检测子
一.角点定义 有定义角点的几段话: 1.角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测.图像匹配.视频跟踪.三维建模和目标识别等领域 ...
- opencv harris 角点检测
一.图像特征的分类 [OpenCV入门教程之十六]OpenCV角点检测之Harris角点检测_[浅墨的游戏编程Blog]毛星云(浅墨)的专栏-CSDN博客_基于轮廓曲线的角点检测 下面部分图像来自与B ...
- OpenCV Harris角点检测
Harris角点检测的思想是通过图像的局部的小窗口观察图像,角点的特征是窗口沿任意方向移动都会导致图像灰度的明显变化,如下图所示: .判断角点,如下图所示: 当R为大数值的正数时是角点 当R为大数值的 ...
- Harris 角点检测原理详解
var html = document.getElementById("artContent").innerHTML; document.getElementById(" ...
- Harris角点检测算法
Harris角点检测算法 一.算法原理 二.代码 三.运行结果与分析 (一)纹理.角点丰富场景 (二)纹理平坦场景 (三)垂直或水平边缘多场景 四.总结 PS:为了消除参数k的影响,也可采用商来计算响 ...
- OpenCV + CPP 系列(卅三)图像特征提取(Harris角点检测、Shi-Tomasi角点检测、自定义角点检测)
文章目录 一.常用图像特征描述 二.Harris角点检测 演示Harris角点检测 三.Shi-Tomasi角点检测 四.自定义角点检测器 一.常用图像特征描述 SIFT.SURF.HOG.Haar. ...
- OpenCV角点检测之Harris角点检测
本篇文章中,我们一起探讨了OpenCV中Harris角点检测相关的知识点,学习了OpenCV中实现Harris角点检测的cornerHarris函数的使用方法.此博文一共有两个配套的麻雀虽小但五脏俱全 ...
- OpenCV与图像处理学习十三——Harris角点检测(含代码)
OpenCV与图像处理学习十三--Harris角点检测(含代码) 一.角点的概念 二.Harris角点检测的实现过程 三.Harris代码应用 一.角点的概念 角点: 在现实世界中, 角点对应于物体的 ...
最新文章
- 多线程-- ThreadLocal
- 【转载】基于Nios II的DMA传输总结(附源码)
- android中的帧动画,[Android开发] Android中的帧动画
- vue 组件模板template定义时的注意事项
- log4j 配置和使用
- 最新BIOS设置中英文对照表
- google书签误删恢复(windows系统)
- speedoffice表格如何冻结窗格?
- 我的Java学习笔记(二)飞机大战小游戏
- 【BZOJ1491】[NOI2007]社交网络 Floyd
- group by 和 having 用法
- Spring项目-在线五子棋
- 密评(商用密码应用安全性评估)
- 计算机硬盘一只闪烁,硬盘灯一直亮,小编教你电脑硬盘指示灯一直亮怎么办
- 微波技术在计算机的应用论文,计算机数据自动处理在微波实验中的应用.doc
- React-forceUpdate()
- gcc、 binutils、gdb
- 泰坦尼克号数据之生还率分析
- 装机清单、配置及使用技巧
- php gd 圆角,php使用gd库在图片中画圆角矩形
热门文章
- 英伟达宣布全面支持ARM高性能计算,三周打造全球排名第22超算
- 李开复:白手起家的10个步骤
- 机器学习入门系列一(关键词:单变量线性回归,梯度下降法)
- java 加载中_Java 6类加载中更快的是什么?
- Java - 死锁 Dead Lock 定位分析
- python窗体设置italic_007萝卜头学python:Python GUI 之Tkinter
- 杜克大学计算机科学专业,杜克大学计算机科学专业研究生留学申请条件高不高?...
- 计算机应用办公软件实训报告,办公软件实习报告
- 数据结构与算法笔记(十六)—— 二叉搜索树
- 大型计算机主机通常采用,全国计算机一级选择题真题集