如何计算字节双字母的shannon熵

时间:2012-11-12 13:39:32

标签: matlab statistics

我已经将图像文件读入这样的数组

A = imread(fileName);

现在我想计算shannon熵。 maltab中的shannon熵实现是字节级熵分析,它将文件视为由256字节级别组成。

wentropy(x,'shannon')

但我需要执行一个二元组熵分析,需要查看一个由65536个级别组成的文件。谁能建议我一个很好的方法来实现这个目标。

2 个答案:

答案 0 :(得分:5)

随机变量的熵可以使用以下公式计算: enter image description here

其中p(x)Prob(X=x)

给出一组n观察(x1, x2, .... xn)然后,您计算所有x值的范围P(X=x)(在您的情况下,它将在(0 and 65535)之间,然后在所有x值之间求和最简单的方法是使用hist

byteLevel = 65536
% count the observations

observationHist = hist(observations, byteLevel);
% convert to a probability
probXVal = observationHist ./ sum(observationHist);  

% compute the entropy
entropy = - sum( probXVal .* log2(probXVal) );

在文件交换上有几个这样的实现,值得一试。

注意:您在哪里wentropy使用256字节级别?我在码头的任何地方都没有看到它?请记住,在Matlab中,彩色图像的像素有3个通道(R,G,B),每个通道需要8位(或256字节级别?)。

另外,因为每个频道都绑定在[0 256)之间,您可以创建从P(R=r,G=g,B=b)P(X=x)的映射,如下所示:

data = imageData(:,:,1);
data = data + (imgData(:,:,2) * 256);
data = data + (imgData(:,:,3) * 256 * 256);

我相信您可以使用data来计算每个频道独立的图像的总熵。

答案 1 :(得分:0)

将“65536”级别的彩色图像转换为“256”级别的灰色图像,并考虑熵评估。