用于比较两个直方图的Matlab代码

时间:2013-11-14 08:31:39

标签: matlab image-processing

我想比较两个图像直方图。它们如下:

h1 - >双值1维向量.4096长度。

h2 - >双值1维向量.4096长度。

我在这里使用这个matlab函数:

http://clickdamage.com/sourcecode/code/compareHists.m

如下:

% s = compareHists(h1,h2)
%       returns a histogram similarity in the range 0..1
%
% Compares 2 normalised histograms using the Bhattacharyya coefficient.
% Assumes that sum(h1) == sum(h2) == 1
%
function s = compareHists(h1,h2)

s = sum(sum(sum(sqrt(h1).*sqrt(h2))));

我的问题是:

是否需要多笔款项?

即使上面的等式中只有一个总和,也就足够了......

像这样: sum(sqrt(h1)。* sqrt(h2)) - > ?

有人可以解释一下上面的代码吗?另外,告诉我如果我使用一笔金额就可以了吗?

我尝试了两种方法,并为两个图像直方图得到了相同的答案。我只用了两个直方图来做到这一点,因此我想确定。

谢谢!

4 个答案:

答案 0 :(得分:3)

通常,sum仅在一个维度上执行求和。如果你想要在多个维度上求和,那么

  • 多次使用sum;或
  • 使用线性索引缩减为单个维度,然后使用sum一次:sum(sqrt(h1(:)).*sqrt(h2(:)))

在你的情况下,如果只有一个维度,是的,单个sum就足够了。

答案 1 :(得分:2)

我相信您最初下载的代码是为了处理堆叠为矩阵列的多个直方图而编写的。这是(恕我直言)多重sum的原因。

在您的情况下,您只能留下一个sum

你可以做得更好 - 没有任何总和

将鼠标悬停在此处以查看答案

  

s = sqrt(h1(:)')*sqrt(h2(:));  诀窍是使用向量乘法!

答案 2 :(得分:2)

你是对的。只需要一笔钱。但是,如果h1或h2是多维矩阵,那么您可能希望将总和与维度相加。例如:

A=magic(4); % a 4 by 4 matrix of magic numbers.
sum(A) % returns [34,34,34,34], i.e. the sum of elements in each column.
sum(sum(A)) % returns 136, i.e. the sum of all elements in A.

答案 3 :(得分:1)

我也没有在3个总和中看到任何分数,但是如果你没有直方图但是矩阵的矢量,你将需要2个总和,如此总和(总和(sqrt(h1)。* sqrt(h2) )))来比较它们。第一个将计算行的总和,第二个 - 列的总和。