harris角点(课程) 2013-3-26
Harris角点检测算法
Harris⾓点检测算法⼀,⾓点 ⾓点还没有明确的数学定义。
⼀般的⾓点检测都是对有具体定义的、或者是能够具体检测出来的兴趣点的检测。
这意味着兴趣点可以是⾓点,也可以是在某些属性上强度最⼤或者最⼩的孤⽴点、线段的终点,或者是曲线上局部曲率最⼤的点。
在实践中,通常⼤部分称为⾓点检测的⽅法检测的都是兴趣点,⽽不是独有的⾓点。
因此,如果只要检测⾓点的话,需要对检测出来的兴趣点进⾏局部检测,以确定出哪些是真正的⾓点。
⽬前的⾓点检测算法可归纳为3类:基于灰度图像的⾓点检测、基于⼆值图像的⾓点检测、基于轮廓曲线的⾓点检测。
⾓点是图像很重要的特征,对图像图形的理解和分析有很重要的作⽤。
对灰度图像、⼆值图像、边缘轮廓曲线的⾓点检测算法进⾏综述,分析了相关的算法,并对各种检测算法给出了评价。
⼆,Harris算法 Harris⾓点提取算法:Harris ⾓点提取算法是Chris Harris 和Mike Stephens 在H.Moravec 算法的基础上发展出的通过⾃相关矩阵的⾓点提取算法,⼜称Plessey算法。
Harris⾓点提取算法这种算⼦受信号处理中⾃相关⾯数的启发,给出与⾃相关函数相联系的矩阵M。
M 阵的特征值是⾃相关函数的⼀阶曲率,如果两个曲率值都⾼,那么就认为该点是⾓点特征。
算法流程1.利⽤⽔平,竖直差分算⼦对图像的每个像素进⾏滤波以求得Ix,Iy,进⽽求得M中的四个元素的值。
代码中如果窗⼝数组array为-1,0,1,-1,0,1,-1,0,1}则是求解X⽅向的,如果为{-1,-1,-1,0,0,0,1,1,1}为Y⽅向的,则Ix和Iy求解结束,求解IX2相对⽐较简单,像素相乘即可。
2.对M的四个元素进⾏⾼斯平滑滤波,为的是消除⼀些不必要的孤⽴点和凸起,得到新的矩阵M。
3.3.接下来利⽤M计算对应每个像素的⾓点响应函数R,即:4、局部极⼤值抑制,同时选取其极⼤值5.在矩阵R中,同时满⾜R(i,j)⼤于⼀定阈值threshold和R(i,j)是某领域内的局部极⼤值,则被认为是⾓点三,代码1from pylab import *2from PIL import Image3from PCV.localdescriptors import harris4"""5 Example of detecting Harris corner points (Figure 2-1in the book).6"""7 # 读⼊图像8 im = array(Image.open(r'b3.jpg').convert('L'))9 # 检测harris⾓点10 harrisim = pute_harris_response(im)11 # Harris响应函数12 harrisim1 = 255 - harrisim13 figure()14 gray()15 #画出Harris响应图16 subplot(141)17 imshow(harrisim1)18 print (harrisim1.shape)19 axis('off')20 axis('equal')21 threshold = [0.01, 0.05, 0.1]22for i, thres in enumerate(threshold):23 filtered_coords = harris.get_harris_points(harrisim, 6, thres)24 subplot(1, 4, i+2)25 imshow(im)26 print (im.shape)27 plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')28 axis('off')29 show()四,运⾏结果 4.1纹理平坦的图 4.1.1正⾯ 4.1.2侧⾯ 4.1.3旋转 4.1.4相对较远处 4.1.5较亮情况 4.2垂直或⽔平边缘多 4.2.1正⾯ 4.2.2侧⾯ 4.2.3旋转 4.2.4相对较远处 4.3纹理⾓点丰富 4.3.1正⾯ 4.3.2侧⾯ 4.3.3旋转 4.3.4相对较远处五,结论以及实验中遇到的问题 5.1实验结果分析1. Harris⾓点具有旋转不变性。
计算视觉——Harris角点检测
计算视觉——Harris⾓点检测⽬录⼀、Harris ⾓点检测1.1 Harris ⾓点检测原理1.2⾓点检测算法⼆、基于Harris⾓点检测对不同类型图像做出的对⽐实验2.1 平坦图像的Harris⾓点检测实验结果2.2 边缘丰富图像的Harris⾓点检测实验结果2.3⾓点丰富图像的Harris⾓点检测实验结果三、结论与总结⼀.、Harris ⾓点检测1.1 Harris ⾓点检测原理Harris⾓点检测算法是最简单的⾓点检测⽅法之⼀。
它的基本思想是使⽤⼀个固定窗⼝在图像上进⾏任意⽅向上的滑动,⽐较滑动前与滑动后两种情况,窗⼝中的像素灰度变化程度,如果存在任意⽅向上的滑动,都有着较⼤灰度变化,那么我们可以认为该窗⼝中存在⾓点。
⽤数学⽅法来刻画⾓点特征:公式解释:>[u,v]是窗⼝的偏移量>(x,y)是窗⼝内所对应的像素坐标位置,窗⼝有多⼤,就有多少个位置>w(x,y)是窗⼝函数,最简单情形就是窗⼝内的所有像素所对应的w权重系数均为1。
但有时候,我们会将w(x,y)函数设定为以窗⼝中⼼为原点的⼆元正态分布。
如果窗⼝中⼼点是⾓点时,移动前与移动后,该点的灰度变化应该最为剧烈,所以该点权重系数可以设定⼤些,表⽰窗⼝移动时,该点在灰度变化贡献较⼤;⽽离窗⼝中⼼(⾓点)较远的点,这些点的灰度变化⼏近平缓,这些点的权重系数,可以设定⼩点,以⽰该点对灰度变化贡献较⼩,那么我们⾃然想到使⽤⼆元⾼斯函数来表⽰窗⼝函数,这⾥仅是个⼈理解,⼤家可以参考下。
所以通常窗⼝函数有如下两种形式:根据上述表达式,当窗⼝处在平坦区域上滑动,可以想象的到,灰度不会发⽣变化,那么E(u,v) = 0;如果窗⼝处在⽐纹理⽐较丰富的区域上滑动,那么灰度变化会很⼤。
算法最终思想就是计算灰度发⽣较⼤变化时所对应的位置,当然这个较⼤是指针任意⽅向上的滑动,并⾮单指某个⽅向。
1.2⾓点检测算法⾓点检测算法可归纳为3类:基于灰度图像的⾓点检测、基于⼆值图像的⾓点检测、基于轮廓曲线的⾓点检测。
harris角点检测原理步骤说明
harris角点检测原理步骤说明一、Harris角点检测基本理论1.1 简略表达:角点:最直观的印象就是在水平、竖直两个方向上变化均较大的点,即Ix、Iy 都较大边缘:仅在水平、或者仅在竖直方向有较大的变化量,即Ix和Iy只有其一较大平坦地区:在水平、竖直方向的变化量均较小,即Ix、Iy都较小角点响应R=det(M)-k*(trace(M)^2) (附录资料给出k=0.04~0.06,opencv指出是0.05-0.5,浮动较大)det(M)=λ1*λ2 trace(M)=λ1+λ2R取决于M的特征值,对于角点|R|很大,平坦的区域|R|很小,边缘的R为负值。
1.2 详细描述:见附录里的ppt1.3 算法步骤其中,局部极大值可用先膨胀后与原图比较的方法求得,具体见二中源码。
二、opencv代码实现harris类[cpp] view plaincopyprint?1. #ifndef HARRIS_H2. #define HARRIS_H3. #include "opencv2/opencv.hpp"4.5. class harris6. {7. private:8. cv::Mat cornerStrength; //opencv harris函数检测结果,也就是每个像素的角点响应函数值9. cv::Mat cornerTh; //cornerStrength阈值化的结果10. cv::Mat localMax; //局部最大值结果11. int neighbourhood; //邻域窗口大小12. int aperture;//sobel边缘检测窗口大小(sobel获取各像素点x,y方向的灰度导数)13. double k;14. double maxStrength;//角点响应函数最大值15. double threshold;//阈值除去响应小的值16. int nonMaxSize;//这里采用默认的3,就是最大值抑制的邻域窗口大小17. cv::Mat kernel;//最大值抑制的核,这里也就是膨胀用到的核 18. public:19.harris():neighbourhood(3),aperture(3),k(0.01),maxStrength(0.0),threshold (0.01),nonMaxSize(3){20.21. };22.23. void setLocalMaxWindowsize(int nonMaxSize){ 24. this->nonMaxSize= nonMaxSize; 25. };26.27. //计算角点响应函数以及非最大值抑制28. void detect(const cv::Mat &image){ 29. //opencv自带的角点响应函数计算函数30. cv::cornerHarris (image,cornerStrength,neighbourhood,aperture,k);31. double minStrength;32. //计算最大最小响应值33. cv::minMaxLoc (cornerStrength,&minStrength,&maxStrength);34.35. cv::Mat dilated;36. //默认3*3核膨胀,膨胀之后,除了局部最大值点和原来相同,其它非局部最大值点被37. //3*3邻域内的最大值点取代38. cv::dilate (cornerStrength,dilated,cv::Mat()); 39. //与原图相比,只剩下和原图值相同的点,这些点都是局部最大值点,保存到localMax40. cv::compare(cornerStrength,dilated,localMax,cv::CMP_EQ);41. }42.43. //获取角点图44. cv::Mat getCornerMap(double qualityLevel) {45. cv::Mat cornerMap;46. // 根据角点响应最大值计算阈值47. threshold= qualityLevel*maxStrength; 48.cv::threshold(cornerStrength,cornerTh, 49.threshold,255,cv::THRESH_BINARY); 50. // 转为8-bit图51. cornerTh.convertTo(cornerMap,CV_8U); 52. // 和局部最大值图与,剩下角点局部最大值图,即:完成非最大值抑制53. cv::bitwise_and(cornerMap,localMax,cornerMap); 54. return cornerMap;55. }56.57. void getCorners(std::vector<cv::Point> &points, 58. double qualityLevel) {59. //获取角点图60. cv::Mat cornerMap= getCornerMap(qualityLevel); 61. // 获取角点62. getCorners(points, cornerMap); 63. }64.65. // 遍历全图,获得角点66. void getCorners(std::vector<cv::Point> &points, 67. const cv::Mat& cornerMap) {68.69. for( int y = 0; y < cornerMap.rows; y++ ) {70. const uchar* rowPtr = cornerMap.ptr<uchar>(y);71. for( int x = 0; x < cornerMap.cols; x++ ) { 72. // 非零点就是角点73. if (rowPtr[x]) { 74. points.push_back(cv::Point(x,y));75. }76. }77. }78. }79.80. //用圈圈标记角点81. void drawOnImage(cv::Mat &image,82. const std::vector<cv::Point> &points, 83. cv::Scalar color= cv::Scalar(255,255,255), 84. int radius=3, int thickness=2) {85. std::vector<cv::Point>::const_iterator it=points.begin();86. while (it!=points.end()) { 87. // 角点处画圈88. cv::circle(image,*it,radius,color,thickness);89. ++it;90. }91. }92.93. };94.95. #endif // HARRIS_H相关测试代码:[cpp] view plaincopyprint?1. cv::Mat image, image1 = cv::imread ("test.jpg");2. //灰度变换3. cv::cvtColor (image1,image,CV_BGR2GRAY);4.5.6. // 经典的harris角点方法7. harris Harris;8. // 计算角点9. Harris.detect(image);10. //获得角点11. std::vector<cv::Point> pts; 12. Harris.getCorners(pts,0.01); 13. // 标记角点14. Harris.drawOnImage(image,pts); 15.16. cv::namedWindow ("harris"); 17. cv::imshow ("harris",image); 18. cv::waitKey (0);19. return 0;相关测试结果:三、改进的Harris角点检测从经典的Harris角点检测方法不难看出,该算法的稳定性和k有关,而k是个经验值,不好把握,浮动也有可能较大。
harris角点检测算法的原理
harris角点检测算法的原理宝子!今天咱来唠唠这个超有趣的Harris角点检测算法的原理呀。
你看啊,在图像里呢,角点可是很特别的存在。
就像是人群里那个特别出众的帅哥或者美女,一眼就能被瞅见。
角点不是那种平平无奇的点哦。
比如说在一个方形的图像里,四个角就是很典型的角点。
那这个Harris角点检测算法呢,就像是一个超级侦探,专门去把这些角点给找出来。
想象一下,这个算法是怎么看待图像的呢?它把图像看成是一个充满变化的小世界。
对于图像中的每个小区域,算法会去研究这个区域周围的像素是怎么变化的。
就好比你站在一个小广场上,看看周围的人是怎么分布的,是均匀散开呢,还是有某个方向特别密集或者稀疏。
这个算法有个很关键的东西叫自相关函数。
这函数就像是一个小魔法棒,它会去计算每个小区域在不同方向上的像素变化情况。
如果在某个点的周围,不管你朝哪个方向去看,像素的变化都很明显,那这个点就很有可能是角点啦。
比如说,你在一个十字街头,不管你是看南北方向的街道,还是东西方向的街道,周围的景色(也就是像素)变化都很大,那这个十字路口就像是图像里的角点一样。
那这个算法具体是怎么操作的呢?它会先建立一个小的窗口,就像拿着一个小放大镜在图像上到处看。
这个窗口会在图像上滑动,每到一个地方,就开始计算这个地方的自相关函数。
这个计算过程呢,其实就是在看这个小窗口里的像素和周围像素的关系。
如果这个关系在各个方向上都很独特,那就有可能是角点啦。
你知道吗,这个算法还会用到矩阵呢。
不过别被矩阵吓到,它就像是一个小账本,记录着这个小区域像素变化的各种信息。
比如说,矩阵会告诉你这个区域在水平方向和垂直方向上像素变化的快慢呀之类的。
如果这个矩阵的特征值有某种特殊的情况,那就说明这个点很可能是角点。
就好像是这个小账本上的某些数字组合起来,就指向了这个特别的角点。
而且哦,这个Harris角点检测算法还有个很贴心的地方。
它不是那种很死板的算法,它会根据不同的图像特点去调整自己的判断标准。
特征匹配-Harris角点检测
特征匹配-Harris⾓点检测⼀、harris算法简介1.⾓点概述⾓点是图像很重要的特征,对图像图形的理解和分析有很重要的作⽤。
⾓点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很⾼,有效地提⾼了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。
从图像分析的⾓度来定义⾓点可以有以下两种定义:⾓点可以是两个边缘的⾓点;⾓点是邻域内具有两个主⽅向的特征点;前者往往需要对图像边缘进⾏编码,这在很⼤程度上依赖于图像的分割与边缘提取,具有相当⼤的难度和计算量,且⼀旦待检测⽬标局部发⽣变化,很可能导致操作的失败。
基于图像灰度的⽅法通过计算点的曲率及梯度来检测⾓点,避免了第⼀类⽅法存在的缺陷,此类⽅法主要有Moravec算⼦、Forstner算⼦、Harris算⼦、SUSAN算⼦等。
本⽂主要介绍的Harris⾓点检测的算法原理。
2.Harris⾓点检测基本原理⼈眼对⾓点的识别通常是在⼀个局部的⼩区域或⼩窗⼝完成的。
如果在各个⽅向上移动这个特征的⼩窗⼝,窗⼝内区域的灰度发⽣了较⼤的变化,那么就认为在窗⼝内遇到了⾓点。
如果这个特定的窗⼝在图像各个⽅向上移动时,窗⼝内图像的灰度没有发⽣变化,那么窗⼝内就不存在⾓点;如果窗⼝在某⼀个⽅向移动时,窗⼝内图像的灰度发⽣了较⼤的变化,⽽在另⼀些⽅向上没有发⽣变化,那么,窗⼝内的图像可能就是⼀条直线的线段。
如下图:3、特征匹配流程3.1、根据准则,提取图像中的特征点3.2、提取特征点周围的图像块,构造特征描述符3.3、通过特征描述符对⽐,实现特征匹配⼆、Harris⾓点检测声明:为了更好地对 Harris⾓点检测算法进⾏分析,本次实验⼀共收集了纹理平坦、垂直边缘多、垂直边缘多的三个不同的场景,每个场景各收集了五幅的图⽚。
然后通过每个场景中正⾯、侧⾯、旋转、远近、光照五个不同的⽅⾯进⾏对⽐试验。
2.1、纹理平坦的场景(以书本为例)2.1.1、正⾯图及检测结果2.1.2、侧⾯图及检测结果2.1.3、旋转图及检测结果2.1.4 、远距离图及检测结果2.1.5 、光照图及检测结果实验结果分析与总结:Harris⾓点检测算⼦具有旋转不变性。
harris角点检测实验报告
harris角点检测实验报告Harris 角点检测实验报告一、引言二、Harris 角点检测算法原理Harris 角点检测算法的核心思想是基于局部自相关函数。
对于图像中的每个像素点,通过计算其在一定邻域内的灰度变化情况来判断是否为角点。
具体来说,首先对图像进行灰度化处理,然后计算每个像素点的梯度。
接着,构建一个二阶矩矩阵(也称为结构张量),其元素是像素点邻域内梯度的乘积。
通过分析这个二阶矩矩阵的特征值,可以判断该像素点是否为角点。
如果两个特征值都很大,说明在两个方向上灰度变化都很显著,即为角点;如果一个特征值大一个特征值小,说明在一个方向上灰度变化明显,为边缘;如果两个特征值都很小,说明灰度变化不明显,不是角点或边缘。
三、实验环境与准备(一)实验环境本次实验使用的编程语言为Python,使用的图像处理库为OpenCV。
(二)准备工作1、安装所需的 Python 库,如 OpenCV。
2、准备实验所需的图像数据集,包括各种类型的图像,如自然风景、人物、建筑物等。
四、实验步骤(一)图像读取与灰度化使用 OpenCV 的`imread`函数读取图像,并使用`cvtColor`函数将其转换为灰度图像。
```pythonimport cv2image = cv2imread('imagejpg')gray_image = cv2cvtColor(image, cv2COLOR_BGR2GRAY)```(二)计算梯度使用 Sobel 算子计算灰度图像的水平和垂直梯度。
```pythonsobelx = cv2Sobel(gray_image, cv2CV_64F, 1, 0, ksize=3)sobely = cv2Sobel(gray_image, cv2CV_64F, 0, 1, ksize=3)```(三)构建二阶矩矩阵根据梯度计算二阶矩矩阵的元素。
```pythonIxx = sobelx 2Ixy = sobelx sobelyIyy = sobely 2```(四)应用高斯滤波对二阶矩矩阵进行高斯滤波,以减少噪声的影响。
特征检测之Harris角点检测简介
特征点又叫兴趣点或者角点。
常被用于目标匹配,目标跟踪,三维重建等应用中。
点特征主要指图像中的明显点,如突出的角点、边缘端点、极值点等等。
特征点具有以下三种特性:▪旋转不变性;▪光照不变性;▪视角不变性。
用于点特征提取的算子称为兴趣点提取(检测)算子。
常用的有▪Harris角点检测;▪FAST特征检测;▪SIFT特征检测;▪SURF特征检测。
预备数学实对称矩阵如果有n阶矩阵A,其矩阵的元素都为实数,且矩阵A的转置等于其本身,则称A为实对称矩阵。
性质:▪实对称矩阵A的不同特征值对应的特征向量是正交的;▪n阶实对称矩阵A必可相似对角化,且相似对角阵上的元素即为矩阵本身特征值。
对角化:优点:满秩的对角方阵,可以直接看出特征值,特征向量等重要特征。
卷积算子—Sobel算子主要用于边缘检测,分别对水平和垂直方向上的边缘敏感。
对图像任意一点使用会产生对应的梯度矢量或者其法矢量。
对噪声具有平滑抑制作用,但是得到的边缘较粗,且可能出现伪边缘。
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
如果以A代表原始图像,Gx 及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:梯度计算公式梯度方向计算公式如果等于零,代表图像该处拥有纵向边缘,左边比右边要暗。
基础知识1、角点使用一个滑动窗口在下面三幅图中滑动,可以得出以下结论:▪左图表示一个平坦区域,在各方向移动,窗口内像素值均没有太大变化;▪中图表示一个边缘特征(Edges),如果沿着水平方向移动(梯度方向),像素值会发生跳变;如果沿着边缘移动(平行于边缘) ,像素值不会发生变化;▪右图表示一个角(Corners),不管你把它朝哪个方向移动,像素值都会发生很大变化。
所以,右图是一个角点。
2、角点类型下图展示了不同角点的类型,可以发现:如果使用一个滑动窗口以角点为中心在图像上滑动,存在朝多个方向上的移动会引起该区域的像素值发生很大变化的现象。
harris角点检测的原理
harris角点检测的原理
Harris角点检测是一种计算机视觉算法,用于寻找图像中的角
点(即具有明显的边缘变化的局部区域)。
其原理如下:
1. 图像灰度化:将彩色图像转换为灰度图像,以便后续处理。
2. 梯度计算:根据图像灰度值计算每个像素的梯度,通常使用Sobel算子进行图像梯度计算。
3. 计算自相关矩阵:对于每个像素,计算其周围窗口内梯度的自相关矩阵。
自相关矩阵是一个2x2的矩阵,包含了图像的二阶梯度信息。
4. 计算Harris响应函数:根据自相关矩阵计算Harris响应函数,该函数用于评估每个像素周围区域是否为角点。
Harris响应函
数定义为:
R = det(M) - k(trace(M))^2
其中,M是自相关矩阵,det(M)和trace(M)分别表示矩阵的行
列式和迹,k是一个经验参数,用于调整角点检测的灵敏度。
5. 非最大抑制:对于Harris响应函数计算得到的角点,使用非最大抑制算法排除冗余的角点。
非最大抑制通常根据角点的Harris响应值大小和邻域内角点的距离来决定是否保留一个角点。
6. 阈值处理:根据Harris响应函数的阈值,将不满足要求的角点剔除。
通常会通过设定一个合适的阈值,以过滤掉噪声和不
显著的角点。
通过以上步骤,Harris角点检测算法可以在图像中准确地检测到具有明显边缘变化的角点,并过滤掉不相关的点和噪声。
harris角点响应函数
harris角点响应函数Harris角点响应函数是计算机视觉领域中常用的一种算法,用于检测图像中的角点。
它由Cornell大学的Chris Harris和Mike Stephens在1988年提出。
在计算机视觉中,角点是指在图像中一个突出的、由多个边缘交汇而成的点,通常具有高强度变化的特征。
角点在图像处理和计算机视觉中应用广泛,如图像配准、物体识别、追踪等。
Harris角点响应函数的基本思想是通过计算像素在不同方向上的灰度变化率来确定角点,即角点处的像素在多个方向上都具有较高的灰度变化率。
因为角点处的像素在不同方向上都具有明显的边缘变化,而直线和平面上的像素只有在一个方向上具有明显的边缘变化。
具体地,Harris角点响应函数可以通过以下公式计算:R = det(M) - k(trace(M))^2其中,M是一个2x2的矩阵,它的两个分量分别是像素在不同方向上的梯度值的平方和,即M = sum(w(x,y)[dx^2(x,y), dx(x,y)dy(x,y); dx(x,y)dy(x,y), dy^2(x,y)])在这个公式中,dx(x,y)=I(x+1,y) - I(x,y)和dy(x,y)=I(x,y+1) - I(x,y)是像素在x和y方向上的梯度值,I(x,y)是图像在位置(x,y)处的灰度值。
w(x,y)是一个窗口函数,用于权衡像素的贡献,通常采用高斯函数。
k是一个经验值,用于控制角点的检测程度,一般取值在0.04到0.06之间。
通过计算像素点的响应值R,可以判断该点是否为角点。
R值较大的像素点很可能是角点,而R值较小的像素点则可能是平面或边缘上的像素点。
Harris角点响应函数的优点是能够检测不同大小和方向的角点,而且计算效率较高。
然而,它也存在一些限制,如对噪声敏感和对图像亮度变化敏感等问题。
因此,在实际应用中需要根据具体情况加以调整和改进。
Harris角点检测原理及实现
Harris⾓点检测原理及实现为便于理解,先简要介绍⾓点的概念和⾓点检测背景1 背景⾓点检测⼤致可分为三类:基于灰度图的⾓点检测、基于⼆值化图像的⾓点检测和基于轮廓曲线的⾓点检测。
Harris属于基于灰度图的⾓点检测。
2 Harris特征原理2.1 概述Harris⾓点检测根据窗⼝向多个⽅向,通过判断窗⼝内像素值有⽆明显变化判断有⽆⾓点。
如下图: 第⼀幅图像中,窗⼝内像素值⽆明显变化,⽆⾓点。
第⼆幅图像中,窗⼝⽔平移动时有明显变化,⽆⾓点。
第三幅图中,窗⼝多个⽅向移动时有明显变化,有⾓点。
Harris⾓点检测可分为三步:梯度计算、响应值计算、⾓点提取。
下⾯按步骤介绍。
2.2梯度计算: 对图像中的任意⼀像素点I(x,y),进⾏⾃相关平移w(x+Δx、y+Δy)得到⾃相关函数: c(x,y,Δx,Δy) = ∑w h(x,y)(I(x,y)-I(x+Δx,y+Δy))2 其中 ∑w表⽰窗⼝内的点,h(x,y)表⽰加权函数,加权函数可根据⾃⼰需要进⾏修改(通过修改源代码)。
由泰勒可得: I(x+Δx,y+Δy) = I(x,y)+ΔxI x(x,y)+ΔyI y(x,y)+p ≈I(x,y)+ΔxI x(x,y)+ΔyI y(x,y)代⼊⾃相关函数可得(加权函数暂时忽略): c(x,y,Δx,Δy) = ∑w(I(x,y)-I(x+Δx,y+Δy))2 ≈ ∑w((ΔxI x(x,y))2+2ΔxΔyI x(x,y)I y(x,y)+(ΔyI y(x,y))2) 将上公式⽤图表⽰如下: 其中,u和v分别表⽰Δx和Δy,w(x,y)表⽰加权函数。
Harris算法是通过判断像素值是否在多个⽅向上有明显变化可转换为为是否在x和y⽅向上像素值均有明显变化,再转换为Ix或Iy的变化,再转换为M矩阵的特征值λ1,λ2的变化,如下图:2.3响应值计算:上⾯计算不易于通过编程实现,Harris通过定义⾓点响应函数R的⽅式,⽤于表⽰⼀个⾓点的Harris响应值:trace表⽰为矩阵的迹,det为矩阵的⾏列式(矩阵的迹:主对⾓线上的值相加即所有特征值的和),k为经验常数,⼀般取0.04~0.06。
Harris角点检测算法编程步骤及示例演示
Harris角点检测算法编程步骤及示例演示也不说那么多废话了,要介绍啥背景意义之类的,角点检测,顾名思义,就是检测角点,最简单的就是两条线的交点了,还有比如下国际象棋的棋盘格子的交点之类的,反正就是检测这些点。
简单将Harris角点检测算法的思想说下,就是拿一个小窗在图像中移动,通过考察这个小窗口内图像灰度的平均变换值来确定角点。
(1)如果窗口内区域图像的灰度值恒定,那么所有不同方向的偏移几乎不发生变化;(2)如果窗口跨越一条边,那么沿着这条边的偏移几乎不发生变化,但是与边垂直的偏移会发生很大的变化;(3)如果窗口包含一个孤立的点或者角点,那么所有不同方向的偏移会发生很大的变化。
下面给出具体数学推导:设图像窗口平移量为(u,v),产生的灰度变化为E(u,v),有E(u,v)=sum[w(x,y)[I(x+u,y+v)-I(x,y)]^2],其中w(x,y)为窗口函数,I(x+u,y+v)为平移后的灰度值,I(x,y)为平移前的灰度值。
有泰勒公式展开可得:I(x+u,y+v)=I(x,y)+Ix*u+Iy*v+O(u^2,v^2);Ix,Iy分别为偏微分,在图像中为图像的方向导数.因此E(u,v)=sum[w(x,y) [Ix*u+Iy*v+O(u^2,v^2)]^2],可以近似得到E(u,v)=sum[w(x,y) [Ix*u+Iy*v]^2],即E(u,v)=[u,v][Ix^2,Ix*Iy;Ix*Iy,Iy^2][u,v]T令M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2],因此最后对角点的检测成了对矩阵M的特征值的分析了,令M其特征值为x1,x2;当x1>>x2或者x2>>x1,则检测到的是边缘部分;当x1,x2都很小,图像窗口在所有移动的方向上移动灰度级都无明显变化.当X1,X2都很大时且相当,检测到的是角点。
编程时用x1,x2不方便,因此定义角点响应函数;R=det(M)-k(trace(M))^2;其中det(M)为矩阵M的行列式,trace(M)为矩阵M的迹。
Harris角点的原理与实验-Xueyayang
2.3 原理到代码的对应
这个是做图像处理比较挠头的一部分,明明原理懂了,到写代码却一 筹莫展。因此这里对此多写一些。 2.3.1 导数 以 X 方向的导数为例,设 I(x,y) 为点 (x,y) 处的灰度值,那么 该点处的导数就是: ∂I = I (x + 1, y ) − I (x − 1, y ) ∂x 即右侧点减去左侧点的灰度值。 对应的,Y 方向的导数为: (3)
1
2 解答 引入 Hessian Matrix:
∂2I ∂x2 ∂2I ∂y∂x ∂2I ∂x∂y ∂2I ∂y 2
2
H (p) =
(1)
这个矩阵由 p 点处的二阶导数、偏导组成。 Harris 角点的定义是,如果一点处的 Hessian Matrix 满足以下 条件: Det(H ) − k ∗ T race(H ) ∗ T race(H ) < ϵ 就认为是角点。 其中: • Det(H ) 是对矩阵 H 求行列式的值 • T race(H ) 是矩阵 H 的“迹” – k 是根据经验指定的一个系数。OpenCV 中选的是 0.04 – ϵ 是根据经验指定的一个阈值。OpenCV 做法是:用所有差值中 的最大值,乘上一个 quality level。 (2)
3 结论
• 矩阵、导数的理论很重要。也挺有意思。 • 从理论到代码的实现好像关心的人很少。经常找到的资料略过不提。 还是我太菜了?
(8)
(9)
3 结论 2.3.4 实践中的优化
4
理论上,理论与实践是严格一致的;实践上,实践与理论总是有差距。 上面的分析是以一点处的导数组成 Hessian Matrix;实际上,对任一 点,会计算其 8 邻域所有点的导数和,然后再生成 Hessian Matrix 来计算角点。 在代码里,即对 Dx,Dy 分别用算子: 1 1 1 1 1 1 1 1 1 求卷积。 2.3.5 代码与实验 源代码在这里。 可以与 OpenCV 的实现达到同样的效果。 (11)
Harris角点检测(含Matlab函数的关键代码)[转载]
Harris⾓点检测(含Matlab函数的关键代码)[转载]在上述教程中涉及到了Harris⾓点检测的推导以及各种⾓点检测⽅法的⽐较,⾮常值得⼀看。
这⾥只是简单的整理⼀下,⽤⽩话说明⼀下Harris⾓点检测算法的步骤:1. 计算图像的⽅向导数,分别保存为两个数组Ix以及Iy,这⾥可以使⽤任何⽅法,⽐较正统的是使⽤Gaussian函数,因为在Harris⾓点检测的推导过程中默认是采⽤了Gaussian函数作为其计算图像偏导数的⽅法。
当然使⽤简单的Prewitt或者Sobel算⼦也没有关系。
2. 为每⼀个点计算局部⾃相关矩阵 u(x,y) = [Ix(x,y)^2*W Iy(x,y)Ix(x,y)*W;Ix(x,y)Iy(x,y)*W Iy(x,y)^2*W];这⾥*W代表以x,y为中⼼与⾼斯模板W做卷积,⽽这个模板的⼤⼩则需要你⾃⼰指定。
3. 如果这个u的两个特征值都很⼩,则说明这个区域是个平坦区域。
如果u的某个特征值⼀个⼤⼀个⼩,则是线,如果两个都很⼤,那么就说明这是个⾓点。
Harris提供了另⼀个公式来获取这个点是否是⾓点的⼀个评价:corness = det(u) - k*trace(u)^2;这个corness就代表了⾓点值,其中k是你⾃⼰取的⼀个固定的变量,典型的为[0.04,0.06]之间。
当然在求取了每个点的corness以后,最好再做⼀个极⼤值抑制,这样的效果⽐直接设置⼀个阀值要好。
转⾃:/prleader/archive/2009/02/23/3930571.aspx——————————————————————————————————————Matlab 中 cornermetric 函数的关键代码filter_coef = fspecial('gaussian',[1 5],1.5);w = filter_coef' * filter_coef;% compute gradientsA = imfilter(I,[-1 0 1] ,'replicate','same','conv');B = imfilter(I,[-1 0 1]','replicate','same','conv');A = A(2:end-1,2:end-1);B = B(2:end-1,2:end-1);% compute A, B, and CC = A .* B;A = A .* A;B = B .* B;% filter A, B, and CA = imfilter(A,w,'replicate','full','conv');B = imfilter(B,w,'replicate','full','conv');C = imfilter(C,w,'replicate','full','conv');% clip to image sizeremoved = (numel(filter_coef)-1) / 2 - 1;A = A(removed+1:end-removed,removed+1:end-removed);B = B(removed+1:end-removed,removed+1:end-removed);C = C(removed+1:end-removed,removed+1:end-removed); cornerness = (A .* B) - (C .^ 2) - sensitivity_factor * ( A + B ) .^ 2;。
特征点提取之Harris角点提取法
特征点提取之Harris⾓点提取法1. 特征点提取的意义2.⾓点3. Harris⾓点检測的基本原理4.Harris⾓点检測算法的步骤5.Harris⾓点提取算法设计<span style="font-size:18px;">function [ptx,pty] = HarrisPoints(ImgIn,threshold)% Harris⾓点提取算法%计算图像亮度f(x,y)在点(x,y)处的梯度-----------------------------------------fx = [5 0 -5;8 0 -8;5 0 -5]; % ⾼斯函数⼀阶微分,x⽅向(⽤于改进的Harris)%fx = [-2 -1 0 1 2]; % x⽅向梯度算⼦(⽤于Harris⾓点提取算法)Ix = filter2(fx, ImgIn); % x⽅向滤波fy = [5 8 5;0 0 0;-5 -8 -5]; % ⾼斯函数⼀阶微分,y⽅向(⽤于改进的Harris)%fy = [-2; -1; 0; 1; 2]; % y⽅向梯度算⼦(⽤于Harris⾓点提取算法)Iy = filter2(fy, ImgIn); % y⽅向滤波%构造⾃相关矩阵-------------------------------------------------------------Ix2 = Ix .^ 2;Iy2 = Iy .^ 2;Ixy = Ix .* Iy;clear Ix;clear Iy;h= fspecial('gaussian', [7 7], 2);% 产⽣7*7的⾼斯窗函数,sigma=2Ix2 = filter2(h,Ix2);Iy2 = filter2(h,Iy2);Ixy = filter2(h,Ixy);%提取特征点-----------------------------------------------------------------height = size(ImgIn, 1);width = size(ImgIn, 2);result = zeros(height, width);% 纪录⾓点位置,⾓点处值为1R = zeros(height, width);Rmax = 0; % 图像中最⼤的R值k = 0.05; %k为常系数,经验取值范围为0.04~0.06for i = 1 : heightfor j = 1 : widthM = [Ix2(i, j) Ixy(i, j); Ixy(i, j) Iy2(i, j)];R(i,j) = det(M) - k * (trace(M)) ^ 2; % 计算Rif R(i,j) > RmaxRmax = R(i, j);end;end;end;T = threshold* Rmax;%固定阈值。
Harris角点检测算法
Harris角点检测算法软工1303陈伟峰1.算法介绍1988年Harris在Moravec算法的基础上提出了Harris算法。
Harris算法是对moravec算法的改进和提高,harris算法使用高斯函数替代moravec算法的二值窗口函数,另外在moravec中只考虑每个45度的方向的灰度变化,二harris利用泰勒展开式,去近似计算每个方向的灰度变化情况。
2.Harris算法(1)算法思想Harris角点检测算法思想就是拿一个小窗在图像中移动,通过考察这个小窗口内图像灰度的平均变换值来确定角点。
相应的会有三种情况发生。
(1)如果窗口内区域图像的灰度值恒定,那么所有不同方向的偏移几乎不发生变化,这个区域属于平坦区域;(2)如果窗口跨越一条边,那么沿着这条边的偏移几乎不发生变化,但是与边垂直的偏移会发生很大的变化,这个区域属于边缘区域;(3)如果窗口包含一个孤立的点或者角点,那么所有不同方向的偏移会发生很大的变化。
图1 Harris角点检测基本思想(2)算法推导假设窗口W发生位置偏移(u,v);比较偏移前后窗口中每一个像素点的灰度变化值;使用灰度误差平方和来构造一个误差函数E(u,v),其中的窗口函数是用来滤波的。
平坦区域:任意方向移动,无灰度变化边缘:沿着边缘方向移动,无灰度变化角点:沿任意方向移动,明显灰度变化其中w(x,y)为窗口函数,I(x+u,y+v)为平移后的灰度值,I(x,y)为平移前的灰度值。
由Taylor展开式可以得到:我们定义:H称为自相关矩阵, λmax和λmin是自相关矩阵的特征值。
如图2所示,其中E(u,v)是一个二次型函数,二次型函数的本质就是一个椭圆,椭圆的扁率和尺寸是由H的特征值λmax和λmin决定的,椭圆的方向由H的特征向量决定。
图2 E(u,v)的椭圆形式图3 椭圆与点线面的关系根据图3我们可以看到,当λmax和λmin两者都比较大,并且大小相当时对应点为角点,两者都非常小时为平坦区域;一大一小时为边界区域。
HarrisCorner(Harris角检测)
HarrisCorner(Harris⾓检测)在做图像匹配时,常需要对两幅图像中的特征点进⾏匹配。
为了保证匹配的准确性,所选择的特征必须有其独特性,⾓点可以作为⼀种不错的特征。
那么为什么⾓点有其独特性呢?⾓点往往是两条边缘的交点,它是两条边缘⽅向变换的⼀种表⽰,因此其两个⽅向的梯度变换通常都⽐较⼤并且容易检测到。
这⾥我们理解⼀下Harris Corner ⼀种⾓点检测的算法⾓点检测基本原理:⼈们通常通过在⼀个⼩的窗⼝区域内观察点的灰度值⼤⼩来识别⾓点,如果往任何⽅向移动窗⼝都会引起⽐较⼤的灰度变换那么往往这就是我们要找的⾓点。
如下图右下⾯我们看⼀下Harris的数学公式,对于[x,y]平移[u,v]个单位后强度的变换有下式,I(x+u,y+v)是平移后的强度,I(x,y)是原图像像素。
对于括号⾥⾯的值,如果是强度恒定的区域,那么它就接近于零,反之如果强度变化剧烈那么其值将⾮常⼤,所以我们期望E(u,v)很⼤。
其中w是窗函数,它可以是加权函数,也可以是⾼斯函数利⽤⼆维泰勒展开式我们有所以其中⼀阶可以近似为于是我们可以给出Harris Corner的如下推导,其中Ix,Iy是x,y⽅向的Gradient模,乘以位移得到位移后的量对于⼩的位移,我们可以⽤双线性插值⽅法近似:其中M为2*2矩阵如下在本质上我们可以把⼆次项看成⼀个椭圆函数,我们对M进⾏特征值分析有λ1,λ2根据λ1,λ2的值我们可以把其分为三类:1.λ1,λ2都很⼩且近似,E在所以⽅向接近于常数;2.λ1>>λ2,或者λ2>>λ1, E将在某⼀⽅向上很⼤;3.λ1,λ2都很⼤且近似,E将在所以⽅向上很⼤;如图所⽰:最后我们通过计算⾓点响应值R来判断其属于哪个区间其中k⼀般为常数取在0.04-0.06间。
算法步骤:1.计算图像x,y⽅向的梯度I x,I y2.计算每个像素点的梯度平⽅3.计算梯度在每个像素点的和4.定义在每个像素点的矩阵H,也就是前⾯的M5.计算每个像素的⾓点响应6.设置阈值找出可能点并进⾏⾮极⼤值抑制代码:close allclear allI = imread('empire.jpg');I = rgb2gray(I);I = imresize(I,[500,300]);imshow(I);sigma = 1;halfwid = sigma * 3;[xx, yy] = meshgrid(-halfwid:halfwid, -halfwid:halfwid);Gxy = exp(-(xx .^ 2 + yy .^ 2) / (2 * sigma ^ 2));Gx = xx .* exp(-(xx .^ 2 + yy .^ 2) / (2 * sigma ^ 2));Gy = yy .* exp(-(xx .^ 2 + yy .^ 2) / (2 * sigma ^ 2));%%apply sobel in herizontal direction and vertical direction compute the %%gradient%fx = [-1 0 1;-1 0 1;-1 0 1];%fy = [1 1 1;0 0 0;-1 -1 -1];Ix = conv2(I,Gx,'same');Iy = conv2(I,Gy,'same');%%compute Ix2, Iy2,IxyIx2 = Ix.*Ix;Iy2 = Iy.*Iy;Ixy = Ix.*Iy;%%apply gaussian filterh = fspecial('gaussian',[6,6],1);Ix2 = conv2(Ix2,h,'same');Iy2 = conv2(Iy2,h,'same');Ixy = conv2(Ixy,h,'same');height = size(I,1);width = size(I,2);result = zeros(height,width);R = zeros(height,width);Rmax = 0;%% compute M matrix and corner responsefor i = 1:heightfor j =1:widthM = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy(i,j)];R(i,j) = det(M) - 0.04*(trace(M)^2);if R(i,j)> RmaxRmax = R(i,j);endendend%% compare whith thresholdcount = 0;for i = 2:height-1for j = 2:width-1if R(i,j) > 0.01*Rmaxresult(i,j) = 1;count = count +1;endendend%non-maxima suppressionresult = imdilate(result, [1 1 1; 1 0 1; 1 1 1]); [posc,posr] = find(result == 1);imshow(I);hold on;plot(posr,posc,'r.');本⽂原创,转载请注明出处。
Haris角点检测算子
2014.3.30 周报 Harris 角点检测算子Harris 角点检测算子是 Moravec 角点检测算子的改良( 1) Harris 算子用高斯函数取代二值窗口函数,对离中心点愈来愈近的像素给予较大的权重,以减少噪声影响。
w( x, y)1 2 e ( x 2 y 2 ) / 2 22图 1 高斯函数(2) Moravec 算子只考虑了每隔 45 度方向, Harris 算子用 Taylor 睁开去近似随意方向。
E(u, v)w( x, y)[ I ( x u, y v) I ( x, y)]2x, yw( x, y)[ I x u O(u 2 , v 2 )] 2x, y写成矩阵形式:2I x I yI x2MI xI x I y( 1-2)w( x, y)2w( x, y)2x , yI x I y I y I x I y I yE (u, v) u( 1-3)[ u, v] Mv式中, lx 为 x 方向的差分, ly 为 y 方向的差分, w(x,y) 为高斯函数。
(3)Harris 采纳了一种新的角点判断方法。
矩阵M 的两个特点向量 l 1 和 l 2 与矩阵 M 的主曲率成正比。
Harris 利用 l 1 , l 2 来表征变化最快和最慢的两个方向,若两个都很大就是角点,一个大一个小就是边沿,两个都小就是在变化迟缓的图像地区。
文档收集自网络,仅用于个人学习图 2 用矩阵M的特点向量分类图像像素点可是解特点向量需要比许多的计算量,且两个特点值的和等于矩阵M 的迹,两个特点值的积等于矩阵 M 的队列式。
所以用(1-4)式来判断角点质量。
( k 常取 0.04-0.06 )文档采集自网络,仅用于个人学习R det M k(traceM ) 2(1-4)(4) Harris 算法总结Step1:对每一像素点计算有关矩阵MA w( x, y) I x 2B w( x, y) I y2C D w( x, y) ( I x2 I y2 )A BMCDStep2:计算每个像素的 Harris 角点响应R ( AB CD ) 2 k( A B) 2Step3:在w* w范围内找寻极大值点,若Harris 角点响应大于阈值,则视为角点。
harris角点统计量
Harris角点统计量1. 简介Harris角点统计量(Harris corner measure)是计算机视觉中用于检测图像中角点的一种方法。
角点是图像中具有明显变化的位置,通常是物体边缘的交点或者具有纹理的区域。
Harris角点统计量通过计算图像局部区域的像素强度变化来判断是否存在角点,并给出一个表示角点强度的数值。
Harris角点统计量是由Chris Harris和Mike Stephens在1988年提出的,是计算机视觉中最经典的角点检测算法之一。
它的原理简单直观,计算效率高,并且在许多计算机视觉应用中都得到了广泛应用。
2. 原理Harris角点统计量的计算基于图像局部区域的像素强度变化。
对于一个图像上的点(x, y),其周围的局部区域可以用一个窗口来表示。
在该窗口内,我们可以计算出每个像素的梯度向量,即在x和y方向上的梯度分量。
然后,通过计算每个像素的梯度向量的协方差矩阵,可以得到一个表示该窗口内像素强度变化的指标。
具体来说,对于一个窗口内的像素点p(x, y),其梯度向量可以表示为:其中,Ix和Iy分别是点p在x和y方向上的梯度分量。
根据梯度的定义,可以通过计算像素点p的邻域内像素值的差分来近似计算梯度分量。
然后,我们可以计算窗口内像素强度变化的协方差矩阵C:其中,Σ表示对窗口内的像素进行求和。
最后,根据协方差矩阵C的特征值,我们可以计算出Harris角点统计量R:其中,det()表示矩阵的行列式,trace()表示矩阵的迹,k是一个经验参数,用于调整角点的敏感度。
根据Harris角点统计量的值,我们可以判断该点是否为角点。
当R的值较大时,表示该点周围存在明显的像素强度变化,可能是一个角点。
而当R的值较小时,表示该点周围的像素强度变化相对较小,不是一个角点。
3. 实现Harris角点统计量的计算可以通过以下步骤实现:1.对图像进行灰度化处理,将彩色图像转换为灰度图像。
2.计算每个像素点的梯度分量Ix和Iy,可以使用Sobel算子等方法进行计算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Harris corner detector
High-level idea: what shape of the error function will we prefer for features?
Applications
• • • • • Object or scene recognition Structure from motion Stereo Motion tracking …
Components
• Feature detection locates where they are • Feature description describes what they are • Feature matching decides whether two are the same one
w( x, y ) I x u I y v O(u , v )
2 2 x, y
2
x, y
2
E (u , v) Au 2 2Cuv Bv 2 A w( x, y ) I x2 ( x, y )
x, y 2 B w( x, y ) I y ( x, y ) x, y
T
Harris corner detector
Only minimum of E is taken into account A new corner measurement by investigating the shape of the error function
uT Mu represents a quadratic function; Thus, we
3.25 1.30 0.50 0.87 1 0 0.50 0.87 A 0 4 0.87 0.50 1 . 30 1 . 75 0 . 87 0 . 50
T
Visualize quadratic functions
Intensity change in shifting window: eigenvalue analysis
u E (u, v) u, v M v
Ellipse E(u,v) = const
使方程等于常数,用于绘制 一条等高线。
1, 2 – eigenvalues of M
Moravec corner detector
flat
Moravec corner detector
flat
Moravec corner detector
flat
edge
Moravec corner detector
flapoint
Moravec corner detector
in all directions
flat
edge 1 >> 2
1
Harris corner detector
a00 a11 (a00 a11 ) 2 4a10 a01 Only for reference, you do not need 2 them to compute R
T
朝各个方向函数的递增 速度均相同
Visualize quadratic functions
4 0 1 0 4 0 1 0 A 0 1 0 1 0 1 0 1
T
在垂直方向上函数的递 增速度大
Visualize quadratic functions
Harris corner detector
Noisy response due to a binary window function Use a Gaussian function
Harris corner detector
Only a set of shifts at every 45 degree is considered Consider all small shifts by Taylor’s expansion
direction of the fastest change
direction of the slowest change
(max)-1/2 (min)-1/2
椭圆的长、短半轴为什么取 这样的值?
Visualize quadratic functions
1 0 1 0 1 0 1 0 A 0 1 0 1 0 1 0 1
, where M is a 22 matrix computed from image derivatives:
2 Ix M w( x, y ) x, y I x I y
IxI y 2 Iy
Harris corner detector (matrix form)
7.75 3.90 0.50 0.87 1 0 0.50 0.87 A 0 10 0.87 0.50 3 . 90 3 . 25 0 . 87 0 . 50
T
Harris corner detector
E (u)
x 0 W ( p )
2 w ( x ) | I ( x u ) I ( x ) | 0 0 0
| I ( x 0 u ) I ( x 0 ) |2 I I0 I u 0 x
T 2
I u x
T
T
2
I I u u x x uT Mu
内容
• • • • • Features(点特征) Harris corner detector SIFT Extensions Applications
Harris corner detector
Moravec corner detector (1980)
• We should easily recognize the point by looking through a small window • Shifting a window in any direction should give a large change in intensity
Change of intensity for the shift [u,v]:
E(u, v) w( x, y)I ( x u, y v) I ( x, y)
x, y
2
window function
shifted intensity
intensity
Four shifts: (u,v) = (1,0), (1,1), (0,1), (-1, 1) Look for local maxima in min{E}
C w( x, y ) I x ( x, y ) I y ( x, y )
x, y
Harris corner detector
Equivalently, for small shifts [u,v] we have a bilinear approximation:
u E (u, v) u v M v
2 “Edge” R<0 “Corner”
R>0
• R只与M的特征值有关 • 角点:R为大数值正数 • 边缘:R为大数值负数 • 平坦区:R为小数值
“Flat” |R| small
“Edge” R<0 1
Another view
Another view
Another view
Summary of Harris detector
第5章 视觉图像特征信息提取
5.2 兴趣点检测
内容
• • • • • Features(点特征) Harris corner detector SIFT Extensions Applications
Features
Features
• Also known as interesting points, salient points or keypoints. Points that you can easily point out their correspondences in multiple images using only local information.
1. Compute x and y derivatives of image
I x G I
x
I y G I
y
2. Compute products of derivatives at every pixel
I x2 I x I x
I y2 I y I y
I xy I x I y
Problems of Moravec detector
• Noisy response due to a binary window function • Only a set of shifts at every 45 degree is considered • Only minimum of E is taken into account Harris corner detector (1988) solves these problems.
Harris corner detector
Only a set of shifts at every 45 degree is considered Consider all small shifts by Taylor’s expansion
E(u, v) w( x, y)I ( x u, y v) I ( x, y)