python数字图像处理(13):基本形态学滤波
来源:互联网 发布:淘宝卖鞋子的好店平价 编辑:程序博客网 时间:2024/06/11 10:24
声明:本文转自http://blog.csdn.NET/haoji007/article/category/6337049,但其也为转载,原作者不明,感谢原作者的付出和分享。
对图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。
1、膨胀(dilation)
原理:一般对二值图像进行操作。找到像素值为1的点,将它的邻近像素点都设置成这个值。1值表示白,0值表示黑,因此膨胀操作可以扩大白色值范围,压缩黑色值范围。一般用来扩充边缘或填充小的孔洞。
功能函数:skimage.morphology.dilation(image, selem=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)
分别用边长为5或15的正方形滤波器对棋盘图片进行膨胀操作,结果如下:
可见滤波器的大小,对操作结果的影响非常大。一般设置为奇数。
除了正方形的滤波器外,滤波器的形状还有一些,现列举如下:
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 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)
用此函数比处理灰度图像要快。
3、开运算(opening)
函数:skimage.morphology.openning(image, selem=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)
用此函数比处理灰度图像要快。
4、闭运算(closing)
函数:skimage.morphology.closing(image, selem=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.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')
注意,如果处理图像为二值图像(只有0和1两个值),则可以调用:
skimage.morphology.binary_closing(image, selem=None)
用此函数比处理灰度图像要快。
5、白帽(white-tophat)
函数:skimage.morphology.white_tophat(image, selem=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')
6、黑帽(black-tophat)
函数:skimage.morphology.black_tophat(image, selem=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')
- python数字图像处理(13):基本形态学滤波
- python数字图像处理(13):基本形态学滤波
- Python学习13_基本形态学滤波
- python数字图像处理(14):高级滤波
- python数字图像处理(14):高级滤波
- python数字图像处理(10):图像简单滤波
- python数字图像处理(10):图像简单滤波
- python数字图像处理(10):图像简单滤波
- 数字图像处理中的形态学
- 数字图像处理中的形态学
- 数字图像处理中的形态学
- 数字图像处理-形态学操作
- 数字图像处理--形态学
- 数字图像处理基本算法实现(3)--section3.5-6空间滤波处理
- 数字图像处理:10.形态学运算
- MATLAB数字图像处理(3)滤波
- 数字图像处理 平滑滤波
- [数字图像处理]空间滤波
- 稳扎稳打JavaScript(四)——闭包
- 再谈“我是怎么招聘程序员的”
- angular中的MVVM模式 (赞,运作原理)
- 单点登录的原理及实现
- iOS个人页面图片下拉放大效果
- python数字图像处理(13):基本形态学滤波
- 推荐几款Web服务器性能压力测试工具
- Thread
- STL heap 实现
- OpenCV 3学习笔记(四)读取并播放视频
- 【24.17%】【codeforces 721D】Maxim and Array
- 2D平面变换总结
- React Native之ScrollView控件详解
- 项目 1 - 验证算法之(2)希尔排序