数字图像处理---通俗理解腐蚀与膨胀

0、腐蚀与膨胀有什么卵用?

腐蚀与膨胀是数字形态学里的两个基本操作,一般用于二值图像(当然RGB图也可以用)。腐蚀的作用说白了就是让暗的区域变大,而膨胀的作用就是让亮的区域变大(可以想象成巴啦啦能量和古娜拉黑暗之神在神仙打架。。巴啦啦能量赢了就是膨胀,古娜拉黑暗之神赢了就是腐蚀。。。)

数字图像处理---通俗理解腐蚀与膨胀

最典型的一个应用场景就是在你二值化后,你的目标和背景抠的不是很干净的时候可以试试两个操作,有时候效果出奇的好。就比如我要把一张验证码的图二值化后的结果更精确的话,就可以试试腐蚀与膨胀(第二幅图是膨胀+腐蚀之后的效果,可以看得出来已经把干扰点和干扰线去掉了)。

数字图像处理---通俗理解腐蚀与膨胀

数字图像处理---通俗理解腐蚀与膨胀

1、腐蚀

腐蚀的原料有:原图、核(腐蚀的灵魂)、结果图(这货是从原图深拷贝出来的)。下面举栗子来说明腐蚀的工作流程。
假设现在我们想对这样一幅单通道图做腐蚀操作(被IG关爱过视力的童鞋肯定能看出图里画的是个1)

数字图像处理---通俗理解腐蚀与膨胀

然后我们就先要把原图拷贝一份出来当结果图,现在的结果图和原图是一毛一样的。

数字图像处理---通俗理解腐蚀与膨胀

有了原图和结果图之后,我们就需要灵魂了(设计核)。核一般有方框形的,X形的,菱形的,等等等等(当然也可以自己DIY,比如我就DIY了个十字架形的)。并且腐蚀的效果和你设计的核有很大关系,什么样的核适合什么样的图这个全靠自己的脑洞和经验。反正我喜欢多试试几种核,看看哪个核效果好就用哪个。我这里DIY的核是3行3列的矩阵,样子如下:

数字图像处理---通俗理解腐蚀与膨胀

现在有了灵魂之后,我们就要注入灵魂了。怎么注入呢?非常简单,把我们的核扔到原图和结果图的左上角(PS:我这里没做padding,因为我懒)。

数字图像处理---通俗理解腐蚀与膨胀

数字图像处理---通俗理解腐蚀与膨胀

扔上去之后,我们就要用到核里面的值了。我们核里面有0和1(非零值),0代表我不care,1(非零值)代表你成功的而引起了我的注意。当我们的核盖在原图上之后就表明我只关心我核是1(非零值)在原图上对应的像素,也就是只关心我红框框里中间呈十字架形的5个255,其他的4个像素我并不关心。锁定完目标后,我们只要看我这5个像素中有没有0,如果有我们就把结果图中红框中心的像素值改成0,否则我就什么都不干。我们看一哈,5个255,并没有0所以什么都不干。

我们费了半天功夫发现什么都没干,你说气不气,所以捏,我们就把原图和结果图上的红框往右边移一步(其实不是气不气的问题啦,是腐蚀和膨胀是要遍历整个图,所以要迭代啦)。所以挪一步之后成了酱紫。

数字图像处理---通俗理解腐蚀与膨胀

数字图像处理---通俗理解腐蚀与膨胀

新的地方,新的开始,所以我们要继续刚刚的套路,看看原图红框中十字架部分的5个像素有没有0,发现有0!。所以我们的结果图红框中心点的像素值就被改成0了。

数字图像处理---通俗理解腐蚀与膨胀

然后继续刚刚的套路,往右挪,看关心的地方有没有0,右边挪不动了就往下挪。直到整个红框雨露均沾后,整个腐蚀算法就做完了。

完事之后我们会发现结果图变成了酱紫。

数字图像处理---通俗理解腐蚀与膨胀

嗯,很正常,因为腐蚀就是让黑的区域变大,所以1变胖了,而且原图的1中间有隔断,经过腐蚀之后隔断处也连了起来。

2、膨胀

其实理解了腐蚀之后,理解膨胀简直简单的而一批。腐蚀之所以叫腐蚀是因为他只看感兴趣区域里面有没有0,有0我就把结果赋成0,所以黑的区域能变大。而膨胀只是和腐蚀相反,它只看感兴趣区域里面有没有255,有255我就把结果赋成255,所以亮的区域能变大。

假如原图(0可以看成是噪点)是酱紫

数字图像处理---通俗理解腐蚀与膨胀

那结果图一开始也是酱紫

数字图像处理---通俗理解腐蚀与膨胀

假设膨胀的灵魂也是十字架的核

数字图像处理---通俗理解腐蚀与膨胀

那么膨胀第一步也是在原图和结果图上套个红框

数字图像处理---通俗理解腐蚀与膨胀

数字图像处理---通俗理解腐蚀与膨胀

然后就看十字架区域有没有255,发现有我就把结果图上的对应位置的像素改成255(当然,这时的结果图对应像素本来就是255,所以相当于什么都没干)。原图和结果图上的红框都往右挪一步

数字图像处理---通俗理解腐蚀与膨胀

数字图像处理---通俗理解腐蚀与膨胀

这个时候发现十字架区域有255,发现有我就把结果图上的对应位置的像素改成255(当然,这时的结果图对应像素本来就是255,所以相当于什么都没干)。原图和结果图上的红框都往右挪一步。

数字图像处理---通俗理解腐蚀与膨胀

数字图像处理---通俗理解腐蚀与膨胀

这个时候十字架区域有255,所以把结果图对应的像素改成255,改完之后结果图是酱紫。

数字图像处理---通俗理解腐蚀与膨胀

然后继续挪,挪到右下角,整个算法就停止了。膨胀做完之后,结果图是酱紫。

数字图像处理---通俗理解腐蚀与膨胀

可以看得出来,原图的0我看成是噪点,经过膨胀之后噪点全部被擦除。

3、结束语

可以看得出来腐蚀和膨胀这两个算法流程非常简单,无非就是摩擦摩擦。。似魔鬼的步伐。。在图像上摩擦。。摩擦。。虽然算法简单,但如果核设计的好,使用恰当的话,能还是够得到比较满意的效果的。

版权声明:本文为CSDN博主「alw_123」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/alw_123/java/article/details/83868878

最新文章