数字图像处理实验 图像分割
- 格式:doc
- 大小:268.00 KB
- 文档页数:5
《数字图像处理》图像恢复和图像分割实验1.实验目的1、熟悉并掌握MATLAB 图像处理工具箱的使用;2、理解并掌握常用的图像的恢复和分割技术。
2.实验环境MATLAB 6.5 以上版本、WIN XP 或 WIN2000 计算机3、实验内容与要求1、采用三种不同算子检测图像边缘,显示结果。
i=imread('C:\Users\skr\Desktop\lra.png')BW1 = edge(I,'prewitt');BW2 = edge(I,'zerocross');BW3 = edge(I,'canny');subplot(2,2,1);imshow(i);title('原图像-李荣桉 1909290239')subplot(2,2,2);imshow(BW1);title('prewitt 边缘图-李荣桉 1909290239')subplot(2,2,3);imshow(BW2);title('zerocross 边缘图-李荣桉 1909290239')subplot(2,2,4);imshow(BW3);title('canny 边缘图-李荣桉 1909290239')2、对二值图像分别进行方形模板3*3 和5*5 的膨胀和腐蚀操作,显示结果a=imread('C:\Users\skr\Desktop\lra.png')i = rgb2gray(a)I = im2bw(a,0.5)se3 = strel('disk',3);erodedBW1 = imerode(I,se3);se4 = strel('disk',5);erodedBW2 = imerode(I,se4);se1 = strel('ball',3,3);I1 = imdilate(a,se1);se2 = strel('ball',5,5);I2 = imdilate(a,se2);subplot(2,2,1);imshow(I1);title('3*3 膨胀图像-李荣桉 1909290239')subplot(2,2,2);imshow(I2);title('5*5 膨胀图像-李荣桉 1909290239')subplot(2,2,3);imshow(erodedBW1);title('3*3 腐蚀图像-李荣桉 1909290239') subplot(2,2,4);imshow(erodedBW2);title('5*5 腐蚀图像-李荣桉 1909290239')3、完成图像的阈值分割与边缘检测。
信息工程学院实验报告课程名称:数字图像处理实验项目名称:实验六图像分割实验时间:2016.12.16班级:姓名:学号:一、实验目的1. 使用MatLab 软件进行图像的分割。
使学生通过实验体会一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响。
2. 要求学生能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能。
能够掌握分割条件(阈值等)的选择。
完成规定图像的处理并要求正确评价处理结果,能够从理论上作出合理的解释。
二、实验内容与步骤1.边缘检测(1)使用Roberts 算子的图像分割实验调入并显示图像room.tif图像;使用Roberts 算子对图像进行边缘检测处理;Roberts 算子为一对模板:(a)450方向模板(b)1350方向模板图 1 matlab 2010的Roberts算子模板相应的矩阵为:rh = [0 1;-1 0];rv = [1 0;0 -1];这里的rh 为45度Roberts 算子,rv为135度Roberts 算子。
分别显示处理后的45度方向和135方向的边界检测结果;用“欧几里德距离”和“街区距离”方式计算梯度的模,并显示检测结果;对于检测结果进行二值化处理,并显示处理结果。
提示:先做检测结果的直方图,参考直方图中灰度的分布尝试确定阈值;应反复调节阈值的大小,直至二值化的效果最为满意为止。
(2)使用Prewitt 算子的图像分割实验(a)水平模型(b)垂直模板图2. Prewitt算子模板使用Prewitt 算子进行内容(1)中的全部步骤。
(3)使用Sobel 算子的图像分割实验使用Sobel(a)水平模型(b)垂直模板图3. Sobel算子模板(4)使用LoG (拉普拉斯-高斯)算子的图像分割实验使用LoG (拉普拉斯-高斯)算子进行内容(1)中的全部步骤。
提示1:处理后可以直接显示处理结果,无须另外计算梯度的模。
提示2:注意调节噪声的强度以及LoG (拉普拉斯-高斯)算子的参数,观察处理结果。
数字图像处理中的图像分割方法探索与优化图像分割是数字图像处理中的一项关键任务,其主要目标是将图像分割成具有独立特征的不同区域。
图像分割技术在计算机视觉、图像识别、医学图像处理等领域有着广泛的应用。
本文将探索和优化数字图像处理中常用的图像分割方法,包括阈值分割、区域生长算法、边缘检测和基于机器学习的方法。
阈值分割是最简单也是最常用的图像分割方法之一。
该方法基于图像中像素的灰度值,将图像分割成具有不同灰度值的区域。
阈值分割的核心思想是选择一个合适的灰度值作为阈值,将图像中高于阈值的像素归为一个区域,低于阈值的像素归为另一个区域。
阈值的选择对分割结果至关重要,在实际应用中可以通过自适应阈值、Otsu方法等自动确定阈值的方法来优化分割结果。
区域生长算法是一种基于像素相似性的图像分割方法。
该方法从种子像素开始,通过生长规则逐渐将相邻像素合并成区域。
生长规则可以基于像素灰度值、颜色、纹理和空间关系等特征进行定义。
区域生长算法具有较强的自适应性和鲁棒性,但对于复杂的图像和噪声较多的图像可能会产生错误的分割结果。
为了解决这些问题,可以采用改进的生长规则、多种特征的组合,或者结合其他图像分割方法进行优化。
边缘检测是基于图像中边缘信息进行分割的方法。
边缘信息通常是图像中灰度值变化较大的地方,例如物体的边界或纹理边界。
常用的边缘检测算法包括Sobel算子、Canny算子和Laplacian算子等。
这些算法通过计算图像中像素灰度值的梯度或二阶导数,检测出边缘信息,并将边缘连接成闭合的边界。
然而,边缘检测方法容易受到图像噪声的影响,导致错误的分割结果。
因此,可以将边缘检测与其他方法结合,例如区域生长算法,以提高分割的准确性。
基于机器学习的图像分割方法是近年来较为热门的研究方向。
这些方法通过使用已标记的训练数据集,训练分类器或聚类算法来实现图像的自动分割。
常用的机器学习算法包括支持向量机、随机森林、神经网络等。
这些算法可以根据图像中的像素特征将其分类为不同的区域。
实验三数字图像分割处理一、实验目的1.熟悉并掌握图像分割处理的方法以及编程实现方法。
2.熟悉图像分割处理的过程。
二、实验内容图像分割是一种重要的图像分析技术。
图像分割是从图像预处理到图像识别和分析理解的关键步骤,在图像处理中展重要位置,一方面它是目标表达的基础,对特征测量有重要的影响,另一方面,图像分割以及基于分割的目标表达、特征提取和参数测量等将原始图像转化为更为抽象更为紧凑的形式,使得到更高层的图像识别、分析和理解成为可能。
典型而传统的分割方法可分为基于阈值的方法、基于边缘的方法和基于区域的分割方法等。
三、实验原理1、灰度阈值法是把图像的灰度分成不同等级,然后用设置灰度阈值的方法确定有意义的区域或欲分割物体的边界。
阈值T一般可写成:T=T[x,y,p(x,y),q(x,y)] (1)其中p(x,y)代表点(x,y)处的灰度值,q(x,y)代表该点邻域的某种局部特性.根据(1)式可将阈值分为全局阈值、局部阈值和动态阈值.如果T的选取只与p(x,y)有关,则是全局阈值,全局阈值是利用全局信息(例如整个图像的灰度直方图)得到的阈值,它仅与全图各像素的本身性质有关,对全图使用;如果T的选取与p(x,y),q(x,y)有关,则是局部阈值,它与图像局部区域性质有关,全局阈值和局部阈值也称为固定阈值;如果T的选取不仅与p(x,y),q(x,y)有关,还与该点的坐标(x,y)有关,则是动态阈值.动态阈值的选取是将原始图像分成若干个子图,然后利用某种固定阈值选取法对每一个子图确定一个阈值,再通过对这些子图所得阈值的插值得到对图像中每个像素进行分割所需的阈值。
2、边缘检测法Robert算子是一种利用局部差分算子寻找边缘的算子:g(x,y)={[f(x,y)-f(x+1,y+1)]^2+[f(x+1,y)-f(x,y+1)]^2}^1/2Laplacian算子是常用的边缘检测算子,它是各向同性的二阶导数。
Canny算子是由Gaussian卷积得到的边缘图像用抑制非极大值点的算法对梯度图像作后续处理。
figureimshow(a)figuresubplot(2,2,1) imshow(bw1) xlabel('soble') subplot(2,2,2) imshow(bw2) xlabel('prewitt') subplot(2,2,3) imshow(bw3) xlabel('roberts') subplot(2,2,4) imshow(bw4) xlabel('log')截图:(2)编写MATLAB程序,用Hough变换对图像进行直线检测。
如例8.5所示。
程序:I=imread('Peppers.bmp');rotI=imrotate(I,33,'crop')BW=edge(rotI,'log')[H,T,R]=hough(BW)P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));x=T(P(:,2)); y=R(P(:,1));lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);figure,imshow(rotI),hold onmax_len=0;for k=1:length(lines)xy=[lines(k).point1;lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');end截图:(3)编写MATLAB程序,对一幅图像进行基于形态学的边缘检测。
数字图像实验报告实验4 图像分割实验目的:1.了解图像分割的基本理论和方法;2.掌握对图像进行点、线和边缘检测的方法;3.掌握阈值分割的方法和阈值的选择;4.熟悉区域生长法和分水岭分割算法实验内容:1.对图片lung2.bmp和加噪声的lung3.bmp分别用3*3的sobel算子、prewitt算子、log算子、canny算子进行处理,根据处理结果分析上述算子,分别是什么类型的?有何作用?思考一下如何设计算子。
lung3.bmp为g = imnoise(f,”salt & pepper”,0.02)(0.02表示发生概率)f=imread('D:\大三第二学期\生物医学图像处理\实验5\lung2.bmp');g=imnoise(f, 'salt & pepper',0.02);[f1,fs]=edge(f, 'sobel');[f2,fp]=edge(f, 'prewitt');[f3,flog]=edge(f, 'log');[f4,fc]=edge(f, 'canny');f1=edge(f, 'sobel',fs);f2 =edge(f, 'prewitt',fp);f3 =edge(f, 'log',flog);f4 =edge(f, 'canny',fc);subplot(2,3,1);imshow(f) ,title( ['原图']);subplot(2,3,2);imshow(f1),title( ['sobel']);subplot(2,3,3);imshow(f2),title(['prewitt ']);subplot(2,3,4);imshow(f3),title([ ' log ']);subplot(2,3,5);imshow(f4),title( [' canny ']);[g1,gs]=edge(g, 'sobel');[g2,gp]=edge(g, 'prewitt');[g3,glog]=edge(g, 'log');[g4,gc]=edge(g, 'canny');g1=edge(g, 'sobel',gs);g2 =edge(g, 'prewitt',gp);g3 =edge(g, 'log',glog);g4 =edge(g, 'canny',gc);figure,subplot(2,3,1);imshow(g) ,title( ['原图']);subplot(2,3,2);imshow(g1),title( ['sobel']);subplot(2,3,3);imshow(g2),title([' prewitt ']);subplot(2,3,4);imshow(g3),title([ ' log ']);subplot(2,3,5);imshow(g4),title( [' canny ']);2.(1)对图片lung.bmp用im2bw进行处理,其分割的阈值分别设为0.05,0.15和0.7,分析哪个效果好(结合图像的直方图)。
数字图像处理:图像分割数字图像处理:图像分割前⾔:这个实验分成两部分代码,分别对应1和21. 膨胀:将与⽬标区域的背景点合并到该⽬标物中,使⽬标物边界向外部扩张的处理,把⼆值图像各1像素连接成分的边界扩⼤⼀层。
具体操作为:图像中关⼼的像素(结构元素B中值为1的部分)有1,则结果赋值为1,没有1,则赋值0。
腐蚀:消除连通域的边界点,使边界向内收缩的处理。
贴标签是对不同连通域区分和标记的基本算法,把⼆值图像各1像素连接成分的边界点去掉从⽽缩⼩⼀层。
2. 开操作:先腐蚀再膨胀,可以去掉⽬标外的孤⽴点闭操作:先膨胀再腐蚀,可以去掉⽬标内的孔。
注:别忘了图⽚的路径改成⾃⼰的⼀、实验⽬的理解和掌握图像分割的基本理论和算法,练习使⽤形态学、区域、边界和阈值的⽅法结合图像增强复原的相关知识对图像进⾏分割处理。
⼆、实验内容1.读⼊⼀幅图像,对图像进⾏如下操作:(1) ⽤膨胀腐蚀等形态学⽅法对图像进⾏去噪、增强处理。
改变结构元素,观察处理后的图像是否有明显的差别。
(2) ⽤开操作和闭操作等形态学⽅法去除指纹图像中的细⼩颗粒,连接断裂的指纹。
(3) 在上⼀步⽤形态学⽅法处理后的指纹图像基础上,运⽤全局阈值实现图像的⼆值化。
2.读⼊⼀幅图像,利⽤边缘检测和分⽔岭⽅法(watershed)对图像进⾏前景分割。
在调⽤watershed函数前,利⽤prewitt算⼦或者全局阈值等⽅法增强图像边缘。
实验结果图如下:1. 第⼀部分实验结果(两种图⽚来观察结果,此外我在作腐蚀时改变了两种结构元素来进⾏观察)2. 第⼆部分实验结果(两种图⽚来观察结果):代码如下:###### 第⼀部分代码%⼿动实现膨胀和腐蚀%img=imread('finger_noise.tif');img=im2bw(imread('test.png'));figure('name','实验结果');number=5;% 定义number⾏图⽚subplot(number,3,1);imshow(img);title('原图');subplot(number,3,4);imshow(img);title('原图');subplot(number,3,7);imshow(img);title('原图');B=[0 1 01 1 10 1 0]; %结构元素[row,col]=size(img);%获得图像的⾼和宽%对img进⾏膨胀imgdilate=img;for i=2:row-1for j=2:col-1pitch=img(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))>0imgdilate(i,j)=1;%⾮零则赋值1elseimgdilate(i,j)=0;%零则仍赋值0endendendsubplot(number,3,2);imshow(imgdilate);title('膨胀后结果');%对img进⾏腐蚀imgerode=img;C=sum(B(:)); %结构元素B中关⼼的元素个数for i=2:row-1for j=2:col-1pitch=img(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))<Cimgerode(i,j)=0;elseimgerode(i,j)=1;endendendsubplot(number,3,3);imshow(imgerode);title('腐蚀后结果');B= [1 1 1;1 1 1;1 1 1]%更改结构元素[1 1 1;1 1 1;1 1 1],[1 0 1;0 1 0;1 0 1] %开操作(对腐蚀后的图像再进⾏⼀次膨胀)imgopen=imgerode;for i=2:row-1for j=2:col-1pitch=imgerode(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))>0 %⾮零则赋值1imgopen(i,j)=1;elseimgopen(i,j)=0;%零则仍赋值0endendendsubplot(number,3,5);imshow(imgopen);title('开操作后结果,结构元素为[1 1 1;1 1 1;1 1 1]');%闭操作(对膨胀后的图像再进⾏⼀次腐蚀)imgclose=imgdilate;C=sum(B(:)); %结构元素B中关⼼的元素个数for i=2:row-1for j=2:col-1pitch=imgdilate(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))<Cimgclose(i,j)=0;elseimgclose(i,j)=1;endendendsubplot(number,3,6);imshow(imgclose);title('闭操作后结果,结构元素为[1 1 1;1 1 1;1 1 1]');B= [1 0 1;0 1 0;1 0 1]%更改结构元素[1 1 1;1 1 1;1 1 1],[1 0 1;0 1 0;1 0 1] %开操作(对腐蚀后的图像再进⾏⼀次膨胀)imgopen=imgerode;for i=2:row-1for j=2:col-1pitch=imgerode(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))>0 %⾮零则赋值1imgopen(i,j)=1;elseimgopen(i,j)=0;%零则仍赋值0endendendsubplot(number,3,8);imshow(imgopen);title('开操作后结果,结构元素为[1 0 1;0 1 0;1 0 1]');%闭操作(对膨胀后的图像再进⾏⼀次腐蚀)imgclose=imgdilate;C=sum(B(:)); %结构元素B中关⼼的元素个数for i=2:row-1for j=2:col-1pitch=imgdilate(i-1:i+1,j-1:j+1);convtmp= pitch.*B; %⽤img中的⼀块与结构元素作卷积if sum(convtmp(:))<Cimgclose(i,j)=0;elseimgclose(i,j)=1;endendendsubplot(number,3,9);imshow(imgclose);title('闭操作后结果,结构元素为[1 0 1;0 1 0;1 0 1]');subplot(number,3,10);imshow(imgdilate);title('原图');%确定全局阈值TT=0.5*(double(min(imgdilate(:)))+double(max(imgdilate(:))));%设置初始阈值为最⼤灰度和最⼩灰度值和的⼀半done=false;while ~doneg=imgdilate>=T;%分成两组像素,灰度值⼤于或者等于T的和灰度值⼩于T的Tnext=0.5*(mean(imgdilate(g))+mean(imgdilate(~g)));%新阈值两个范围内像素平均值和的⼀半done=abs(T-Tnext)<0.5; %0.5是⾃⼰指定的参数T=Tnext;endimout2=im2bw(imgdilate,T);subplot(number,3,11);imshow(imout2);title('膨胀后全局⼆值化');%确定全局阈值TT=0.5*(double(min(imgerode(:)))+double(max(imgerode(:))));%设置初始阈值为最⼤灰度和最⼩灰度值和的⼀半done=false;while ~doneg=imgerode>=T;%分成两组像素,灰度值⼤于或者等于T的和灰度值⼩于T的Tnext=0.5*(mean(imgerode(g))+mean(imgerode(~g)));%新阈值两个范围内像素平均值和的⼀半done=abs(T-Tnext)<0.5; %0.5是⾃⼰指定的参数T=Tnext;endimout3=im2bw(imgerode,T);subplot(number,3,12);imshow(imout3);title('腐蚀后全局⼆值化');第⼆部分代码%pic =imread('finger.tif')pic =imread('rice.tif')number=2subplot(number,3,1);imshow(pic);title('原图');% 使⽤prewitt算⼦增强G=imfilter(pic,fspecial('prewitt'));%⽣成’prewitt’模板,并对输⼊图像做边缘增强,再加上原图像subplot(number,3,2);imshow(G);title('prewitt算⼦增强后图像');L=watershed(G); %分⽔岭算法wr=L==0; %取出边缘subplot(number,3,3);imshow(wr);title('分⽔岭');pic(wr)=255;subplot(number,3,5);imshow(uint8(pic));title('前景分割结果');。
实验7 图像分割一.实验目的:1.掌握点、线检测的模板、基本原理和方法。
2.掌握使用edge函数进行边缘检测的技术。
二.实验内容:1.构造点、线、边缘检测的模板1.利用MATLAB标准函数edge进行点、线、边缘检测三.实验原理:1.点检测使用以前学过的MATLAB标准函数imfilter运用点检测模板进行孤立点的检测。
嵌在常数区域(或图像中亮度基本不变的区域)中的孤立点检测,使用下列模板:若|R| >= T,则就说在掩模的中心位置已检测出了一个孤立的点。
显然,当掩模的中心点位于一个孤立点时,其模板的的相应最强,而在亮度不变的区域中响应为零。
>> w = [-1 -1 -1; -1 8 -1; -1 -1 -1]>> g = abs(imfilter(double( f )), w)>> T = max( g(:) )>> g = g >= T>>imshow(g)2.线检测>> w = [2 -1 -1; -1 2 -1; -1 -1 2] %建立-45度方向线检测模板>> g = imfilter(double(f), w) %注意与f没有转换为double型的对比>> imshow(g, [ ]) %Fig.10.4(b)>> gtop = g(1:120, 1:120) %取出一个子图像>> gtop = pixeldup(gtop, 4) %放大4倍,原图像大小>> fugure, imshow(gtop, [ ]) %Fig.10.4(c)>> gbot = g(end-119 : end, end-119 : end)>> gbot = piexldup(gbot, 4)>> figure, imshow(gbot, [ ]) %Fig.10.4(d)>> g = abs(g)>> figure, imshow(g, [ ]) %Fig.10.4(e)>> T = max(g(:))>> g = g >= T>> figure, imshow(g) %Fig.10.4(f)3.边缘检测使用edge函数进行边缘检测,依据是一阶和二阶导数。
实验三图像分析实验——图像分割、形态学及边缘与轮廓分析一、实验条件PC机数字图像处理实验教学软件大量样图二、实验目的1、熟悉图像形态学分析的基本原理,观察不同形态学方法处理的结果;2、熟悉图像阈值分割、区域生长、投影及差影检测和模板匹配的基本原理,观察处理的结果;3、熟悉图像边缘检测、Hough平行线检测、轮廓提取及跟踪和种子填充的基本原理,观察处理的结果;4、了解图像矩、空穴检测、骨架提取的基本原理,观察处理的结果。
三、实验原理本次实验侧重于演示观察,由于内容繁多,并且系统中已有部分实验项目的原理说明,因此实验原理及编程实现步骤这里不再详细叙述,有兴趣的同学可以查阅数字图像处理方面的有关书籍。
四、实验内容1、图像形态学分析内容包括:图像膨胀、图像腐蚀、开运算、闭运算和图像细化针对二值图像进行处理,有文字说明,实验步骤中将详细介绍其使用方法。
2、图像分割内容包括:阈值分割、区域生长、投影检测、差影检测和模板匹配阈值分割:支持灰度图像。
从图库中选择图像分割中的源图, 然后执行图像分析→图像分割→阈值分割, 比较原图和分割后的图, 对照直方图分析阈值分割的特点。
对源图再执行一次图像变换→点运算→阈值变换, 比较分析阈值变换和阈值分割的结果。
区域生长:支持灰度图像。
操作方法与阈值分割类似,比较分析其与阈值分割的不同。
投影检测:只支持二值图像。
从图库中选择投影检测中的源图, 然后执行图像分析→投影检测→水平投影, 然后再垂直投影, 记录下检测部分的水平和垂直方向的位置。
如有必要, 在检测之前, 对图像进行平滑消噪。
差影检测:支持灰度图像。
从图库中选择图像合成中的源图, 然后执行图像分析→图像合成→图像相减, 在弹出的文件对话框中选择图库图像合成中的模板图像,观察分析差影结果。
模板匹配:支持灰度图像。
从图库中选择模板匹配中的源图, 然后执行图像分析→模式识别→模板匹配, 在弹出的文件对话框中选择图库模板匹配中的模板图像, 观察分析结果。
《数字图像处理(实验部分)》教案实验八:图像分割1.实验目的1.掌握MATLAB 的基本操作。
2.了解数字图像处理在MATLAB中的基本处理过程。
3.学习图像分割的原理,观察算法处理结果2.实验设备2.1.PC 兼容机一台;操作系统为WindowsWindowsXP。
2.2.数字图像处理开发环境:MATLAB软件3.实验原理图像分割:运用阀值分割法,通过观察直方图的谷值,选取分割的阀值T为该谷值,将图像分割为背景和目标两部分。
4.实验步骤.1 打开MA TLAB开发环境.2点击MA TLAB窗口上File菜单,选择New-〉M—File,在弹出的Edit编辑器内输入如下程序:I=imread('cameraman.tif');figure(1);subplot(2,2,1),imshow(I);title('原图');subplot(2,2,2),imhist(I);title('直方图,取波谷为阈值'); % 观察灰度直方图,灰度80处有谷,确定阈值T=80I1=im2bw(I,80/255); % im2bw函数将图像根据给定阈值转换为二值图像,阈值需要转换到[0,1]范围内subplot(2,2,3),imshow(I1);title('自带函数分割图');I2=I;k=find(I<=80);%返回满足条件的索引号I2(k)=0;g=find(I>80);I2(g)=255;subplot(2,2,4),imshow(I2);title('阈值分割图');.3将该程序保存,并点击工具栏中Run按钮,程序会自动运行,并显示出结果。
.4 观察处理结果5.实验结果分割后图像中前景部分被凸现出来,背景部分被去除。
01002006.问题与思考总结MATLAB开发环境在使用上的特点,掌握其在实验中使用方法。
改变程序中的参数,重新运行程序,观察会是什么结果。
实验报告
实验名称实验四图像分割
课程名称数字图像处理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('分割后的图像');。