两幅图像的RGB直方图之间的欧式距离

时间:2020-08-25 13:28:13

标签: image-processing computer-vision histogram euclidean-distance

我有两张图片,每张图片的R,G,B强度均为直方图。我想使用直方图的值找到欧几里得距离,以找到相似性。

我知道欧几里德距离的公式是:

= sqr((R1-R2)^2 +(G1-G2)^2+(B1-B2)^2)

由于每张图像的RG和B直方图都有多个值,您是否假设对一个直方图中的所有强度值取平均值,然后与另一直方图的强度值相减? >

示例1:

Image1: R1 histogram has values of 2,3,4 
Image2: R2 histogram has values of 2,3,1
  1. 那我要R1=(2+3+4)/3 ,R2=(2+3+1)/3
  2. 然后我要对(9-6)^2中的值(R1-R2)^2进行sqr((R1-R2)^2+(G1-G2)^2+(B1-B2)^2)吗?

OR

示例2:

Image1: R1 histogram has values of 2,3,4 
Image2: R2 histogram has values of 2,3,1
  1. 那我要为(2-2)^2 +(3-3)^2 +(4-1)^2中的(R1-R2)^2做这个sqr((R1-R2)^2 +(G1-G2)^2+(B1-B2)^2)吗?

请帮帮我,谢谢!

2 个答案:

答案 0 :(得分:1)

将直方图视为一个向量(也许有256个bin,所以它是一个256维向量)。现在计算两个向量之间的欧几里得距离:

DR = norm(R1-R2); % same as sqrt(sum((R1-R2).^2))

您可以对每个R,G和B分量重复此操作,然后使用欧几里得范数再次组合三个距离:

D = sqrt(DR.^2 + DG.^2 + DB.^2);

这与为每个图像连接3个颜色直方图并计算其距离相同:

H1 = [R1,G1,B1]; % assuming histograms are row vectors
H2 = [R2,G2,B2];
D = norm(H1-H2);

答案 1 :(得分:-1)

我认为您正在将标准化与欧氏距离混合在一起。

Euclidean Distance = Sqrt( Sum( ( a[i][j] - b[i][j] )^2 ) ) for all i = 0..width, j = 0..height

a [] []和b [] []可以是规范化数据或非规范化数据。如果您使用的是原始图像像素值,则它们不会被标准化。您可以通过除以像素值的强度范围来对图像进行归一化(最小-最大归一化)。

因此,在第一遍计算归一化图像anorm [] []和bnorm [] [],

for(i = 0; i < width; i++) {
  for(j = 0; j < height; j++) {
    anorm[i][j] = a[i][j] / (max_a - min_a);
    bnorm[i][j] = b[i][j] / (max_b - min_b);
  }
}

现在,将欧几里德距离公式应用于anorm [] []和bnorm [] []。