当前位置:

首页 > 编程开发 > Python实现基本形态学滤波的方法

Python实现基本形态学滤波的方法

最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算二值灰度binary_erosiongrey_erosion腐蚀binary_dilationgrey_dilation膨胀binary_closinggrey_closing闭(先膨胀后腐蚀)binary_openinggrey_opening开(先腐蚀后膨胀)二值形态学所谓腐蚀,用数学符号表示为其中Bij表示当BBB的原点在(i,j)处时,B中所有为1的值的集合。这个式子的意

本文目录

    最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算

    二值灰度
    binary_erosiongrey_erosion腐蚀
    binary_dilationgrey_dilation膨胀
    binary_closinggrey_closing闭(先膨胀后腐蚀)
    binary_openinggrey_opening开(先腐蚀后膨胀)

    二值形态学

    所谓腐蚀,用数学符号表示为

    Python实现基本形态学滤波的方法

    其中Bij表示当B BB的原点在(i,j)处时,B中所有为1的值的集合。

    这个式子的意思是,用结构B腐蚀A,当B的原点平移到图像A的像元(i,j)时,若B完全被二者的重叠区域所包围,则赋值为1,否则赋值为0。更直观的例子是,如果B中为1的元素位置上,对应的A的像素值也都为1,则(i,j)处为1。

    膨胀则与之相反,可表示为

    Python实现基本形态学滤波的方法

    换言之,只要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()

    效果如下

    Python实现基本形态学滤波的方法

    开运算是先腐蚀后膨胀;闭运算是先膨胀后腐蚀,示例如下

    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。

    Python实现基本形态学滤波的方法

    灰度形态学

    灰度图像的腐蚀、膨胀以及开闭运算,是其二值形势下的一个扩展,采用了类似卷积的逻辑,下面直接从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 边缘填充值

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    python删除一个列表里的重复元素的方法与代码示例
    python删除一个列表里的重复元素的方法与代码示例

    学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

    Python写接口的步骤及完整代码示例
    Python写接口的步骤及完整代码示例

    详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

    codex怎么读取word文档及docx文件操作教程
    codex怎么读取word文档及docx文件操作教程

    介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

    怎么在Python中调用C语言代码提升性能
    怎么在Python中调用C语言代码提升性能

    详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

    Python与C语言的性能差异及底层原理
    Python与C语言的性能差异及底层原理

    深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

    Python和C语言哪个更适合编程入门
    Python和C语言哪个更适合编程入门

    客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    langgraph python guide中文入门教程详解
    langgraph python guide中文入门教程详解

    本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

    Windows 安装 Python:从官方入口到虚拟环境的可复现实践
    Windows 安装 Python:从官方入口到虚拟环境的可复现实践

    面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。