数字图像处理实验答案
实验名称:图像的锐化处理
一、实验目的
学习用锐化处理技术来加强图像的目标边界和图像细节。对图像进行梯度算子、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)-o ldbuf(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)
%
********************************************************************* ****
% 函数名称: