data=rgb2gray(imread('rice.tif'));
data=double(data)/255;
[m,n]=size(data);
figure(1);subplot(1,2,1);
imshow(data);title('original image');
subplot(1,2,2);imhist(data);title('histogram');
siz_word=4;
siz_book=256;
data1=zeros(m*n,1);
for i=1:m
for j=1:n
data1((i-1)*n+j)=data(1,j);
end
end
M1=floor(m*n/siz_word);
r=mod(m*n,siz_word);
if r>0
M1=M1+1;
end
data2=zeros(M1,siz_word);
l=1;
A=zeros(siz_word,1);
r=1;
for i=1:m*n
A(r)=data1(i);
if r==siz_word
data2(l,:)=A;
l=l+1;
r=1;
else
r=r+1;
end
end
code_book=zeros(siz_book,siz_word);
l=1;r=1;
A=zeros(siz_word,1);
for i=1:siz_book*siz_word
A(r)=data1(i);
if r==siz_word
code_book(l,:)=A;
l=l+1;
r=1;
else
r=r+1;
end
end
MIU=zeros(M1,siz_book);
t=1;
while t==1
for i=1:M1
B=zeros(siz_word,1);
B=data2(i,:);
A=zeros(siz_word,1);
A=code_book(1,:);
tep=0.0;
for l=1:siz_word
tep=tep+(A(l)-B(l))^2;
end
r=1;
for j=2:siz_book
A=code_book(j,:);
temp=sum((A-B).^2);
if temp<tep
r=j;
tep=temp;
end
end
MIU(i,r)=1.0;
end
t=0;
code_book1=zeros(siz_book,siz_word);
for j=1:siz_book
for l=1:siz_word
tep=0.0;
for i=1:M1
code_book1(j,l)=code_book1(j,1)+MIU(i,j)*data2(i,l);
tep=tep+MIU(i,j);
end
if tep>0
code_book1(j,l)=code_book1(j,l)/tep;
else
code_book1(j,l)=0.0;
end
end
end
tep=0.0;
for j=1:siz_book
for l=1:siz_word
tep=tep+(code_book1(j,l)-code_book(j,l))^2;
end
end
if tep/siz_book<0.000001
t=0;
end
code_book=code_book1;
end
%编码后图像恢复过程
data3=zeros(M1,siz_word);
for i=1:M1
for j=1:siz_book
if MIU(i,j)==1
t=j;
end
end
data3(i,:)=code_book(t,:);
end
data5=zeros(m,n);
for i=1:m
for j=1:n
tep=(i-1)*n+j;
i1=floor(tep/siz_word);
if i1==0
i1=1;
end
j1=mod(tep,siz_word);
if j1==0
j1=siz_word;
end
data5(i,j)=floor(data3(i1,j1)*255);
end
end
figure(2)
imshow(uint8(data5));
评论0