膨胀、腐蚀、开、闭运算,你这么解释,小学生都看得懂了

膨胀、腐蚀、开、闭运算,你这么解释,小学生都看得懂了!

看过我前面一些章节内容的小伙伴肯定已经不止一次遇到过这几个词了。对图像的形态学处理也避不开这几个。但是想要准确理解他们的意思似乎不是那么简单。首先,这四个运算都是用一个结构元对需要处理的region进行相应的形态学变换后得到想要的处理后的region。就像你要对一个数做减法,你需要给他一个减数,这样'被减数-减数=差',才能求出差。

膨胀:就是把region变大,变大的方式就是用一个结构元的中心点在原来的region轮廓上游走一遍,所走过的区域加上原来的region区域就是膨胀后的区域,如下图(图 3-14-1),如果我原来的region是左边的大矩形,结构元是右边的cell。

图 3- 14 -1

那么结构元的中心点就是圆心了,让cell在大矩形的轮廓上游走一圈,就是下图(图3-14-2)这样了:

图 3-14-2

游走途径的像素点再加上regionSource原来覆盖的区域一起,就是膨胀后的区域了。其实就是这个矩形各个方向再往外扩大这个小圆的半径,拐角部分的直角变成了圆角,如下图(图3-14-3)。(像极了原本90斤的女朋友后来变成了120斤,体积大了一圈,棱角变圆了,真是一个悲伤的故事~~)。

图3-14-3

膨胀弄懂了,腐蚀也就不难了。

腐蚀:就是把region变小。变小的方式就是用一个结构元的中心点在原来的region内部游走一遍,(注意这里不是轮廓了)。当中心点到某个位置,整个结构元都在region内部的时候,所有符合这个条件的点,合在一起就是新的腐蚀后的区域了。还是用原来的regionSource和cell,腐蚀的话就是下图(图 3-14-4)这样:

图 3-14-4

外面红色矩形是原来的regionSource,圆形就是结构元cell,为了满足所有的点都在regionSource内部,这个cell最边缘的位置也就是图中的位置了,那么cell的圆心所在位置就是腐蚀后的region,那么整个regionSource内所有符合这些条件的点就是图中绿色矩形了。注意,并没有把棱角变圆。也就是说,其实腐蚀就是把原来的矩形各个方向向内缩小了圆的半径。

是不是很好理解?哈哈,那么问题来了。

问:如果regionSource的某个部分小于cell的直径,如下图(图3-14-5)会发生什么情况?

图3-14-5

做对了这题,你就能很好的理解,其实膨胀和腐蚀看着是一对反义词,效果也是一个变大一个变小,但是他们俩不是逆运算的关系。

膨胀、腐蚀弄明白了,才能理解的透开、闭运算。

闭运算:先用结构元对原region进行膨胀,再腐蚀

开运算:先用结构元对原region进行腐蚀,再膨胀

看定义很好理解,其实开闭运算也不是逆运算关系,虽然看名字依然好像是~~他们其实是组合拳。有什么效果呢?

闭运算:平滑轮廓,闭合较窄的间断和细长的沟壑,消除小孔洞。为啥呢?因为在膨胀的时候,那些小间断、小沟壑、小孔洞只要小于cell的半径,就会被膨胀的部分填充了,再腐蚀的时候也不会再还原了。效果如下图(图3-14-6、图3-14-7)

图3-14-6

图3-14-7

开运算:平滑轮廓。断开较窄的狭颈并清除细的突出物。对的,开闭运算都可以平滑轮廓,但是开运算会把小沟壑、小孔洞放大,有些细长的连接处会变成小间断断开(这个在字符识别的时候,分割各个字母很好用,前面的某节字符识别里面用过)。我们再对图3-14-6做开运算,效果如下图(图3-14-8)

图 3- 14-8

总结:

膨胀:把region变大;halcon代码关键词为:dilation

腐蚀:把region变小;halcon代码关键词为:erosion

闭运算:region总体体积基本不变化或者少许增加,填充一些小孔洞,小沟壑,闭合一些小间断,平滑轮廓;halcon代码关键词为:closing

开运算:region总体体积基本不变化或者少许减少,断开较窄的狭颈并清除细的突出物,平滑轮廓。Halcon代码关键词为:opening

注意:本文中的结构元我用的是圆,其实不一定非要是圆,矩形也行,其它任意形状都ok,视情况而定。其中圆和矩形最常用。

这么讲解还是很好理解的吧?如果不是,哥就是标题党了

(0)

相关推荐