数学形态学图像处理的基本运算实现及分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学形态学图像处理的基本运算实现及分析
一、基本原理
数学形态学是一种应用于图像处理和模式识别领域的新的方法。它的基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像进行分析和识别的目的。数学形态学的数学基础和所用语言是集合论。数学形态学的应用可以简化图像数据,保持它们基本的形状特性,并除去不相干的结构。另一方面,数学形态学的算法具有天然的并行实现的结构。
1、基本运算
数学形态学的基本运算有四个:膨胀、腐蚀、开启和关。
如用A 表示图像集合,B 表示结构元素,形态学运算就是用B 对A 进行操 作。
A 被
B 膨胀,记为A ⊕B ,⊕为膨胀算子,膨胀的定义为
A B ⊕ˆ{|[()]}x x B A =≠∅
该式表明的膨胀过程是B 首先做关于原点的映射,然后平移x 。A 被B 的膨胀是B 被所有x 平移后与A 至少有一个非零公共元素。
A 被
B 腐蚀,记为A ⊙B ,⊙为腐蚀算子,腐蚀的定义为
A B Θˆ{|[()]}x x B A =≠∅
也就是说,A 被B 的腐蚀的结果为所有使B 被x 平移后包含于A 的点x 的集合。换句话说,用B 来腐蚀A 得到的集合是B 完全包括在A 中时B 的原点位置的集合。
膨胀和腐蚀并不互为逆运算,所以它们可以级连结合使用。例如,利用同一个结构元素B ,先对图像腐蚀然后膨胀其结果,或先对图像膨胀然后瘸蚀其结果,前一种运算称为开运算,后一种运算称为关运算。它们也是数学形态学中的重要运算。
开启的运算符为o ,A 用B 来开启写作AoB ,其定义为:
A o ()
B A B B =Θ⊕
关的运算符为·,A 用B 来关写作A ·B ,其定义为:
A ·()
B A B B =⊕Θ
开和关两种运算都可以去除比结构元素小的特定图像细节,同时保证不产生全局的几何失真。开运算可以把比结构元素小的椒盐噪声滤除,切断细长搭接而起到分离作用。关运算可使比结构元素小的缺口或孔填补上,搭接短的间断而起到连通作用。
2、实际应用
近年来,数学形态学在图像处理方面得到了日益广泛的应用。下面主要就数学形态学在边缘检测、骨架提取等方面的应用做简要介绍。
集合A 的边界记为β(A),可以通过下述算法提取边缘:设B 是一个合适的结构元素,首先令A 被B 腐蚀,然后求集合A 和它的腐蚀的差。如下式所示:
()()A A A B β=-Θ
下解释了边缘提取的过程。它表示了一个简单的二值图像,一个结构元素和用以上公式得出的结果。图 (b)中的结构元素是最常用的一种,但它决不是唯一的。如果采用一个5×5全“1”的结构元素,可得到一个二到三个像素宽的边缘。应注意的是,当集合B 的原点处在集合的边界时,结构元素的一部分位于集合之外。这种条件下的通常的处理是约定集合边界外的值为0。
利用形态学方法提取一个区域的骨格可以用腐蚀和开运算表示。也就是,A 的骨骼记为S(A),骨骼化可以表示如下:
0()()K
k k S A S A ==
和
0(){()[)]}K
k S A A kB A kB B ==
Θ-Θ
其中B 是结构元素,()A kB Θ表示对A 连续腐蚀k 次。
下图的解释说明了以上讨论的概念。第一列显示了原始集合(顶部)和通过结构元素B 两次腐蚀的图形。由于再多一次对A 的腐蚀将产生空集,所以选取K =2。第二列显示了第一列通过B 的开运算而得到的图形。
以上结果可以通过以前讨论过的开运算拟合性质加以解释。第三列仅仅显示出第一列与第二列的差别。第四列包含两个部分骨骼及最后的结果(第四列的底部)。最后的骨骼不但比所要求的更粗,而且相比较更重要,它是不连续的。形态学给出了就特定图形侵蚀和空缺的描述。
形态学给出了就特定图形侵蚀和空缺的描述。通常,骨骼必须最大限度的细化、相连、最小限度的腐蚀。第五列显示了0()S A 、1()S A B ⊕以及
22(()2)())S A B S A B B ⊕=⊕⊕。最后一列显示了图像A 的重构。可知,A 就是第五列中膨胀骨骼子集的“并”。
二、源程序
1、膨胀
bw = imread('text.png');
se = strel('line',11,90);%生成线形的结构元素
bw2 = imdilate(bw,se);%对图像进行膨胀
subplot(121), imshow(bw), title('原始图像') ;
subplot(122), imshow(bw2), title('膨胀后的图像') ;
2、腐蚀
originalBW = imread('circles.png');
se = strel('disk',11);%生成圆盘形的结构元素
erodedBW = imerode(originalBW,se);%对图像进行腐蚀
subplot(121), imshow(originalBW), title('原始图像');
subplot(122), imshow(erodedBW); title('腐蚀后的图像');
3、开
BW1 = imread('circbw.tif'); %读取图像
subplot(121), imshow(BW1); title('原始的图像');
se = strel('rectangle',[40 30]); %生成矩形结构元素
BW2 = imopen(BW1,SE);%对图像直接进行开运算
subplot(122), imshow(BW2); title('开运算后的图像');