1、读取图像
imread ) )函数导入图像时,m文件和图像位于同一目录中,因此采用相对路径。
img=imread('1.png ); 2、统计灰度值
imhist ) )函数,用[ 0,255 ]统计图像的灰度值,用size统计每个灰度值出现的概率)函数用于计算图像的大小。
num=imhist(img; [m,n]=size(img ); px=num /(完美玫瑰) 3、计算图像的源熵
I=-log2(px ); HX=I .* px; hx(isnan ) hx ) )=0; entropy=sum(result ) fprintf )图像的源熵=%f(n ),entropy ); 4、对图像进行香农编码,实验代码见附录
(1)将各灰度值出现的概率按降序排列
px=sort(px,' descend ' ); )2)累计概率的计算
(3)求码长
公式Li=-log(p ) si ) ) I=1,2,…
)4)求平均码长
用公式运送L=p(si ) li
)5)求码字
用二进制表示p(si ),将小数点以下的li比特作为符号si的符号。
-------------附录
clc,clear; %图像的源熵img=imread('1.png ); num=imhist(img; [m,n]=size(img ); px=num /(完美玫瑰); I=-log2(px ); HX=I .* px; hx(isnan ) hx ) )=0; entropy=sum(hx ) %香农码j=max ) px; px=sort(px,' descend ' ); L=length(px; AveL=0; 求出for i=1:l %累积概率F=0; fork=1:I-1if(I==1) px )1)=0; F=0; ELSEpx(1)=j; endf=fpx(k; end fprintf (累积概率=%f(n ),f ); %代码长度if(I==1) l=fix(-log2 ) j ) ) 1; y=Zeros(L; ELSEL=fix(-log2 ) px (I ) ) 1; y=检测bin (f,l ); end fprintf ('代码长度=%fn ',l ); DISP(y; %求平均代码长度的avel=avelpx(I ) * L; DISP ((平均代码长度(f(n )、AveL ) ); 函数y=dectobin (in num,n )从十进制小数到二进制小数的转换(num是输入的十进制小数) n是指定转换后的二进制小数位数count=0; Record=Zeros(1,n ); for k=1:Ncount=count 1; num=num * 2; %将小数转换为二进制,用2取整数ifnum1record(count )=1; num=num - 1; else记录(计数)=0; endif (计数) break; 索引=记录;