Python:绘制筛选点返回图片中的点

时间:2016-04-24 15:08:41

标签: python computer-vision sift

我正在使用sift实现以及“使用Python编程计算机视觉”中的代码。

在vision.py中使用plotMatches函数(相当于本书的plot_matches()函数)时,绘制的某些点甚至不在图像上: Output of the results

正如您所看到的,大多数点都不在图像上。

这可能是我必须对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功能?

1 个答案:

答案 0 :(得分:1)

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')