计算机工程应用技术本栏目责任编辑:贾薇薇基于Matlab的图形轮廓提取及填充
井艾斌,柳青,孟祥增
(山东师范大学,山东济南250014)
摘要:提取图形的形状特征是当前图像处理领域的重要研究内容,而图形的边缘轮廓又能很好地反映形状的信息,因此本文阐述了如何利用matlab较好的提取图形的轮廓,以及将简单轮廓图形填充起来作为形状图形进行研究的算法及代码实现。关键词:图形;轮廓;膨胀;填充
中图分类号:TP317文献标识码:A文章编号:1009-3044(2008)09-11722-02
ExtractionandFillingoftheOutlineofBlack-and-WhiteBinaryGraphicsBasedonMatlab
JINGAi-bin,LIUQing,MENGXiang-zeng
(ShandongNormalUniversity,Jinnan250014,China)
Abstract:Extracingthecharacteristicofshapefromgraphicsisanimportantresearchfield,whiletheoutlinecanwellreflecttheinformationoftheshape,sothisarticleelaboratesthealgorithmandthecodesabouthowtousethematlabtoextractoutlinesofgraphics,andtofillltheexistingoutlinegraphicssoastoresearchthemasshapegraphics.
Keywords:graphics;outline;expansion;filling
1图形及轮廓的界定
在图像的视觉特征研究领域,形状特征因更接近人的视觉特点,一直是人们的研究重点。而形状的边缘又能很好的反映形状的信息,所以有必要提取图形的边缘轮廓以对以后的深入分析打下基础。
实验之前我们首先阐明两个概念,即图形和轮廓。我们这里所说的图形,指的是有明显的形状和线条特征,但没有太复杂的颜色或纹理特征的简单图像。为了便于研究,本文中所采用的图形为黑白二值图形。
另外,因为我们需要研究的对象是形状而非内部细节,所以本文所涉及的轮廓,指图形的外轮廓,不包括图形内部的孔洞所围成的内部边界,例如,对于示例图1,我们所期望得到的轮廓是如图3所示的外轮廓,而非图2所示图形的整个内外边界轮廓。
图1图2图3
2基于matlab的轮廓提取
图形的外轮廓提取所面临二个问题:
首先,我们知道,在matlab中有一个提取图形轮廓的函数bwperim,但这个函数的局限性在于,它不仅提取外轮廓,对图形区域内部的孔洞所围成的内部边缘也提取出来。如图1中这种带花纹的图形,那些花纹细节也将被提取出来,我们得到的不是一个单纯的蝴蝶的形状,如图2。解决方法是在提取轮廓之前先利用孔洞填补函数bwfill(F,'holes');将这些孔洞填补上。代码如下:F2=bwfill(F1,'holes');
其次,对于图形中比较细小的部分,例如蝴蝶的触角,提取轮廓后可能这一部分会出现断点,或者提取出一条曲线或直线段而非闭合区域。解决方法是先用膨胀函数dilate(F,SE)将原图形膨胀,这样就可以将细小部分加粗,然后再提取轮廓。其中SE为函数dilate的二值结构元素。SE不能太大也不能太小,太大可能较原图中原本分离的两部分连接起来,而太小的话膨胀效果不明显,细小的区域仍然没得到扩大。实验表明,当SE=为3*3单位矩阵时,轮廓提取的效果较为理想。
下面我们通过实验来具体阐述一下如何用matlab提取轮廓。
我们将图1的文件命名为butter,提取后的轮廓图形重新保存为后缀名为.bmp的文件,则轮廓提取的代码为:
收稿日期:2008-02-14
作者简介:井艾斌,女,山东师范大学传播学院2006级硕士研究生,研究方向:计算机教育应用;柳青,女,山东师范大学传播学院
2005级硕士研究生,研究方向:计算机教育应用;孟祥增,男,山东师范大学传播学院教授,研究方向:计算机教育应用。