【问题标题】:Matlab code to compare two histogramsMatlab代码比较两个直方图
【发布时间】:2013-11-14 08:31:38
【问题描述】:

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

h1 --> 双值一维向量,长度为 .4096。

h2 --> 双值一维向量,长度为 .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)) --> ?

谁能解释一下上面的代码?另外,请告诉我,如果我使用单笔金额,可以吗?

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

谢谢!

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    一般而言,sum 仅沿一维进行求和。如果你想沿多个维度求和,你要么

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

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

    【讨论】:

      【解决方案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】:

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

      在你的情况下,你可以只留下一个sum

      你可以做得更好 - 无需任何费用

      悬停在这里查看答案

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

      【讨论】:

        【解决方案4】:

        我也没有在 3 个总和中看到任何点,但是如果您没有带直方图的向量而是一个矩阵,您将需要 2 个像这样的总和 sum(sum(sqrt(h1).*sqrt(h2 ))) 来比较它们。第一个将计算行的总和,第二个 - 列的总和。

        【讨论】:

          猜你喜欢
          • 2017-01-24
          • 1970-01-01
          • 2020-11-21
          • 1970-01-01
          • 2013-10-13
          • 1970-01-01
          • 1970-01-01
          • 2013-01-14
          • 1970-01-01
          相关资源
          最近更新 更多