数字图像处理 第七章_图像分割
- 格式:ppt
- 大小:7.80 MB
- 文档页数:84
第七章图像分割1、什么是区域?什么是图像分割?答:在对图像的研究和应用中,人们往往仅对图像中的某些部分感兴趣。
这些感兴趣的部分常称为目标或图像,它们一般对应图像中的特定的、具有独特性质的区域。
这里的区域是指相互连通的、有一致属性的像素的集合。
图像分割是指把图像分成互不重叠区域并提取感兴趣目标的技术。
2、边缘检测的理论依据是什么,有哪些方法?各有哪些特点?答:边缘是指图像中像素灰度有阶跃变化或屋顶状变化的那些像素的集合。
它存在于目标和背景、目标与目标、区域与区域、基元与基元之间。
他对图像识别和分析十分有用,边缘能够画出目标物体轮廓,使观察者一目了然,包含了丰实的信息,是图像识别中抽取的重要属性。
利用边缘灰度变化的一阶或二阶导数特点,可以将边缘点检测出来。
方法包括:(1)梯度算子;特点是仅计算相邻像素的灰度差,对噪音敏感,无法抑制噪声的影响。
(2)Roberts梯度算子;与梯度算子检测边缘的方法类似,但效果较梯度算子略好。
(3)Prewitt和Sobel算子;该算子不仅能检测边缘点,且能进一步抑制噪声的影响,但检测的边缘较宽。
(4)方向算子;检测能力强,抗噪能力好。
(5)拉普拉斯算子;特点是各向同性、线性和位移不变的;对细线和孤立点检测效果较好。
但边缘方向信息丢失,常产生双像素的边缘,对噪声有双倍加强作用。
(6)马尔算子;马尔算子用到的卷积模板一般较大,不过这些模板可以分解为一维卷积来快速计算。
(7)Canny算子;可以减少小模板检测中的边缘中断,有利于得到较为完整的线段。
3、什么是hough变换?hough变换检测直线时,为什么不采用y=kx+b的表达式?试述采用hough变换检测直线的原理。
答:设在直线坐标系中有一条直线L,在原点到该直线的垂直距离为Ρ,垂线与x周的夹角为θ,则可用Ρ、θ来表示该直线,其直线方程为:Ρ=xcosθ+ysinθ而这条直线用极坐标表示则为一点(Ρ,θ),可见,直角坐标系中的一条直线对应极坐标系中的一点,这种线到点的变换叫做hough变换。
数字图像处理:图像分割数字图像处理:图像分割前⾔:这个实验分成两部分代码,分别对应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('前景分割结果');。
数字图像处理---图像分割图像分割概述图像分析概念:对图像中感兴趣的⽬标进⾏检测和测量,以获得它们的客观信息,从⽽建⽴对图像的描述步骤:1. 图像分割2. 特征识别3. 对象分类4. 建⽴联系概述图像分割概念:将图像划分为互不重叠的区域并提取感兴趣⽬标的技术基本策略:基于灰度值的两个基本特性:不连续性和相似性通过检测不连续性先找边,后确定区域通过检测相似性,在⼀定阈值下找到灰度值相似区域,区域外轮廓即为对象边界⽅法基于边缘的分割⽅法:先提取区域边界,再确定边界限定区域区域分割:确定每个像素归属区域,从⽽形成区域图区域⽣长:将属性接近的连通像素聚集成区域分裂-合并分割:即存在图像划分,也存在图像合并边缘检测算⼦---边缘分割法边缘定义:图像中像素灰度有阶跃变化或屋顶变化的像素的集合分类:阶跃状屋顶状特点:属于⾼频信号区域往往为闭合连线边缘检测流程滤波⇒增强⇒检测⇒定位边缘检测算⼦基本思想:计算局部微分算⼦⼀阶微分:⽤梯度算⼦进⾏运算特点:对于阶跃状变化会出现极⼤值(两侧都是正值,中间最⼤)对于屋顶状变化会过零点(两侧符号相反)不变部分为0⽤途:检测图像中边的存在注意事项:由于结果图中存在负值,因此需要处理后使⽤处理⽅法:取绝对值加最⼩值阈值法⼆阶微分:通过拉普拉斯算⼦计算特点:对于阶跃状变化会过零点(两侧符号相反)对于屋顶状变化会出现负极⼤值(两侧都是正值,中间最⼩)不变部分为0⽤途:检测图像中边的存在常⽤边缘检测算⼦Roberts 算⼦Prewitt 算⼦Sobel 算⼦Kirsch 算⼦Laplacian 算⼦Marr 算⼦交叉⽅向⼀阶锐化问题:锐化处理结果对具有矩形特征的物体的边缘提取较为有效,但是对于不规则形状的边缘提取,则存在信息上的缺损解决思想:利⽤⽆⽅向的锐化算法交叉微分算⼦交叉Roberts 算⼦公式:f ′x =|f (x +1,y +1)−f (x ,y )|f ′y =|f (x +1,y )−f (x ,y +1)|模板:f ′x =−1001,f ′y =01−1特点:算法简单,对噪声敏感,效果较梯度算⼦较好交叉Prewitt 算⼦模板:d ′x =011−101−1−10,d ′y =−1−10−101011特点:与Sobel 相⽐有⼀定抗⼲扰性,图像效果较⼲净交叉Sobel 算⼦模板:d ′x =012−101−2−10,d ′y =−2−10−101012特点:锐化的边缘信息较强kirsch 算⼦(⽅向算⼦)模板:特点在计算边缘强度的同时可以得到边缘⽅向各⽅向间的夹⾓为45°分析取其中最⼤的值作为边缘强度,与之对应的⽅向作为边缘⽅向若取最⼤值绝对值,则仅需要前四个模板即可Nevitia 算⼦[][][][][][]特点:各⽅向间的夹⾓为30°Laplacian算⼦同图像增强中的Laplacian算⼦优点:各向同性、线性和位移不变对细线和孤⽴点检测效果较好缺点对噪声敏感,有双倍加强作⽤不能检测出边缘⽅向常产⽣双像素边缘使⽤之前需要对图像进⾏平滑Marr算⼦在Laplacian算⼦基础上发展⽽来平滑函数采⽤⾼斯正态分布函数h(x,y)=e−x2+y2 2σ2σ为⽅差⽤h(x,y)对图像f(x,y)平滑克表⽰为g(x,y)=h(x,y)∗f(x,y) *代表卷积令r表⽰从原点出发的径向距离,即r2=x2+y2利⽤⾼斯-拉普拉斯滤波器(LOG滤波器)▽2h=(r2−2σ2σ4)e−r22σ2即可利⽤⼆阶导数算⼦过零点的性质,确定图像中阶跃边缘的位置在该算⼦中σ越⼩边缘位置精度越⾼,边缘细节变化越多;σ越⼤平滑作⽤越⼤,但是细节损失越⼤,边缘点定位精度越低过程1. 通过⼆维⾼斯函数对图像进⾏卷积降噪2. ⽤⼆阶导数差分算⼦计算图像强度的⼆阶导数3. 利⽤⼆阶导数算⼦过零点的性质,确定图像中阶跃边缘的位置优点:能快速得到⼀个闭合的轮廓缺点:对噪声敏感Canny边缘检测算⼦最优边缘检测算⼦应有的指标低误判率⾼定位精度抑制虚假边缘过程:1. 计算图像梯度2. 梯度⾮极⼤值抑制3. 双阈值提取边缘点计算图像梯度⾼斯函数的⼀阶导数模板:−11−11,−1−111⾮极⼤值抑制 NMS思想:梯度幅值图像M(x,y),仅保留梯度⽅向上的极⼤值点过程初始化N(x,y)=M(x,y)对每⼀点在梯度⽅向和反梯度⽅向各找n 个点,若M(x,y)⾮最⼤值,则置零,否则保持不变对NMS 结果⼆值化(双阈值提取边缘点)使⽤两个阈值T 1,T 2:T 2>>T 1由T 1得到E 1(x ,y ),低阈值边缘图:更⼤的误检率由T 2得到E 2(x ,y ),⾼阈值边缘图:更可靠边缘连接初始化E (x ,y )=E 2(x ,y )对E (x ,y )中的每个点在E 1(x ,y )中寻找延长部分进⾏连接输出E (x ,y )Canny 边缘检测算⼦步骤1. ⾼斯滤波器平滑2. ⼀阶偏导计算梯度幅值与⽅向3. 对梯度幅值进⾏⾮极⼤值抑制4. 双阈值算法检测连接边缘Canny 边缘检测算⼦优点参数较⼩计算效率⾼得到边缘连续完整双阈值选择T Low =T HIGH ∗0.4曲⾯拟合法出发点:基于差分检测图像边缘的算⼦往往对噪声敏感四点拟合灰度表⾯法⽤⼀平⾯p (x ,y )=ax +by +c 来拟合四邻域像素灰度值定义均⽅差为ε=∑[p (x ,y )−f (x ,y )]2模板a =12−1−111,b =12−11−11特点:先平均后求差分,对噪声由抑制作⽤边缘跟踪出发点:噪声边检测需要归整边缘像素概念:将检测的边缘点连接成线过程:边缘提取连接成线⽅法光栅扫描跟踪法全向跟踪法光栅扫描跟踪法概念:采⽤电视光栅⾏扫描顺序,结合门限检测,对遇到的像素进⾏分析并确定其是否是边缘的跟踪⽅法具体步骤:[][][][]确定检测阈值d(较⾼)超过d的点作为对象点确定跟踪阈值t(较低)确定跟踪邻域扫描下⼀⾏,跟踪邻域内灰度差⼩于t的,接受为对象点若没有对象点,则该曲线跟踪结束重新从下⼀⾏开始利⽤d寻找对象点并进⾏跟踪扫描结束后跟踪结束特征可以不是灰度级跟踪准则根据具体问题灵活运⽤最好再进⾏⼀次其他⽅向的跟踪全向跟踪Hough变化检测法问题:如何连接边界点集基本思想利⽤xoy直⾓坐标系直线y=ax+b,待求极坐标系内点(ρ,θ),已知求点到线的变化ρ=xcosθ+ysinθ原理:过每个点的直线系分别对应极坐标系上的⼀条正弦曲线,如正弦曲线存在共同交点(ρ′,θ′),则必定在平⾯上共线实现:使⽤交点累积器或直⽅图,寻找相交线段最多的参数空间的点,再寻找对应的直线线段特点:对ρ、θ量化过粗会导致直线参数不精确,过细会导致计算量增加获得直线抗噪能⼒强可以⽤来检测直线阈值分割法基本思想:通过阈值T⽣成⼆值图,在四邻域中有背景的像素就是边界像素特点:适⽤于物体与背景有强对⽐的情况下,且物体或背景的灰度较单⼀可以先求背景再求物体可以得到封闭且连通区域的边界通过交互获得阈值通过直⽅图得到阈值基本思想:边界上的点灰度值出现次数较少⽅法:选取直⽅图⾕底的最⼩灰度值作为阈值缺点:会受到噪声⼲扰改进:取两个峰值之间的某个固定位置降噪简单图像的阈值分割判断分析法最佳熵⾃动阈值法复杂图像的阈值分割步骤⾃动平滑直⽅图确定区域类数⾃动搜索多个阈值特征空间聚类k均值聚类步骤任意选取K个初始聚类中⼼值使⽤最⼩距离判别,将新读⼊的像素分⾄K类重新计算中⼼值,等于⼀类元素的平均值重新聚类直⾄新旧差异不⼤区域增长通过像素集合的区域增长实现:根据应⽤选取种⼦选择描述符种⼦根据描述符扩张直⾄没有新的节点加⼊集合简单区域扩张法以未划分点与起点灰度差⼩于阈值T作为描述符优缺点:1. 不好确定阈值2. ⽆法分割缓慢变化边界质⼼区域增长法以未划分点与区域平均灰度值差⼩于阈值T作为描述符分裂合并法实现:1. 对于灰度级不同的区域划分为四个⼦区域2. 若相邻⼦区域所有像素灰度级相同,则合并3. 反复进⾏直⾄不再进⾏新的分裂合并操作Processing math: 100%。