博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本形态学滤波
阅读量:4582 次
发布时间:2019-06-09

本文共 3768 字,大约阅读时间需要 12 分钟。

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

一 膨胀(dilation)

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

功能函数:skimage.morphology.dilation(imageselem=None)

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

from skimage import dataimport skimage.morphology as smimport matplotlib.pyplot as pltimg=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)

结果如下图所示:

可见滤波器的大小,对操作结果的影响非常大。一般设置为奇数。除了正方形的滤波器外,滤波器的形状还有一些,现列举如下:

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)

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

二 腐蚀(erosion)

函数:skimage.morphology.erosion(imageselem=None)

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

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

from skimage import dataimport skimage.morphology as smimport matplotlib.pyplot as pltimg=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两个值),则可以调用:

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

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

三 开运算(opening)

函数:skimage.morphology.openning(imageselem=None)

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

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

from skimage import io,colorimport skimage.morphology as smimport matplotlib.pyplot as pltimg=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两个值),则可以调用:

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

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

四 闭运算(closing)

函数:skimage.morphology.closing(imageselem=None)

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

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

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

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

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

五 白帽(white-tophat)

函数:skimage.morphology.white_tophat(imageselem=None)

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

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

from skimage import io,colorimport skimage.morphology as smimport matplotlib.pyplot as pltimg=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')

结果如下图所示:

六 黑帽(black-tophat)

函数:skimage.morphology.black_tophat(imageselem=None)

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

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

from skimage import io,colorimport skimage.morphology as smimport matplotlib.pyplot as pltimg=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')

结果如下图所示:

参考:

 

转载于:https://www.cnblogs.com/Terrypython/p/9978892.html

你可能感兴趣的文章
NYOJ 16 矩形嵌套
查看>>
Leetcode中的SQL题目练习(二)
查看>>
dubbo 集群容错源码
查看>>
Collection接口的子接口——Queue接口
查看>>
LINUX安装NGINX
查看>>
服务器启动项目抛错 没有到主机的路由
查看>>
python_85_sys模块
查看>>
第九周动手动脑
查看>>
HDU 1811 Rank of Tetris
查看>>
winform 获取当前名称
查看>>
MyBatis笔记一:GettingStart
查看>>
查找不同的木棍
查看>>
面试题:顺时针打印矩阵
查看>>
DataSet、DataTable、DataRow、DataColumn区别及使用实例
查看>>
python 特殊方法
查看>>
Python3 练习笔记四
查看>>
装箱问题
查看>>
Android线程管理(一)——线程通信
查看>>
vim 使用技巧
查看>>
Periodic String UVa1225
查看>>