实验6:方块编码(BTC)
1.实验目的: 掌握方块编码的基本方法及压缩性能。 2.实验内容:
1)编程实现子块为n×n的方块编码算法;
2)分别取n=4和8的方块尺寸进行实验,计算重建图像的PSNR和压缩比。
imagelena=imread('d:\\lena.bmp'); subplot(1,3,1); imshow(imagelena);
title('原图像') %显示原图像 n=4;
afterpro=blkproc(imagelena,[n,n],@btc); subplot(1,3,2)
imshow(uint8(afterpro)); %n=4编解码的图形 title('4*4') n=8;
afterpro=blkproc(imagelena,[n,n],@btc); subplot(1,3,3)
imshow(uint8(afterpro)); %n=8编解码的图形 title('8*8')
function y=btc(x) temp=double(x);
[m,n]=size(x); y=zeros(m,n);
xt=0; %定义总的像素值 a0=0; %定义小于阀值的总像素 a1=0; %定义大于阀值的总像素 p=0; %定义小于阀值的像素的个数 q=0; %定义大于阀值的像素的个数 if ~(m==n)
error('please select a block'); end for i=1:m for j=1:m
xt=xt+temp(i,j); end end
xtt=xt/(m*m); %得出阀值的平均值
for i=1:m for j=1:m
if temp(i,j) a0=a0+temp(i,j); %得出小于阀值的总像素 p=p+1; %小于阀值的像素个数 else a1=a1+temp(i,j); %得出大于阀值的总像素 q=q+1; %大于阀值的像素个数 end end end if ~p==0 a00=a0/p; end if ~q==0 a11=a1/q; end for i=1:m for j=1:m if temp(i,j) y(i,j)=a11; end end end %得出小于阀值的像素值 %得出大于阀值的像素值