2

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

A = imread(fileName);

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

wentropy(x,'shannon')

但是我需要执行一个二元熵分析,这需要将一个文件视为由 65536 个级别组成。任何人都可以建议我实现这一目标的好方法。

4

2 回答 2

5

随机变量的熵可以使用以下公式计算: 在此处输入图像描述

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)to的映射,P(X=x)如下所示:

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

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

于 2012-11-12T16:19:50.633 回答
0

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

于 2017-03-05T09:14:04.417 回答