数字图像处理与图像通信

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

实验名称:图像的锐化处理
一、实验目的:
学习用锐化处理技术来加强图像的目标边界和图像细节。

对图像进行梯度算子、Roberts 算子、Sobel算子边缘检测处理和Laplace算子边缘增强处理,是图像的某些特征(如边缘、轮廓等)得以进一步的增强及突出。

二、实验内容:
(1) 编写梯度算子和Roberts算子滤波函数。

(2) 编写Sobel算子滤波函数。

(3) 编写拉普拉斯边缘增强滤波函数。

三、实验方法及编程:
function new buf=RobF ilter(o ldbuf,M,N);
% ************************************************************************ % 函数名称:
% RobFilter()
% 说明:
% ‘Robert梯度’滤波算法。

% ************************************************************************ for i=1:M-1
for j=1:N-1
newbuf(i,j)=abs(o ldbuf(i,j)-oldb uf(i+1,j+1))+a bs(oldb uf(i+1,j)-
oldbuf(i,j+1));
end
end
%-------------------------------------------------------------------------
function new buf=SobF ilter(o ldbuf,M,N);
% ************************************************************************ % 函数名称:
% SobFilter()
% 说明:
% ‘Sobel’滤波算法。

% ************************************************************************ for i=2:M-1
for j=2:N-1
sx=oldbuf(i+1,j-1)+2*old buf(i+1,j)+oldb uf(i+1,j+1)-
oldbuf(i-1,j-1)-2*oldbuf(i-1,j)-oldbuf(i-1,j+1);
sy=oldbuf(i-1,j+1)+2*old buf(i,j+1)+old buf(i+1,j+1)-
oldbuf(i-1,j-1)-2*oldbuf(i,j-1)-oldbuf(i+1,j-1);
newbuf(i,j)=abs(s x)+abs(sy);
end
end
%-------------------------------------------------------------------------function new buf=LapF ilter(o ldbuf,M,N);
% ************************************************************************ % 函数名称:
% LapFilter()
% 说明:
% ‘Laplace’滤波算法。

% ************************************************************************ for i=2:M-1
for j=2:N-1
newbuf(i,j)=5*oldbu f(i,j)-oldbuf(i-1,j)-o ldbuf(i+1,j)-
oldbuf(i,j-1)-old buf(i,j+1);
end
end
%-------------------------------------------------------------------------四、实验结果及分析:(原图像和处理后的图像比较及分析)
通过实验图像所示,Robert梯度算子和Sobel算子都能显示出图像的轮廓,Sobel算子比Robert梯度算子所显示的轮廓更加粗犷,因为Sobel算子中用了S x、S y两个分量,分别是相隔两行和两列的差分。

Laplace算子是一种重要的边缘检测算子,该算子的增强程度与其边缘的方向无关,从而满足不同走向的边缘锐化的要求,用以将图像的边缘、细节增强,通过结果结果可以看出,图像的细节明显比原来更加突出。

日期:2011 年9 月13 日
==============================================================================
实验名称:图像信号的数字化
一、实验目的:
通过本实验了解图像的数字化参数取样频率(像素个数)、量化级数与图像质量的关系。

二、实验内容:
(1) 编写并调试图像数字化程序。

要求参数k,N可调。

其中,k为亚抽样比例,N为量化比特数。

(2) 可选任意图像进行处理,在显示器上观察各种数字化参数组合下的图像效果。

三、实验方法及编程:
function n ewbuf=S ample_Q uant(old buf,k,n)%
% ************************************************************************ % 函数名称:
% Sample_Quant() 图像数字化算法函数
%参数:
% oldbuf 原图像数组
% M N 原图像尺寸
% k 取样间隔
% n 量化比特值
% newbuf 存放处理后的图像二维数组
% 说明:
% 在水平和垂直方向作1:k取样,得到新的取样图像,再根据量化公式对每个像
% 素分别取n 比特量化,为了观察显示的需要,再按k:1的比例将再取样的图像还原% 为原图像尺寸。

最后放入新的图像数组中并返回该数组。

% ************************************************************************ [M,N]=size(oldbuf);
oldbuf=dou ble(old buf);
x=1;y=1;
while x<M
while y<N
new=(rou nd(oldb uf(x,y)/(2^(8-n))))*(2^(8-n));
for i=0:k-1
for j=0:k-1
if(x+i<M)&(y+j<N)
newbuf(x+i,y+j)=uint8(n ew);
end
end
end
y=y+k;
end
if y>=N
y=1;
end
x=x+k;
end
%-------------------------------------------------------------------------四、实验结果及分析:(原图像和处理后的图像比较及分析)
图像的数字化主要包括两种处理:采样和量化。

图像实验的图像是已量化成8bit,即0-255共256个灰度级的灰度图像。

通过实验图像可以看出,亚抽样比例k和量化比特数N 对都会对图像产生影响,k的改变从视觉上影响到方块效应的程度,N的改变影响着灰度级
的大小,N越小,就会使图像相近的灰度变得区分不出来,使细节处变得更加模糊,影响图像的观赏度。

日期:2011 年9 月20 日
==============================================================================
实验名称:图像灰度级修正
一、实验目的:
掌握常用的图像灰度级修正方法,即图像的灰度变换法和直方图均衡化法,加深对灰度直方图的理解。

二、实验内容:
(1) 编程实现图像的灰度变换。

改变图像输入、输出映射的灰度参数范围(拉伸和反比),观看图像处理结果。

(2) 修改可选参数gamma值,使其大于1,等于1和小于1,观看图像处理结果。

(3) 对图像直方图均衡化处理,显示均衡前后的直方图和图像。

实验图像选用hor256或vax256。

三、实验方法及编程:
function n ewbuf=G rayTran sf(oldbu f)
% ************************************************************************ % 函数名称:
% GrayTransf() 灰度变换函数
% 参数:
% oldbuf 原图像数组
% newbuf 存放处理后的图像二维数组
% 说明:
% 可以任意指定输入图像需要映射的灰度范围和指定输出图像所在的灰度范围。

还可接% 受一个可选的参数来指定修正因素r。

% ************************************************************************ [M,N]=size(oldbuf);
newbuf=ima djust(o ldbuf,s tretchli m(oldbu f),[]);
newbuf=uin t8(newb uf);
%-------------------------------------------------------------------------
function n ewbuf=G rayGamm a(oldbuf,r)
% ************************************************************************ % 函数名称:
% GrayGamma() gamma校正函数
% 参数:
% r gamma校正值
% oldbuf 原图像数组
% newbuf 存放处理后的图像二维数组
% 说明:
% 图像获取、打印和显示的各种装置是根据幂次规律进行响应的。

习惯上,幂次等式中
% 的指数是指伽马值.用于修正幂次响应现象的过程称作伽马校正。

% imadjust()函数还可接受一个可选的参数来指定修正因素r(也称gamma校正值)。

% 根据r值的不同,输入图像与输出图像间的映射可能是非线性的。

% ************************************************************************ newbuf=ima djust(o ldbuf,s tretchli m(oldbu f),[],r);
newbuf=uin t8(newb uf);
%-------------------------------------------------------------------------
function n ewbuf=G rayEqua lize(old buf)
% ************************************************************************ % 函数名称:
% GrayEqualize() 直方图均衡算法函数
% 参数:
% oldbuf 原图像数组
% newbuf 存放处理后的图像二维数组
% 说明:
% 对oldbuf的原图像数据进行灰度统计,然后计算每一个K所对应的S值,求出对照% 表S(k),最后以原图像灰度值K作为地址,对每一象素进行变换,得出均衡化以后的% 新图像存放在newbuf中。

% ************************************************************************ [M,N]=size(oldbuf);
NN=M*N;sk=0;
[COUNTS,X]=imhist(oldbuf,256);
for i=1:M
for j=1:N
kk=doubl e(oldbu f(i,j));
for k=1:kk
sk=sk+COUNT S(k);
end
sk=sk/NN*256;
newbuf(i,j)=sk;
end
end
newbuf=uin t8(newb uf);
%-------------------------------------------------------------------------四、实验结果及分析:(原图像和处理后的图像比较及分析)
通过实验图像对比发现,通过无gamm a 值的灰度值变换后,将分布于低值部分的直方图拉伸至所
有的灰度值,变换后的图像比原图显得明亮、清晰。

当gamma 值大于1时,将直方图进行拉
伸并有向灰度为0的一端压缩的趋势,此时图像偏暗当gamma 值小于1时,其趋势与gamma
值大于1相反,此时图像显得发白。

日 期: 2011 年9 月 27 日
==============================================================================
实验名称:图像的平滑滤波
一、实验目的:
图像平滑主要目的是减少噪声对图像的影响。

噪声有很多种类,不同的噪声有不同的抑制措施。

本实验要求用平滑线性滤波和中值滤波两种最典型、最常用的处理算法进行程序设计,学习如何对已被污染的图像进行“净化”。

通过平滑处理,对结果图像加以比较,得出自己的实验结论。

二、实验内容:
(1) 编写并调试窗口尺寸为m×n的平滑滤波函数。

(2) 编写并调试窗口尺寸为m×n的中值滤波函数。

三、实验方法及编程:
function new buf=Aver ageFilt er(oldb uf,M,N,m)
% ************************************************************************ %函数名称:
% AverageFilte r() 均值滤波算法函数
% 参数:
% oldbuf 噪声图像数组
% M N 噪声图像尺寸
% m 矩形平滑窗口尺寸
% newbuf 存放处理后的图像二维数组
% 说明:
% 用m*m的滤波器模板对oldbuf数组的噪声图像进行线性滤波,即用窗口内m*m个像% 素的平均灰度值来代替图像每个像素点的值,最后结果存放在newbuf数组中。

% ************************************************************************ oldbuf=dou ble(old buf);
newbuf=zer os(M,N);
for i=(m+1)/2:M-(m+1)/2
for j=(m+1)/2:N-(m+1)/2
for x=-(m-1)/2:(m-1)/2;
for y=-(m-1)/2:(m-1)/2;
newbuf(i,j)=n ewbuf(i,j)+oldb uf(i+x,j+y)/(m*m);
end
end
end
end
%-------------------------------------------------------------------------
function n ewbuf=M edianFi lter(old buf,M,N,m)
% ************************************************************************ % 函数名称:
% MedianFilter() 中值滤波算法函数
% 参数:
% oldbuf 原图像数组
% M N 原图像尺度
% m 滑动窗口尺寸
% newbuf 存放处理后的图像数组
% 说明:
% 把oldbuf数组m*m窗口内的象素值赋给winbuf,然后调用排队函数SeekMid( ),
% 把该函数在窗口中找到的中值放到newbuf数组中。

% ************************************************************************ for i=(m+1)/2:M-(m+1)/2
for j=(m+1)/2:N-(m+1)/2
k=1;
for x=-(m-1)/2:(m-1)/2;
for y=-(m-1)/2:(m-1)/2;
winbuf(k)=old buf(i+x,j+y);
k=k+1;
end
end
newbuf(i,j)=See kMid(win buf,m);
end
end
%-------------------------------------------------------------------------
function m id=Seek Mid(win buf,m)
% ************************************************************************ % 函数名称:
% SeekMid() 排序函数
% 参数:
% winbuf 滑动窗口
% m 滑动窗口尺寸
% mid 存放排序后中间位置的像素值
% 说明:
% 将winbuf窗口中的m*m个像素进行排序,将排序队列中间的像素值赋给变量mid。

% ************************************************************************ winsize=le ngth(wi nbuf); %取窗口尺寸
for i=1:wi nsize %编写排序函数
for j=1:winsi ze-i
if(winbu f(i)>wi nbuf(j+i))
t=winbuf(i);
winbuf(i)=w inbuf(j+i);
winbuf(j+i)=t;
end
end
end
mid=winbuf(ceil(m*m/2)); % c eil函数朝正无穷大方向取整,总能取到中间位置
%-------------------------------------------------------------------------
四、实验结果及分析:(原图像和处理后的图像比较及分析)
通过实验图像可以看出,对于处理椒盐噪声,可以采用均值滤波和中值滤波的方法,但是比较下来,中值滤波的结果比均值滤波的图像更加清晰,均值滤波处理后的图像在误点处仍留下较为明显的痕迹,而中值滤波的滤波效果就很明显,毫无痕迹。

图像的复原效果随着窗口的变大而变得模糊。

日期:2011 年10 月11 日
==============================================================================
实验名称:图像方块编码(BTC)
一、实验目的:
通过编程实验,掌握方块编码的基本方法及压缩性能。

二、实验内容:
编程实现子块为n×n的方块编码基本方法,分别取n=2,4,8方块尺寸进行方块编码实验,计算编码后的均方误差和压缩比。

三、实验方法及编程:
function o utbuf=B tcBlock(inbuf,n)
% ************************************************************************ % 函数名称:
% btcblock() 方块编码算法函数
% 参数:
% inbuf 方块数组
% n 方块尺寸
% outbuf 存放处理后的方块图像
% 说明:
% 把原图像分成n*n子块,对每个方块的图像数据分别计算xt,a0,a1值,再用分辨率% 分量(a0,a1)替代方块原来的数据最后放入方块图像数组中并返回该数组。

% ************************************************************************ temp=0; te mp0=0; temp1=0; q=0; m=n*n;
inbuf=doub le(inbu f);
for i=1:n
for j=1:n
temp=tem p+inbuf(i,j);
end
end
xt=temp/m;
for i=1:n
for j=1:n
if (inbu f(i,j)>=xt)
q=q+1;
temp1=temp1+inbuf(i,j);
else
temp0=temp0+inbuf(i,j);
end
end
end
if q~=m
a0=round(temp0/(m-q));
end
if q~=0
a1=round(temp1/q);
end
for i=1:n
for j=1:n
if (inbu f(i,j)<xt)
outbuf(i,j)=a0;
else
outbuf(i,j)=a1;
end
end
end
%-------------------------------------------------------------------------四、实验结果及分析:(原图像和处理后的图像比较及分析)
方块编码将衣服图像分为m=n*n的子图像块,然后对子块进行处理,通过方块编码能减少图像传输的数据量。

由实验图像可以看出,窗口大小较小时,编码图像接近于原图像。

当窗口较大时,则能看出有较明显的方块效应。

窗口愈大时,虽然图像变得模糊,但其对码率的压缩效果也愈明显。

综合考虑,在实际BTC应用时,采用2*2或4*4的子图像块。

日期:2011 年10 月18 日
==============================================================================
实验名称:图像线性预测编码(DPCM)
一、实验目的:
通过编程设计,掌握帧内DPCM 的编解码方法(预测、量化)及其压缩性能。

二、实验内容:
(1) 编制一维前值预测DPCM 编解码程序,预测系数取(1,0,0,0)。

(2) 编制二维前值预测DPCM 编解码程序,预测系数取(1/2,1/4,0,1/4)。

(3) 重建图像f ′(i ,j )与原图像f (i ,j )的误差图像,用绝对值表示如下。

,(,)(,)i j d n f i j f i j '=-
式中的n 为放大因子,以便观察误差的分布情况。

本实验采用15个量化分层的主观量化器,其量化电平分别取(0,±5,±7,±10,±17,±28,
±39,±52,±67)。

实验图像为cla0或cla1。

三、实验方法及编程:
function n ewbuf=D pcm_cod e(oldbuf ,M,N,di m);
% ************************************************************************
% 函数名称:
% Dpcm_Code() “线性预测编解码器”算法函数
% 参数:
% oldbuf 原图像数组
% M,N 原图像尺度
% dim 选择预测编码维数
% newbuf 存放处理后的图像二维数组
% 说明:
% 根据线性预测编解码算法调用各子模块,对原图像进行1D/2D 线性预测编码和解码,
% 解码后的恢复图像放在newbuf 数组中。

% ************************************************************************
global new buf; %定义全局变量
for i=1:M
for j=1:N
pre_val=Predict _Value(i ,j,N,di m);
err=oldb uf(i,j)-pre_val ;
quan_err =Quant_Value(er r);
res_val=Restor_Value(qu an_err,pre_val );
newbuf(i ,j)=Cli p_Value(res_val );
end
end
%-------------------------------------------------------------------------
function n ewbuf=E rror_Co de(M,N,d im);
% ************************************************************************
% 函数名称:
% Error_Code() “传输误码解码器”算法函数
% 参数:
% M,N 原图像尺度
% dim 选择预测编码维数
% newbuf 存放处理后的图像二维数组
% 说明:
% 模拟信道传输过程中产生的误码,观察传输误码经解码后对恢复图像的影响,解码% 后的恢复图像放在newbuf数组中。

% ************************************************************************ global new buf;
wrong=zero s(M,N);
wrong(100,100)=120;
for i=1:M
for j=1:N
pre_val=Predict_Value(i,j,N,di m);
err=wron g(i,j);
quan_err=Quant_Value(er r);
res_val=Restor_Value(qu an_err,pre_val);
newbuf(i,j)=Cli p_Value(res_val);
end
end
%-------------------------------------------------------------------------
function Pva lue=Pred ict_Val ue(row,col,N,d im)
% ************************************************************************ % {This fu nction is used to give predic ted val ue as l inear p redicto r.
% The pred iction formula is as f ollows:
% 1_D DPCM: ^x[i,j]=128 if j=1
% x'[i,j-1] if j>1
% 2_D DPCM: ^x[i,j]=128 if i=1,j=1
% x'[ i,j-1] if i=1,j>1
% x'[i-1,j ] if i>1,j=1 o r N
% 1/2x'[ i,j-1] if i>1,j>1
% 1/8x'[i-1,j-1] (Pir sch's p redicto r)
% 1/4x'[i-1,j ]
% 1/8x'[i-1,j+1]
% Dim : Di mension of pre diction
% Row : ve rtical coordin ate of c urrent pixel t o be pr edicted
% COL : ho rizonta l coord inate of curren t pixel to be predict ed}
% ************************************************************************ global new buf;
switch dim
case 1
if col==1
Pvalue=128;
Pvalue=newb uf(row,col-1);
end
case 2
if (row==1&&col==1)
Pvalue=128;
end
if (row==1&&col>1)
Pvalue=newb uf(row,col-1);
end
if (row>1&&col==1)||(ro w>1&&co l==N)
Pvalue=newb uf(row-1,col);
end
if (row>1&&col>1&&col<N)
Pvalue=(1/2)*newbu f(row,c ol-1)+(1/4)*ne wbuf(row-1,col-1)+
(1/4)*newbu f(row-1,col+1);
end
end
%-------------------------------------------------------------------------
function Q value=Q uant_Va lue(err);
% ************************************************************************ % This functi on is u sed as linear q uantize r.The q uantize r has t otally
% 15 quantiz ation le vel :
% 0,±5,±10,±17,±28,±39,±52,±67
% ************************************************************************ if (abs(er r)<=2.5) lev=0;
else
if(abs(err)<=7.5) le v=5;
else
if(abs(err)<=13.5) lev=10;
else
if(abs(err)<=22.5) lev=17;
else
if(abs(err)<=33.5) lev=28;
else
if(abs(err)<=45.5) lev=39;
else
if(abs(err)<=59.5) lev=52;
else lev=67;
end
end
end
end
end
end
Qvalue=lev;
if (err~=0)
Qvalue=lev*(e rr/abs(err));
end
%-------------------------------------------------------------------------
function Rva lue=Rest or_Valu e(quan_err,pre_val)
% ************************************************************************ % This fun ction i s used to get r estored value of DPCM
% x=^x+Quant_Error
% ************************************************************************ Rvalue=qua n_err+p re_val;
%-------------------------------------------------------------------------
function C value=C lip_Val ue(res_v al)
% ************************************************************************ % This funct ion is u sed to clip to restor ed valu e to 8_bit val ue
% 0 if x<0
% x'=255 if x>255
% x otherwis e
% ************************************************************************ if (res_va l<0) Cvalu e=0;
else
if(res_val>255) Cval ue=255;
else
Cvalue=res_val;
end
end
%-------------------------------------------------------------------------四、实验结果及分析:(原图像和处理后的图像比较及分析)
由实验图像看出,一维和二维预测编码图像接近于原图像。

从误码图像中可以看出,当
在某一位置出现误码后,一维预测编码会将误差延续到行末端,而二维预测编码其将误码延
续至其后的斜后方,并且随着距离的增加迅速消失,总体而言,影响要小一些。

日 期: 2011 年10 月 25 日
==============================================================================
实验名称:JPEG压缩编码
一、实验目的:
(1) 掌握n×n子块的DCT图像变换及频谱特点。

(2) 熟悉JPEG基本系统的图像编解码方法。

二、实验内容:
(1) 编程实现n×n子块DCT变换的图像频谱显示,8×8子块DCT变换系数按“Z”(Zig-Zag)扫描图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。

(2) 编程实现JPEG压缩编码,进行8×8子块的DCT图像变换,JPEG量化矩阵的量化与
反量化,8×8子块DCT的图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直
方图。

三、实验方法及编程:
function n ewbuf=D ctBlock(oldbuf,Block)
% ************************************************************************ % 函数名称:
% DctBlock() DCT n*n块频谱函数
%
% 参数:
% oldbuf 原图像数组
% Block DCT n*n当前块选择值
% newbuf 存放处理后的图像二维数组
%
% 说明:
% 根据Block块的当前选择值,计算原图像的n*n块DCT变换,并转换为可视频谱图,% 有利于频谱的观察。

% ************************************************************************ oldbuf=dou ble(old buf);
H=dctmtx(B lock);
newbuf=blk proc(ol dbuf,[B lock Blo ck],'P1*x*P2',H,H');
newbuf=log(abs(ne wbuf));
subplot(2,2,2);
imshow(new buf,[]);
%-------------------------------------------------------------------------
function n ewbuf=D ctCode(oldbuf,D CTch)
% ************************************************************************ % 函数名称:
% DctCode() DCT 8*8 块系数“Z”字扫描图像压缩函数
%
% 参数:
% oldbuf 原图像数组
% DCTch DCT 8*8 块“Z”扫描当前系数选择值
% newbuf 存放处理后的图像二维数组
%
% 说明:
% 计算图像的8×8子块DCT变换,按“Z”字扫描顺序,根据DCTch参数,只保留64个% DCT系数中的前DCTch个系数,对修改后的DCT系数用逆DCT变换重建图像,得到DCT % 变换的压缩图像。

计算重建图像的均方根误差RMSE;显示误差图像和误差直方图。

% ************************************************************************ zigzag=[1 2 6 7 15 16 28 29 %设置Z扫描顺序
3 5 8 1
4 17 27 30 43
4 9 13 18 26 31 42 44
10 12 19 25 32 41 45 54
11 20 24 33 40 46 53 55
21 23 34 39 47 52 56 61
22 35 38 48 51 57 60 62
36 37 49 50 58 59 63 64];
tbuf=ones(8); %定义8*8全1数组
maskbuf=tb uf .* z igzag<=DCTch; %根据当前DCTch值得到“Z”字扫描的二值掩模oldbuf=dou ble(old buf);
H=dctmtx(8);
dctno=blkp roc(old buf,[8 8],'P1*x*P2',H,H');
newbuf=blk proc(dc tno,[8 8],'P1*(x.*P2)*P3',H',maskbuf,H);
subplot(2,2,2);
imshow(new buf,[]);
eimag(oldb uf,newb uf);
%-------------------------------------------------------------------------
function n ewbuf=J pegCode(oldbuf)
% ************************************************************************
% 函数名称:
% JpegCode() JPEG近似基准编码
%
% 参数:
% oldbuf 原图像数组
% newbuf 存放处理后的图像二维数组
%
% 说明:
% 实现JPEG压缩编码,进行 8×8 子块DCT变换、JPEG量化矩阵的量化与反量化,8×8 %子块DCT的图像重建;计算重建图像的均方根误差RMSE;显示误差图像和误差直方图。

% ************************************************************************
z = [16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99] ; %标准亮度量化表
oldbuf=dou ble(old buf); %原图像数据转换为双精度
H=dctmtx(8);
dctno=blkp roc(old buf,[8 8],'P1*x*P2',H,H');
jpegno=blk proc(dc tno,[8 8],'roun d(x./P1)',z);
jpegno1=bl kproc(j pegno,[8 8],'x.*P1',z);
newbuf=blk proc(jp egno1,[8 8],'P1*x*P2',H',H);
subplot(2,2,2);
imshow(new buf,[]);
eimag(oldb uf,newb uf);
%-------------------------------------------------------------------------
function e imag(ol dbuf,ne wbuf)
% ************************************************************************ % 函数名称:
% eimag()
% 说明:
% 计算重建图像的均方根误差RMSE;显示误差图像和误差直方图。

% ************************************************************************ e=double(o ldbuf)-newbuf; %计算原图像与压缩图像之差[m,n]=size(e);RMS E=sqrt(sum(e(:).^2) / (m*n)); %计算均方根误差
if RMSE %如果有误差,即rmse不为0 emax=max(abs(e(:))); %找图像差最大值
[h,x]=hist(e(:),emax); %用于生成直方图数据
if length(h) >= 1 %如果有数据
s=max(h(:));
subplot(2,2,3),bar(x,h/s,'k'); %显示图像差值直方图
RMSE=num2str(RMSE); %把数值转换为字符串
strRMSE=strca t('图像差值直方图均方根误差RMSE= ',RMSE); %把多个串连接成长串 title(strRMSE);
e=mat2gray(e,[-emax,emax]); %显示差值图像
subplot(2,2,4),imsho w(e);
title('原图像与压缩图像的差值图像'); %显示结果图像标题
end
end
%-------------------------------------------------------------------------四、实验结果及分析:(原图像和处理后的图像比较及分析)
JPEG压缩编码的主要步骤有:1.通过前向离散余弦变换减少图像数据相关性2.利用人眼的视觉特性队DCT系数进行量化3.使用查分脉冲编码调制对直流系数进行编码4.队交流系数进行Z形扫描,使用形成长度编码队交流系数进行编码5.熵编码器对上述描述符进行熵编码。

我们已经知道对于DCT变换,变换后的高频部分存在于图像的左上角,代表着图像的轮廓,而低频部分代表图像的细节部分。

所以经过变换的图像左上角显得较为明亮。

对DCT系数做反DCT变换则可复原出原图。

若反变换前对DCT系数进行取舍则可以降低码率,但是,会对图像质量带来一定的影响。

如结果所示,当保留的系数很少时,恢复的图像有着严重的方块效应,对观看造成很大的阻碍。

而当保留的系数较多时,恢复的图像和原图十分接近,对于观看基本没有影响。

实验课程小结和思考(包括感想、体会与启示)这学期的图像处理与图像通信实验是对上个学期学习的理论知识的巩固与加强,让我们更加的了解了图像通信与处理的原理以及方法等。

Matlab的使用是实验的最重要部分,以前一直不是很熟悉,所以导致实验做起来有所困难,但是经过与同学的合作以及向别人请教加上老师的帮助做出了大部分的实验。

通过实验,我们对于数字图像处理里的图像信号数字化,图像灰度级修正,平滑滤波,图像锐化处理等都由了更为深刻的了解,再接下来的日子里,我还要更加认真的复习巩固图像通信与图像处理的知识,为以后学习这类知识打好基础。

此次实验也看出了以前所学的理论知识在没有通过实践的情况下还是远远不够的,在以
后的日子里,我也要更加注重理论与实践的结合,不能一味的读书而不去动手实践。

相关文档
最新文档