gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:23:27 32 4
gpt4 key购买 nike

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

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 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 个 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com