1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

python数字图像处理之基本形态学滤波

介绍Python数字图像处理中的形态学滤波

我是本际云服务器推荐网的小编小本本,今天给大家介绍一下Python数字图像处理中的形态学滤波。形态学滤波可以通过对灰度图像和二值图像进行各种膨胀、腐蚀等处理,达到去噪、边缘检测、形状分析等目的。

python数字图像处理之基本形态学滤波

形态学滤波操作及功能函数介绍

形态学滤波可通过以下几种操作实现:

  • 膨胀(dilation):一般用于扩充边缘或填充小的孔洞。
  • 腐蚀(erosion):可以提取骨干信息、去掉毛刺、去掉孤立的像素。
  • 开运算(opening):先腐蚀再膨胀,可以消除小物体或小斑块。
  • 闭运算(closing):先膨胀再腐蚀,可用来填充孔洞。
  • 白帽(white-tophat):将原图像减去它的开运算值,返回比结构化元素小的白点。
  • 黑帽(black-tophat):将原图像减去它的闭运算值,返回比结构化元素小的黑点,且将这些黑点反色。

这些功能函数都放置在morphology子模块内,其中包含了多种结构元素的形状和大小,例如正方形、平面圆形、球形、立方体形、钻石形、矩形、星形、八角形和八面体等。在处理图像为二值图像的情况下,还有对应的binary_dilation、binary_erosion、binary_opening、binary_closing函数,速度更快。

Python代码实现

下面是Python代码实现的示例:

膨胀(dilation)操作

 from skimage import data
 import skimage.morphology as sm
 import matplotlib.pyplot as plt
 
 img = data.checkerboard()
 dst1 = sm.dilation(img, sm.square(5))  # 用边长为5的正方形滤波器进行膨胀滤波
 dst2 = sm.dilation(img, sm.square(15))  # 用边长为15的正方形滤波器进行膨胀滤波
 plt.figure('morphology', figsize=(8, 8))
 plt.subplot(131)
 plt.title('origin image')
 plt.imshow(img, plt.cm.gray)
 plt.subplot(132)
 plt.title('morphological image')
 plt.imshow(dst1, plt.cm.gray)
 plt.subplot(133)
 plt.title('morphological image')
 plt.imshow(dst2, plt.cm.gray)

腐蚀(erosion)操作

 from skimage import data
 import skimage.morphology as sm
 import matplotlib.pyplot as plt
 
 img = data.checkerboard()
 dst1 = sm.erosion(img, sm.square(5))  # 用边长为5的正方形滤波器进行膨胀滤波
 dst2 = sm.erosion(img, sm.square(25))  # 用边长为25的正方形滤波器进行膨胀滤波
 plt.figure('morphology', figsize=(8, 8))
 plt.subplot(131)
 plt.title('origin image')
 plt.imshow(img, plt.cm.gray)
 plt.subplot(132)
 plt.title('morphological image')
 plt.imshow(dst1, plt.cm.gray)
 plt.subplot(133)
 plt.title('morphological image')
 plt.imshow(dst2, plt.cm.gray)

开运算(opening)操作

 from skimage import io, color
 import skimage.morphology as sm
 import matplotlib.pyplot as plt
 
 img = color.rgb2gray(io.imread('d:/pic/mor.png'))
 dst = sm.opening(img, sm.disk(9))  # 用边长为9的圆形滤波器进行膨胀滤波
 plt.figure('morphology', figsize=(8, 8))
 plt.subplot(121)
 plt.title('origin image')
 plt.imshow(img, plt.cm.gray)
 plt.axis('off')
 plt.subplot(122)
 plt.title('morphological image')
 plt.imshow(dst, plt.cm.gray)
 plt.axis('off')

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6817.html