【发布时间】:2021-06-08 05:34:00
【问题描述】:
我有两张图片,即图 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()
这给出了意想不到的结果,见图 4。加上看起来相当混乱和不清楚。
谁能帮助我如何做到这一点?提前致谢。
图一
img3
图3
【问题讨论】:
-
图3代表什么?上面代码的输出?
-
是的,图 3 代表我的代码 (img3) 的输出。
-
我的猜测是,由于要检测的特征只是白色圆圈,特征检测器检测到圆圈,并且由于图像充满了相似的特征(即)白色圆圈,匹配器无法匹配适当的。
-
尝试使用不同的示例运行代码,例如 opencv 文档 (docs.opencv.org/master/dc/dc3/tutorial_py_matcher.html) 中显示的示例,并检查是否得到类似的结果。
-
试过但得到了类似的结果。 fig3 好像是把图片加在一起了,怎么才能让这两者之间的距离,让我可以清楚的看到哪些数据点属于哪一个呢?
标签: python opencv image-processing computer-vision sift