本文通过MATLAB实现了二分香农(范诺编码),部分代码如下:
clear;clc;
%% 图像读取处理
pic=[100 56 56 65 128 214 2 2 200 100 100 100 65];
hdz=[100 56 65 128 214 2 135 200];
p=[0.38 0.20 0.14 0.11 0.08 0.04 0.03 0.02];
num=length(pic);
m=1;n=num;
%% 图像编码
[p,c]=sort(p,'descend');
hdz=hdz(c);
L=length(p);
fg=[1 L+1];
code=blanks(L)';
cs=1; %记录处理的次数
while length(fg)~=L+1
q=qj(fg);
for i=1:size(q,1)
up=q(i,1); %区间上端
down=q(i,2); %区间下端
pin=p(up:down-1); %得到要处理的区间
k=divid(pin); %找到分界点
k=k+up-1;
code(up:k-1,cs)='0';
code(k:down-1,cs)='1';
fg=[fg k]; %更新区间范围
end
fg=sort(fg);
code=[code,blanks(L)'];
cs=cs+1;
end
code_out=[];
for i=1:length(pic) %对初始图像进行编码
wz=find(