随机变量的熵可以使用以下公式计算:
其中p(x) 是Prob(X=x)。
给定一组n 观察(x1, x2, .... xn) 然后您计算P(X=x) 的范围内所有x 值(在您的情况下,它将在(0 and 65535) 之间,然后对所有值求和。最简单的方法是这样做正在使用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来计算每个通道独立的图像的总熵。