数据压缩实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二图像预测编码
一、实验题目:
图像预测编码:
二、实验目的:
实现图像预测编码和解码.
三、实验内容:
给定一幅图片,对其进行预测编码,获得预测图像,绝对残差图像, 再利用预测图像和残差图像进行原图像重建并计算原图像和重建图像误差.
四、预备知识:
预测方法,图像处理概论。
五、实验原理:
根据图像中任意像素与周围邻域像素之间存在紧密关系,利用周围邻域四个像素来进行该点像素值预测,然后传输图像像素值与其预测值的差值信号,使传输的码率降低,达到压缩的目的。
六、实验步骤:
(1)选取一幅预测编码图片;
(2)读取图片内容像素值并存储于矩阵;
(3)对图像像素进行预测编码;
(4)输出预测图像和残差图像;
(5)根据预测图像和残差图像重建图像;
(6)计算原预测编码图像和重建图像误差.
七、思考题目:
如何采用预测编码算法实现彩色图像编码和解码.
八、实验程序代码:
预测编码程序1:
编码程序:
i1=imread('lena.jpg');
if isrgb(i1)
i1=rgb2gray(i1);
end
i1=imcrop(i1,[1 1 256 256]);
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)/4+i(k-1,l-1)/8+i(k-1,l+1)/8);
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(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(i1(r,t)-j(r,t));
end
end
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('解码重建后图像的误差');
九、实验结果:
图2.1 Lena图像预测编码实验结果
预测编码程序2:
x=imread('e:\imagebase\cameraman.jpg');
figure(1)
subplot(2,3,1);
imshow(x);
title('原始图像');
subplot(2,3,2);
imhist(x);
title('原始图像直方图');
subplot(2,3,3);
x=double(x);
x1=yucebianma(x);
imshow(mat2gray(x1));
title('预测误差图像');
subplot(2,3,4);
imhist(mat2gray(x1));
title('预测误差直方图');
x2=yucejiema(x1);
subplot(2,3,5);
imshow(mat2gray(x2));
title('解码图像');
e=double(x)-double(x2);
[m,n]=size(e);
erms=sqrt(sum(e(:).^2)/(m*n));
%预测编码函数;
%一维无损预测编码压缩图像x,f为预测系数,如果f默认,则f=1,即为前值预测
function y=yucebianma(x,f)
error(nargchk(1,2,nargin))
if nargin<2
f=1;
end
x=double(x);
[m,n]=size(x);
p=zeros(m,n);
xs=x;
zc=zeros(m,1);
if length(f)>1
for j=1:length(f)
xs=[zc xs(:,1:end-1)];
p=p+f(j)*xs;
end