实验二 形态算子
一、实验目的与要求
目的:学习常见的数学形态学运算基本方法,了解腐蚀、膨胀、开运算、闭运算取得的效果,培养处理实际图像的能力。
要求:上机运行,调试通过。
二、 实验设备:
计算机、Matlab软件、VC++或C语言软件
三、实验内容:
利用VC++/C或MatLab工具箱中关于数学形态学运算的函数,对二值图像进行膨胀、腐蚀和开运算、闭运算处理。
四、实验原理:
膨胀:
腐蚀:
开运算:
闭运算:
五、实验报告内容
(1)描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,必须包括原始图像及其计算/处理后的图像。
(2)结合实验内容,评价腐蚀、膨胀以及开运算、闭运算的效果,并说明它们各自适用条件。
%对二值图像做腐蚀、膨胀以及开运算和闭运算
close all;
clc;
clear;
I=imread('C:\Documents and Settings\Owner\My Documents\MATLAB\road3.jpg');
I2=im2bw(I); %对读入图像做二值化处理
[m,n]=size(I2);
subplot(2,3,1),imshow(I)
title('原始图像');
subplot(2,3,2),imshow(I2)
title('二值图像');
s=[1 1;1 0]; %腐蚀膨胀算子
%腐蚀运算
for i=1:m-1
for j=1:n-1
if (I2(i,j)==1)&&(I2(i+1,j)==1)&&(I2(i,j+1)==1)
I3(i,j)=1;
end
end
end
subplot(2,3,3),imshow(I3)
title('图像腐蚀1次');
%膨胀运算
for i=1:m-1
for j=1:n-1
if (I2(i,j)==1)||(I2(i+1,j)==1)||(I2(i,j+1)==1)
I4(i,j)=1;
end
end
end
subplot(2,3,4),imshow(I4)
title('图像膨胀1次');
%开运算
for i=1:m-2
for j=1:n-2
if (I3(i,j)==1)||(I3(i+1,j)==1)||(I3(i,j+1)==1)
I5(i,j)=1;
end
end
end
subplot(2,3,5),imshow(I5)
title('开运算');
%闭运算
for i=1:m-2
for j=1:n-2
if (I4(i,j)==1)&&(I4(i+1,j)==1)&&(I4(i,j+1)==1)
I6(i,j)=1;
end
end
end
subplot(2,3,6),imshow(I6)
title('闭运算');
由上图易知,原图像经1次腐蚀后,图像中的一些不连续点或线被腐蚀掉;而原图像经1次膨胀后,图像中的一些不连续点或线被连接在一起或膨胀。
原图像经开运算(先腐蚀后膨胀),图像原先那些不完全连续部分,边缘孤点等被去掉,主体部分得以加强,因而图像特征明显,且清晰。
原图像经闭运算(先膨胀后腐蚀),图像原先那些不完全连续部分,大部分被去掉,只保留最基本特征部分,因而图像特征被明显削弱。
实验三 边缘检测
一、实验目的与要求
目的:熟悉采用Roberts算子、Sobel算子、Prewitt算子、Laplacian算子和LOG算子检测数字图像的边缘。
要求:上机运行,调试通过。
二、 实验设备:
计算机、Matlab软件、VC++或C语言软件
三、实验内容
利用VC++/C或MatLab中关于边缘检测的函数,分别采用Roberts算子、Sobel算子、Prewitt算子、Laplacian算子和LOG算子检测数字图像的边缘。
四、实验原理
两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的结果,这种不连续性通常可以利用求导数的方法方便地检测到。常用的边缘检测算子有Roberts算子、Sobel算子、Prewitt算子、LOG算子和Laplacian算子。
Roberts算子是一种利用局部差分算子寻找边缘的算子,其模板如图:
Sobel算子的两个卷积计算核如图:
Prewitt算子的两个卷积计算核如图:
LOG算子=高斯滤波+拉普拉斯边缘检测。
Laplacian算子是二阶导数的二维等效式,卷积核如图: