matlab计算熵
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function s = shannon(img)
% S = IMG_SHANNON(IMG)
if nargin == 1
img = im2uint8(img);
% Get size of img
[r,c,b] = size(img);
if b == 1
%s = shannon(img);
hspec = imhist(img);
idx = find(hspec == 0);
hspec(idx) = eps;
hspec = hspec ./ (r * c);
H = -(hspec .* log2(hspec));
s = sum(H();
elseif b == 3
band1 = img(:,:,1);
band2 = img(:,:,2);
band3 = img(:,:,3);
outval = zeros(256,256,256);
for m = 1 : r
for n = 1 : c
i = band1(m,n) + 1;
j = band2(m,n) + 1;
k = band3(m,n) + 1;
outval(i,j,k) = outval(i,j,k) + 1;
end
end
% 将outval归一化
outval = outval ./ (r*c);
h = -(outval .* log2(outval + eps));
s = sum(sum(sum(h)));
end
else
error('Wrong number of input!');
end
matlab的entropy函数可以计算任意多个波段图像,但是它把多波段图像当作一整幅图像来处理,还是相当于计算的一幅图像的信息熵。
而我提供的这个函数只能计算一个波段或3个波段图像的信息熵,其中当图像只有一个波段时按照信息熵的公式计算的与entropy计算结果一样。
当图像有三个波段时即RGB图像时,shannon是计算的它们的联合熵与entropy计算结果不一样。