计算图像熵时如何处理直方图零计数?

时间:2018-04-01 16:27:24

标签: python matlab entropy

我正在尝试在Python中实现Matlab函数entropy()

  

     

熵是随机性的统计度量,可用于表征输入图像的纹理。

     

熵定义为-sum(p。* log2(p)),其中p包含从imhist返回的标准化直方图计数。

我使用openCV来获得标准化的直方图计数。如果直方图计数中有零,我该怎么办?

2 个答案:

答案 0 :(得分:3)

由于您将该函数移植到另一个编程框架中,在我看来,对您的问题的一个很好的答案是:&#34;与Matlab相同的事情&#34; 。< / p>

在对直方图进行标准化之前,Matlab将计数等于0。如果您使用命令open entropy打开原始函数,您将在其代码中找到您要查找的内容:

% calculate histogram counts
p = imhist(I(:));

% remove zero entries in p 
p(p==0) = [];

% normalize p so that sum(p) is one.
p = p ./ numel(I);

E = -sum(p.*log2(p));

答案 1 :(得分:1)

我所知道的实践中通常使用两种方法:

  • 第一个是丢弃这些计数(即设置“0 * log(0)= 0”)

  • 第二个是为每个计数添加一些小值0 - a + "px"e并重新规范化。