Python: plotting sift points returns points off 图片

Python: plotting sift points returns points off the pictures

我正在使用 sift 实现以及在 "Programming Computer Vision with Python" 中找到的代码。

虽然在 vision.py 中使用了 plotMatches 函数(相当于书中的 plot_matches() 函数),但一些绘制的点甚至不在图像上:

如您所见,大多数点都不在任何一张图像上。

这可能是我必须对 plotMatches() 函数进行更改的结果:

        for i, m in enumerate(matchscores):
            if i > 0:
                 lab.plot([locs1[i][1], locs2[i][1] + cols1],
                 [locs1[i][0], locs2[i][0]], 'c')

原代码:

        for i, m in enumerate(matchscores):
            if i > 0:
                lab.plot([locs1[i][1], locs2[m][1] + cols1],
                [locs1[i][0], locs2[m][0]], 'c')

会抛出以下错误:

    Traceback (most recent call last):
    File "/home/peter-brown/AI/Markus/ImageRecognition.py", line 37,     in <module>
     sch.plotMatches(image, image2, l1, l2, matches, show_below=False)
     File "/home/peter-brown/AI/Markus/vision.py", line 199, in    plotMatches
     lab.plot([locs1[i][1], locs2[m][1] + cols1],
     IndexError: index 1 is out of bounds for axis 0 with size 1

通过更改代码中使用的任何 'm',程序可以运行,但输出不正确。

为什么输出与图像不对应,我该如何更改 plotMatches 函数才能工作?

matplotlib中,xy坐标翻转。从您的图像看来,您正在将所有 x 坐标解释为 y 坐标,反之亦然。从您的函数来看,这是一个简单的更改:

for i, m in enumerate(matchscores):
        if i > 0:
             lab.plot([locs1[i][0], locs2[i][0] + cols1],
             [locs1[i][1], locs2[i][1]], 'c')