数字图像处理实验 图像分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验名称实验四图像分割
课程名称数字图像处理A
姓名成绩
班级学号
日期地点
1.实验目的
(1)了解并掌握图像分割的基本原理;
(2)编写程序使用Hough变换处理图像,进行线检测;
(3)编写程序使用阈值处理方法进行图像分割,根据实验结果分析效果;
(4)总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。
2.实验环境(软件条件)
Windws2000/XP
MATLAB 7.0
3.实验方法
对256级灰度的数字图像camera.bmp(如图4.1所示)和car.bmp(如图4.2所示)进行如下处理:
(1)对图像camera.bmp进行Hough变换进行线检测,显示处理前、后图像:
思考如何利用Hough变换进行圆检测;
(2)对图像car.bmp分别利用不同的阈值处理方法进行图像中汽车及车牌的分割,显示处理前、后图像;思考不同的阈值处理算法对分割效果的影响?
4.实验分析
实验原理
Hough变换是最常用的直线提取方法,它的基本思想是:将直线上每一个数据点变换为参数平面中的一条直线或曲线,利用共线的数据点对应的参数曲线相交于参数空间中一点的关系,使直线的提取问题转化为计数问题。Hough变换提取直线的主要优点是受直线中的间隙和噪声影响较小。
思考:
Hough变换对圆的检测:
Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。
圆的方程为:222
()()
x a y b r
-+-=,通过Hough变换,将图像空间(,)
x y对应到参数空间(,,)
a b r。
第一题结果图
图4.1 实验图像camera.bmp 图4.2 实验图像car.bmp
\T \R -500
50
-300
-200
-100
第二题
实验原理:基于灰度的分割最简单的处理思想是,高于某一灰度的像素划分到一个区域中,低于某灰度的像素划分到另一区域中,这种基于灰度阈值的分割方法称为灰度门限法。最简单的灰度分割方法—灰度门限法,他是基于灰度阈值的分割方法,也是基于区域的分割方法。主要将高于某一灰度的像素划分到一个区域中,低于某灰度的像素划分到另一区域中。 结果图
思考:
直方图阈值法:理论分析和实验结果表明,该方法分割效果好,运算速度快,具有较高的实用价值。
Otsu 法:该方法选取出来的阈值非常理想,对各种情况的表现都较为良好。虽然它在很多情况下都不是最佳的分割,但分割质量通常都有一定的保障,可以说是最稳定的分割。
直方图阈值法
原图像
0100200
直方图分割后的图像
Otsu 法
原图像
分割后的图像
5.实验结论
Matlab 提供了三个与Hough 变换有关的函数:Hough 函数,Houghpeaks 函数和Houghlines 函数。在算法实现中,考虑到噪声的影响和参数空间离散化得需要,求交点的问题成为一个累加器问题。
直方图阈值法:利用灰度直方图求双峰或多峰,选择两峰之间的谷底作为阈值。
自动阈值法:Otsu 法。Otsu 法是使类间方差最大而推导出的一种能自动确定阈值的方法,具有简单,处理速度快的特点。在Matlab 工具箱中,Graythresh 函数基于Otsu 算法求取灰度阈值。Graythresh 函数的语法格式为:level=fraythresh(I).
附件
第一题源程序
clear all ;
RGB = imread('C:\Documents and Settings\Administrator\桌面\camera.bmp');
I=RGB;
%I = rgb2gray(RGB);
BW = edge(I,'canny'); % 利用Canny算子提取图像边缘
[H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5); subplot(121)
imshow(T,R,H,[],'notruesize'), axis on, axis normal
xlabel('\T'), ylabel('\R')
p = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
%找到5个较明显的Hough变换峰值
hold on
plot(T(p(:,2)),R(p(:,1)),'s','color','white');
lines = houghlines(BW,T,R,p,'FillGap',10,'MinLength',10);
%查找并链接线段
figure, imshow(BW), hold on%在二值图中叠加显示这些线段
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
end
第二题源程序
%用直方图阈值法
I=imread('C:\Documents and Settings\Administrator\桌面\car.bmp');
subplot(2,2,1);
imshow(I);
title('原图像');
I1=rgb2gray(I);
subplot(2,2,2);
imhist(I1);
title('直方图');
subplot(2,2,3);
I2=im2bw(I1,165/415);
imshow(I2);
title('分割后的图像');
%用Otsu算法
I=imread('C:\Documents and Settings\Administrator\桌面\car.bmp');
subplot(2,1,1);
imshow(I);
title('原图像');
subplot(2,1,2);
level=graythresh(I);
BW=im2bw(I,level);
imshow(BW);
title('分割后的图像');