数字图像处理实验答案Word版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:图像的锐化处理
一、实验目的
学习用锐化处理技术来加强图像的目标边界和图像细节。对图像进行梯度算子、Roberts算子、Sobel算子边缘检测处理和Laplace算子边缘增强处理,使图像的某些特征(如边缘、轮廓等)得以进一步的增强和突出。
二、实验内容
(1)编写梯度算子和Roberts算子滤波函数。
(2)编写Sobel算子滤波函数。
(3)编写Laplace算子边缘增强滤波函数。
(4)观察频域中用高低通滤波技术对图像进行的平滑和锐化处理。
三、实验方法及编程
用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要编写代码如下所示:
function newbuf=RobFilter(oldbuf,M,N);
% *************************************************************************
% 函数名称:
% RobFilter()
% 说明:
% 'Robert梯度'滤波算法。
% *************************************************************************
for i=1:M-1
for j=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
%-------------------------------------------------------------------------
function newbuf=SobFilter(oldbuf,M,N);
% *************************************************************************
% 函数名称:
% SobFilter()
% 说明:
% 'Sobel'滤波算法。
% *************************************************************************
for i=2:M-1
for j=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
%-------------------------------------------------------------------------
function newbuf=LapFilter(oldbuf,M,N);
% *************************************************************************
% 函数名称:
% LapFilter()
% 说明:
% 'Laplace'滤波算法。
% ************************************************************************
for i=2:M-1
for j=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
四、实验结果及分析(原图像和处理后的图像比较及分析)
如上图所示即为实验结果。如上图所示Robert算子能够检测出原图像的边缘,并且显示出来;Sobel在Robert算子的基础上增强了边缘,所以图像上结果会显示比原图像边缘要更加粗一些;Laplace算子与其他边缘增强方法不同,即其边缘的增强程度和边缘的方向无关,所以图像的细节明显比原来更加突出。
实验名称:图像方块编码
三、实验目的
通过编程实验,掌握方块编码的基本方法及压缩性能。
四、实验内容
编程实现子块为nxn的方块编码基本算法,分别取n=2,4,8方块尺寸进行编解码实验,计算编码后的均方误差和压缩比。
实验图像可为任意图像。
五、实验方法及编程
用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,下面是主要的实验代码:
function newbuf=BtcCode(oldbuf,M,N,n)
% *************************************************************************
% 函数名称:
% BtcCode() 方块编码函数
% 参数:
% oldbuf 原图像数组
% M N 原图像尺寸
% n 方块尺寸
% 说明:
% 调用方块编码算法函数,输出编码后的图像
% *************************************************************************
newbuf=oldbuf;
rowblocks=M/n;
colblocks=N/n;
for i=1:rowblocks-1
row=i*n;
for j=1:colblocks-1
col=j*n;
for i=1:n
for j=1:n
inbuf(i,j)=oldbuf(i+row,j+col);
end
end
outbuf=BtcBlock(inbuf,n);
for i=1:n
for j=1:n
newbuf(i+row,j+col)=outbuf(i,j);
end
end
end
end
%-------------------------------------------------------------------------function outbuf=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;