1. 什么是形态学操作?
一系列操作基于形状来操作图像,形态学操作通过在图像上应用结构元素来产生输出图像。
改变物体的形状,比如腐蚀就是“变瘦”,膨胀就是“变胖”,如下面这张图所示:
然后包括膨胀与腐蚀在内,一系列的这两者各种叠加作用的操作都称为图像的形态学操作。
最基础的形态学操作就是腐蚀和膨胀。它包含广泛的应用:
移除噪声
孤立一些单独的元素和聚合一些分散的元素
找到图像中的局部块状或者孔
2. 膨胀与腐蚀
膨胀
使用卷积核B对图片A进行卷积运算,求局部最大值,这个卷积核可以有任意的形状和大小,通常是一个方形或者圆形。
卷积核B通常有个锚点,通常位于卷积核的中央位置。
随着卷积核扫描这个图像,我们计算叠加区域的最大像素值,并将锚点的位置用最大值替换。也就是最大化操作导致图片中亮的区域增长(所以这里面叫做膨胀)。
如上面两图所示,上面第一个图是针对二值图进行操作,上面的第一个是针对二值图进行操作膨胀操作。可以发现,这一操作是使得白色区域“变胖”,黑色区域“变瘦”,从下图即可看出。
而针对彩色图像,可以想象,由于我们是只保留最大值,所以当选取的核越大时,图像整体会越模糊,并且会越偏向于白色(因为白色对应的值是255),下面两图分别是核为10*10
以及核为50*50
两种情况进行膨胀的效果,大家可以感受一下。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200226230234270.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzQ3Nzc2,size_16,color_FFFFFF,t_70
腐蚀
膨胀和腐蚀是一对好基友,是相反的一对操作,所以腐蚀就是求局部最小值的操作。腐蚀与膨胀类似,计算卷积核里面的最小元素。
随着卷积核B扫描图片,它会计算B叠加区域的最小像素值,并使用这个像素值替换锚点的值。与膨胀相似,对原始的图像应用腐蚀操作。你可以看到背景亮的区域变小,而黑的区域变得很大。
在二值图上直观的体现,就是白色的部分变小,黑色的部分变大,正好与前面的膨胀相对。
而针对彩色图像,一样可以想象,由于我们是只保留最小值,所以当选取的核越大时,图像整体会越模糊,并且会越偏向于黑色(黑色对应的值是0),其中一些黑色的小元素也会被放大(例如下图中的小沙子),下面两图分别是核为10*10
以及核为50*50
两种情况进行腐蚀的效果,第二张非常惊悚。
3、python实现
import cv2
import numpy as np
#读取图片
src = cv2.imread('test01.jpg', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((5,5), np.uint8)
#图像腐蚀/处理
src_erode = cv2.erode(src, kernel)
#图像膨胀处理
src_dilate = cv2.dilate(src, kernel)
#显示图像
cv2.imshow("src", src)
cv2.imshow("scr_erode", src_erode)
cv2.imshow('src_dilate',src_dilate)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
————————————————
版权声明:本文为CSDN博主「Kanny广小隶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41929524/article/details/81187173