当前位置:文档之家› 实验五图像分割及目标检测

实验五图像分割及目标检测

电子科技大学




学生姓名:
学号:
指导教师:彭真明
日期: 2014 年 5 月 20 日
一、实验名称:图像分割及目标检测
二、实验目的:
1、了解图像边缘检测及图像区域分割的目的、意义和手段。

2、熟悉各种经典的边缘检测算子、图像分割方法及其基本原理。

3、熟悉各种图像特征表示与描述的方法及基本原理。

4、熟练掌握利用matlab 工具实现各种边缘检测的代码实现。

5、熟练掌握利用matlab 工具实现基本阈值分割的代码实现。

6、通过编程和仿真实验,进一步理解图像边缘检测、图像分割及其在目标检测、目标识别及跟踪测量应用中的重要性。

三、实验原理及步骤:
1、利用Soble算子进行图像的边缘检测
(1)原理与步骤
数字图像的边缘一般利用一阶/二阶差分算子进行检测。

常用的差分算子包括:Roberts 算子(交叉对角算子),Prewitt 算子(一阶),Sobel 算子(一阶),Laplacian 算子(二阶),LoG 算子(二阶)及Canny 边缘检测算法等。

其中,Soble 算子为常见的一类梯度算子(一阶梯度算子)。

其x, y 方向的梯度算子分别为:
一幅数字图像I(如图1)与Sx 和Sy 分别做卷积运算后(可采用多种方式,如conv2,filter2 及imfilter),可以求得x,y 两个方向的梯度图像Dx,Dy,然后,可以计算得到原图像的梯度幅度,即
或:
(2)进一步执行梯度图像D 的二值化处理(建议采用Otsu 阈值,也可考虑其他阈值分割),检测图像的二值化边缘。

(3)对于与步骤同样的输入图像I,利用matlab 工具的edge(I,’soble’)函数进行处理。

试比较处理结果与步骤(2)的得到的结果的差异,并分析存在差异的原因。

(4)画出原图像、原图像的Dx, Dy 图,幅度图(D)及最后的二值化边缘检测结果图。

2、数字图像中目标区域的形心计算
(1)按如下公式计算原图像(图 2)的质心。

(2)对图 2 中的黑色形状目标进行阈值分割,得到二值化的图像;
图2 原始图像(240*240)
(3)计算目标形状的面积(以像素表示);
(4)计算图中黑色形状目标的形心位置,并在原图上进行位置标记(可用红色小圆圈)。

其中,M,N 为图像尺寸。

x,y 为像素图像平面上的坐标。

(5)画出原图像、原图上叠加质心标记图;分割后的二值化图及分割图上叠加形心标记图。

四、程序框图
五、程序源代码:
1、利用Soble算子进行图像的边缘检测
clc;clf;clear all;
I=imread('C:\Users\Cancer_5kai\Desktop\'); I=double(I);
Sx=[-1 0 1
-2 0 2
-1 0 1];
Sy=[-1 -2 -1
0 0 0
1 2 1];
Dx=conv2(I,double(Sx),'same');
Dy=conv2(I,double(Sy),'same');
[m,n]=size(I);
D=sqrt(Dx.^2+Dy.^2);
T=graythresh(D);
T=T*255;
for i=1:m
for j=1:n
if D(i,j)>T
D1(i,j)=1;
else
D1(i,j)=0;
end
end
end
BW2=edge(I,'sobel');
subplot(231),imshow(I,[]);title('原图像')
subplot(232),imshow(Dx,[]);title('Dx图')
subplot(233),imshow(Dy,[]);title('Dy图')
subplot(234),imshow(D,[]);title('幅度图')
subplot(235),imshow(D1,[]);title('二值化边缘检测结果图') subplot(236),imshow(BW2,[]);title('sobel边缘检测结果图') 2、数字图像中目标区域的形心计算
clc,clf,clear all;
A=imread('C:\Users\Cancer_5kai\Desktop\'); subplot(221),imshow(A);title('原图像');
A=double(A);
[m,n]=size(A);
for j=1:n
for i=1:m
Xc(i,j)=i*A(i,j);
Yc(i,j)=j*A(i,j);
end
end
Xc=sum(sum(Xc))/sum(sum(A));
Yc=sum(sum(Yc))/sum(sum(A));
subplot(222),imshow(A,[]);hold on;
plot(Yc,Xc,'or');title('原图上叠加质心标记图'); T=graythresh(A)*255;
S=0
for i=1:m
for j=1:n
if A(i,j)>T
A1(i,j)=1;
else
A1(i,j)=0;
S=S+1;
end
end
end
S
subplot(223),imshow(A1,[]);title('分割后的二值化图'); A2=1-A1;
for i=1:m
for j=1:n
x1(i,j)=i*A2(i,j);
y1(i,j)=j*A2(i,j);
end
end
xc=sum(sum(x1))/sum(sum(A2));
yc=sum(sum(y1))/sum(sum(A2));
subplot(224),imshow(A1,[]);hold on;
plot(yc,xc,'or');title('分割图上叠加形心标记图');
六、实验结果:
1、利用Soble算子进行图像的边缘检测
如图可看出:二值化边缘检测比soble边缘检测图像轮廓更清晰些
2、数字图像中目标区域的形心计算
目标形状的面积为:7850个像素
七、思考题
1、利用梯度算子与图像进行卷积运算后,为什么还需要给定阈值进行二值化处理?
答:利用梯度算子与图像进行卷积运算后得到的只是图像像素灰度变化的梯度图,经过二值化处理后才能提取出有用的图像边界。

2、Laplacian 算子检测边缘为什么会产生双边效果?为什么不能检测出边的方向。

答:Laplacian 算子实际是对图像求二阶导数,二阶导数在灰度斜坡和灰度台阶过渡处产生双边效应。

3、相对其他边缘检测算子,Canny 边缘检测算法的主要优势体现在哪里?
答:(1)低失误概率、(2)高位置精度、(3)对每个边缘有唯一的响应。

八、总结及心得体会
通过学习实践,了解了图像边缘检测及图像区域分割的目的、意义和手段,熟悉了各种经典的边缘检测算子、图像分割方法及其基本原理,熟悉了各种图像特征表示与描述的方法及基本原理,掌握了利用matlab 工具实现各种边缘检测和基本阈值分割的的代码实现,通过编程和仿真实验,进一步理解了图像边缘检测、图像分割及其在目标检测、目标识别及跟踪测量应用中的重要性。

相关主题