图像处理技术
大作业
院 (系): 物联网工程学院 专 业: 计算机科学与技术 班 级:
学 号:
姓 名:
摘要
图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。它是图像处理、模式识别和人工智能等多个领域中的重要课题, 也是计算机视觉技术中首要的、重要的关键步骤。图像分割的应用非常广泛, 几乎出现在有关图像处理的所有领域。因此, 从世纪年代以来, 图像分割一直都是图像技术中的研究热点。
由于图像分割的好坏直接关系到后续工作的研究进展,广大研究学者们提出了许多既经典又有效的分割算法。但随着数字图像技术的发展和应用领域的拓宽,一些经典的图像分割算法已不能应用于新的领域。因此,新的图像分割算法成为迫切之需并在这样的大背景下应运而生。尽管有许多新的图像分割算法已被提出,但对于图像分割算法的研究仍然是图像分割领域中的一个热点与难点,对广大学者们更是一个巨大的挑战。
本文所做工作主要包括以下三个方面:
(1) 图像分割目标和研究现状。
(2) 图像分割方法总结。
(3) 水平集方法程序实现和实验结果。
关键词:图像分割 活动轮廓模型 算法 图像分辨率水平集方法
图像分割的目标
图像分割是图像分析的第一步, 是计算机视觉的基础, 是图像理解的重要组成部分, 也是图像处理、模式识别和人工智能等多个领域中一个十分重要且又十分困难的问题。所谓图像分割就是要将图像表示为物理上有意义的连通区域的集合, 也就是根据目标与背景的先验知识, 对图像中的目标、背景进行标记、定位, 然后将目标从背景或其他伪目标中分离出来。由于这些被分割的区域在某些特性上相近, 因而图像分割常用于模式识别与图像理解以及图像压缩与编码两大类不同的应用目的门。由分割产生的区域是图像内容的一种表示, 它是对图像进行视觉分析和模式识别的基本前提, 分割结果的质量直接影响到以后的图像分析、识别和解释的质量, 具有重要的意义。图像分割的目的在于根据某些特征如灰度级、频谱、纹理等将一幅图像分成若干有意义的区域, 使得这些特征在某一区域内表现一致或相似, 而在不同区域间表现出明显的不同。
图像分割的应用非常广泛, 几乎出现在有关图像处理的所有领域, 如工业自动化、在线产品检验、生产过程控制、文档图像处理、图像编码、遥感和生物医学图像分析、保安监视, 以及军事、体育、农业工程等方面。在各种图像应用中, 只要需对图像目标进行提取、测量等都离不开图像分割。虽然人们对图像分割已进行了大量的研究, 但还没有一种适合于所有图像的通用的分割算法。所以, 图像分割一直以来都是图像技术中的研究热点。因此, 从原理、应用和应用效果等方面来深入研究图像分割技术, 对于提高图像分析和图像理解系统的性能以及提高图像处理技术的应用水平都具有十分重要的意义。
图像分割的研究现状
图像分割算法的研究作为图像处理中的重要内容成为学者们关注的焦点,从上世纪 60 年代开始人们对图像分割算法进行研究,最初的图像分割算法是 Prewitt 提出的直方图双峰法以及 Doyle 提出的 P-参数(P-title)法。到了 70 年代,日本的大津展之提出了基于全局阈值的最大类间方差(Otsu)法。进入 80 年代后,国内外的许多学者将熵的概念引入到了图像分割中,提出了许多关于最大熵的图像分割算法,但由于早期对图像分割算法的重要性认识不够,图像分割算法很少并且达到的分割效果也不甚理想。
五十多年来,研究学者们已经提出了上千种不同的图像分割算法,经典的方法有阈值分割法、基于边缘检测的图像分割法、基于目标跟踪的图像分割法、基
于小波变换的图像分割法、基于遗传的图像分割算法、基于分水岭的图像分割法、基于形态学的图像分割法以及各种改进的图像分割算法等。很少有图像分割算法可以直接使用于任何图像,绝大多数的图像分割算法只是针对某一个具体图像而提出来,或者是针对某一类型的图像提出。甚至有些算法不具有普遍推广性,因此只适用于特殊领域中的图像处理,而且分割结果的好坏不能根据一般的机械标准去衡量而是要根据具体的应用场合和标准去衡量。
20 世纪 70 年代针对二值图像的评价方法和标准首次被提出。在 20 世纪 80年代的时候图像分割算法的评价方法也很少。到了 90 年代后图像分割算法的评价方法才得到国内外的重视,文献中国内学者对图像分割算法的评价准则进行了研究并提出了一些有效的方法,文献中外国学者提出了针对彩色图像和医学图像的算法性能评价准则。这些算法性能评价准则的研究虽然推动了图像分割算法研究领域的进展并为图像分割算法研究的有效性奠定了坚实的基础。但是这些评价准则不可避免会受到主观因素的影响,一些学者甚至认为只有在一定的条件下才能做到对算法的性能进行客观评价。直到进入 2000 年后,国外的学者们才陆续地提出一些不依赖环境的比较客观新颖的评价方法,如华盛顿大学的H.Zhang 、卡耐基梅陇大学R.Unnikrishnan 团队等。但在国内,对于评价准则的研究并没有得到应有的重视,毫无疑问这对于图像分割算法的研究是一个巨大的损失,虽然图像分割算法的性能评价准则远落后于图像分割算法的研究,但人们不会因为没有一个好的评价方法而停止对图像分割算法的研究,相反,人们对图像分割算法的热情与日俱增。
图像分割方法总结
阈值分割方法
阈值分割方法的历史可追溯到近50年前,现已提出了大量算法,对灰度图像的取阈值分割就是先确定一个处于图像灰度取值范围之中的灰度阈值,然后将图像中各个象素的灰度值都与这个阈值相比较,并根据比较结果将对应的象素分为两类。这两类象素一般分属图像的两类区域,从而达到分割的目的。从该方法中可以看出,确定一个最优阈值是分割的关键。现有的大部分算法都是集中在阈值确定的研究上。阈值分割方法根据图像本身的特点,可分为单阈值分割方法和
多阈值分割方法;也可分为基于象素值的阈值分割方法、基于区域性质的阈值分割方法和基于坐标位置的阈值分割方法。若根据分割算法所有的特征或准则,还可以分为直方图与直方图变换法、最大类空间方差法、最小误差法与均匀化误差法、共生矩阵法、最大熵法、简单统计法与局部特性法、概率松驰法、模糊集法、特征空间聚类法、基于过渡区的阈值选取法等。
基于边缘的分割方法
图像最基本的特征是边缘,它是图像局部特性不连续(或突变)的结果。例如,灰度值的突变、颜色的突变、纹理的突变等边缘检测方法是利用图像一阶导数的极值或二阶导数的过零点信息来提供判断边缘点的基本依据,经典的边缘检测方法是构造对图像灰度阶跃变化敏感的差分算子来进行图像分割,如Robert 算子、Sobel 算子、Prewitt 算子、Laplacian 算子等。
根据检测边缘采用方式的不同,边缘检测方法大致包括以下几类:基于局部图像函数的方法、多尺度方法、图像滤波法、基于反应—扩散方程的方法、多分辨分法、基于边界曲线拟合方法、状态空间搜索法、动态规划法、边界跟踪法、哈夫变换法等。
基于区域的分割方法
区域分割的实质就是把具有某种相似性质的像素连通起来,从而构成最终的分割区域。它利用了图像的局部空间信息,可有效的克服其它方法存在的图像分割空间不连续的缺点,但它通常会造成图像的过度分割。在此类方法中,如果从全图出发,按区域属性特征一致的准则,决定每个像元的区域归属,形成区域图,这常称之为区域生长的分割方法;如果从像元出发,按区域属性特征一致的准则,将属性接近的连通像元聚集为区域是区域增长的分割方法;若综合利用上述两种方法,就是分裂—合并的方法。区域生长法的基本思想是将具有相似性质的象素合起来构成区域,具体做法是选给定图像中要分割的目标物体内的一个小块或者说种子区域,再在种子区域的基础上不断将其周围的象素点以一定的规则加入其中,达到最终将代表该物体的所有象素点结合成一个区域的目的,该方法的关键是要选择合适的生长或相似准则。生长准则一般可分为 8 种:基于区域灰度差准则、基于区域内灰度分布统计性质准则和基于区域形状准则。分裂合并法是先将图像分割成很多的一致性较强的小区域,再按一定的规则将小区域融合成大区
域,达到分割图像的目的。
结合特定理论工具的分割方法
图像分割至今为止尚无通用的自身理论。 近年来,随着各学科许多新理论和新方法的提出,人们也提出了许多与一些特定理论、方法和工具相结合的分割技术。
(1) 基于数学形态学的分割技术
其基本思想是用具有一定形态的结构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。
(2) 基于模糊技术的图像分割方法
基于模糊集合和逻辑的分割方法是以模糊数学为基础,利用隶属决图像中由于信息不全面、不准确、含糊、矛盾等造成的不确定性问题,该方法在医学图像分析中有广泛的应用。
(3) 基于人工神经网络技术的图像分割方法
基于神经网络的分割方法的基本思想是通过训练多层感知机来得到线性决策函数,然后用决策函数对象素进行分类来达到分割的目的。
(4) 遗传算法在图像分割中的应用
遗传算法是基于进化论自然选择机制的、并行的、统计的、随机化搜索方法。对此,科学家们进行了大量的研究工作,并成功地将它们运用于各种类型的优化问题,在分割复杂的图像时,人们往往采用多参量进行信息融合,在多参量参与的最优值的求取过程中,优化计算是最重要的,把自然进化的特征应用到计算机算法中,将能解决很多困难。遗传算法的出现为解决这类问题提供了新而有效的方法,它不仅可以得到全局最优解,而且大量缩短了计算时间。
(5) 基于小波分析和变换的分割技术
该方法是借助新出现的数学工具小波变换来分割图像的一种方法,也是非常新的一种方法。小波变换是一种多尺度多通道分析工具,比较适合对图像进行多尺度的边缘检测。例如,可利用高斯函数的一阶或二阶导数作为小波函数,利用Mallat 算法分解小波,然后基于马尔算子进行多尺度边缘检测,这里小波分解的级数可以控制观察距离的“调焦”,而改变高斯函数的标准差可选择所检测边缘的细节程度。小波变换的计算复杂度较低,抗噪声能力强。理论证明,以零点为对称点的对称二进小波适应检测屋顶状边缘,而以零点为反对称点的反对称二进小波适合检测阶跃状边缘。近
年来多进制(Multi_Band)小波也开始用于边缘检测。另外,利用正交小波基的小波变换也可提取多尺度边缘,并可通过对图像奇异度的计算和估计来区分一些边缘的类型。利用小波变换和其它方法结合起来用分割技术也是现在研究的热点。
水平集方法介绍
水平集方法(Level Set Method)主要是从界面传播等研究领域中逐步发展起来的,是一用于界面追踪和形状建模的数值技术,其最大的优点是可以在笛卡尔网格上对演化中的曲线(面) 进行数值计算,而不必对曲线(面) 进行参数化,其遵循的是欧拉(Euler)框架,计算过程是在固定网格上进行的。水平集方法的另一个优点是可以方便地处理演化曲线(面) 的拓扑结构改变,因此可以解决曲线参数化所带来的问题。
在1988年,Osher 和Sethian 最先提出了水平集的概念(Osher, 1988),它主要被用于解决遵循热力学方程下的火苗的外形变化过程。由于火苗外形的高度动态性和拓扑结构的不确定性,用传统的参数化形式来描述火苗外形的变化是非常困难的,为此他们提出了依赖于时间的运动界面的水平集描述。水平集方法的主要思想是将移动变形的曲线(面) 作为零水平集嵌入到更高一维的函数中,由封闭超曲面的演化方程可以得到函数的演化方程,而嵌入的封闭曲线(面) 总是保持为函数在零水平截面上的点集,最终只要获得演化函数在零水平截面上点集的位置,即可得到移动变形曲线(面) 的演化结果。
水平集方法一个重要的理论前提是隐函数的概念,在曲线演化理论中引入水平集的目的就是为曲线提供一种隐式表达方式,从而避免参数化这种显式表达所带来的一系列问题。在描述曲线运动的时候,隐式表达的思想有着明显的优点。比如,几条曲线在运动中合并成一条曲线,或一条曲线分裂成若干条曲线,这样的拓扑结构变化不可能用一条连续的参数化曲线的运动来表示,原因在于连续的参数化曲线是一个一元连续函数,它显然不能表示多条分开的曲线,这与连续性是自相矛盾的。然而,上述曲线的拓扑结构变化却可以表示成一个连续变化的曲面与一个固定的平面(如高度为零的平面) 的交线的变化,曲面本身可以不发生拓扑结构的变化,从而使得复杂的曲线运动过程变为一个更高一维的函数的演化过程。
程序实现
Demo_RSF.m
clc;clear all;close all;
c0 = 2;
imgID = 1;
Img = imread([num2str(imgID),'.bmp']);
Img = double(Img(:,:,1));
switch imgID
case 1
iterNum =300;
lambda1 = 1.0;
lambda2 = 2.0;
nu = 0.004*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(20:70,30:90) = -c0;
case 2
iterNum =200;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.002*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(26:32,28:34) = -c0;
case 3
iterNum =300;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.003*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(15:78,32:95) = -c0;
case 4
iterNum =150;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.001*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(53:77,46:70) = -c0;
case 5
iterNum =220;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.001*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(47:60,86:99) = -c0;
end
u = initialLSF;
figure;imagesc(Img, [0, 255]);colormap(gray);hold on;axis off,axis equal title('Initial contour');
[c,h] = contour(u,[0 0],'r');
pause(0.1);
timestep = .1;
mu = 1;
epsilon = 1.0;
sigma=3.0;
K=fspecial('gaussian',round(2*sigma)*2+1,sigma);
I = Img;
KI=conv2(Img,K,'same');
KONE=conv2(ones(size(Img)),K,'same');
for n=1:iterNum
u=RSF(u,I,K,KI,KONE, nu,timestep,mu,lambda1,lambda2,epsilon,1); if mod(n,20)==0
pause(0.1);
imagesc(Img, [0, 255]);colormap(gray);hold on;axis off,axis equal
[c,h] = contour(u,[0 0],'r');
iterNum=[num2str(n), ' iterations'];
title(iterNum);
hold off;
end
end
imagesc(Img, [0, 255]);colormap(gray);hold on;axis off,axis equal
[c,h] = contour(u,[0 0],'r');
totalIterNum=[num2str(n), ' iterations'];
title(['Final contour, ', totalIterNum]);
figure;
mesh(u);
title('Final level set function');
RSF.m
function u
RSF(u0,Img,Ksigma,KI,KONE,nu,timestep,mu,lambda1,lambda2,epsilon,numIter) u=u0;
for k1=1:numIter
u=NeumannBoundCond(u); =
K=curvature_central(u);
DrcU=(epsilon/pi)./(epsilon^2.+u.^2);
[f1, f2] = localBinaryFit(Img, u, KI, KONE, Ksigma, epsilon);
s1=lambda1.*f1.^2-lambda2.*f2.^2;
s2=lambda1.*f1-lambda2.*f2;
dataForce=(lambda1-lambda2)*KONE.*Img.*Img+conv2(s1,Ksigma,'same')-2.*Img.*conv2(s2,Ksigma,'same');
A=-DrcU.*dataForce;
P=mu*(4*del2(u)-K);
L=nu.*DrcU.*K;
u=u+timestep*(L+P+A);
end
function [f1, f2]= localBinaryFit(Img, u, KI, KONE, Ksigma, epsilon)
Hu=0.5*(1+(2/pi)*atan(u./epsilon));
I=Img.*Hu;
c1=conv2(Hu,Ksigma,'same');
c2=conv2(I,Ksigma,'same');
f1=c2./(c1);
f2=(KI-c2)./(KONE-c1);
function g = NeumannBoundCond(f)
[nrow,ncol] = size(f);
g = f;
g([1 nrow],[1 ncol]) = g([3 nrow-2],[3 ncol-2]);
g([1 nrow],2:end-1) = g([3 nrow-2],2:end-1); g(2:end-1,[1 ncol]) = g(2:end-1,[3 ncol-2]);
function k = curvature_central(u)
[ux,uy] = gradient(u);
normDu = sqrt(ux.^2+uy.^2+1e-10);
Nx = ux./normDu;
Ny = uy./normDu;
[nxx,junk] = gradient(Nx);
[junk,nyy] = gradient(Ny); k = nxx+nyy;
实验结果
如图所示
图像处理技术
大作业
院 (系): 物联网工程学院 专 业: 计算机科学与技术 班 级:
学 号:
姓 名:
摘要
图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。它是图像处理、模式识别和人工智能等多个领域中的重要课题, 也是计算机视觉技术中首要的、重要的关键步骤。图像分割的应用非常广泛, 几乎出现在有关图像处理的所有领域。因此, 从世纪年代以来, 图像分割一直都是图像技术中的研究热点。
由于图像分割的好坏直接关系到后续工作的研究进展,广大研究学者们提出了许多既经典又有效的分割算法。但随着数字图像技术的发展和应用领域的拓宽,一些经典的图像分割算法已不能应用于新的领域。因此,新的图像分割算法成为迫切之需并在这样的大背景下应运而生。尽管有许多新的图像分割算法已被提出,但对于图像分割算法的研究仍然是图像分割领域中的一个热点与难点,对广大学者们更是一个巨大的挑战。
本文所做工作主要包括以下三个方面:
(1) 图像分割目标和研究现状。
(2) 图像分割方法总结。
(3) 水平集方法程序实现和实验结果。
关键词:图像分割 活动轮廓模型 算法 图像分辨率水平集方法
图像分割的目标
图像分割是图像分析的第一步, 是计算机视觉的基础, 是图像理解的重要组成部分, 也是图像处理、模式识别和人工智能等多个领域中一个十分重要且又十分困难的问题。所谓图像分割就是要将图像表示为物理上有意义的连通区域的集合, 也就是根据目标与背景的先验知识, 对图像中的目标、背景进行标记、定位, 然后将目标从背景或其他伪目标中分离出来。由于这些被分割的区域在某些特性上相近, 因而图像分割常用于模式识别与图像理解以及图像压缩与编码两大类不同的应用目的门。由分割产生的区域是图像内容的一种表示, 它是对图像进行视觉分析和模式识别的基本前提, 分割结果的质量直接影响到以后的图像分析、识别和解释的质量, 具有重要的意义。图像分割的目的在于根据某些特征如灰度级、频谱、纹理等将一幅图像分成若干有意义的区域, 使得这些特征在某一区域内表现一致或相似, 而在不同区域间表现出明显的不同。
图像分割的应用非常广泛, 几乎出现在有关图像处理的所有领域, 如工业自动化、在线产品检验、生产过程控制、文档图像处理、图像编码、遥感和生物医学图像分析、保安监视, 以及军事、体育、农业工程等方面。在各种图像应用中, 只要需对图像目标进行提取、测量等都离不开图像分割。虽然人们对图像分割已进行了大量的研究, 但还没有一种适合于所有图像的通用的分割算法。所以, 图像分割一直以来都是图像技术中的研究热点。因此, 从原理、应用和应用效果等方面来深入研究图像分割技术, 对于提高图像分析和图像理解系统的性能以及提高图像处理技术的应用水平都具有十分重要的意义。
图像分割的研究现状
图像分割算法的研究作为图像处理中的重要内容成为学者们关注的焦点,从上世纪 60 年代开始人们对图像分割算法进行研究,最初的图像分割算法是 Prewitt 提出的直方图双峰法以及 Doyle 提出的 P-参数(P-title)法。到了 70 年代,日本的大津展之提出了基于全局阈值的最大类间方差(Otsu)法。进入 80 年代后,国内外的许多学者将熵的概念引入到了图像分割中,提出了许多关于最大熵的图像分割算法,但由于早期对图像分割算法的重要性认识不够,图像分割算法很少并且达到的分割效果也不甚理想。
五十多年来,研究学者们已经提出了上千种不同的图像分割算法,经典的方法有阈值分割法、基于边缘检测的图像分割法、基于目标跟踪的图像分割法、基
于小波变换的图像分割法、基于遗传的图像分割算法、基于分水岭的图像分割法、基于形态学的图像分割法以及各种改进的图像分割算法等。很少有图像分割算法可以直接使用于任何图像,绝大多数的图像分割算法只是针对某一个具体图像而提出来,或者是针对某一类型的图像提出。甚至有些算法不具有普遍推广性,因此只适用于特殊领域中的图像处理,而且分割结果的好坏不能根据一般的机械标准去衡量而是要根据具体的应用场合和标准去衡量。
20 世纪 70 年代针对二值图像的评价方法和标准首次被提出。在 20 世纪 80年代的时候图像分割算法的评价方法也很少。到了 90 年代后图像分割算法的评价方法才得到国内外的重视,文献中国内学者对图像分割算法的评价准则进行了研究并提出了一些有效的方法,文献中外国学者提出了针对彩色图像和医学图像的算法性能评价准则。这些算法性能评价准则的研究虽然推动了图像分割算法研究领域的进展并为图像分割算法研究的有效性奠定了坚实的基础。但是这些评价准则不可避免会受到主观因素的影响,一些学者甚至认为只有在一定的条件下才能做到对算法的性能进行客观评价。直到进入 2000 年后,国外的学者们才陆续地提出一些不依赖环境的比较客观新颖的评价方法,如华盛顿大学的H.Zhang 、卡耐基梅陇大学R.Unnikrishnan 团队等。但在国内,对于评价准则的研究并没有得到应有的重视,毫无疑问这对于图像分割算法的研究是一个巨大的损失,虽然图像分割算法的性能评价准则远落后于图像分割算法的研究,但人们不会因为没有一个好的评价方法而停止对图像分割算法的研究,相反,人们对图像分割算法的热情与日俱增。
图像分割方法总结
阈值分割方法
阈值分割方法的历史可追溯到近50年前,现已提出了大量算法,对灰度图像的取阈值分割就是先确定一个处于图像灰度取值范围之中的灰度阈值,然后将图像中各个象素的灰度值都与这个阈值相比较,并根据比较结果将对应的象素分为两类。这两类象素一般分属图像的两类区域,从而达到分割的目的。从该方法中可以看出,确定一个最优阈值是分割的关键。现有的大部分算法都是集中在阈值确定的研究上。阈值分割方法根据图像本身的特点,可分为单阈值分割方法和
多阈值分割方法;也可分为基于象素值的阈值分割方法、基于区域性质的阈值分割方法和基于坐标位置的阈值分割方法。若根据分割算法所有的特征或准则,还可以分为直方图与直方图变换法、最大类空间方差法、最小误差法与均匀化误差法、共生矩阵法、最大熵法、简单统计法与局部特性法、概率松驰法、模糊集法、特征空间聚类法、基于过渡区的阈值选取法等。
基于边缘的分割方法
图像最基本的特征是边缘,它是图像局部特性不连续(或突变)的结果。例如,灰度值的突变、颜色的突变、纹理的突变等边缘检测方法是利用图像一阶导数的极值或二阶导数的过零点信息来提供判断边缘点的基本依据,经典的边缘检测方法是构造对图像灰度阶跃变化敏感的差分算子来进行图像分割,如Robert 算子、Sobel 算子、Prewitt 算子、Laplacian 算子等。
根据检测边缘采用方式的不同,边缘检测方法大致包括以下几类:基于局部图像函数的方法、多尺度方法、图像滤波法、基于反应—扩散方程的方法、多分辨分法、基于边界曲线拟合方法、状态空间搜索法、动态规划法、边界跟踪法、哈夫变换法等。
基于区域的分割方法
区域分割的实质就是把具有某种相似性质的像素连通起来,从而构成最终的分割区域。它利用了图像的局部空间信息,可有效的克服其它方法存在的图像分割空间不连续的缺点,但它通常会造成图像的过度分割。在此类方法中,如果从全图出发,按区域属性特征一致的准则,决定每个像元的区域归属,形成区域图,这常称之为区域生长的分割方法;如果从像元出发,按区域属性特征一致的准则,将属性接近的连通像元聚集为区域是区域增长的分割方法;若综合利用上述两种方法,就是分裂—合并的方法。区域生长法的基本思想是将具有相似性质的象素合起来构成区域,具体做法是选给定图像中要分割的目标物体内的一个小块或者说种子区域,再在种子区域的基础上不断将其周围的象素点以一定的规则加入其中,达到最终将代表该物体的所有象素点结合成一个区域的目的,该方法的关键是要选择合适的生长或相似准则。生长准则一般可分为 8 种:基于区域灰度差准则、基于区域内灰度分布统计性质准则和基于区域形状准则。分裂合并法是先将图像分割成很多的一致性较强的小区域,再按一定的规则将小区域融合成大区
域,达到分割图像的目的。
结合特定理论工具的分割方法
图像分割至今为止尚无通用的自身理论。 近年来,随着各学科许多新理论和新方法的提出,人们也提出了许多与一些特定理论、方法和工具相结合的分割技术。
(1) 基于数学形态学的分割技术
其基本思想是用具有一定形态的结构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。
(2) 基于模糊技术的图像分割方法
基于模糊集合和逻辑的分割方法是以模糊数学为基础,利用隶属决图像中由于信息不全面、不准确、含糊、矛盾等造成的不确定性问题,该方法在医学图像分析中有广泛的应用。
(3) 基于人工神经网络技术的图像分割方法
基于神经网络的分割方法的基本思想是通过训练多层感知机来得到线性决策函数,然后用决策函数对象素进行分类来达到分割的目的。
(4) 遗传算法在图像分割中的应用
遗传算法是基于进化论自然选择机制的、并行的、统计的、随机化搜索方法。对此,科学家们进行了大量的研究工作,并成功地将它们运用于各种类型的优化问题,在分割复杂的图像时,人们往往采用多参量进行信息融合,在多参量参与的最优值的求取过程中,优化计算是最重要的,把自然进化的特征应用到计算机算法中,将能解决很多困难。遗传算法的出现为解决这类问题提供了新而有效的方法,它不仅可以得到全局最优解,而且大量缩短了计算时间。
(5) 基于小波分析和变换的分割技术
该方法是借助新出现的数学工具小波变换来分割图像的一种方法,也是非常新的一种方法。小波变换是一种多尺度多通道分析工具,比较适合对图像进行多尺度的边缘检测。例如,可利用高斯函数的一阶或二阶导数作为小波函数,利用Mallat 算法分解小波,然后基于马尔算子进行多尺度边缘检测,这里小波分解的级数可以控制观察距离的“调焦”,而改变高斯函数的标准差可选择所检测边缘的细节程度。小波变换的计算复杂度较低,抗噪声能力强。理论证明,以零点为对称点的对称二进小波适应检测屋顶状边缘,而以零点为反对称点的反对称二进小波适合检测阶跃状边缘。近
年来多进制(Multi_Band)小波也开始用于边缘检测。另外,利用正交小波基的小波变换也可提取多尺度边缘,并可通过对图像奇异度的计算和估计来区分一些边缘的类型。利用小波变换和其它方法结合起来用分割技术也是现在研究的热点。
水平集方法介绍
水平集方法(Level Set Method)主要是从界面传播等研究领域中逐步发展起来的,是一用于界面追踪和形状建模的数值技术,其最大的优点是可以在笛卡尔网格上对演化中的曲线(面) 进行数值计算,而不必对曲线(面) 进行参数化,其遵循的是欧拉(Euler)框架,计算过程是在固定网格上进行的。水平集方法的另一个优点是可以方便地处理演化曲线(面) 的拓扑结构改变,因此可以解决曲线参数化所带来的问题。
在1988年,Osher 和Sethian 最先提出了水平集的概念(Osher, 1988),它主要被用于解决遵循热力学方程下的火苗的外形变化过程。由于火苗外形的高度动态性和拓扑结构的不确定性,用传统的参数化形式来描述火苗外形的变化是非常困难的,为此他们提出了依赖于时间的运动界面的水平集描述。水平集方法的主要思想是将移动变形的曲线(面) 作为零水平集嵌入到更高一维的函数中,由封闭超曲面的演化方程可以得到函数的演化方程,而嵌入的封闭曲线(面) 总是保持为函数在零水平截面上的点集,最终只要获得演化函数在零水平截面上点集的位置,即可得到移动变形曲线(面) 的演化结果。
水平集方法一个重要的理论前提是隐函数的概念,在曲线演化理论中引入水平集的目的就是为曲线提供一种隐式表达方式,从而避免参数化这种显式表达所带来的一系列问题。在描述曲线运动的时候,隐式表达的思想有着明显的优点。比如,几条曲线在运动中合并成一条曲线,或一条曲线分裂成若干条曲线,这样的拓扑结构变化不可能用一条连续的参数化曲线的运动来表示,原因在于连续的参数化曲线是一个一元连续函数,它显然不能表示多条分开的曲线,这与连续性是自相矛盾的。然而,上述曲线的拓扑结构变化却可以表示成一个连续变化的曲面与一个固定的平面(如高度为零的平面) 的交线的变化,曲面本身可以不发生拓扑结构的变化,从而使得复杂的曲线运动过程变为一个更高一维的函数的演化过程。
程序实现
Demo_RSF.m
clc;clear all;close all;
c0 = 2;
imgID = 1;
Img = imread([num2str(imgID),'.bmp']);
Img = double(Img(:,:,1));
switch imgID
case 1
iterNum =300;
lambda1 = 1.0;
lambda2 = 2.0;
nu = 0.004*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(20:70,30:90) = -c0;
case 2
iterNum =200;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.002*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(26:32,28:34) = -c0;
case 3
iterNum =300;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.003*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(15:78,32:95) = -c0;
case 4
iterNum =150;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.001*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(53:77,46:70) = -c0;
case 5
iterNum =220;
lambda1 = 1.0;
lambda2 = 1.0;
nu = 0.001*255*255;
initialLSF = ones(size(Img(:,:,1))).*c0;
initialLSF(47:60,86:99) = -c0;
end
u = initialLSF;
figure;imagesc(Img, [0, 255]);colormap(gray);hold on;axis off,axis equal title('Initial contour');
[c,h] = contour(u,[0 0],'r');
pause(0.1);
timestep = .1;
mu = 1;
epsilon = 1.0;
sigma=3.0;
K=fspecial('gaussian',round(2*sigma)*2+1,sigma);
I = Img;
KI=conv2(Img,K,'same');
KONE=conv2(ones(size(Img)),K,'same');
for n=1:iterNum
u=RSF(u,I,K,KI,KONE, nu,timestep,mu,lambda1,lambda2,epsilon,1); if mod(n,20)==0
pause(0.1);
imagesc(Img, [0, 255]);colormap(gray);hold on;axis off,axis equal
[c,h] = contour(u,[0 0],'r');
iterNum=[num2str(n), ' iterations'];
title(iterNum);
hold off;
end
end
imagesc(Img, [0, 255]);colormap(gray);hold on;axis off,axis equal
[c,h] = contour(u,[0 0],'r');
totalIterNum=[num2str(n), ' iterations'];
title(['Final contour, ', totalIterNum]);
figure;
mesh(u);
title('Final level set function');
RSF.m
function u
RSF(u0,Img,Ksigma,KI,KONE,nu,timestep,mu,lambda1,lambda2,epsilon,numIter) u=u0;
for k1=1:numIter
u=NeumannBoundCond(u); =
K=curvature_central(u);
DrcU=(epsilon/pi)./(epsilon^2.+u.^2);
[f1, f2] = localBinaryFit(Img, u, KI, KONE, Ksigma, epsilon);
s1=lambda1.*f1.^2-lambda2.*f2.^2;
s2=lambda1.*f1-lambda2.*f2;
dataForce=(lambda1-lambda2)*KONE.*Img.*Img+conv2(s1,Ksigma,'same')-2.*Img.*conv2(s2,Ksigma,'same');
A=-DrcU.*dataForce;
P=mu*(4*del2(u)-K);
L=nu.*DrcU.*K;
u=u+timestep*(L+P+A);
end
function [f1, f2]= localBinaryFit(Img, u, KI, KONE, Ksigma, epsilon)
Hu=0.5*(1+(2/pi)*atan(u./epsilon));
I=Img.*Hu;
c1=conv2(Hu,Ksigma,'same');
c2=conv2(I,Ksigma,'same');
f1=c2./(c1);
f2=(KI-c2)./(KONE-c1);
function g = NeumannBoundCond(f)
[nrow,ncol] = size(f);
g = f;
g([1 nrow],[1 ncol]) = g([3 nrow-2],[3 ncol-2]);
g([1 nrow],2:end-1) = g([3 nrow-2],2:end-1); g(2:end-1,[1 ncol]) = g(2:end-1,[3 ncol-2]);
function k = curvature_central(u)
[ux,uy] = gradient(u);
normDu = sqrt(ux.^2+uy.^2+1e-10);
Nx = ux./normDu;
Ny = uy./normDu;
[nxx,junk] = gradient(Nx);
[junk,nyy] = gradient(Ny); k = nxx+nyy;
实验结果
如图所示