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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学

学生姓名:

学号:

指导教师:彭真明

日期: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\lena.jpg'); 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\arrow.jpg'); 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、数字图像中目标区域的形心计算

相关文档
最新文档