数字图像处理实验答案

数字图像处理实验答案
数字图像处理实验答案

实验名称:图像的锐化处理

一、实验目的

学习用锐化处理技术来加强图像的目标边界和图像细节。对图像进行梯度算子、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)

%

********************************************************************* ****

% 函数名称:

相关主题
相关文档
最新文档