文章目录
- 简介
- 实战
 
简介
腐蚀和膨胀是图像形态学处理的基本运算,这两种运算的复合运算构成了开和闭,而腐蚀、膨胀与原图之间的加减操作,则构成了形态学梯度、礼帽和黑帽计算。
由于这几种函数均基于腐蚀和膨胀,所以其参数均与开闭运算相同
- 形态学梯度 morphological_gradient(input, size=None, footprint=None, structure=None, output=None, mode=‘reflect’, cval=0.0, origin=0)
- 礼帽运算 white_tophat(input, size=None, footprint=None, structure=None, output=None, mode=‘reflect’, cval=0.0, origin=0)
- 黑帽运算 black_tophat(input, size=None, footprint=None, structure=None, output=None, mode=‘reflect’, cval=0.0, origin=0)
- 拉普拉斯变换 morphological_laplace(input, size=None, footprint=None, structure=None, output=None, mode=‘reflect’, cval=0.0, origin=0)
各参数含义如下
- size为滤波模板
- mode可选- reflect,constant,nearest,mirror, wrap,边缘填充方式
- cval边缘填充值
- structure为数组类型,表示构造元素,可以理解为是卷积模板
- output与输入相同维度的数组,可以存下结果
- orgin过滤器设置,默认为0
其中,礼帽又叫顶帽,等于原图减去开运算;黑帽又叫底帽,为原图减去闭运算。
实战
下面用scipy.misc中的楼梯图像,对礼帽、黑帽以及形态学梯度函数进行测试,方便起见,做一个函数字典funcs,分别存储自身映射、礼帽、黑帽函数,分别对楼梯图像进行处理并绘图。
import scipy.ndimage as sn
from scipy.misc import ascent
import matplotlib.pyplot as plt
img = ascent()
img = img[350:500, 400:500]
funcs = {
    "original": lambda x, tmp:x,
    "white" : sn.white_tophat,
    "black" : sn.black_tophat,
}
fig = plt.figure()
for i, key in enumerate(funcs):
    ax = fig.add_subplot(1,3,i+1)
    plt.imshow(funcs[key](img, (5,5)), cmap=plt.cm.gray)
    plt.title(key)
    plt.axis('off')
plt.show()
效果如下

形态学梯度为膨胀图减去腐蚀图,这种操作会把图像的边缘提取出来,scipy.ndimage中提供来了gradient和laplace两个函数
img = (img > 125)*1
funcs = {
    "original": lambda x, tmp:x,
    "gradient" : sn.morphological_gradient,
    "laplace" : sn.morphological_laplace,
}
fig = plt.figure()
for i, key in enumerate(funcs):
    ax = fig.add_subplot(1,3,i+1)
    plt.imshow(funcs[key](img, (3,3)), cmap=plt.cm.gray)
    plt.title(key)
    plt.axis('off')
plt.show()
效果如下













![[开源工具]Win10/11/8/7 获取笔记本电脑连接过的WIFI名称和密码[开箱可用]](https://img-blog.csdnimg.cn/eed99ea22b3c4507961fd8311cee32ae.png)






