使用欧氏距离计算两个直方图之间的距离

Calculating Distances Between 2 Histograms by Using Euclidean Distance

我正在尝试计算两个色调图像直方图的欧氏距离,我找到了 cv2.compareHist 方法,但它没有提供欧氏距离选项。非常感谢任何帮助。

这是 Python/OpenCV 中的操作方法。

输入:

import cv2
import math

# Load the images
img1 = cv2.imread('lena.jpg')
img2 = cv2.imread('zelda1.jpg')

# convert to gray
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

# Calculate the histograms, and normalize them
hist1 = cv2.calcHist([gray1], [0], None, [256], [0, 256])
#cv2.normalize(hist1, hist1, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)

hist2 = cv2.calcHist([gray2], [0], None, [256], [0, 256])
#cv2.normalize(hist2, hist2, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)

# compute euclidean distance
sum = 0
for i in range (0,256):
    sum = sum + (hist1[i][0]-hist2[i][0])**2
dist = math.sqrt(sum)
print('euclidean distance:', dist)

# above is equivalent to cv2.norm()
dist2 = cv2.norm(hist1, hist2, normType=cv2.NORM_L2)
print('euclidean distance2:', dist2)

结果:

euclidean distance : 2319.6163475885405
euclidean distance2: 2319.6163475885405

如果图像不具有相同的尺寸(总像素=宽度*高度),那么可能应该通过将每个 bin 除以图像中的总像素来归一化直方图。