matlab - 如何计算字节二元组的香农熵

标签 matlab statistics

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

A = imread(fileName);

现在我想计算香农熵。 maltab 中的香农熵实现是字节级熵分析,它认为文件由 256 个字节级组成。

wentropy(x,'shannon')

但我需要执行二元熵分析,这需要将文件视为由 65536 个级别组成。谁能建议我一个完成此任务的好方法。

最佳答案

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

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

给定一组 n 个观测值 (x1, x2, .... xn) 然后计算 P(X=x)对于所有 x 值的范围(在您的情况下,它将介于 (0 和 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 个 channel (R、G、B),每个 channel 需要 8 位(或 256 字节级别?)。

此外,由于每个 channel 都绑定(bind)在 [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来计算每个 channel 独立的图像的总熵。

关于matlab - 如何计算字节二元组的香农熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344760/

相关文章:

matlab - 如何使用逻辑值并选择另一个矩阵中的数据?

matlab - 在MATLAB中以x轴的对数刻度绘制频率响应

arrays - 递归消除元胞数组中的数字

javascript - 如何减少数据图但保持极端

machine-learning - 4 类分类有哪些统计指标?

python - 计算德州扑克中 5 张牌的抽牌次数

matlab - 使用 Matlab 导入另一个 .m 文件

matlab - 随机选择图像掩模中的 n 个像素

algorithm - 一通通用统计。整数的数值稳定性

machine-learning - 大数据的引导采样