matlab2013b
方块编码也叫方块截断编码(block truncation coding,简称BTC)是静态图像编码中的一种, 其原理是把一幅图像分为大小为N×N的子像块(简称子块),由于小块内各相邻像素间具有亮度互相近似的相关性,于是只选用两个适当的亮度来近似代表小块内各像素原来的亮度,然后指明子块内的各像素分别属于哪个亮度。
静态图像编码是研究怎样利用图像固有的统计特性(信源特性),以及视觉的生理学、心理学特性(信宿特性),或者记录设备(如普通照相底片)和显示设备(如电视、监示器)等的特性,经过压缩编码从原始图像信息中提取出有效信息,尽量去掉那些无用的冗余信息,以便高效率地进行图像的数字传输或数字存储;而在复原时仍能获得与原始图像相差不多的复原图像,即保持图像信息中的有效信息。
登录后复制
function code(tp,I)fd=fopen('btc.bin','w+');[m,n]=size(I);fwrite(fd,m,'long');fwrite(fd,n,'long');I=double(I);A=zeros(tp);B=zeros(tp);c(1)=0;for i=1:tp:m for j=1:tp:n A=I(i:i+tp-1,j:j+tp-1); sum_col_A=sum(A,1); %子块按列求和 sum_A=sum(sum_col_A,2); %子块矩阵的和 mean_A=mean2(A); %子块的均值 for L=1:tp for k=1:tp if A(L,k)>=mean_A B(L,k)=1; else B(L,k)=0; end end end nozeronum=nnz(B); %映像矩阵中非0元素的个数 AmulB=times(A,B); sum_AmulB=sum(sum(AmulB(:,:),1),2); if nozeronum==0 c(1)=0; c(2)=0; else c(1)=round(sum_AmulB/nozeronum); %子块矩阵中的重建电平 if nozeronum==tp*tp c(2)=c(1); else c(2)=round((sum_A-sum_AmulB)/(tp*tp-nozeronum)); end end fwrite(fd,B,'ubit1'); fwrite(fd,c,'ubit8'); endendfclose(fd);fd=fopen('btc.bin','r');m=fread(fd,1,'long');n=fread(fd,1,'long');A=zeros(m,n);for i=1:tp:m for j=1:tp:n B=fread(fd,[tp,tp],'ubit1'); c(1)=fread(fd,1,'ubit8'); c(2)=fread(fd,1,'ubit8'); for k=1:tp for L=1:tp if B(k,L)==0 A(i+(k-1),j+(L-1))=c(2); else A(i+(k-1),j+(L-1))=c(1); end end end endendA=uint8(A);imshow(A);title('用方块编码后图象')imwrite(A,'lenabianma.bmp');fclose(fd); 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.
2*2
4*4
8*8
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删