版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章数学形态学以及二值图像形态学处理
9.1数学形态学概述
9.2数学形态学基本操作—腐蚀和膨胀9.3数学形态学其它操作
9.4二值图像的连通性
9.5查表操作9.6数学形态学在二值图像处理中的应用习题
9.1数学形态学概述
9.1.1数学形态学简介数学形态学(MathematicalMorphology)诞生于1964年。法国巴黎矿业学院博士生赛拉(J.Serra)和导师马瑟荣,在从事铁矿核的定量岩石学分析及预测其开采价值的研究中提出“击中/击不中变换”,并在理论层面上第一次引入了形态学的表达式,建立了颗粒分析方法。他们的工作奠定了这门学科的理论基础,如击中/击不中变换、开闭运算、布尔模型及纹理分析器的原型等。数学形态学的基本思想是用具有一定形态的结构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的数学基础和所用语言是集合论,因此它具有完备的数学基础,这为形态学用于图像分析和处理、形态滤波器的特性分析和系统设计奠定了坚实的基础。数学形态学的应用可以简化图像数据,保持它们基本的形状特性,并除去不相干的结构。数学形态学的算法具有天然的并行实现的结构,实现了形态学分析和处理算法的并行,大大提高了图像分析和处理的速度。数学形态学是一种应用于图像处理和模式识别领域的新方法。形态学是生物学的一个分支,常用它来处理动物和植物的形状和结构。1964年,法国学者Serra对铁矿石的岩相进行定量分析,以预测铁矿石的可扎性。几乎同时,Matheron研究了多孔介质的几何结构、渗透性及两者的关系,他们的研究成果直接导致数学形态学的形成。随后Serra和Matheron在法国共同建立了Fontainebleau数学形态学研究中心。在以后几年的研究中,他们逐步建立并完善了数学形态学的理论体系。此后,又研究了基于数学形态学的图像处理系统。
数学形态学是一门建立在严密的数学理论基础上的科学。Matheron于1975年出版的《RandomSetsandIntegralGeometry》一书中严谨而详细地论证了随机集论和积分几何,为数学形态学奠定了理论基础。1982年,Serra出版的专著《ImageAnalysisandImageProcessing》是数学形态学发展的里程碑,它表明数学形态学在理论上已经趋于完备,在实践应用中不断深入。此后,经过科学工作者的不断努力,Serra主编的《ImageAnalysisandMathematicalMorphology》第2、3卷相继出版。数学形态学已经构成一种新的图像处理方法和理论,成为计算机数字图像处理的一个重要研究领域,并且已经应用于多门学科的数字图像分析和处理过程中。这门学科在计算机文字识别,计算机显微图像分析(如定量金相分析,颗粒分析),医学图像处理,图像编码压缩,工业检测(如食品检验和印刷电路自动检测),机器人视觉,汽车运动情况监测等方面都取得了非常成功的应用。另外,它在指纹检测、经济地理、合成音乐和断层X光照像等领域也有良好的应用前景。形态学方法已成为图像应用领域工程技术人员的必备工具。9.1.2数学形态学的集合理论基础数学形态学是以集合论为基础来描述的。下面列出几个必要的集合论概念和定义。集合用大写字母表示,如A,B;元素用小写字母表示,如a,b;集合中的内容表示为{·},如C = {w|w = -d,d∈D},即集合C是元素w的集合,而w是通过-1与集合D中的所有元素d相乘得到的。集合与元素之间是包含和不包含的关系,如。对于,称A为B的子集;集合为A和B的并集;为A和B的交集;如果则称A和B互斥的或不相容的;A的补集记为;A和B的差集记为A-B,且A-B
。集合之间的基本运算可由图9.1形象地表达。图9.1集合之间的基本运算将A用z=(z1,z2)位移,记为(A)z,(A)z =;A的映像记为,。图9.2形象地表达了集合的位移和镜像运算。图9.2集合的位移和镜像9.2数学形态学基本操作——腐蚀和膨胀
数学形态学是由一组形态学的集合运算组成的,其基本运算有:膨胀、腐蚀、开运算和闭运算、击中/击不中、细化和粗化。这些基本运算在二值图像和灰度图像中各有特点。基于这些基本运算还可推导和组合成各种数学形态学实用算法。其中膨胀和腐蚀是数学形态学方法中最基本的运算。膨胀和腐蚀的原理是利用一个称作结构元素的“探针”收集图像的信息,当探针在图像中不断移动时,通过简单的逻辑运算便可考察图像各个部分之间的相互关系,从而了解图像的结构特征,如图9.3所示。图9.3形态学处理的基本原理9.2.1膨胀
A用B来膨胀(Dilation)定义为,,其中B称为结构元素。膨胀的过程为将B平移x,结果是平移后与A交集不为空的x集合。也就是说,用B来膨胀A得到的集合是B的位移与A至少有一个非零元素相交时B的原点位置的集合。膨胀可用图9.4形象地说明。设图9.4中灰色像素值为1,白色像素值为0,B作为结构元素来膨胀A,B中的“+”号作为B的原点。在的图像中,黑色像素为膨胀出来的值为1的像素。图9.4膨胀示意图图9.5进一步说明了膨胀的原理。结构元素的值与输入图像的值做“或”运算,当值是1时,输出图像对应位置上的值为1,反之为0。图9.5二值图像的膨胀运算
MATLAB中用于实现膨胀的函数为imdilate(IM,SE),IM为待膨胀的图像,SE为结构元素。下面一段代码实现矩阵的膨胀运算。
BW=zeros(9,10);
BW(4:6,4:7)=1;
BW=SE=strel('square',3)SE=%构建3 × 3矩阵元素结构
111111111BW2=imdilate(BW,SE)BW2=
%BW2中的阴影部分为膨胀出来的数值下面一段代码使用3 × 3元素实现图像腐蚀,计算结果如图9.6所示。
bw=imread('test.bmp');
se=strel(square,3); %创建线形Strel对象
bw2=imdilate(bw,se); %膨胀图像
imshow(bw),title('原图像')
figure,imshow(bw2),title('膨胀图像')图9.6图像膨胀结果上述代码中,strel(shape,parameters)函数用于建立各种结构元素,在形态学处理中很重要。shape参数指定结构元素的形状,除上述square形状外,还可以实现下列形状的构建,例如:
se1=strel(‘rectangle’,MN),其中MN=[3,5]用于建立矩形结构元素,即
se4=strel('diamond',R),其中R = 3,可以建立菱形结构元素,即
se4=strel('diamond',R),其中R = 3,可以建立菱形结构元素,即
se2=strel('line',,LEN,DEG)可建立长度为LEN,角度DEG的直线结构元素,即
se3=strel('disk',R),其中R = 3,可建立半径为R个像素的圆结构元素,即9.2.2腐蚀另一种基本的形态学处理是腐蚀(erosion),腐蚀和膨胀的过程相反。A用B来腐蚀记作,。通过腐蚀可以缩小图像的区域,得到可以完全包含B的A中的原点x的区域。腐蚀可以由图9.7表达,图中黑色部分为腐蚀剩下的像素。
MATLAB中用于实现腐蚀的函数为imerode(IM,SE),IM为待膨胀的图像,SE为结构元素。下面一段代码实现矩阵的腐蚀运算。运行结果如图9.8所示。
bw=imread('test.bmp');
se=strel('square',3); %创建线形Strel对象
bw2=imerode(bw,se); %腐蚀图像
imshow(bw),title('原图像')
figure,imshow(bw2),title('腐蚀后的图像')图9.8图像腐蚀结果9.2.3膨胀和腐蚀的对偶性膨胀和腐蚀是一种对偶的关系:使用结构元素对图像进行膨胀后的背景相当于使用该结构元素的背景对图像的背景进行腐蚀,反之相同。这种关系可以写为或9.3数学形态学其它操作
9.3.1开操作开操作(opening)定义:B对A进行的开操作就是先用B对A腐蚀,然后用B对结果进行膨胀。开操作可表示为的边界可理解为通过B在A的边界内转动时,B中的点所能达到的最远点。开操作可等价地表示为其中(B)z为B在图像内原点为z的平移。开操作的原理可以用图9.9形象地说明。图9.9开操作示意图
MATLAB中使用IM2=imopen(IM,SE)实现开操作。下面一段代码实现图像的开操作,计算结果如图9.10所示。从图9.10可以看出,开操作保留了图像中较大的点,滤除了较小的点。
I=imread('test2.bmp');
imshow(I)
se=strel('disk',5);
I_opened=imopen(I,se);
figure
imshow(I_opened,[])图9.10开操作结果9.3.2闭操作闭操作(close)的定义:B对A进行的闭操作就是先用B对A膨胀,然后用B对结果进行腐蚀。闭操作可以表示为
A·B=
A·B的边界可理解为B在A的边界外转动时,B中的点所能达到的最远点。开操作可等价地表示为其中(B)z为B在图像内原点为z的平移。开操作的原理可以用图9.11形象地说明。图9.11闭操作示意图
MATLAB中使用IM2=imclose(IM,SE)实现开操作。下面一段代码实现图像的闭操作,计算结果如图9.12所示。从图9.12可以看出,闭操作将图像中的圆连成一片,滤除中间的空区域。
originalBW=imread('circles.png');
imshow(originalBW);
se=strel('disk',10);
closeBW=imclose(originalBW,se);
figure,imshow(closeBW)图9.12闭操作结果9.3.3击中/击不中变换击中和击不中的概念可由图9.13表示。结构元素B完全在A中时,称为B击中A;B完全在A外部时,称为B击不中A。图9.13击中和击不中示意图击中和击不中变换(hit-misstransformation)用于在图形A中寻找某一个特定结构X的位置。B与X相关,一般分为X与B - X两部分,如图9.14所示。B是比X稍大一点的结构,B - X是B除去X以外的边缘。为了寻找图形A中X的位置,首先以X对A做腐蚀处理,即AX。X的原点通常选在X的重心处。腐蚀的结果也就是B击中A的区域,如图9.14所示,不但包含了X的重心位置,也包含了Y中的一部分区域。为了进一步找到X的位置,用B - X对A的补Ac做腐蚀操作,即Ac(B - X)。由于Y区域比B大,所以Ac(B - X)中不含有Y中的点,也就是B - X击不中Ac中的Y区域。因此,为了得到X的位置,击中和击不中变换可表达为A*B=AXAc(B-X)。图9.14二值图像的击中和击不中变换
MATLAB中用bwhitmiss(BW1,INTERVAL)实现击中/击不中变换。其中BW1为待变换图像,INTERVAL表示结构元素,结构元素中 +1表示E的1元素,-1表示F的1元素。下面一段代码演示bwhitmiss的使用。
bw=[000000
001100
011110
011110
001100
001000]
interval=[0-1-111-1010];bw2=bwhitmiss(bw,interval)bw2=9.4二值图像的连通性
9.4.1像素的连通性像素的连通性是像素之间的基本关系。对于二维图像而言,除图像边缘外,每个像素都有8个自然的相邻点。在处理技术上可以有两种定义:4连通和8连通。4连通认为一个像素只与水平和垂直方向上的相邻点连通,8连通认为一个像素与所有相邻点连通,如图9.15所示。图9.154连通和8连通示意图当然还可以在8个相邻像素中任意选取像素来定义连通性。像素的连通性在图像的识别、细化和填充中有重要的应用。在MATLAB中用一个3 × 3矩阵来定义像素的连通性,1代表连通,0代表不连通,如4连通的定义如下:
CONN=
010
111
010“南北”连通的定义如下:
CONN=
010
010
010需要注意的是连通性矩阵CONN的定义必须关于中心对称。9.4.2二值图像的对象二值图像的对象是指值为1且连通在一起的像素集合,比如图9.16中含有一个环形的对象。图像中对象的个数与像素的连通性定义相关。例如就图9.17而言,在4连通条件下,含有2个对象,而在8连通条件下只有1个对象。图9.16二值环形对象图9.17不同连通条件下的对象有时需要将一幅图像中的某个对象选取出来。MATLAB中用bwselect(BW,c,r,n)实现对象的分离选取。bwselect的参数c、r分别标出对象中任意像素所在的像素坐标,n表示像素连通性,可以取4或8。下面一段代码实现文字对象的选取,结果如图9.18所示。
BW1=imread('text.png');
c=[43185212];
r=[3868181];
BW2=bwselect(BW1,c,r,4);
imshow(BW1),figure,imshow(BW2)图9.18对象的选取
bwselect(BW,n)可以用鼠标在交互模式下实现更为直接的对象选取,按回车键结束选取,如图9.19所示。
BW1=imread('text.png');
BW2=bwselect(BW1,4);
imshow(BW1),
figure,imshow(BW2)图9.19交互式对象选取
MATLAB不但可以实现对象的选取也可以对各个对象进行标记。bwlabel(BW,n)函数实现对象从1~n的标记,n表示像素连通性,可以取4或8。
BW=[1110000011101100111011001110001011100010111000101110011011100000];
L=bwlabel(BW,4)
L=
11100000
11102200
11102200
11100030
11100030
11100030
11100330
111000009.5查表操作
查表操作适于处理2×2和3×3的邻域情况,如图9.20所示。设图9.20中的圆圈像素位置为原点。对于2×2和3×3的邻域分别有16和512种可能的组合情况。MATLAB中将所有情况按顺序列出,并根据每种情况下的像素值设定一定的条件,满足条件时,圆圈位置的像素值设为1,否则为0。图9.202×2和3×3的查表邻域由于每种条件下的各个邻域矩阵的值事先计算出来并存入表中,因此可以大大提高计算的速度。对于4×4以上的情况,至少有65536种可能组合,使得查表运算意义不大,因此MATLAB的函数不支持4×4以上情况的查表运算。
MATLAB中的makelut(fun,n)函数用于建立表单,fun为设定判断条件的函数,n为邻域大小,可以选为2或3。下面一段代码用于建立一个2×2的邻域表,条件为邻域矩阵的所有值的和不小于2。f=@(x)(sum(x(:))>=2);lut=makelut(f,2)lut=0 0 0 1 0 1 1 1 0 1 1 1 1 1 1
applylut(BW,LUT)函数用于实现查表操作,BW为被处理图像,LUT为表单。下面一段代码使用sum(x(:))==4创建2 × 2的邻域表单,实际上是当2 × 2邻域内的值全为1时,查表值才为1,这实际上是使用2 × 2的全1矩阵作为结构元素对图像进行腐蚀。代码运行结果如图9.21所示。lut=makelut('sum(x(:))==4',2);BW=imread('text.png');BW2=applylut(BW,lut);imshow(BW),figure,imshow(BW2)图9.21查表操作结果9.6数学形态学在二值图像处理中的应用
9.6.1噪声去除通过开操作和闭操作可以去除图像中孤立的噪声点,同时保留图像中本来的细节结构,相对于一般二维图像低通滤波器效果更好。下面一段代码实现指纹图像的噪声去除,使用2 × 2的方形结构元素对图9.22(a)中的噪声图像进行开操作实现噪声的去除。小于2 × 2的方形结构元素的噪声孤立点在腐蚀操作中被去除,指纹细节被保留,如图9.22(b)所示。BW=imread('fg.bmp');imshow(BW)se=strel('square',2);I_open=imopen(BW,se);figureimshow(I_open)图9.22指纹图像的噪声去除9.6.2图像细化和骨化将图像变换成单像素厚度组成的细线称为图像细化。留图像中心线的细化称为骨化。细化和骨化可以去除图像的冗余信息,有利于提取图像的本质特征,是很多图像处理必要的预处理过程。一般细化过程是在不破坏连通性的前提下进行的。通常的算法步骤如下:
(1)做腐蚀操作,但不立刻删除像素,只打标记。
(2)将不破坏连通性的标记点删掉。
(3)重复执行,直到图像结果不发生变化,得到了细化结果。
MATLAB中使用bwmorph(BW,operation,n)函数实现图像的细化和骨化,BW为被处理图像;operation为算法参数,可以取为'dilate'、'erode'和'open'等基本形态学操作,也可以取为'skel'和'thin',表示骨化和细化;n表示操作的次数,当取Inf时表示重复处理直到图像结果不发生变化。下面一段代码实现图像细化处理,处理结果如图9.23所示。
originalBW=imread('circles.png');
imshow(originalBW)
BW_thin=bwmorph(originalBW,'thin',Inf);
figure,
imshow(BW_thin)图9.23图像细化结果下面一段代码实现图像骨化处理,处理结果如图9.24所示。对比图9.23和图9.24,可见骨化是在细化结果基础上,增加了一些分支结构。
originalBW=imread('circles.png');
imshow(originalBW)
BW_skel=bwmorph(originalBW,'skel',Inf);
figure,
imshow(BW_skel)图9.24图像骨化结果9.6.3边界提取边界提取是图像识别中常用的处理步骤。使用形态学方法可以方便地提取二值图像的边界和轮廓。对于二值图像而言,简单的边界提取算法可以表示成β(A) = A - (),也就是用图像A减去A被B腐蚀后的图像。
MATLAB中用bwperim(BW,CONN)实现图像边界提取,其中BW表示被处理图像;CONN表示像素连通性,可取为4连通和8连通,缺省值为4。在bwperim的算法中,一个像素是否属于图像的边界的判断条件为像素的值为1且像素在规定的连通方向上至少有一个方向上的相邻像素为0。下面一段代码使用bwperim实现8连通条件下的图像边界提取,结果如图9.25所示。
originalBW=imread('circles.png');
imshow(originalBW);
BW2=bwperim(originalBW,8);
figure,imshow(BW2)
图9.25图像边界提取9.6.4区域填充区域填充的目的是将一个二值对象内部的0值像素填充为1。填充的算法是在被填充的区域内找一个像素作为种子,根据像素的连通性不断地将0值像素填充为1来实现区域填充。MATLAB使用imfill(BW,locations,CONN)实现区域填充,其中BW为被填充图像,locations为种子像素的位置,CONN为像素连通性。下面一段代码实现矩阵的填充:BW1=logical([10000000 11111000 10001010 10001110 11110111 10011010 10001010 10001110]);BW2=imfill(BW1,[33],8)BW2=
10000000
11111000
11111010
11111110
11111111
10011110
10001110
10001110调用BW2=imfill(BW,CONN,'holes')可实现对图形中圆形对象的填充,代码如下:
BW4=im2bw(imread('coins.png')); %im2bw实现图像二值化
BW5=imfill(BW4,'holes');
imshow(BW4),figure,imshow(BW5)结果如图9.26所示。图9.26圆形对象的填充调用BW2=imfill(BW)可以实现用户交互模式下的填充,用户可以使用鼠标来选取种子像素的位置。使用imfill函数还可以实现灰度图像中的圆形区域的填充,代码如下:
I=imread('tire.tif');
I2=imfill(I,'holes');
figure,imshow(I),
figure,imshow(I2)结果如图9.27所示。这时,图像中被较亮像素包围的较暗的像素将被作为填充对象来填充。图9.27灰度图像的填充9.6.5图像特征提取在进行图像处理时,有时会希望获取图像中某些改变的信息,例如在进行膨胀操作时,希望知道有多少像素的值由0变为1,或者想知道图像中对象的数目是否改变。利用MATLAB中的bwarea函数和bweuler函数可以实现对图像特征的提取操作。
bwarea函数计算图像中非0像素的个数,调用格式为total=bwarea(BW),返回值为图像中非零像素所占的面积。在统计面积时,不单看像素的值,还要参考相邻的对角线上的像素值,这些像素在图9.28中用黑色标出。图9.28面积计算参考像素9.6.5图像特征提取在进行图像处理时,有时会希望获取图像中某些改变的信息,例如在进行膨胀操作时,希望知道有多少像素的值由0变为1,或者想知道图像中对象的数目是否改变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽徽银理财有限责任公司社会招聘笔试历年常考点试题专练附带答案详解
- 2026南国大数据贵州有限公司社会招聘60人笔试历年常考点试题专练附带答案详解
- 2025福建龙岩市人力资源服务有限公司招聘就业见习人员3人笔试历年难易错考点试卷带答案解析
- 2025江西省信航航空科技有限公司招聘20人笔试历年常考点试题专练附带答案详解
- 2025中建交通建设(雄安)有限公司招聘8人笔试历年典型考点题库附带答案详解
- 聊城市莘县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 宜宾市长宁县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 运城市临猗县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 运城市万荣县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 赤峰市元宝山区2025-2026学年第二学期三年级语文第六单元测试卷(部编版含答案)
- 2026年光储充一体化充电站项目可行性研究报告
- 新版部编人教版七年级下册道德与法治全册教案(完整版)教学设计含教学反思
- 三国空城计课件
- 中药饮片GSP培训课件
- 2025年省属国企公开招聘备考题库参考答案详解
- 2025年秦皇岛市辅警考试试卷真题带答案
- DB32∕T 5156-2025 零碳园区建设指南
- 火灾风险隐患排查治理“自知、自查、自改”消防安全管理告知及承诺书
- 2025年广州市海珠区中小学教师招聘笔试参考试题及答案解析
- 清华附中招生考试原题及答案
- 消化系统疾病患者康复训练方案
评论
0/150
提交评论