详解四种Python中基本形态学滤波的实现
作者:微小冷 发布时间:2023-05-09 15:10:09
最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算
二值 | 灰度 | |
---|---|---|
binary_erosion | grey_erosion | 腐蚀 |
binary_dilation | grey_dilation | 膨胀 |
binary_closing | grey_closing | 闭(先膨胀后腐蚀) |
binary_opening | grey_opening | 开(先腐蚀后膨胀) |
二值形态学
所谓腐蚀,用数学符号表示为
其中Bij表示当B BB的原点在(i,j)处时,B中所有为1的值的集合。
这个式子的意思是,用结构B腐蚀A,当B的原点平移到图像A的像元(i,j)时,若B完全被二者的重叠区域所包围,则赋值为1,否则赋值为0。更直观的例子是,如果B中为1的元素位置上,对应的A的像素值也都为1,则(i,j)处为1。
膨胀则与之相反,可表示为
换言之,只要B和A的重叠区域不是空集,那么(i,j)点就置为1。
举个例子如下
import numpy as np
import matplotlib.pyplot as plt
import scipy.ndimage as sn
x = np.zeros([20,20])
x[5:15, 5:15] = 1
x_ero = sn.binary_erosion(x)
x_dil = sn.binary_dilation(x)
fig = plt.figure()
ax = fig.add_subplot(1,3,1)
ax.imshow(x)
plt.title("original")
ax = fig.add_subplot(1,3,2)
ax.imshow(x_ero)
plt.title("erosion")
ax = fig.add_subplot(1,3,3)
ax.imshow(x_dil)
plt.title("dilation")
plt.show()
效果如下
开运算是先腐蚀后膨胀;闭运算是先膨胀后腐蚀,示例如下
x = np.zeros([20,20])
x[5:15, 5:15] = 1
x[10:12,10:12] = 0
x[2:4, 2:4] = 1
x_open = sn.binary_opening(x)
x_close = sn.binary_closing(x)
fig = plt.figure()
ax = fig.add_subplot(1,3,1)
ax.imshow(x)
plt.title("original")
ax = fig.add_subplot(1,3,2)
ax.imshow(x_open)
plt.title("opening")
ax = fig.add_subplot(1,3,3)
ax.imshow(x_close)
plt.title("closing")
plt.show()
效果如下,可见开运算会去除孤立的1,闭运算会去除孤立的0。
灰度形态学
灰度图像的腐蚀、膨胀以及开闭运算,是其二值形势下的一个扩展,采用了类似卷积的逻辑,下面直接从scipy
中调取楼梯图片,并依次做腐蚀、膨胀以及开闭操作。
from scipy.misc import ascent
img = ascent()
funcs = {
"original": lambda x, tmp:x,
"erosion" : sn.grey_erosion,
"dilation" : sn.grey_dilation,
"opening" : sn.grey_opening,
"closing" : sn.grey_closing
}
fig = plt.figure()
for i, key in enumerate(funcs):
ax = fig.add_subplot(2,3,i+1)
plt.imshow(funcs[key](img, (10,10)), cmap=plt.cm.gray)
plt.title(key)
plt.show()
效果如下
参数列表
二值函数和灰度函数的参数并不相同,下面以closing运算为例,二值和灰度函数的所有参数,除了输入input之外,二者共有的参数有
structure 为数组类型,表示构造元素,可以理解为是卷积模板
output 与输入相同维度的数组,可以存下结果
orgin 过滤器设置,默认为0
二值形态学滤波的其他参数如下
binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)
其中
iterations 执行次数
mask 掩模数组,为bool类型的数组,对应False的位置将不会改变
border_value 边缘处的值
brute_force 如果为False,则只有上次迭代中发生变化的值才会更新
grey_closing(input, size=None, footprint=None, mode='reflect', cval=0.0)
size 为滤波模板
mode 可选reflect,constant,nearest,mirror, wrap,边缘填充方式
cval 边缘填充值
来源:https://blog.csdn.net/m0_37816922/article/details/129942263
猜你喜欢
- 最近刚重构完,我们的一个项目,由原来的jsp模式改为了前后端分离,前端选型为vue,开发完成之后第一件时间就是要部署测试,服务端选的是Apa
- 一、KNN算法简介邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K
- 前言人类都是视觉动物,不管是男生还是女生看到漂亮的小姐姐、小哥哥就想截图保存下来。可是截图会对画质会产生损耗,截取的画面不规整,像素不高等问
- 官方网站:http://www.extjs.com/演示地址:http://www.yaohaixiao.com/effects/sampl
- 有时候我们需要查看mysql的版本信息,那么就可以参考下面的方法1、使用命令行模式进入mysql会看到最开始的提示符在命令行登录mysql,
- Python 中要创建对象列表:声明一个新变量并将其初始化为一个空列表。使用 for 循环迭代范围对象。实例化一个类以在每次迭代时创建一个对
- 项目运行环境阿里云(单核CPU, 1G内存, Ubuntu 14.04 x64 带宽1Mbps), 具体购买和ssh连接阿里云本文不做描述。
- 前言:这种技术一般是基于的GAN(生成对抗网络)来实现,今天我给大家分享一个开源项目,能够复现静态图片动起来效果,可以做些有趣的项目,也可以
- 1下载安装1.1打开官网http://www.jetbrains.com/pycharm/download/耐心等待,大概200M,几分钟左
- 一 基本知识millisecond 毫秒microsecond 微秒 nanosecond 纳秒1秒=1000毫秒 1毫秒=1000微秒 1
- WEB程序员的技能要求: Web程序员不光要对 后端程序(如 php,jsp,asp.net)语言知识,对程序设计架构知识,数据库
- 导语每日游戏更新系列——今天带大家来看看扫雷小游戏!它是许多人接触到的第一款游戏,大概也是广大办公族和无网学生无聊时消遣的最佳游戏。在那些还
- 1. Document.form.item 问题 现有问题:  
- 主要用到的工具:Pandas 、fuzzywuzzyPandas:是基于numpy的一种工具,专门为分析大量数据而生,它包含大量的处理数据的
- 一、张量裁剪1.tf.maximum/minimum/clip_by_value()该方法按数值裁剪,传入tensor和阈值,maximum
- 之前有文章,使用Android平台的OpenCV接入了视频,控制的目标是手机的摄像头,这是OpenCV的好处,使用OpenCV可以使用跨平台
- 首先看一下这三个函数:rtrim() ltrim() trim();rtrim()定义以及用法: rtrim() 函数移除字符串右侧的空白字
- PHP中主要用strtr()和str_repalce()这两个函数替换字符串和数组,但你们都知道他们这两个函数的区别和用法吗?有不少文章在说
- 前几天,在所有数据库服务器部署了监控磁盘空间的存储过程和作业后(MS SQL 监控磁盘空间告警),今天突然收到了两封告警邮件,好吧,存储规划
- 在my.cnf中设置了sql_mode='STRICT_TRANS_TABLES';却发现还是有非法数据的写入,比如无符号整