Harris角点检测算法

合集下载

Harris角点检测算子

Harris角点检测算子

2014.3.30周报 Harris 角点检测算子Harris 角点检测算子是Moravec 角点检测算子的改进(1) Harris 算子用高斯函数代替二值窗口函数,对离中心点越来越近的像素赋予较大的权重,以减少噪声影响。

2222/)(221),(δπδy x ey x w +-=图1 高斯函数(2) Moravec 算子只考虑了每隔45度方向,Harris 算子用Taylor 展开去近似任意方向。

∑-++=yx y x I v y u x I y x w v u E ,2)],(),()[,(),(∑-=yx x v u O u I y x w ,222)],()[,(写成矩阵形式:⎥⎥⎦⎤⎢⎢⎣⎡⊗=⎥⎥⎦⎤⎢⎢⎣⎡=∑22,22),(),(y y x y x x y x y y x y x x I I I I I I y x w I I I I I I y x w M (1-2) ⎥⎦⎤⎢⎣⎡≅v u M v u v u E ],[),( (1-3)式中,lx 为x 方向的差分,ly 为y 方向的差分,w(x,y)为高斯函数。

(3) Harris 采用了一种新的角点判定方法。

矩阵M 的两个特征向量1l 和2l 与矩阵M 的主曲率成正比。

Harris 利用1l ,2l 来表征变化最快和最慢的两个方向,若两个都很大就是角点,一个大一个小就是边缘,两个都小就是在变化缓慢的图像区域。

图2用矩阵M 的特征向量分类图像像素点但是解特征向量需要比较多的计算量,且两个特征值的和等于矩阵M 的迹,两个特征值的积等于矩阵M 的行列式。

所以用(1-4)式来判定角点质量。

(k 常取0.04-0.06)2)(det traceM k M R -= (1-4)(4) Harris 算法总结Step1:对每一像素点计算相关矩阵M2),(x I y x w A ⊗=2),(yI y x w B ⊗= )(),(22y x I I y x w D C ⊗==⎪⎪⎭⎫ ⎝⎛=D C B A MStep2:计算每个像素的Harris 角点响应22)()(B A k CD AB R +-=Step3:在w w *范围内寻找极大值点,若Harris 角点响应大于阈值,则视为角点。

harris方法

harris方法

harris方法Harris方法是一种计算机视觉中常用的角点检测算法,它可以用于图像特征提取和图像匹配等任务。

该方法由Chris Harris和Mike Stephens于1988年提出,被广泛应用于计算机视觉领域。

Harris方法的核心思想是通过计算图像中每个像素点的灰度值变化来判断其是否为角点。

角点是图像中灰度值变化较大的区域,而平滑区域和边缘区域的灰度值变化较小。

因此,通过检测灰度值变化较大的像素点,我们可以找到图像中的角点。

Harris方法的计算过程如下:首先,我们需要对图像进行灰度化处理,将彩色图像转换为灰度图像。

然后,对每个像素点计算其相邻像素的灰度值变化,通常使用Sobel算子或Scharr算子来计算像素点的梯度。

接着,利用梯度计算出每个像素点的角点响应函数R,该函数用于度量像素点的角点程度。

角点响应函数的计算公式如下:R = det(M) - k * (trace(M))^2其中,det(M)表示M的行列式,trace(M)表示M的迹,k是一个经验参数,用于调节角点响应函数的灵敏度。

计算完所有像素点的角点响应函数后,我们需要对其进行非极大值抑制,以保留具有最大角点响应值的像素点。

非极大值抑制的过程是,对每个像素点,比较其角点响应值与其邻域像素点的角点响应值,如果大于所有邻域像素点的角点响应值,则保留该像素点作为角点。

Harris方法的优点是简单易实现,并且对图像的尺度和旋转变化具有一定的不变性。

此外,它还可以用于图像配准、目标跟踪等应用中。

然而,Harris方法也存在一些局限性。

首先,对于存在噪声的图像,角点的检测可能会受到干扰。

其次,Harris方法对于具有纹理模式的区域也容易将其误判为角点。

此外,Harris方法在存在图像尺度变化较大的情况下,检测效果可能会受到影响。

为了克服Harris方法的局限性,后续的研究提出了许多改进的角点检测算法,如SIFT、SURF和FAST等。

这些算法在角点检测的灵敏度、速度和鲁棒性等方面都有所提升,广泛应用于计算机视觉和图像处理领域。

python实现Harris角点检测算法

python实现Harris角点检测算法

python实现Harris⾓点检测算法算法流程:1. 将图像转换为灰度图像2. 利⽤Sobel滤波器求出海森矩阵 (Hessian matrix) :将⾼斯滤波器分别作⽤于Ix²、Iy²、IxIy计算每个像素的 R= det(H) - k(trace(H))²。

det(H)表⽰矩阵H的⾏列式,trace表⽰矩阵H的迹。

通常k的取值范围为[0.04,0.16]。

满⾜ R>=max(R) * th 的像素点即为⾓点。

th常取0.1。

Harris算法实现:import cv2 as cvimport numpy as npimport matplotlib.pyplot as plt# Harris corner detectiondef Harris_corner(img):## Grayscaledef BGR2GRAY(img):gray = 0.2126 * img[..., 2] + 0.7152 * img[..., 1] + 0.0722 * img[..., 0]gray = gray.astype(np.uint8)return gray## Sobeldef Sobel_filtering(gray):# get shapeH, W = gray.shape# sobel kernelsobely = np.array(((1, 2, 1),(0, 0, 0),(-1, -2, -1)), dtype=np.float32)sobelx = np.array(((1, 0, -1),(2, 0, -2),(1, 0, -1)), dtype=np.float32)# paddingtmp = np.pad(gray, (1, 1), 'edge')# prepareIx = np.zeros_like(gray, dtype=np.float32)Iy = np.zeros_like(gray, dtype=np.float32)# get differentialfor y in range(H):for x in range(W):Ix[y, x] = np.mean(tmp[y : y + 3, x : x + 3] * sobelx)Iy[y, x] = np.mean(tmp[y : y + 3, x : x + 3] * sobely)Ix2 = Ix ** 2Iy2 = Iy ** 2Ixy = Ix * Iyreturn Ix2, Iy2, Ixy# gaussian filteringdef gaussian_filtering(I, K_size=3, sigma=3):# get shapeH, W = I.shape## gaussianI_t = np.pad(I, (K_size // 2, K_size // 2), 'edge')# gaussian kernelK = np.zeros((K_size, K_size), dtype=np.float)for x in range(K_size):for y in range(K_size):_x = x - K_size // 2_y = y - K_size // 2K[y, x] = np.exp( -(_x ** 2 + _y ** 2) / (2 * (sigma ** 2)))K /= (sigma * np.sqrt(2 * np.pi))K /= K.sum()# filteringfor y in range(H):for x in range(W):I[y,x] = np.sum(I_t[y : y + K_size, x : x + K_size] * K)return I# corner detectdef corner_detect(gray, Ix2, Iy2, Ixy, k=0.04, th=0.1):# prepare output imageout = np.array((gray, gray, gray))out = np.transpose(out, (1,2,0))# get RR = (Ix2 * Iy2 - Ixy ** 2) - k * ((Ix2 + Iy2) ** 2)# detect cornerout[R >= np.max(R) * th] = [255, 0, 0]out = out.astype(np.uint8)return out# 1. grayscalegray = BGR2GRAY(img)# 2. get difference imageIx2, Iy2, Ixy = Sobel_filtering(gray)# 3. gaussian filteringIx2 = gaussian_filtering(Ix2, K_size=3, sigma=3)Iy2 = gaussian_filtering(Iy2, K_size=3, sigma=3)Ixy = gaussian_filtering(Ixy, K_size=3, sigma=3)# 4. corner detectout = corner_detect(gray, Ix2, Iy2, Ixy)return out# Read imageimg = cv.imread("../qiqiao.jpg").astype(np.float32)# Harris corner detectionout = Harris_corner(img)cv.imwrite("out.jpg", out)cv.imshow("result", out)cv.waitKey(0)cv.destroyAllWindows()实验结果:原图:Harris⾓点检测算法检测结果:以上就是python 实现Harris⾓点检测算法的详细内容,更多关于python Harris⾓点检测算法的资料请关注其它相关⽂章!。

harris角点检测算法的原理

harris角点检测算法的原理

harris角点检测算法的原理宝子!今天咱来唠唠这个超有趣的Harris角点检测算法的原理呀。

你看啊,在图像里呢,角点可是很特别的存在。

就像是人群里那个特别出众的帅哥或者美女,一眼就能被瞅见。

角点不是那种平平无奇的点哦。

比如说在一个方形的图像里,四个角就是很典型的角点。

那这个Harris角点检测算法呢,就像是一个超级侦探,专门去把这些角点给找出来。

想象一下,这个算法是怎么看待图像的呢?它把图像看成是一个充满变化的小世界。

对于图像中的每个小区域,算法会去研究这个区域周围的像素是怎么变化的。

就好比你站在一个小广场上,看看周围的人是怎么分布的,是均匀散开呢,还是有某个方向特别密集或者稀疏。

这个算法有个很关键的东西叫自相关函数。

这函数就像是一个小魔法棒,它会去计算每个小区域在不同方向上的像素变化情况。

如果在某个点的周围,不管你朝哪个方向去看,像素的变化都很明显,那这个点就很有可能是角点啦。

比如说,你在一个十字街头,不管你是看南北方向的街道,还是东西方向的街道,周围的景色(也就是像素)变化都很大,那这个十字路口就像是图像里的角点一样。

那这个算法具体是怎么操作的呢?它会先建立一个小的窗口,就像拿着一个小放大镜在图像上到处看。

这个窗口会在图像上滑动,每到一个地方,就开始计算这个地方的自相关函数。

这个计算过程呢,其实就是在看这个小窗口里的像素和周围像素的关系。

如果这个关系在各个方向上都很独特,那就有可能是角点啦。

你知道吗,这个算法还会用到矩阵呢。

不过别被矩阵吓到,它就像是一个小账本,记录着这个小区域像素变化的各种信息。

比如说,矩阵会告诉你这个区域在水平方向和垂直方向上像素变化的快慢呀之类的。

如果这个矩阵的特征值有某种特殊的情况,那就说明这个点很可能是角点。

就好像是这个小账本上的某些数字组合起来,就指向了这个特别的角点。

而且哦,这个Harris角点检测算法还有个很贴心的地方。

它不是那种很死板的算法,它会根据不同的图像特点去调整自己的判断标准。

harris方法

harris方法

harris方法Harris方法是一种经典的计算机视觉算法,被广泛应用于图像特征提取和图像匹配问题中。

它由Harris和Stephens于1988年提出,主要用于检测图像中的角点。

本文将从原理、特点和应用三个方面介绍Harris方法。

一、原理Harris方法的核心思想是通过计算图像像素的灰度值变化来判断是否存在角点。

角点是图像中灰度值变化显著的点,通常对应着物体的边缘或角落。

Harris方法通过计算图像中每个像素点的Harris响应函数来确定角点的位置。

Harris响应函数的计算公式为:R = det(M) - k(trace(M))^2其中,M是一个2x2的矩阵,表示每个像素点附近的灰度值变化情况。

det(M)表示矩阵M的行列式,trace(M)表示M的迹,k是一个常数。

二、特点Harris方法具有以下特点:1. 不受图像旋转和尺度变化的影响,对于图像的平移和旋转具有很好的鲁棒性;2. 对于噪声和光照变化具有一定的抗干扰能力;3. 可以检测出图像中的角点,并将其与其他特征点进行区分。

三、应用Harris方法在计算机视觉领域具有广泛的应用,主要包括以下几个方面:1. 特征点提取:Harris方法可以用于提取图像中的角点作为特征点,用于图像配准、目标跟踪等任务。

2. 特征匹配:通过计算两幅图像中的特征点之间的距离和相似度,可以实现图像的匹配和对齐。

3. 三维重建:通过对多幅图像进行特征点提取和匹配,可以实现三维场景的重建和建模。

4. 目标检测:通过检测图像中的角点,可以实现目标的检测和识别。

总结: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 角点检测算法原理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角点检测

Harris⾓点检测⽬录OpenCV可以检测图像的主要特征,然后提取这些特征、使其成为图像描述符,这类似于⼈的眼睛和⼤脑。

这些图像特征可作为图像搜索的数据库。

此外,⼈们可以利⽤这些关键点将图像拼接起来,组成⼀个更⼤的图像,⽐如将许多图像放在⼀块,然后形成⼀个360度全景图像。

这⾥我们将学习使⽤OpenCV来检测图像特征,并利⽤这些特征进⾏图像匹配和搜索。

我们会选取⼀些图像,并通过单应性,检测这些图像是否在另⼀张图像中。

⼀特征检测算法有许多⽤于特征检测和提取的算法,我们将会对其中⼤部分进⾏介绍。

OpenCV最常使⽤的特征检测和提取算法有:Harris:该算法⽤于检测⾓点;SIFT:该算法⽤于检测斑点;SURF:该算法⽤于检测⾓点;FAST:该算法⽤于检测⾓点;BRIEF:该算法⽤于检测斑点;ORB:该算法代表带⽅向的FAST算法与具有旋转不变性的BRIEF算法;通过以下⽅法进⾏特征匹配:暴⼒(Brute-Force)匹配法;基于FLANN匹配法;可以采⽤单应性进⾏空间验证。

⼆特征定义那么,究竟什么是特征呢?为什么⼀副图像的某个特定区域可以作为⼀个特征,⽽其他区域不能呢?粗略的讲,特征就是有意义的图像区域,该区域具有独特特征和易于识别性。

因此⾓点及⾼密度区域都是很好的特征,⽽⼤量重复的模式或低密度区域(例如图像中的蓝⾊天空)则不是很好的特征。

边缘可以将图像分为两个区域,因此也可以看做好的特征。

斑点是与周围有很⼤差别的像素区域,也是有意义的特征。

⼤多数特征检测算法都会涉及图像的⾓点、边和斑点的识别,也有⼀些涉及脊向的概念,可以认为脊向是细长物体的对称轴,例如识别图像中的⼀条路。

⾓点和边都好理解,那什么是斑点呢?斑点通常是指与周围有着颜⾊和灰度差别的区域。

在实际地图中,往往存在着⼤量这样的斑点,如⼀颗树是⼀个斑点,⼀块草地是⼀个斑点,⼀栋房⼦也可以是⼀个斑点。

由于斑点代表的是⼀个区域,相⽐单纯的⾓点,它的稳定性要好,抗噪声能⼒要强,所以它在图像配准上扮演了很重要的⾓⾊。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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两者都比较大,并且大小相当时对应点为角点,两者都非常小时为平坦区域;一大一小时为边界区域。

图4 两个特征值的大小对图像点进行分类
因为λmax和λmin在编程时比较难求解,因此1988年,哈里斯在其论文《A combined corner and edge detector》里给出了更有效的角点响应函数:
R为正值时,检测到的是角点;R为负时检测到的是边;R很小时检测到的是平坦区域,由此也就有了更便于计算的数学公式。

3.算法代码实现
clear;
filenema = '图1.jpg';
img = imread(filenema); % 读取图像
Info = imfinfo(filenema); %获取图像相关信息
%%灰度转换
if (Info.BitDepth > 8)
img = rgb2gray(img);
end
%M=[Ix2,Ixy;Ixy,Iy2]
ori_im = double(img) / 255; %unit8转化为64为双精度double64
fx = [-2 -1 0 1 2]; % x方向梯度算子
%filter2表示二维滤波器
Ix = filter2(fx, ori_im); % x方向滤波
fy = [-2; -1; 0; 1; 2]; % y方向梯度算子
Iy = filter2(fy, ori_im); % y方向滤波
Ix2 = Ix .^ 2;
Iy2 = Iy .^ 2;
Ixy = Ix .* Iy;
%%创建一个高斯平滑滤波器
%fspecial创建一个滤波器,参数说明,‘gaussian’表示滤波器类型,Gaussian lowpass %filter,[7,7]表示窗口大小,2表示标准误差
h= fspecial('gaussian', [7,7], 2); % 产生7*7的高斯窗函数,sigma=2
Ix2 = filter2(h,Ix2);
Iy2 = filter2(h,Iy2);
Ixy = filter2(h,Ixy);
[height,width] = size(ori_im);
result = zeros(height, width); %%创建一个矩阵记录角点位置,角点处值为1
R = zeros(height, width);
Rmax = 0; % %设置最大的R值,初始为0
k = 0.04; %k为常系数,经验取值范围为0.04~0.06
%%利用M计算对应于每个像素的角点响应函数R=det(M)-k*(trace(M))^2
for i = 1 : height
for j = 1 : width
M = [Ix2(i, j) Ixy(i, j); Ixy(i, j) Iy2(i, j)]; % 自相关矩阵
% 计算R值,det()求一个方阵的行列式;trace()求方阵的迹,即该方阵对角线上元素之和
R(i,j) = det(M) - k * (trace(M)) ^ 2;
if R(i,j) > Rmax
Rmax = R(i, j);
end;
end;
end;
T = 0.1 * Rmax;%固定阈值,当R(i, j) > T时,则被判定为候选角点
%%下面是进行角点检测记录和局部非极大的检验
winr = floor(7 / 2);
for i = (winr + 1) : (height - winr)
for j = (winr + 1) : (width - winr)
subr = R(((i-winr) : (i + winr)),((j-winr) : (j+ winr)));
submax = max(max(subr));
if((R(i,j) > T) & (R(i,j) == submax))
result(i,j) = 1; %result矩阵中为1表示是角点
end
end
end
[posc, posr] = find(result == 1);%记录角点的位置
figure,imshow(ori_im);
hold on;
plot(posr, posc, 'r+');
实验结果:
第一组(尺寸694*502)
处理前处理后
角点个数:372
第二组(尺寸:556*402)
处理前处理后
角点个数:285
4.总结
Harris角点检测算法是对Moravec算法的改进和提高,在两次实验中我也深有体会,相对来说,Moravec算法比较简单,容易编程,但是结果相对来说不是很准确,而Harris算法,利用高斯窗函数和泰勒展开式,增加了角点检测算法的准确性,相对编程的难度也有所增加。

在没有图像尺度变化的条件下, Harris 角点检测子对图像的旋转变化、视角变化以及图像噪声具有比同类检测子更好的稳定性.。

然而Harris 角点检测子对图像的尺度变化非常敏感,小的尺度变化就会造成Harris 角点的复现率快速下降。

这个特点在上面的实验可以看出来。

图像的尺度伸缩将使得由Harris 检测子提取的特征不具有可重复性。

相关文档
最新文档