【问题标题】:Calculating Euclidian distance for multiple image histograms计算多个图像直方图的欧几里得距离
【发布时间】:2016-04-29 15:37:23
【问题描述】:

好的,这是计算直方图的函数:

def image_histogram():
    from PIL import Image
    import numpy as np
    import glob
    im = Image.open('/Users/Adnan/Desktop/Archive/0.jpg')
    im_vals1 = np.zeros(256)
    im_vals2 = np.zeros(256)
    im_vals3 = np.zeros(256)

    r,g,b = im.split()

    pixels_r = list(r.getdata())
    pixels_g = list(g.getdata())
    pixels_b = list(b.getdata())
    pix_r = np.array(pixels_r)
    pix_g = np.array(pixels_g)
    pix_b = np.array(pixels_b)
    for idx in range (0, len(pix_r)):
        im_vals1[pix_r[idx]] += 1
        im_vals2[pix_g[idx]] += 1
        im_vals3[pix_b[idx]] += 1
    histogram = list(im_vals1) + list(im_vals2) + list(im_vals3)
    return histogram
print(image_histogram())
def euclidean_distance():
    from scipy.spatial import distance
    a = image_histogram()
    b = image_histogram()
    dist = distance.euclidean(a,b)
print(euclidean_distance())

好的,所以这个函数现在计算 1 张图像 (0.jpg) 的直方图。我想知道如何使用差异图像多次运行相同的函数并将每个图像直方图存储为列表,然后由欧几里德距离函数使用。我猜某种递归应该可以解决问题,但不知道该怎么做,因为我似乎无法在任何地方找到它。

【问题讨论】:

  • 两个向量之间的欧几里得距离,还是你的意思是别的?如果您确实是这个意思,那么您是否看过公式?在您的帖子右侧,还有许多相关问题,例如this one,可能会有所帮助。
  • 它用于比较图像直方图以在文件夹中查找相似图像
  • 我真的只需要帮助创建将使用上述 n 计算欧几里得距离的函数,并且不知道该怎么做我一直在搜索这个网站,但没有想出任何东西

标签: python python-3.x


【解决方案1】:

在我的计算机视觉课程中,我记得计算两个直方图之间距离的最佳指标之一是卡方距离。

https://stats.stackexchange.com/questions/184101/comparing-two-histograms-using-chi-square-distance

在python中,它可以是sklearn最近邻函数的自定义度量:

def chiSquared(p,q):
    return 0.5*np.sum((p-q)**2/(p+q+1e-6))

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2021-03-16
  • 2020-12-14
  • 2020-11-29
  • 2018-02-14
  • 2023-03-12
  • 2016-09-11
相关资源
最近更新 更多