python数字图像处理(13):基本形态学滤波
对图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在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的正方形滤波器对棋盘图片进行膨胀操作,结果如下:
可见滤波器的大小,对操作结果的影响非常大。一般设置为奇数。
除了正方形的滤波器外,滤波器的形状还有一些,现列举如下:
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两个值),则可以调用:
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两个值),则可以调用:
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')
注意,如果处理图像为二值图像(只有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')
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')
python数字图像处理(13):基本形态学滤波相关推荐
- 第4章 Python 数字图像处理(DIP) - 频率域滤波12 - 选择性滤波 - 带阻
目录 选择性滤波 带阻滤波器和带通滤波器 陷波滤波器 选择性滤波 处理特定的频带的滤波器称为频带滤波器 带阻滤波器: 若某个频带中的频率被滤除 带通滤波器: 若某个频带中的频率被通过 处理小频率矩形区 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波11 - 使用高通滤波器锐化图像
目录 使用高通滤波器锐化图像 由低通滤波器得到理想.高斯和巴特沃斯高通滤波器 指纹增强 频域中的拉普拉斯 钝化掩蔽.高提升滤波和高频强调滤波 同态滤波 使用高通滤波器锐化图像 由低通滤波器得到理想.高 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波10 - 使用低通频率域滤波器平滑图像 - 理想、高斯、巴特沃斯低通滤波器
目录 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 高斯低通滤波器(GLPF) 巴特沃斯低通滤波器 低通滤波的例子 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 在以原点为中心 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波1 - 傅里叶级数和变换简史
本章主要讲解频域域滤波的技术,主要技术用到是大家熟悉的傅里叶变换与傅里叶反变换.这里有比较多的篇幅讲解的傅里叶的推导进程,用到Numpy傅里叶变换.本章理论基础比较多,需要更多的耐心来阅读,有发现有错 ...
- python数字图像处理教程,python数字图像处理之高级形态学处理
形态学处理,除了最基本的膨胀.腐蚀.开/闭运算.黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等. 1.凸包 凸包是指一个凸多边形,这个凸多边形将图片中所有的白色像素点都包含 ...
- python数字图像处理(四) 频率域滤波
import matplotlib.pyplot as plt import numpy as np import cv2 %matplotlib inline 首先读入这次需要使用的图像 img = ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波6 - 二维DFT和IDFT的一些性质 - 平移和旋转、周期性、对称性
目录 二维DFT和IDFT的一些性质 空间间隔和频率间隔的关系 平移和旋转 周期性 对称性 二维DFT和IDFT的一些性质 空间间隔和频率间隔的关系 Δu=1MΔT(4.69)\Delta u = \ ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换
目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波3 - 取样和取样函数的傅里叶变换、混叠
目录 取样和取样函数的傅里叶变换 取样 取样后的函数的傅里叶变换 取样定理 混叠 由取样后的数据重建(复原)函数 取样和取样函数的傅里叶变换 取样 fˉ(t)=f(t)sΔT(t)=∑n=−∞∞f(t ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波2 - 复数、傅里叶级数、连续单变量函数的傅里叶变换、卷积
目录 基本概念 复数 傅里叶级数 冲激函数及其取样(筛选)性质 连续单变量函数的傅里叶变换 卷积 基本概念 复数 复数CCC的定义为 C=R+jI(4.3)C = R + jI \tag{4.3}C= ...
最新文章
- 唯品会订单分库分表的实践总结以及关键步骤--转
- 在2012年安装XCODE旧版本的错误解决方法
- php fastcgi exp,nginx +phpfastcgi 环境下 导出excel文件,超时,数据被截断问题,解决...
- PHP版_游戏扫码登录器程序源码
- 单目相机提高标定精度的经验(转载)
- Centos6.x服务器配置jdk+tomcat+mysql环境
- CentOS7安装JDK,全网最快安装教程
- nginx配置文件注释说明
- 客户端连接idea_IDEA新特性:提前知道代码怎么走!
- SFTP连接服务器后,PWD显示的目录、是用户的home目录
- 关于忘记SYSKEY密码后清除密码操作
- Day-22 基础模块3 正则表达式_re模块
- esp8266 爆改车间主任版本 使用 已解决
- vb.net 教程 3-10 窗体编程 datagridview控件 7 修改单元格
- 用流量扫码总显示无法连接服务器,手机有流量但无法连接网络?手机数据网络不能访问互联网...
- 浅谈产品原型制作与设计方法
- linux用命令开触摸板,centos 6 linux下禁用触摸板(通过命令行实现)
- 用canvas画“哆啦A梦”时钟
- 安卓系统怎么查找手机定位服务器,安卓手机丢了怎么查定位找手机
- Docker:(二)docker安装部署及优化详解