方块编码基于matlab的图像方块编码仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方块编码基于matlab的图像方块编码仿真相关的知识,希望对你有一定的参考价值。
1.软件版本
matlab2013b
2.系统概述
方块编码也叫方块截断编码(block truncation coding,简称BTC)是静态图像编码中的一种, 其原理是把一幅图像分为大小为N×N的子像块(简称子块),由于小块内各相邻像素间具有亮度互相近似的相关性,于是只选用两个适当的亮度来近似代表小块内各像素原来的亮度,然后指明子块内的各像素分别属于哪个亮度。
静态图像编码是研究怎样利用图像固有的统计特性(信源特性),以及视觉的生理学、心理学特性(信宿特性),或者记录设备(如普通照相底片)和显示设备(如电视、监示器)等的特性,经过压缩编码从原始图像信息中提取出有效信息,尽量去掉那些无用的冗余信息,以便高效率地进行图像的数字传输或数字存储;而在复原时仍能获得与原始图像相差不多的复原图像,即保持图像信息中的有效信息。
3.部分源码
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');
end
end
fclose(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
end
end
A=uint8(A);
imshow(A);title('用方块编码后图象')
imwrite(A,'lenabianma.bmp');
fclose(fd);
4.仿真结果
2*2
4*4
8*8
A09-30
以上是关于方块编码基于matlab的图像方块编码仿真的主要内容,如果未能解决你的问题,请参考以下文章
基于ODBTC有序抖动块截断编码和DCT域数字水印嵌入提取算法matlab仿真
通信仿真基于matlab信道编码和交织含Matlab源码 1685期