局部图像描述子------SIFT(尺度不变特征变换)

二. SIFT(尺度不变特征变换)

SIFT特征包括兴趣点检测器和描述子。SIFT描述子具有非常强的稳健性,这在很大程度上也是SIFT特征能够成功和流行的主要原因。SIFT特征对于尺度、旋转和亮度都具有不变性,因此,它可以用于三维视角和噪声的可靠匹配。

1.实验原理

1.1 兴趣点

SIFT特征使用高斯差分函数来定位兴趣点:
在这里插入图片描述
兴趣点是在图像位置和尺度变化下 D ( x , σ )的最大值和最小值点。这些候选位置点通过滤波去除不稳定。基于一些准则,比如认为低对比度和位于边上的点不是兴趣点,我们可以去除一些候选兴趣点。

1.2 描述子

上面讨论的兴趣点(关键点)位置描述子给出了兴趣点的位置和尺度信息。为了实现旋转不变性,基于每个点周围图像梯度的方向和大小,SIFT描述子又引入参考方向。SIFT描述子使用主方向描述参考方向。主方向使用方向直方图(以大小为权重)来度量。

下面我们基于位置、尺度和方向信息来计算描述子。为了对图像亮度具有稳健性,SIFT描述子使用图像梯度。SIFT描述子在每个像素点附近选取子区域网格,在每个子区域内计算图像梯度方向直方图。每个子区域的直方图拼接起来组成描述子向量。SIFT描述子的标准设置使用4 × 4 4\times44×4的子区域,每个子区域使用8个小区间的方向直方图,会产生共128个小区间的直方图( 4 × 4 × 8 = 128 ) (4\times4\times8=128)(4×4×8=128)。

1.3 检测兴趣点

可以使用开源工具包VLFeat提供的二进制文件来计算图像的SIFT特征。用完整的Python实现SIFT特征的所有步骤可能效率不是很高。VLFeat库使用C语言来写的,但是我们可以使用该库提供的命令行接口。由于Python包装器对平台的依赖性,安装Python包装器在某些平台上需要一定的技巧,可以使用二进制文件版本。

1.4 匹配描述子

对于讲一幅图像中的特征匹配到另一幅图像的特征,一种稳健的准则(Lowe提出)是使用这两个特征距离和两个最匹配特征距离的比率。相比于图像中的其他特征,该准则保证能够找到足够相似的唯一特征。使用该方法可以使错误的匹配数降低。

2.实验代码

import cv2

# Load the two images
img1 = cv2.imread(r'D:\software\pycharm\PycharmProjects\computer-version\two\images\IMG_20230413_105726.jpg')
img2 = cv2.imread(r'D:\software\pycharm\PycharmProjects\computer-version\two\images\IMG_20230413_105730.jpg')

# Convert the images to grayscale
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# Initialize the SIFT detector
sift = cv2.SIFT_create()

# Detect and compute the keypoints and descriptors for both images
kp1, des1 = sift.detectAndCompute(gray1, None)
kp2, des2 = sift.detectAndCompute(gray2, None)

# Match the descriptors using a Brute-Force matcher
bf = cv2.BFMatcher()
matches = bf.match(des1, des2)

# Sort the matches by distance
matches = sorted(matches, key = lambda x:x.distance)

# Draw the top 50 matches
img_matches = cv2.drawMatches(img1, kp1, img2, kp2, matches[:50], None, flags=2)

# Display the result
cv2.imshow('Matches', img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.结果展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44896301/article/details/130134975