数字图像处理实验答案2.docx
- 文档编号:9953545
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:24
- 大小:1.16MB
数字图像处理实验答案2.docx
《数字图像处理实验答案2.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验答案2.docx(24页珍藏版)》请在冰豆网上搜索。
数字图像处理实验答案2
实验名称:
图像的锐化处理
1、实验目的
学习用锐化处理技术来加强图像的目标边界和图像细节。
对图像进行梯度算子、Roberts算子、Sobel算子边缘检测处理和Laplace算子边缘增强处理,使图像的某些特征(如边缘、轮廓等)得以进一步的增强和突出。
2、实验内容
(1)编写梯度算子和Roberts算子滤波函数。
(2)编写Sobel算子滤波函数。
(3)编写Laplace算子边缘增强滤波函数。
(4)观察频域中用高低通滤波技术对图像进行的平滑和锐化处理。
3、实验方法及编程
用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要编写代码如下所示:
functionnewbuf=RobFilter(oldbuf,M,N);
%*************************************************************************
%函数名称:
%RobFilter()
%说明:
%'Robert梯度'滤波算法。
%*************************************************************************
fori=1:
M-1
forj=1:
N-1
newbuf(i,j)=abs(oldbuf(i,j)-oldbuf(i+1,j+1))+abs(oldbuf(i+1,j)-oldbuf(i,j+1));
end
end
%-------------------------------------------------------------------------
functionnewbuf=SobFilter(oldbuf,M,N);
%*************************************************************************
%函数名称:
%SobFilter()
%说明:
%'Sobel'滤波算法。
%*************************************************************************
fori=2:
M-1
forj=2:
N-1
sx=oldbuf(i+1,j-1)+2*oldbuf(i+1,j)+oldbuf(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*oldbuf(i,j+1)+oldbuf(i+1,j+1)-oldbuf(i-1,j-1)-2*oldbuf(i,j-1)-oldbuf(i+1,j-1);
newbuf(i,j)=abs(sx)+abs(sy);
end
end
%-------------------------------------------------------------------------
functionnewbuf=LapFilter(oldbuf,M,N);
%*************************************************************************
%函数名称:
%LapFilter()
%说明:
%'Laplace'滤波算法。
%************************************************************************
fori=2:
M-1
forj=2:
N-1
newbuf(i,j)=5*oldbuf(i,j)-oldbuf(i-1,j)-oldbuf(i+1,j)-oldbuf(i,j-1)-oldbuf(i,j+1);
end
end
4、实验结果及分析(原图像和处理后的图像比较及分析)
如上图所示即为实验结果。
如上图所示Robert算子能够检测出原图像的边缘,并且显示出来;Sobel在Robert算子的基础上增强了边缘,所以图像上结果会显示比原图像边缘要更加粗一些;Laplace算子与其他边缘增强方法不同,即其边缘的增强程度和边缘的方向无关,所以图像的细节明显比原来更加突出。
实验名称:
图像方块编码
3、实验目的
通过编程实验,掌握方块编码的基本方法及压缩性能。
4、实验内容
编程实现子块为nxn的方块编码基本算法,分别取n=2,4,8方块尺寸进行编解码实验,计算编码后的均方误差和压缩比。
实验图像可为任意图像。
5、实验方法及编程
用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,下面是主要的实验代码:
functionnewbuf=BtcCode(oldbuf,M,N,n)
%*************************************************************************
%函数名称:
%BtcCode()方块编码函数
%参数:
%oldbuf原图像数组
%MN原图像尺寸
%n方块尺寸
%说明:
%调用方块编码算法函数,输出编码后的图像
%*************************************************************************
newbuf=oldbuf;
rowblocks=M/n;
colblocks=N/n;
fori=1:
rowblocks-1
row=i*n;
forj=1:
colblocks-1
col=j*n;
fori=1:
n
forj=1:
n
inbuf(i,j)=oldbuf(i+row,j+col);
end
end
outbuf=BtcBlock(inbuf,n);
fori=1:
n
forj=1:
n
newbuf(i+row,j+col)=outbuf(i,j);
end
end
end
end
%-------------------------------------------------------------------------
functionoutbuf=BtcBlock(inbuf,n)
%*************************************************************************
%函数名称:
%btcblock()方块编码算法函数
%参数:
%inbuf方块数组
%n方块尺寸
%outbuf存放处理后的方块图像
%说明:
%把原图像分成n*n子块,对每个方块的图像数据分别计算xt,a0,a1值,再用分辨率分
%量(a0,a1)替代方块原来的数据最后放入方块图像数组中并返回该数组。
%*************************************************************************
temp=0;temp0=0;temp1=0;q=0;m=n*n;
inbuf=double(inbuf);
fori=1:
n
forj=1:
n
temp=temp+inbuf(i,j);
end
end
xt=temp/m;
fori=1:
n
forj=1:
n
if(inbuf(i,j)>=xt)
q=q+1;
temp1=temp1+inbuf(i,j);
else
temp0=temp0+inbuf(i,j);
end
end
end
ifq~=m
a0=round(temp0/(m-q));
end
ifq~=0
a1=round(temp1/q);
end
fori=1:
n
forj=1:
n
if(inbuf(i,j) outbuf(i,j)=a0; else outbuf(i,j)=a1; end end End 6、实验结果及分析(原图像和处理后的图像比较及分析) 如上图所示,即为实验结果。 实验将图像分为m=n*n的子图像块,然后进行方块编码;由实验结果可知,窗口愈大时,方块效应越明显,方块编码图像变得越模糊;窗口愈小时,编码图像接近于原图像。 实验名称: 图像线性预测编码 7、实验目的 通过编程设计,掌握帧内DPCM的编解码方法(预测,量化)及其压缩性能。 8、实验内容 (1)编制一维前值预测DPCM编解码程序,预测系数取(1,0,0,0)。 (2)编制二维前值预测DPCM编解码程序,预测系数取(1/2,1/4,0,1/4)。 (3)重建图像 与原图像 误差图像,用绝对误差表示如下: 式中的n为放大因子,以便观察误差的分布情况。 本实验采用15个量化分层的主观量化器,其量化电平分别取(0,+5,+10,+17,+28,+39,+52,+67)。 分别计算重建后图像的PSNR。 实验的图像为cla0或cla1。 3、实验方法及编程 用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要的代码如下所示: functionnewbuf=Dpcm_code(oldbuf,M,N,dim); %************************************************************************* %函数名称: %Dpcm_Code()“线性预测编解码器”算法函数 %参数: %oldbuf原图像数组 %M,N原图像尺度 %dim选择预测编码维数 %newbuf存放处理后的图像二维数组 %说明: %根据线性预测编解码算法调用各个子模块,对原图像进行1D/2D线性预测编码和解码, %解码后的恢复图像放在newbuf数组中。 %************************************************************************* globalnewbuf;%定义全局变量 fori=1: M forj=1: N pre_val=Predict_Value(i,j,N,dim); err=oldbuf(i,j)-pre_val; quan_err=Quant_Value(err); res_val=Restor_Value(quan_err,pre_val); newbuf(i,j)=Clip_Value(res_val); end end %------------------------------------------------------------------------- functionnewbuf=Error_Code(M,N,dim); %************************************************************************* %函数名称: %Error_Code()“传输误码解码器”算法函数 %参数: %M,N原图像尺度 %dim选择预测编码维数 %newbuf存放处理后的图像二维数组 %说明: %模拟信道传输过程中产生的误码,观察传输误码经解码后对恢复图像的影响,解码 %后的恢复图像放在newbuf数组中。 %************************************************************************* globalnewbuf; wrong=zeros(M,N); wrong(100,100)=120; fori=1: M forj=1: N pre_val=Predict_Value(i,j,N,dim); err=wrong(i,j); quan_err=Quant_Value(err); res_val=Restor_Value(quan_err,pre_val); newbuf(i,j)=Clip_Value(res_val); end end %------------------------------------------------------------------------- functionPvalue=Predict_Value(row,col,N,dim) %************************************************************************* %{Thisfunctionisusedtogivepredictedvalueaslinearpredictor. %Thepredictionformulaisasfollows: %1_DDPCM: ^x[i,j]=128ifj=1 %x'[i,j-1]ifj>1 %2_DDPCM: ^x[i,j]=128ifi=1,j=1 %x'[i,j-1]ifi=1,j>1 %x'[i-1,j]ifi>1,j=1orN %1/2x'[i,j-1]ifi>1,j>1 %1/8x'[i-1,j-1](Pirsch'spredictor) %1/4x'[i-1,j] %1/8x'[i-1,j+1] %Dim: Dimensionofprediction %Row: verticalcoordinateofcurrentpixeltobepredicted %COL: horizontalcoordinateofcurrentpixeltobepredicted} %************************************************************************* globalnewbuf; switchdim%预测算法编程 case1 ifcol==1 Pvalue=128; else Pvalue=newbuf(row,col-1); end case2 if(row==1&&col==1) Pvalue=128; end if(row==1&&col>1) Pvalue=newbuf(row,col-1); end if(row>1&&col==1)||(row>1&&col==N) Pvalue=newbuf(row-1,col); end if(row>1&&col>1&&col Pvalue=(1/2)*newbuf(row,col-1)+(1/4)*newbuf(row-1,col-1)+... (1/4)*newbuf(row-1,col+1); end end %------------------------------------------------------------------------- functionQvalue=Quant_Value(err); %************************************************************************* %Thisfunctionisusedaslinearquantizer.Thequantizerhastotally %13quantizationlevel: %0,-+7,-+16,-+27,-+38,-+51,-+66 %************************************************************************* if(abs(err)<=3)lev=0; elseif(abs(err)<=11)lev=7; elseif(abs(err)<=21)lev=16; elseif(abs(err)<=32)lev=27; elseif(abs(err)<=44)lev=38; elseif(abs(err)<=58)lev=51; elselev=66; end; end; end; end; end; end; Qvalue=lev; if(err~=0) Qvalue=lev*(err/abs(err)); end %------------------------------------------------------------------------- functionRvalue=Restor_Value(quan_err,pre_val) %************************************************************************* %ThisfunctionisusedtogetrestoredvalueofDPCM %x=^x+Quant_Error %************************************************************************* Rvalue=quan_err+pre_val; %------------------------------------------------------------------------- functionCvalue=Clip_Value(res_val) %************************************************************************* %Thisfunctionisusedtocliptorestoredvalueto8_bitvalue %0ifx<0 %x'=255ifx>255 %xotherwise %************************************************************************* if(res_val<0)Cvalue=0; elseif(res_val>255)Cvalue=255; elseCvalue=res_val; end; end; 4、实验结果及分析(原图像和处理后的图像比较及分析) 如上图所示,即为实验所得的结果图像。 由实验结果可以看出,一维和二维预测编码图像非常接近原图像;从误码图像中可以看出,一维预测编码会将误差延续到行末端,而二维预测编码其将误码延续至其后的斜后方,所以二维预测编码的误差会偏小。 实验名称: JPEG压缩编码 9、实验目的 (1)掌握nxn子块的DCT图像变换及频谱特点。 (2)熟悉JPEG基本系统的图像编解码方法。 2、实验内容 (1)编程实现nxn子块DCT变换的图像频谱显示,8x8子块DCT变换系数按“Z”扫描图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。 (2)编程实现JPEG压缩编码,进行8x8子块的DCT图像变换,JPEG量化矩阵的量化与反量化,8x8子块DCT的图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。 3、实验方法及编程 用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要的代码如下所示: functionnewbuf=DctBlock(oldbuf,Block) %************************************************************************* %函数名称: %DctBlock()DCTn*n块频谱函数 % %参数: %oldbuf原图像数组 %BlockDCTn*n当前块选择值 %newbuf存放处理后的图像二维数组 % %说明: %根据Block块的当前选择值,计算原图像的n*n块DCT变换,并转换为可视频谱图, %有利于频谱的观察。 %************************************************************************* oldbuf=double(oldbuf);%添加程序 H=dctmtx(Block); newbuf=blkproc(oldbuf,[BlockBlock],'P1*x*P2',H,H'); newbuf=log(abs(newbuf)); subplot(2,2,2); imshow(newbuf,[]); %------------------------------------------------------------------------- functionnewbuf=DctCode(oldbuf,DCTch) %************************************************************************* %函数名称: %DctCode()DCT8*8块系数“Z”字扫描图像压缩函数 % %参数: %oldbuf原图像数组 %DCTchDCT8*8块“Z”扫描当前系数选择值 %newbuf存放处理后的图像二维数组 % %说明: %计算图像的8×8子块DCT变换,按“Z”字扫描顺序,根据DCTch参数,只保留64个 %DCT系数中的前DCTch个系数,对修改后的DCT系数用逆DCT变换重建图像,得到DCT变 %换的压缩图像。 计算重建图像的均方根误差RMSE;显示误差图像和误差直方图。 %************************************************************************* zigzag=[126715162829%设置z扫描顺序 3581417273043 49131826314244 1012192532414554 1120243340465355 2123343947525661 2235384851576062 3637495058596364]; tbuf=ones(8);%定义8*8全1数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 实验 答案