我正在尝试在Python中实现Matlab函数entropy()
。
熵
熵是随机性的统计度量,可用于表征输入图像的纹理。
熵定义为-sum(p。* log2(p)),其中p包含从imhist返回的标准化直方图计数。
我使用openCV来获得标准化的直方图计数。如果直方图计数中有零,我该怎么办?
答案 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
并重新规范化。