预测图像编码和解码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:

7, 对图象p04-01实施预测编码和解码,并将原图象与解码图象进行方差计算,考察解码后图象的视觉效果。预测模型为:

原理:

预测就是根据过去时刻的样本序列,运用一种模型,预测当前的样本值。预测编码是易于实现的,如差分脉冲编码调制(DPCM )方法。这种方法中,对每一个像素灰度值,都用先前扫描过的像素灰度值去减,求出它们的差值,此差值称为预测误差,预测误差被量化和编码与传送。接收端再将此差值与预测值相加,重建原始图像像素信号。由于量化和传送的仅是误差信号,根据一般扫描图像信号在空间及时间邻域内各像素的相关性,预测误差分布更加集中,即熵值比原来图像小,可用较少的单位像素比特率进行编码,使得图像数据得以压缩。DPCM 系统的基本系统框图如下图所示。

在该系统中,N x 为N t 时刻的亮度取样值。预测器根据N t 时刻之前的样本1x ,

2x ,……,1-N x 对N x 作预测,得到预测值'N x 。N x 与'N x 之间的误差为:

'N N N x x e -=

量化器对N e 进行量化得到'N e 。编码器对'N e 进行编码发送。接收端解码时的预测过程与发送端相同,所用预测器亦相同。接收端恢复的输出信号''N x 是N x 的近似值,两者的误差是 '

'''')(N N N N N N N N e e x x e x x x -=-=+-=∆

当输入图像信号是模拟信号时,“量化”过程中的信息损失是不可避免的。当N x ∆足够小时,输入信号N x 和DPCM 系统的输出信号几乎一致。

其它预测方法还有以下几种:

(1)前值预测:用),(y x f 同一行中临近的前一像素预测,即)1,(),(^-=y x f y x f

(2)一维预测:用同一行中前面若干像素预测。

(3)二维预测:用几行内像素预测。

(4)三维预测:利用相邻两帧图像信号的相关性预测。 )

,1(5.0)1,(5.0),(y x f y x f y x f -+-

=

程序为(一):

clc;

I=imread('lena512.bmp');

I2=I;

I=double(I);

fid = fopen( 'mydata.dat' ,'w');

[m,n]=size(I) ;

J=ones(m,n);

J(1:m,1)=I(1:m,1);

J(1,1:n)=I(1,1:n);

J(1:m,n)=I(1:m,n);

J(m,1:n)=I(m,1:n);

for k=2:m-1

for L=2:n-1

J(k,L)=I(k,L)-(I(k,L-1)/2+I(k-1,L)/2);

end

end

J=round(J) ;

cont=fwrite(fid,J,'int8');

cc=fclose(fid);

fid=fopen('mydata.dat','r');

I1=fread(fid,cont,'int8');

tt=1;

for L=1:n

for k=1:m

I(k,L)=I1(tt);

tt=tt+1;

end

end

I=double(I);

J=ones(m,n);

J(1:m,1)=I(1:m,1);

J(1,1:n)=I(1,1:n);

J(1:m,n)=I(1:m,n);

J(m,1:n)=I(m,1:n);

for k=2:m-1

for L=2:n-1

J(k,L)=I(k,L)+((J(k,L-1))/2+(J(k-1,L))/2); end

end

cc=fclose(fid);

J=uint8(J);

subplot(1,2,1),imshow(I2);title('原图');

subplot(1,2,2),imshow(J);title('解码图像');

for k=1:m

for l=1:n

A(k,l)=J(k,l)-I2(k,l);

end

end

for k=1:m

for l=1:n

A(k,l)=A(k,l)*A(k,l);

end

end

b=sum(A(:));

s=b/(m*n) %两幅图的方差运行结果为:

程序为(二):

clc;

i1=imread('lena512.bmp'); i=double(i1);

[m,n]=size(i);

p=zeros(m,n);

y=zeros(m,n);

y(1:m,1)=i(1:m,1);

p(1:m,1)=i(1:m,1);

y(1,1:n)=i(1,1:n);

p(1,1:n)=i(1,1:n);

y(1:m,n)=i(1:m,n);

p(1:m,n)=i(1:m,n);

p(m,1:n)=i(m,1:n);

y(m,1:n)=i(m,1:n);

for k=2:m-1;

for l=2:n-1;

y(k,l)=(i(k,l-1)/2+i(k-1,l)/2);

p(k,l)=round(i(k,l)-y(k,l));

end

end

p=round(p);

subplot(3,2,1),imshow(i1);title('原灰度图像');

subplot(3,2,2),imshow(uint8(y),[0 256]);title('利用模型预测后的图像'); subplot(3,2,3),imshow(abs(p),[0 1]);title('编码的绝对残差图像');

j=zeros(m,n);

j(1:m,1)=y(1:m,1);

j(1,1:n)=y(1,1:n);

j(1:m,n)=y(1:m,n);

j(m,1:n)=y(m,1:n);

for k=2:m-1;

for l=2:n-1;

j(k,l)=p(k,l)+y(k,l);

end

end

for r=1:m

for t=1:n

d(r,t)=round(i(r,t)-j(r,t));

end

end

a=zeros(m,n);

for l=1:m;

for h=1:n;

a(l,h)=(j(l,h)-i(l,h))^2;

end

end

b=sum(a(:));

c=b/(m*n) ;

subplot(3,2,4),imshow(abs(p),[0 1]);title('解码用的残差图像');

subplot(3,2,5),imshow(j,[0 256]);title('使用残差和线性预测重建后的图像'); subplot(3,2,6),imshow(abs(d),[0 1]);title('解码重建后图像与原图像的误差');

相关文档
最新文档