使用 Python 查找两个图像中的匹配数据点

Rav*_*avi 5 python opencv image-processing computer-vision sift

我有两张图像,即图 1 和图 2。两者均取自同一来源,但未对齐。任务是找到这两个图像之间的共同数据点,并在两个图像中匹配的数据点之间画线。我看这个图应该像图4。

到目前为止,我已经使用了OpenCV并编写了以下代码:

import cv2 
import matplotlib.pyplot as plt

img_file1= "Fig_1.png"
img_file2= "Fig_2.png"
img1= cv2.imread(img_file1)
img2= cv2.imread(img_file2)
    
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

figure, ax = plt.subplots(1, 2, figsize=(16, 8))

ax[0].imshow(img1, cmap='gray')
ax[1].imshow(img2, cmap='gray')

#sift
sift = cv2.xfeatures2d.SIFT_create()

keypoints_1, descriptors_1 = sift.detectAndCompute(img1,None)
keypoints_2, descriptors_2 = sift.detectAndCompute(img2,None)

#feature matching
bf = cv2.BFMatcher(cv2.NORM_L1, crossCheck=True)

matches = bf.match(descriptors_1,descriptors_2)
matches = sorted(matches, key = lambda x:x.distance)

img3 = cv2.drawMatches(img1, keypoints_1, img2, keypoints_2, matches[:50], img2, flags=2)
plt.imshow(img3),plt.show()
Run Code Online (Sandbox Code Playgroud)

这给出了意想不到的结果,见图 4。而且看起来相当混乱和不清楚。

谁能帮助我如何做到这一点?提前致谢。

图。1

在此输入图像描述

图2 在此输入图像描述

图像3

在此输入图像描述

图3

在此输入图像描述

小智 2

这种转变似乎纯粹是平移的。尝试通过归一化灰度相关性进行模板匹配。