OpenCV教程(43) harris角的检测(1)
计算机视觉中,我们经常要匹配两幅图像。匹配的的方式就是通过比较两幅图像中的公共特征,比如边,角,以及图像块(blob)等,来对两幅图像进行匹配。
相对于边,角更适合描述图像特征,比如下面的图像中,大概有6种特征,我们用A、B、C、D、E、F来描述,其中A, B是平的区域,在图像中很难精确定位,C,D是边,比A,B好些,但是图像中的边也很多,定位到某个边也比较困难,相比来说E,F的角更适合描述当前的图像的特征,也更好检测,因为你不论怎么移动图像,这些角的特征都和图像其它部分不同。所以在计算机视觉中,我们通常用角来描述图像特征。
E,F中的角我们通常称作角点(corner points),他们具有以下特征:
–局部窗口沿各方向移动,均产生明显变化的点
–图像局部曲率突变的点
在这篇教程中,我们来学习如何在图像中检测harrs特征角,harris特征角最早在paper A Combined Corner and Edge Detector中被Chris Harris & Mike Stephens提出。
Harris角点检测的基本思想:从图像局部的小窗口观察图像特征,在各个方向移动都会导致图像灰度的明显变化,也就是说图像的梯度在各个方向有很大变化。
下面我们看看harris角的计算方法:
对于灰度图像 ,我们在窗口内,用x方向的偏移u和y方向的偏移v,扫过所有像素,得到一个图像灰度值的变化和。
- 表示在 位置的窗口。
- 是 位置的图像灰度值。
- 是位置 的图像灰度值。
由于我们要在一个窗口内查找harris特征角,所以我们必须找到变化最大的窗口,这个窗口内肯定存在特征角,所以我们定义下面的方程,并用泰勒级数展开式子:
表示成矩阵乘法形式:
假设
则有:
对每一个窗口计算得到一个分数R,根据R的大小来判定窗口内是否存在harris特征角。分数R根据下面公式计算得到:
这里:(是矩阵M的2个特征值,k是一个指定值,这是一个经验参数,需要实验确定它的合适大小,通常它的值在0.05和0.5之间)。
- det(M) =
- trace(M) =
- R取决于M的特征值,对于角点|R|很大,平坦的区域|R|很小,边缘的R为负值
在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 – 就是扫描时候窗口的大小。
- ksize – Sobel() 算子使用的值。
- 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);
下面是程序的运行结果:
程序代码:参考工程文件FirstOpenCV48
代码下载:http://yunpan.cn/Q4a6K68ASC5Xy
OpenCV教程(43) harris角的检测(1)的更多相关文章
- OpenCV教程(45) harris角的检测(3)
在前面一篇教程中,我们通过取局部最大值的方法来处理检测结果,但是从图像中可以看到harris角的分布并不均匀,在纹理颜色比较深的地方检测的harris角结果更密集一些.本章中,我们使用一个 ...
- OpenCV教程(44) harris角的检测(2)
在上一篇教程中,我们得到的harris特征角二值图中,角的数目特别多,本章我们用一个局部最大化的方法,只保留局部值最大的harris特征角. // Harris角计算 cv::corner ...
- cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
参考文献----------OpenCV-Python-Toturial-中文版.pdf 参考博客----------http://www.bubuko.com/infodetail-2498014. ...
- Opencv学习笔记------Harris角点检测
image算法测试iteratoralgorithmfeatures 原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/73 ...
- 第十一节、Harris角点检测原理(附源码)
OpenCV可以检测图像的主要特征,然后提取这些特征.使其成为图像描述符,这类似于人的眼睛和大脑.这些图像特征可作为图像搜索的数据库.此外,人们可以利用这些关键点将图像拼接起来,组成一个更大的图像,比 ...
- opencv-角点检测之Harris角点检测
转自:https://blog.csdn.net/poem_qianmo/article/details/29356187 先看看程序运行截图: 一.引言:关于兴趣点(interest point ...
- 【OpenCV十六新手教程】OpenCV角检测Harris角点检测
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...
- OpenCV Harris 角点检测子
Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...
- Opencv Harris角点检测
#include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...
随机推荐
- SCRUM 12.20
以下为我们爬虫遇到问题的报告 我们团队的m2阶段原本计划是爬取美团的信息以支持我们的app对比功能,但在这一阶段遇到很多问题,主要表现如下: 美团反爬机制: 由于我们团队人员在事先并不知道美团具有反爬 ...
- .Net反编译软件
.Net反编译软件 https://www.cnblogs.com/xiandnc/p/10132491.html 一说起.net的反编译软件,大家首先想到的就是Reflector,ILSpy,dot ...
- jQuery empty() vs remove()
https://stackoverflow.com/questions/3090662/jquery-empty-vs-remove http://www.cnblogs.com/yeer/archi ...
- 关于utf8mb4的学习了解笔记
占位下班写 据说可以存储emoji ..妈蛋今天大神又秀我一脸 大概意思是,我们整个后端数据库,最近都升级了编码格式.从以前久的utf-8整个升级到了utf8mb4的格式 该格式支持emoji表情. ...
- Maven 3-Maven依赖版本冲突的分析及解决小结
我自己遇到了一个问题: 我需要使用一个api,这个api已经引入包:slf4j-log4j12 所以,在自己的pom中,如果引入了这个包,需要exclude掉: 因为在pom.xml中查询是找不到的, ...
- ajax readystatue
onReadyStatueChange存儲狀態處理函數,當readyStatue改變時,調用該函數. readyStatue的狀態: 0 請求未初始化 1 服務器連接已建立 2 請求已接收 ...
- iOS程序的启动执行顺序
1 程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2 程序完成加载 -[AppDelegate application:didFinishLaunchingWithOpt ...
- python系列-2 正则表达式资料
- Django-website 程序案例系列-13 中间件
自定义中间件1: from django.utils.deprecation import MiddlewareMixin # 中间件需要引用的包 class Row1(MiddlewareMixin ...
- POJ1942-Paths On a Grid-组合数学
从n+m步中挑选min(n,m)步向上走,剩下的就是向下走. 求解n+mCmin(n,m)时,要一边计算一边约分. #include <cstdio> #include <algor ...