2.6 图像形态学及常见的图像处理工具
图像形态学:是分析几何形状和结构的数字方法,是建立在集合代数的基础上用集合论方法定量描述几何结构的学科。基本的图像形态学算法有:腐蚀(Erode)、膨胀(Dilate)、开(Open)、闭(Close)、细化(Thinning)。(最好要记下这几个单词,图像处理时常以英文形式出现)
接下来就了解一下这些算法,它们的处理对象一般是二值图像,二值图像里面,白色为1,黑色为0。
我们先不直接讲,先看几张图,会有深刻的印象的,嘻嘻~
就拿这个“人”字了。
原图(有水印,请直接忽略):
开启神器visionpro,用一个CogIPOneimage工具进行简单的膨胀和腐蚀。
为了体现效果,我没用3X3的结构元素,不过这个不重要,我们直接看结果:
看到这里,你可能觉得,哦,腐蚀就是缩小嘛,膨胀就是变大嘛,撒撒水啦~
我想让你再看一组图片
原图(背景白色,为了效果,截图我截大了一些):
我们就直接说区别吧,同一个工具在两张灰度反转的图像似乎会因为灰度(亮度)的不同,展示出不同的效果,下面我们就开始研究腐蚀和膨胀,它们的原理就是和图像的灰度有关哦!
对了,这两张图片我是用matlab进行反转的,代码如下:
I=imread('02.png');
J=imadjust(I,[0,1],[1,0]);
imwrite(J,'image2.jpg');
我还是想强调一下:不要直接用matlab里面的保存图片,这样会导致图片这样(分辨率不对):
用imwrite保存的图像是和原来一致的:
---------------------------------------------------------------------------------------------------------------------------------
腐蚀和膨胀
腐蚀和膨胀在中文词义上就是相反的,其实在这里也是的哦。腐蚀是减少图像中目标边界的像素,膨胀是在增加图像中目标边界周围像素。
在腐蚀和膨胀的处理过程中,需要一个结构元素(也叫内核)对图像进行处理,结构元素是一个由0或1值组成的矩阵,每一个结构元素有一个原点(也叫锚点),结构元素中的原点指定待处理像素的位置,结构元素形状可以是任意形状。注意了,这个结构元素的定义非常重要。
腐蚀处理流程:进行腐蚀操作时,将结构元素划过图像,将结构元素覆盖区域的最小灰度值提取,并代替原点位置的灰度值。
膨胀处理流程:进行腐蚀操作时,将结构元素划过图像,将结构元素覆盖区域的最大灰度值提取,并代替原点位置的灰度值。
举个膨胀和腐蚀的栗子:
我的结构元素是这个(一般设中心为原点,如果有其他情况,具体情况具体分析),深蓝色部分为1,其他颜色为0:
处理图像是这个:
结构元素就是这么划的,原点一行行遍历这张图像,将结构元素覆盖区域的最大灰度值提取,并代替原点位置的灰度值:
最后得到的膨胀后的图像是这样的,绿色部分为膨胀增加的部分像素点:
同理可以获得腐蚀后的图像,绿色部分为腐蚀缩小的像素点:
原理其实非常简单理解,如果你还没理解,我的建议是不妨再看一遍结构元素的定义和处理流程,然后在纸上手动模拟一遍。腐蚀和膨胀的处理过程是一样的 ,主要区别在于灰度值取大小区别。
哟西,我们可以回到最初的起点了,为什么会出现之前“人”字那种不同效果的情况呢?
答案就非常明确了,膨胀是取的最大灰度值的点,也就是亮点,腐蚀是取的最小灰度值的点,也就是暗点!腐蚀对于亮图部分是缩小的,膨胀对于亮图的部分是放大的,友友们可以去看看那几张“人”字。
最后就是腐蚀和膨胀的作用了。
腐蚀的作用是:缩小处理,减少区域像素,边缘连接断开。
膨胀的作用是:扩大处理,增加区域像素,建立边缘连接。
最后,任何事情的最佳理解是建立在实践后的基础上的,我们可能耳熟能详的说出腐蚀和膨胀,意味着缩小和扩大,但我们需要思考在什么情况下会有什么情况出现,涉及了什么处理流程等等。
最后的最后,发展是前进上升的运动,我们一直在前进的路上,互相勉励!欢迎各位佬对文章的错误进行指点和批评!