实验五图像分割及目标检测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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\'); 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);