图像中角点提取与匹配算法

合集下载

Python技术实现图像特征提取与匹配的方法

Python技术实现图像特征提取与匹配的方法

Python技术实现图像特征提取与匹配的方法随着科技的不断进步,图像处理技术在各个领域得到了广泛应用。

图像特征提取与匹配是图像处理中的重要环节之一,它能够通过识别图像中的关键特征点,进行图像的检索、识别和对比。

Python作为一门功能强大的编程语言,提供了各种库和工具,可以方便地实现图像特征提取与匹配的方法。

一、图像特征提取图像特征是指在图像中具有独特而稳定的可视化特性,例如边缘、角点、颜色分布等。

图像特征提取的目的就是从图像中找到这些独特的特征点,以便后续的处理和分析。

1. 边缘检测边缘是图像中不同区域之间的分界线,是图像中的显著特征。

Python的OpenCV库提供了Sobel算子、Canny算子等用于边缘检测的函数,可以方便地实现边缘检测的过程。

2. 角点检测角点是图像中具有明显曲率或者弯曲的地方,是图像中的显著特征。

OpenCV 中的Harris角点检测算法和Shi-Tomasi角点检测算法提供了在Python中实现角点检测的函数。

3. SIFT和SURF特征提取SIFT(尺度不变特征变换)和SURF(加速稳健特征)是两种经典的特征提取算法,它们可以提取图像中的局部特征,并具有旋转、尺度不变性。

Python中的OpenCV库提供了SIFT和SURF算法的实现,可以方便地提取图像的特征。

二、图像特征匹配图像特征匹配是将两幅或多幅图像中的特征点进行对齐和匹配。

通过图像特征匹配,可以实现图像的检索、识别和对比,是图像处理中的重要环节。

1. 特征点描述在进行图像特征匹配之前,需要对特征点进行描述。

描述子是一种对特征点进行数学表示的方法,可以用于特征点的匹配和对比。

OpenCV中的SIFT和SURF 算法可以提取特征点的描述子。

2. 特征点匹配特征点匹配是将两个图像中的对应特征点连接起来,实现图像的对齐和匹配。

OpenCV中提供了FLANN(最近邻搜索)库,可以高效地实现特征点的匹配。

同时,还可以使用RANSAC算法进行特征点匹配的筛选和优化。

图像匹配的算法种类和原理

图像匹配的算法种类和原理

图像匹配的算法种类和原理
图像匹配是一种广泛应用于计算机视觉领域的技术,用于判断两个或多个图像之间的相似性或是否存在某种关联。

以下是几种常见的图像匹配算法和其原理:
1. 直方图匹配:该算法基于图像的颜色分布,通过比较两个图像的直方图来评估它们的相似性。

直方图是一种将图像像素值与其频率关联起来的统计工具。

2. 特征点匹配:该算法通过提取图像中的特征点,如角点、边缘等,然后比较两个图像中的特征点之间的距离或相似性来确定它们之间的匹配关系。

常见的特征点匹配算法包括SIFT、SURF 和ORB。

3. 模板匹配:该算法使用一个预先定义好的模板图像,将其与输入图像进行比较,找出最佳匹配的位置。

模板匹配算法通常使用相关性或差异性度量来评估匹配程度。

4. 形状匹配:该算法旨在比较图像中的形状特征,例如提取图像边界上的轮廓,并计算它们之间的相似性。

形状匹配通常与图像分割和轮廓提取技术结合使用。

5. 神经网络匹配:近年来,深度学习和卷积神经网络(CNN)等技术的发展为图像匹配带来了新的突破。

使用深度神经网络,可以学习到更高级别的特征表示,并通过训练模型来实现图像匹配任务。

这些算法各有优缺点,并且在不同应用场景下具有不同的适用性。

在实际应用中,经常需要结合多种算法来实现更准确的图像匹配结果。

图像特征检测与匹配方法研究综述

图像特征检测与匹配方法研究综述

图像特征检测与匹配方法研究综述图像特征检测与匹配是计算机视觉领域的重要研究方向,它在许多实际应用中发挥着关键作用,如图像检索、目标识别和三维重建等。

本文对图像特征检测与匹配方法进行综述,主要包括特征检测算法、特征描述算法和特征匹配算法三个方面。

一、特征检测算法特征检测算法旨在寻找图像中的稳定不变性特征点,以便用于后续的特征描述和匹配。

常用的特征检测算法包括Harris角点检测算法、SIFT 算法和SURF算法等。

1. Harris角点检测算法:该算法通过计算图像的局部灰度变化,寻找具有最大角度变化的像素。

它能够有效检测出图像中的角点,但对于尺度变化和旋转不变性较差。

2.SIFT算法:SIFT算法通过构建高斯金字塔和尺度空间极值检测,寻找出图像中的尺度不变的关键点。

同时,通过计算局部图像的梯度方向直方图,生成特征向量描述子,实现图像的匹配。

3. SURF算法:SURF算法是SIFT算法的改进版本,采用了一种快速的积分图像技术,大大提高了计算效率。

SURF算法在计算图像的尺度空间极值点时,使用了一种基于Hessian矩阵的指标,检测出更加稳定的特征点。

二、特征描述算法特征描述算法利用特征点周围的图像信息,生成唯一且具有区分度的特征向量。

常用的特征描述算法有SIFT描述子、SURF描述子和ORB描述子等。

1.SIFT描述子:SIFT描述子通过计算特征点周围的梯度信息,生成128维的特征向量。

它具有较强的区分度和旋转不变性,在图像匹配任务中表现较好。

2. SURF描述子:SURF描述子是一种基于Haar小波特征的描述子,使用了一种积分图像计算方法,降低了计算复杂度。

SURF描述子的维度为64维,具有良好的尺度不变性和旋转不变性。

3.ORB描述子:ORB描述子是一种快速的二值描述子,基于FAST角点检测算法和BRIEF描述子。

它既具有较快的计算速度,又能够保持较好的特征区分度,适用于实时图像处理任务。

三、特征匹配算法特征匹配算法的目标是在不同图像中找到相互匹配的特征点对。

图像特征点提取及匹配算法研究论文

图像特征点提取及匹配算法研究论文

图像特征点提取及匹配算法研究论文1.SIFT算法:SIFT(Scale-Invariant Feature Transform)算法是一种经典的图像特征点提取算法。

该算法首先使用高斯滤波器对图像进行多尺度的平滑处理,然后使用差分算子来检测图像中的关键点,最后计算关键点的主方向和描述符。

SIFT算法具有尺度不变性和旋转不变性,对于图像中存在较大尺度和角度变化的情况下仍能提取出稳定的特征点。

2.SURF算法:SURF(Speeded Up Robust Features)算法是一种快速的特征点提取算法,它在SIFT算法的基础上进行了优化。

SURF算法使用Haar小波响应来检测图像中的特征点,并使用积分图像来加速计算过程。

此外,SURF算法还使用了一种基于方向直方图的特征描述方法,能够提取出具有旋转不变性和尺度不变性的特征点。

3.ORB算法:ORB(Oriented FAST and Rotated BRIEF)算法是一种快速的特征点提取和匹配算法。

该算法结合了FAST角点检测算法和BRIEF描述符算法,并对其进行了改进。

ORB算法利用灰度值的转折点来检测图像中的角点,并使用二进制字符串来描述关键点,以提高特征点的匹配速度。

ORB算法具有较快的计算速度和较高的匹配精度,适用于实时应用。

4.BRISK算法:BRISK(Binary Robust Invariant Scalable Keypoints)算法是一种基于二进制描述符的特征点提取和匹配算法。

该算法首先使用田字形格点采样方法检测关键点,然后使用直方图来描述关键点的方向和纹理特征。

最后,BRISK算法使用二进制字符串来表示关键点的描述符,并使用汉明距离来进行特征点的匹配。

BRISK算法具有较快的计算速度和较高的鲁棒性,适用于大规模图像匹配任务。

总结起来,图像特征点提取及匹配算法是计算机视觉领域中的重要研究方向。

本文介绍了一些常用的特征点提取及匹配算法,并对其进行了讨论。

特征 图像匹配算法

特征 图像匹配算法

特征图像匹配算法1. 简介特征图像匹配算法是一种计算机视觉中常用的算法,用于在两幅图像之间找到相对应的特征点,并将它们匹配起来。

这种算法在多个应用领域都有广泛的应用,包括图像检索、三维重建、目标跟踪等。

特征图像匹配算法的核心思想是通过提取图像中的关键特征点,然后计算这些特征点的描述子,在不同图像中进行匹配,找到相对应的特征点。

这些特征点通常是图像中的角点、边缘或者纹理等具有区分性的部分。

2. 特征提取在特征图像匹配算法中,特征点的提取是首要任务。

常用的特征点提取算法包括Harris角点检测、SIFT(Scale-Invariant Feature Transform)、SURF (Speeded-Up Robust Features)等。

•Harris角点检测是一种通过计算图像中像素点周围的灰度变化来检测图像中的角点的算法。

它主要是通过计算图像中每个像素点的窗口内的像素梯度的方差来确定是否为角点。

•SIFT是一种尺度不变特征变换的算法,它可以在不同大小和旋转角度的图像中匹配特征点。

SIFT算法首先通过高斯滤波器进行图像平滑,然后通过DoG(Difference of Gaussians)算子检测图像中的极值点作为特征点。

•SURF是一种类似于SIFT的特征提取算法,但它具有更快的计算速度和更好的旋转不变性。

SURF算法通过检测图像中的极值点,并计算它们的Haar小波特征来提取特征点。

3. 特征描述在特征提取之后,需要对特征点进行描述,以便在不同图像中进行匹配。

常用的特征描述算法包括ORB(Oriented FAST and Rotated BRIEF)、BRISK(Binary Robust Invariant Scalable Keypoints)等。

•ORB是一种具有旋转不变性和尺度不变性的特征描述算法。

它通过计算特征点周围的像素点在不同方向上的灰度变化来生成特征点的描述子。

最后,ORB算法将描述子通过二进制编码,以降低计算复杂度。

医学图像配准中的图像特征提取与匹配

医学图像配准中的图像特征提取与匹配

医学图像配准中的图像特征提取与匹配医学图像配准是指将多个医学图像按照相同的参考系统进行对齐,以实现不同图像之间的对比和分析。

在医学图像配准的过程中,图像特征提取与匹配是关键的步骤之一。

本文主要介绍医学图像配准中的图像特征提取与匹配的方法和技术。

1. 图像特征提取图像特征提取是指从医学图像中提取有用的、能够表征图像信息的特征。

医学图像中的特征可以包括形状、纹理、边缘等。

常用的图像特征提取方法包括:(1)边缘检测:边缘是图像中灰度变化较大的地方,边缘检测可以通过计算图像像素间的灰度差异来提取边缘信息。

(2)纹理特征提取:纹理是描述图像内部灰度分布的一种特征。

常见的纹理特征提取方法包括灰度共生矩阵、小波变换等。

(3)形状特征提取:形状是指物体的外观轮廓,可以通过提取轮廓特征、边界特征等来描述图像的形状。

2. 图像特征匹配图像特征匹配是指将不同图像中提取到的特征进行对应,以实现医学图像的配准。

医学图像特征匹配常用的方法有:(1)特征点匹配:通过提取图像中的特征点,并计算特征点间的相似性来实现匹配。

常用的特征点匹配算法有SIFT、SURF、ORB等。

(2)区域匹配:将图像划分为不同的区域,通过计算每个区域的特征来进行匹配。

常用的区域匹配方法有基于颜色直方图、基于形状特征等。

(3)局部匹配:先将图像进行分块,然后通过比较每个块的特征来实现匹配。

常用的局部匹配算法有基于SIFT局部特征的匹配方法。

3. 医学图像配准算法医学图像配准算法主要包括基于特征的配准算法和基于区域的配准算法。

(1)基于特征的配准算法:这类算法主要利用图像中提取到的特征进行匹配和配准。

常用的算法有Harris角点算法、SIFT算法等。

特征点匹配算法在医学图像配准中具有较好的鲁棒性和准确性。

(2)基于区域的配准算法:这类算法主要针对整个图像区域进行匹配和配准。

常用的算法有基于互信息和归一化互相关系数的方法。

区域匹配算法在医学图像配准中更适用于相似度较低的图像配准。

计算机视觉技术中的图像配准算法介绍

计算机视觉技术中的图像配准算法介绍

计算机视觉技术中的图像配准算法介绍图像配准是计算机视觉的一个关键任务,其目标是将多张图像从不同的视角、尺度或形变下进行对齐,以便于后续的图像处理和分析。

图像配准技术广泛应用于医学影像、遥感影像、计算机辅助设计等多个领域。

本文将介绍几种常见的图像配准算法,包括特征点匹配、相位相关法和仿射变换法。

特征点匹配是图像配准中最常用的算法之一。

该算法的思想是在图像中提取一些鲁棒的特征点,并通过匹配这些特征点来确定两幅图像之间的变换关系。

常用的特征点包括角点、边缘点和尺度不变特征点(SIFT、SURF等)。

特征点匹配算法可以分为基于局部邻域的匹配和基于全局优化的匹配。

前者主要根据特征点附近的图像信息进行匹配,例如使用局部特征描述子来计算相似性。

后者则通过全局最优化方法,如RANSAC、Hough变换等,对所有特征点进行匹配和优化,以得到更准确的变换矩阵。

相位相关法是一种基于频域的图像配准方法。

该方法通过计算图像的互相关函数(cross-correlation)来确定两幅图像间的平移参数。

互相关函数测量了两幅图像在不同平移情况下的相似性,平移参数对应于最大互相关值出现的位置。

相位相关法适用于提供噪声较小、对齐相对简单的图像,例如纹理丰富的物体或具有明确边缘的物体。

此外,相位相关法还可以通过引入多尺度和金字塔技术来增强算法的鲁棒性,以适应不同尺度和旋转情况下的图像配准需求。

仿射变换法是一种常用的几何变换方法,它能够通过应用平移、旋转、缩放和切变等操作,将一幅图像映射到另一幅图像上。

在图像配准中,仿射变换法假设两幅图像具有相似的几何形状,且变换关系可以通过线性变换来表示。

一般来说,仿射变换法需要事先提取出一些图像上的特征点,并通过最小二乘法或一致性检测等方法来优化变换参数。

仿射变换法广泛应用于平面图像的配准,例如拼接全景图像、图像纠正和图像校正等场景。

除了上述介绍的算法,图像配准还有其他一些方法,如强度匹配法、基于统计的方法和形态学变换等。

医学影像行业中的医学图像配准技术使用方法总结

医学影像行业中的医学图像配准技术使用方法总结

医学影像行业中的医学图像配准技术使用方法总结医学图像配准技术是医学影像行业中一项重要的技术,通过将不同时间或不同成像设备产生的医学图像进行对齐,可以帮助医生准确诊断和评估疾病。

本文将总结医学图像配准技术的使用方法,包括图像预处理、特征提取、匹配算法和评估方法。

一、图像预处理在进行医学图像配准之前,需要对图像进行预处理,以提高配准的准确性和稳定性。

首先,图像需要经过去噪处理,以去除图像中的噪声干扰。

常用的去噪方法有中值滤波和高斯滤波。

其次,图像需要进行图像增强处理,以增强目标区域的对比度。

常见的图像增强方法有直方图均衡化和拉普拉斯增强。

二、特征提取在医学图像配准中,关键是要提取能够准确表示图像的特征。

常见的特征提取方法包括灰度直方图、边缘检测和角点检测。

灰度直方图描述了图像中各个灰度级别的像素数量分布,可以用来比较两幅图像的灰度特征。

边缘检测可以提取图像中的边缘信息,用于比较两幅图像的形状特征。

角点检测可以提取图像中的角点信息,用于比较两幅图像的纹理特征。

三、匹配算法医学图像配准的核心是找到两幅图像之间的相应点对,从而建立两幅图像之间的映射关系。

常见的匹配算法有点对点匹配和特征点匹配。

点对点匹配是通过找到两幅图像中对应位置的点进行匹配,要求图像具有相同的尺度和角度。

特征点匹配是通过利用提取的特征点进行匹配,可以处理图像旋转、缩放和平移等变换。

四、评估方法医学图像配准的质量评估是判断配准结果的好坏与否的关键。

常用的评估方法有重叠度、互信息和均方根误差。

重叠度是指两幅图像之间重叠区域的比例,用于评估配准结果的重叠程度。

互信息是指两幅图像之间的信息共享程度,用于评估配准结果的一致性。

均方根误差是指配准结果像素偏离真实值的平均距离,用于评估配准结果的精度。

综上所述,医学图像配准技术在医学影像行业中具有重要的应用价值。

在使用医学图像配准技术时,首先需要对图像进行预处理,包括去噪和图像增强。

其次,需要提取能够准确表示图像的特征,包括灰度直方图、边缘检测和角点检测。

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

1 说明本文实验的目标是对于两幅相似的图像,通过角点检测算法,进而找出这两幅图像的共同点,从而可以把这两幅图像合并成一幅图像。

下面描述该实验的基本步骤:1.本文所采用的角点检测算法是Harris 角点检测算法,该算法的基本原理是取以目标像素点为中心的一个小窗口,计算窗口沿任何方向移动后的灰度变化,并用解析形式表达。

设以像素点(x,y)为中心的小窗口在X 方向上移动u ,y 方向上移动v ,Harris 给出了灰度变化度量的解析表达式:2,,|,|,,()(x y x y x u y v x y x y I I E w I I w u v o X Y ∂∂=-=++∂∂∑∑ (1)其中,,x y E 为窗口内的灰度变化度量;,x y w 为窗口函数,一般定义为222()/,x y x y w eσ+=;I 为图像灰度函数,略去无穷小项有: 222222,,[()()2]2x y x y x y x y E w u I v I uvI I Au Cuv Bv =++=++∑(2)将,x y E 化为二次型有: ,[]x y u E u v M v ⎡⎤=⎢⎥⎣⎦(3)M 为实对称矩阵: 2,2x y x x y x y y I I I M w I I I •⎤⎡=⎥⎢•⎢⎥⎣⎦∑ (4)通过对角化处理得到: 11,200x y E R R λλ-⎛⎫= ⎪⎝⎭ (5) 其中,R 为旋转因子,对角化处理后并不改变以u,v 为坐标参数的空间曲面的形状,其特征值反应了两个主轴方向的图像表面曲率。

当两个特征值均较小时,表明目标点附近区域为“平坦区域”;特征值一大一小时,表明特征点位于“边缘”上;只有当两个特征值均比较大时,沿任何方向的移动均将导致灰度的剧烈变化。

Harris的角点响应函数(CRF)表达式由此而得到:2CRF x y M k trace M=- (6) (,)det()(())其中:det(M)表示矩阵M的行列式,trace(M)表示矩阵的迹。

当目标像素点的CRF值大于给定的阈值时,该像素点即为角点。

下面是图像一用Harris角点检测算法得到的角点坐标位置在图像一上画出该角点的坐标位置如下图所示:其中蓝色小方块代表的是检测出来的角点坐标位置。

2.匹配。

将两幅图像进行Harris角点检测后,分别得到角点对应与该图像的坐标位置,以该坐标位置为中心,分别取其附近的8个像素值,然后进行与另一幅图像进行匹配,找出距离最小的点作为匹配点。

例如下面是图像一角点坐标位置与该位置对应的8个像素值分别为接着,将图像一中的角点1与图像二中的所有角点进行相减,得到一个最小误差值,并记录下该位置,这样依次将图像一中的角点2,角点3一直到角点17都进行相减,即可得到两幅图像之间的最佳匹配点。

下面是两幅图像角点匹配的最佳坐标位置其中匹配点的值为0代表没有找到匹配点3.显示匹配点。

对已经找出的匹配点,在图像上进行显示,这样有利于人眼判断该算法是否匹配正确。

下面是第一次显示找到的匹配点(两幅图像中共有9个匹配点)下面是第二次显示找到的匹配点(比上一次少一个,判断依据是将误差值最大的点去除)从上面可以看出,14号点已经被删除,原因是该点的误差值最大下面是最后一次显示找到的匹配点只留下最后三个匹配点,如果少于三个匹配点,则很难进行两幅图像的合并,所以当只有留下三个匹配点的时候,程序退出。

2 实验结果实验一原始图像第一次匹配的结果实验二原始图像最后一次匹配的结果原始图像第一次匹配的结果最后一次匹配的结果原始图像第一次匹配的结果最后一次匹配的结果可以看出,利用该算法进行两幅图像匹配结果还算正确。

算法代码(用matlab语言写的)function test()% The test function gives an example of keypoint extraction using the % methods :% - Harris%% Example% =======% test();% Harris% import the first picture%img11 = imread('');%img11 = imread('');%img11 = imread('');%img1 = double(img11(:,:,1));img11 = imread('');img1 = rgb2gray(img11);img1 = double(img1(:,:));pt1 = kp_harris(img1);%draw(img11,pt1,'Harris');% import the second picture%img21 = imread('');%img21 = imread('');%img21 = imread('');%img2 = double(img21(:,:,1));img21 = imread('');img2 = rgb2gray(img21);img2 = double(img2(:,:));pt2 = kp_harris(img2);%draw(img21,pt2,'Harris');% match key points within two pictures.result = match(img1,pt1,img2,pt2);result(1,intersect(find(result(1,:) > 0),find(result(2,:) == 0))) = 0;%result%pause;while(length(find(result(1,:)>0)) > 3)resultdraw2(img11,img21,pt1,pt2,result);%find(result(1,:)>0)pause;[index index] = max(result(2,:));result(1,index(1)) = 0;result(2,index(1)) = 0;%result(1,I(1)) = result(2,I(1)) = 0enddraw2(img11,img21,pt1,pt2,result);endfunction draw2(img1,img2,pt1,pt2,result)h = figure;%set(gcf,'outerposition',get(0,'screensize'));subplot(1,2,1);%hold on;imshow(img1);subplot(1,2,2);%hold on;imshow(img2);s = size(pt1,2);subplot(1,2,1);for i=1:size(pt1,1)rectangle('Position',[pt1(i,2)-s,pt1(i,1)-s,2*s,2*s],'Curvature',[0 0],'EdgeColor','b','LineWidth',2);%text(pt1(i,2)+3,pt1(i,1)+3,num2str(i),'BackgroundColor',[1 1 1]);%text(pt2(i,2),pt2(i,1),num2str(i));%plot(pt2(i,2),pt2(i,1));endsubplot(1,2,2);for i=1:size(pt2,1)rectangle('Position',[pt2(i,2)-s,pt2(i,1)-s,2*s,2*s],'Curvature',[0 0],'EdgeColor','b','LineWidth',2);end%result%size(pt1)%size(pt2)for i=1:size(result,2)if(result(1,i)~=0)subplot(1,2,1);text(pt1(result(1,i),2)+3,pt1(result(1,i),1)+3,num2str(i),'BackgroundColor',[1 1 1]);%result(1,i)%pt1(result(1,i),2)%pt1(result(1,i),1)subplot(1,2,2);text(pt2(i,2)+3,pt2(i,1)+3,num2str(i),'BackgroundColor',[1 1 1]);endendendfunction result = match(img1,pt1,img2,pt2)%得到标定点周围的像素值regionValue1 = getRegionValue(img1,pt1);len1 = size(regionValue1,2);regionValue2 = getRegionValue(img2,pt2);len2 = size(regionValue2,2);%找出最佳匹配点result = zeros(2,len2);for i=1:len1B = regionValue1(:,i);%abs(regionValue2-B(:,ones(1,size(regionValue2,2))))%sum(abs(regionValue2-B(:,ones(1,size(regionValue2,2)))))[value,index] =sort(sum(abs(regionValue2-B(:,ones(1,size(regionValue2,2))))));%value(1)%index(1)%save index and valueif((result(1,index(1))==0)||(result(2,index(1))>value(1))) result(1,index(1))=i;result(2,index(1))=value(1);endendendfunction regionValue = getRegionValue(img,pt)len = size(pt,1);regionValue = zeros(8,len);maxX = size(img,1);maxY = size(img,2);for i=1:lenx = pt(i,1);y = pt(i,2);%1if(x-1<1||y-1<1)regionValue(1,i)=100;elseregionValue(1,i)=img(x,y)-img(x-1,y-1);end%2if(x-1<1)regionValue(2,i)=200;elseregionValue(2,i)=img(x,y)-img(x-1,y);end%3if(x-1<1||y+1>maxY)regionValue(3,i)=300;elseregionValue(3,i)=img(x,y)-img(x-1,y+1);end%4if(y+1>maxY)regionValue(4,i)=400;elseregionValue(4,i)=img(x,y)-img(x,y+1);end%5if(x+1>maxX||y+1>maxY)regionValue(5,i)=500;elseregionValue(5,i)=img(x,y)-img(x+1,y+1);end%6if(x+1>maxX)regionValue(6,i)=600;elseregionValue(6,i)=img(x,y)-img(x+1,y);end%7if(x+1>maxX||y-1<1)regionValue(7,i)=700;elseregionValue(7,i)=img(x,y)-img(x+1,y-1);end%8if(y-1<1)regionValue(8,i)=800;elseregionValue(8,i)=img(x,y)-img(x,y-1);endendendfunction points = kp_harris(im)% Extract keypoints using Harris algorithm (with an improvement % version)% INPUT% =====% im : the graylevel image%% OUTPUT% ======% points : the interest points extracted%% REFERENCES% ==========% . Harris and . Stephens. "A combined corner and edge detector",% Proceedings Fourth Alvey Vision Conference, Manchester.% pp 147-151, 1988.%% Alison Noble, "Descriptions of Image Surfaces", PhD thesis, Department % of Engineering Science, Oxford University 1989, p45.%% C. Schmid, R. Mohrand and C. Bauckhage, "d",% Int. Journal of Computer Vision, 37(2), 151-172, 2000.%% EXAMPLE% =======% points = kp_harris(im)% only luminance value%size(im)im = double(im(:,:,1));sigma = ;% derivative maskss_D = *sigma;x = -round(3*s_D):round(3*s_D);dx = x .* exp(-x.*x/(2*s_D*s_D)) ./ (s_D*s_D*s_D*sqrt(2*pi));dy = dx';% image derivativesIx = conv2(im, dx, 'same');Iy = conv2(im, dy, 'same');% sum of the Auto-correlation matrixs_I = sigma;g = fspecial('gaussian',max(1,fix(6*s_I+1)), s_I);Ix2 = conv2(Ix.^2, g, 'same'); % Smoothed squared image derivatives Iy2 = conv2(Iy.^2, g, 'same');Ixy = conv2(Ix.*Iy, g, 'same');% interest point responsecim = (Ix2.*Iy2 - Ixy.^2)./(Ix2 + Iy2 + eps);% find local maxima on 3x3 neighborgood[r,c,max_local] = findLocalMaximum(cim,3*s_I);% set threshold 1% of the maximum value%t = *max(max_local(:));t = *max(max_local(:)); %%t = *max(max_local(:)); %% find local maxima greater than threshold[r,c] = find(max_local>=t);% build interest pointspoints = [r,c];endfunction [row,col,max_local] = findLocalMaximum(val,radius)% Determine the local maximum of a given value%%% INPUT% =====% val : the NxM matrix containing values% radius : the radius of the neighborhood%% OUTPUT% ======% row : the row position of the local maxima% col : the column position of the local maxima% max_local : the NxM matrix containing values of val on unique local maximum %% EXAMPLE% =======% [l,c,m] = findLocalMaximum(img,radius);% FIND UNIQUE LOCAL MAXIMA USING FILTERING (FAST)mask = fspecial('disk',radius)>0;nb = sum(mask(:));highest = ordfilt2(val, nb, mask);second_highest = ordfilt2(val, nb-1, mask);index = highest==val & highest~=second_highest;max_local = zeros(size(val));max_local(index) = val(index);[row,col] = find(index==1); end。

相关文档
最新文档