优化两个图像之间的欧氏距离计算性能

时间:2015-10-16 22:06:20

标签: python algorithm image-processing matrix euclidean-distance

我在python中实现了k-nearest-neighbors算法,以对来自mnist数据库的一些随机选择的图像进行分类。然而,我发现我的距离函数非常慢:对10k图像训练集的10个测试图像的分析大约需要2分钟。图像的分辨率为28x28像素。因为我是python的新手,所以我觉得这可能会更快。该函数用于计算两个相同大小的灰度图像之间的欧氏距离。

def calculateDistance(image1, image2):
    distance = 0
    for i in range(len(image1)):
        for j in range(len(image1)):
            distance += math.pow((image1[i][j]-image2[i][j]),2)
    distance = numpy.sqrt(distance)
    return distance

2 个答案:

答案 0 :(得分:4)

如果您使用numpy数组来表示图像,则可以使用以下代码:

def calculateDistance(i1, i2):
    return numpy.sum((i1-i2)**2)

这应该快得多,因为它使用快速C实现来进行繁重的工作。还要考虑使用缓存来计算两次图像的差异两次。

答案 1 :(得分:0)

1)将两个图像之间的差异计算为临时变量,然后将该变量自身乘以(对整数进行操作),而不是执行Math.pow,这是一个浮点运算 2)如果你只是比较距离,例如找到距离最小的一对,最后不要打扰sqrt'ing(这实际上不会加速这么多因为它不在循环中但仍然没有需要你只使用相对比较的结果)