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

合集下载
  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

相关文档
最新文档