无人机航拍图像匹配 |
您所在的位置:网站首页 › 无人机航拍照片 › 无人机航拍图像匹配 |
无人机航拍图像匹配——SIFT算法实践(含代码)
一.摘要二.SIFT算法的原理1.尺度空间极值检测 &关键点定位尺度不变性&尺度空间高斯金字塔
2.方向分配3.特征描述4 .特征匹配`
三.代码1. 无人机航拍图像匹配2.高斯核函数的代码
参考文献
一.摘要
SIFT(Scale-Invariant Feature Transform)算法是由David Lowe于1999年提出的一种用于图像处理和计算机视觉中的特征提取和匹配方法。它在航拍图像匹配中具有重要的意义,主要体现在以下几个方面: 尺度不变性:航拍图像通常具有大范围的尺度变化,例如拍摄距离目标较远或较近的情况。SIFT算法通过在不同尺度下检测关键点和描述图像特征,具有尺度不变性,可以有效应对航拍图像的尺度变化。 旋转不变性:航拍图像中的目标可能以不同的姿态出现,例如建筑物在不同方向上的拍摄角度。SIFT算法通过为关键点分配主方向,并构建与旋转无关的特征描述子,具有旋转不变性,可以准确匹配具有不同姿态的目标。 鲁棒性:航拍图像受到多种因素的影响,如光照变化、阴影、云层等。SIFT算法通过在关键点周围计算局部梯度方向直方图构建特征描述子,具有一定的鲁棒性,能够应对光照变化和部分遮挡的情况。 高匹配精度:SIFT算法通过计算特征描述子之间的相似性或距离进行特征匹配,具有较高的匹配精度。在航拍图像匹配中,SIFT算法可以识别和匹配具有相似特征的地物或目标,用于航拍图像的配准、拼接、地图制作等任务。 综上所述,SIFT算法在航拍图像匹配中具有尺度不变性、旋转不变性、鲁棒性和高匹配精度的特点,能够有效地提取和匹配航拍图像中的特征,对于航拍图像的处理和分析具有重要的意义。 本文分为两部分,第一部分详细讲解了SIFT的原理,第二部分利用openCV-python内置的SIFT模块进行图像匹配 二.SIFT算法的原理SIFT算法的主要步骤如下: 尺度空间极值检测(Scale-space extrema detection):SIFT算法首先通过在不同尺度上对图像进行高斯平滑来构建尺度空间(scale space)。然后,在尺度空间中检测出关键点,这些关键点对于不同尺度下的图像特征是稳定的。 关键点定位(Keypoint localization):在尺度空间的极值点检测之后,对每个检测到的极值点进行精确定位,以获得更准确的关键点位置。该步骤使用了DoG(Difference of Gaussians)图像金字塔,通过计算高斯平滑图像的差异来检测局部极值点。 方向分配(Orientation assignment):为每个关键点分配一个主方向,以提高特征描述子的旋转不变性。在该步骤中,通过对关键点周围的图像梯度方向进行统计,确定主要的梯度方向,并将其作为关键点的方向。 特征描述(Feature description):在这一步骤中,使用关键点周围的图像区域计算特征描述子,以描述关键点周围的图像结构。SIFT算法使用了局部图像梯度的方向直方图来构建描述子,该描述子具有尺度不变性和旋转不变性。 特征匹配(Feature matching):通过计算两幅图像中的特征描述子之间的距离或相似性来进行特征匹配。常用的方法是计算描述子之间的欧氏距离或余弦相似度,然后根据距离或相似度进行特征匹配。 1.尺度空间极值检测 &关键点定位首先要明确,ORB是对图像灰度进行检测,得到一系列的角点,与之不同的额是,sift检测出来用于特征点匹配的特征点,是一个个具有尺度不变性的区域: 尺度不变性是指在不同尺度下,对象或特征的外观和结构保持不变的属性。 对于SIFT算法,就是对于图像中的某个点,在这个点周围画圆,作为分析区域,希望找到一个
f
f
f 函数,与不同尺度的该区域的图像相乘,响应结果能够有一个极值。 如果说响应函数存在一个极值,而不是平坦的,那就可以说这个区域具有尺度不变性(也可以说是一种极值特性) 下图横坐标为针对该区域,图像尺度的不同尺度,纵坐标是响应结果。 对于任意一点(x,y),只要不同尺度下的相应图中存在峰值,那么这个点就是我们想要的点。 在整张图片上重复上述步骤,可以获得所有具有尺度不变性的点,如果该点是具有尺度不变性的点,以该点为圆心画一个半径为 ( 2 ) ∗ 尺 度 \sqrt(2)*尺度 ( 2)∗尺度的圆(这就是第一张图中蝴蝶周围圆圈的由来)。 接下来讲述如何利用尺度不变性的原理,通过构建高斯金字塔来实现关键点检测 高斯金字塔SIFT用来了一种比较高效的方法:DOG高斯差分金字塔 最后,对于检测到的局部极值点,由于前面构建的尺度空间是离散的: 所以下通过拟合二次曲线来精确定位其准确的位置和尺度。拟合过程使用每个极值点及其相邻像素点的响应值进行插值,得到更精确的特征点位置。 至此就可以检测出图像中的特征点,假设该特征点的尺度为Q,特征点周围画一个圆圈(半径为 ( 2 ) \sqrt(2) ( 2)*S) 懒得画图了,还是展示这张图吧 在SIFT算法的方向分配步骤中,对于每个关键点,可以按照以下步骤进行方向分配: 确定圆的半径:计算关键点所在的高斯图像的尺度的1.5倍,得到圆的半径。 统计梯度方向和梯度幅值:以关键点为圆心,以半径为半径的圆内的所有像素点。对于每个像素点,计算其梯度方向和梯度幅值。可以使用Sobel等算子计算图像的梯度。 高斯加权:对于圆内的每个像素点,根据其到关键点的距离应用高斯加权。距离关键点越近的像素点,其梯度方向和梯度幅值所占的权重越大。 构建梯度方向直方图:将梯度方向划分为若干个区间,例如36个区间。对于每个像素点,根据其梯度方向的值和加权后的梯度幅值,将其贡献到对应的区间上。 选择主方向:从梯度方向直方图中选择具有最大值的方向作为关键点的主方向。 通过以上步骤,可以为每个关键点分配一个主方向,用于后续的特征描述子计算。这样可以使特征描述子对图像的旋转具有不变性,提高特征匹配的准确性和稳定性。 这部分参考的是: SIFT算法 想要了解更深入的数学原理可以看这篇文章 尺度不变特征转换-SIFT 根据前面得到的特征点的主方向,将坐标轴旋转到主方向,从而实现了旋转不变性 描述符是与特征点所在的尺度有关的,所以描述特征点是需要在该特征点所在的高斯尺度图像上进行的,在高斯尺度图像上,以特征点为中心,将其附近邻域划分为dxd个子区域,论文中取d=4。σ为相对于特征点所在的高斯金字塔的组的基准层图像的尺度 如下图将区域划分为4×4的子块,对每一子块进行8个方向的直方图统计操作,获得每个方向的梯度幅值,总共可以组成128维描述向量. 所以SIFT算法的整体流程如下图展示 概括来说就是: 首先对两张输入的图构建尺度金字塔——>进行极值检测——>得到特征点在二维图像空间的位置,以及尺度空间的位置 σ \sigma σ——>特征点所在的高斯尺度图像上,获取特征点的主方向——>利用尺度信息进行区域归一化——>利用主方向消除旋转歧义——>计算外观直方图,获得描述子 4 .特征匹配`分别对参考图,和实时图建立特征点的描述子集合。采用欧式距离来度量相似性。 设d1为实时图中的点A的描述子和参考图中与A欧式距离最近的点B之间的距离,d2为参考图中与A欧式距离次近的点Q和A之间的距离。设定了一个阈值T。 若要点A和匹配上,则需要 d 1 / d 2 < T d1/d2 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |