首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两幅图像RGB直方图之间的欧氏距离

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

Stack Overflow用户
提问于 2020-08-25 13:28:13
回答 2查看 2.2K关注 0票数 0

我有两张图片,每幅图像的直方图为R,G,B。我假设用直方图的值来寻找欧氏距离,以求相似度。

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

代码语言:javascript
复制
= sqr((R1-R2)^2 +(G1-G2)^2+(B1-B2)^2)

因为每幅图像的R和B的直方图都有几个值,所以你应该在一个直方图中取所有强度值的平均值,然后用另一个直方图的强度值的平均值减去它吗?

示例1:

代码语言:javascript
复制
Image1: R1 histogram has values of 2,3,4 
Image2: R2 histogram has values of 2,3,1

那么我要做R1=(2+3+4)/3 ,R2=(2+3+1)/3

  • Then吗?sqr((R1-R2)^2+(G1-G2)^2+(B1-B2)^2)

中的值(R1-R2)^2(9-6)^2吗?

示例2:

代码语言:javascript
复制
Image1: R1 histogram has values of 2,3,4 
Image2: R2 histogram has values of 2,3,1

然后,我在sqr((R1-R2)^2 +(G1-G2)^2+(B1-B2)^2)中为(R1-R2)^2(2-2)^2 +(3-3)^2 +(4-1)^2吗?

请帮帮我,谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-08-25 14:09:00

把直方图想象成矢量(可能有256个垃圾箱,所以它是一个256维的向量)。现在计算两个向量之间的欧几里德距离:

代码语言:javascript
复制
DR = norm(R1-R2); % same as sqrt(sum((R1-R2).^2))

您可以对每个R、G和B分量重复这一步骤,并使用欧几里得范数再次组合这三个距离:

代码语言:javascript
复制
D = sqrt(DR.^2 + DG.^2 + DB.^2);

这与将每幅图像的3种颜色直方图连在一起并计算它们的距离是一样的:

代码语言:javascript
复制
H1 = [R1,G1,B1]; % assuming histograms are row vectors
H2 = [R2,G2,B2];
D = norm(H1-H2);
票数 1
EN

Stack Overflow用户

发布于 2020-08-25 13:45:11

我想你把归一化和欧几里得距离混在一起。

代码语言:javascript
复制
Euclidean Distance = Sqrt( Sum( ( a[i][j] - b[i][j] )^2 ) ) for all i = 0..width, j = 0..height

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

因此,在第一遍中,计算归一化图像和b范数,

代码语言:javascript
复制
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和b范数。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63579933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档