数字图像处理第九章 图像分割
- 格式:ppt
- 大小:7.26 MB
- 文档页数:95
图像数字处理图像分割图像分割是图像数字处理中的一项重要技术,它将图像中的像素点划分成多个区域,以便更好地理解和分析图像。
在本文中,我将介绍图像分割的原理、常用方法及其应用领域。
一、图像分割的原理图像分割的目标是将图像划分成一系列具有相似特征的区域,使得每个区域内的像素点具有相同或相似的属性。
它的基本原理是通过寻找像素点之间的差异来确定区域边界。
常用的图像分割方法包括阈值分割、边缘检测和区域生长等。
阈值分割是最简单的分割方法,它根据像素点的灰度值与预设的阈值进行比较,将像素点分为不同的区域。
边缘检测通过检测图像中的边缘信息来进行分割,常用的方法有Sobel算子和Canny算子。
区域生长是利用像素之间的相似性来逐步迭代地合并像素点,直到形成连续的区域。
二、常用的图像分割方法1. 基于阈值的分割方法:阈值分割是最简单且常用的分割方法之一。
它根据像素点的灰度值与预设的阈值进行比较,将像素点分为不同的区域。
常用的阈值分割方法有全局阈值分割和自适应阈值分割。
2. 基于边缘检测的分割方法:边缘检测是一种常用的图像分割方法,它通过检测图像中的边缘信息来进行分割。
常用的边缘检测方法有Sobel算子、Canny算子等。
3. 基于区域生长的分割方法:区域生长方法是利用像素之间的相似性来逐步迭代地合并像素点,直到形成连续的区域。
它常用于分割具有明显纹理特征的图像。
三、图像分割的应用领域图像分割在计算机视觉、医学影像处理、遥感图像分析等领域具有广泛的应用。
以下列举几个典型的应用领域:1. 目标检测与识别:图像分割可以帮助检测和识别图像中的目标物体,如人脸识别、车辆检测等。
2. 医学影像处理:在医学影像中,图像分割可以帮助医生准确地定位和分析病变区域,如肿瘤检测、血管分割等。
3. 遥感图像分析:遥感图像通常包含大量的地物信息,通过图像分割可以将不同类型的地物区分开来,如土地利用分类、城市区域划分等。
4. 视频分析:图像分割在视频分析中扮演重要角色,可以提取视频中的运动目标,如行人检测、行为分析等。
数字图像处理---图像分割图像分割概述图像分析概念:对图像中感兴趣的⽬标进⾏检测和测量,以获得它们的客观信息,从⽽建⽴对图像的描述步骤: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%。
数字图像处理:图像分割数字图像处理:图像分割前⾔:这个实验分成两部分代码,分别对应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('前景分割结果');。