资讯专栏INFORMATION COLUMN

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

89542767 / 404人阅读

  小编写这篇文章的主要目的,主要是给大家介绍关于python数字图像处理的一些相关介绍,包括基本的形态学滤波,比如可以使用数字图像去进行处理类似的形态学滤波。那么,具体的内容呢?下面就给大家详细解答下。


  引言


  对图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。


  1、膨胀(dilation)


  原理:一般对二值图像进行操作。找到像素值为1的点,将它的邻近像素点都设置成这个值。1值表示白,0值表示黑,因此膨胀操作可以扩大白色值范围,压缩黑色值范围。一般用来扩充边缘或填充小的孔洞。


  功能函数:skimage.morphology.dilation(image,selem=None)


  selem表示结构元素,用于设定局部区域的形状和大小。


  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)


  分别用边长为5或15的正方形滤波器对棋盘图片进行膨胀操作,结果如下:

01.png

  可见滤波器的大小,对操作结果的影响非常大。一般设置为奇数。


  除了正方形的滤波器外,滤波器的形状还有一些,现列举如下:


  morphology.square:正方形


  morphology.disk:平面圆形


  morphology.ball:球形


  morphology.cube:立方体形


  morphology.diamond:钻石形


  morphology.rectangle:矩形


  morphology.star:星形


  morphology.octagon:八角形


  morphology.octahedron:八面体


  注意,如果处理图像为二值图像(只有0和1两个值),则可以调用:


  skimage.morphology.binary_dilation(image,selem=None)


  用此函数比处理灰度图像要快。


  2、腐蚀(erosion)


  函数:skimage.morphology.erosion(image,selem=None)


  selem表示结构元素,用于设定局部区域的形状和大小。


  和膨胀相反的操作,将0值扩充到邻近像素。扩大黑色部分,减小白色部分。可用来提取骨干信息,去掉毛刺,去掉孤立的像素。


  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)

  注意,如果处理图像为二值图像(只有0和1两个值),则可以调用:

02.png

  skimage.morphology.binary_erosion(image,selem=None)


  用此函数比处理灰度图像要快。


  3、开运算(opening)


  函数:skimage.morphology.openning(image,selem=None)


  selem表示结构元素,用于设定局部区域的形状和大小。


  先腐蚀再膨胀,可以消除小物体或小斑块。


  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')

  注意,如果处理图像为二值图像(只有0和1两个值),则可以调用:

03.png

  skimage.morphology.binary_opening(image,selem=None)


  用此函数比处理灰度图像要快。


  4、闭运算(closing)


  函数:skimage.morphology.closing(image,selem=None)


  selem表示结构元素,用于设定局部区域的形状和大小。


  先膨胀再腐蚀,可用来填充孔洞。


  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.closing(img,sm.disk(9))#用边长为5的圆形滤波器进行膨胀滤波
  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')

04.png

  注意,如果处理图像为二值图像(只有0和1两个值),则可以调用:


  skimage.morphology.binary_closing(image,selem=None)


  用此函数比处理灰度图像要快。


  5、白帽(white-tophat)


  函数:skimage.morphology.white_tophat(image,selem=None)


  selem表示结构元素,用于设定局部区域的形状和大小。


  将原图像减去它的开运算值,返回比结构化元素小的白点


  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.white_tophat(img,sm.square(21))
  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')

05.png

  6、黑帽(black-tophat)


  函数:skimage.morphology.black_tophat(image,selem=None)


  selem表示结构元素,用于设定局部区域的形状和大小。


  将原图像减去它的闭运算值,返回比结构化元素小的黑点,且将这些黑点反色。

  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.black_tophat(img,sm.square(21))
  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')

  

06.png

        综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128820.html

相关文章

  • 女朋友嫌我拍的照片有雾,连夜用OpenCV写出❤️去雾算法❤️逃过一劫(收藏保命)

    ❤️欢迎订阅《从实战学python》专栏,用python实现爬虫、办公自动化、数据可视化、人工智能等各个方向的实战案例,有趣又有用!❤️ 更多精品专栏简介点这里 治愈生活的良方 就是保持对生活的热爱 前言 哈喽,大家好,我是一条。 每次和女朋友出去玩,拍照是必须的,天气好还行,天气要是不好,加上我这破手机,那拍的简直惨不忍睹,自己都不过去。 但是没什么能难倒程序员的,为了不挨骂,连夜写出去雾...

    DTeam 评论0 收藏0
  • 常用的十大python图像处理工具

    摘要:但无论是用于何种用途,这些图像都需要进行处理。图像处理中的常见任务包括显示图像,基本操作如裁剪翻转旋转等,图像分割,分类和特征提取,图像恢复和图像识别。图像处理系统有时被称为图像处理的瑞士军刀。 showImg(https://segmentfault.com/img/remote/1460000019631626); 原文标题:10 Python image manipulation...

    Crazy_Coder 评论0 收藏0
  • Python中的十大图像处理工具

    摘要:之成为图像处理任务的最佳选择,是因为这一科学编程语言日益普及,并且其自身免费提供许多最先进的图像处理工具。该库包含基本的图像处理功能,包括点操作使用一组内置卷积内核进行过滤以及颜色空间转换。图像处理系统有时被称为图像处理的瑞士军刀。 showImg(https://segmentfault.com/img/remote/1460000019442221);编译:张秋玥、小七、蒋宝尚 本...

    yuanxin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<