skimage包的小优化(2):模仿remove_small_objects()函数保留图片中连通域最大的区域

本文主要是介绍skimage包的小优化(2):模仿remove_small_objects()函数保留图片中连通域最大的区域,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python模仿remove_small_objects()函数保留图片中连通域最大的区域

skimage包的morphology子模块中,提供了一个remove_small_objects()函数,可以通过自己设定的连通域面积阈值有效去掉图片中的噪点,但是在具体使用过程中会发现:这个函数使用起来还有诸多的不便,好在这个函数的源代码并不长,在在skimage包的小优化(1):模仿remove_small_objects()函数去除图片边缘不感兴趣区域
中,我就是通过模仿remove_small_objects()的源代码,实现了判断连通域与中心坐标的位置远近来去除图片边缘大面积噪声。很好地解决了去掉图片边缘不感兴趣区域的问题。

但是最近在使用过程中,我有发现了另外一个问题:在使用remove_small_objects()函数的时候,必须要指定一个连通域的面积阈值(这个函数的具体使用方法见:scikit-image(skimage)包的用法详解),而很多时候我们根本不知道这个阈值到底要设为多少。而有时候,我们如果已经知道图片中只有那块连通域面积最大的区域是我们想要的,那么,只需要保留这块区域,其他的都当作噪点删掉即可,没必要非要确定一个面积阈值。

具体实现如下:

##输入:一张二值图像,无须指定面积阈值,
##输出:会返回保留了面积最大的连通域的图像
def save_max_objects(img):labels = measure.label(img)  # 返回打上标签的img数组jj = measure.regionprops(labels)  # 找出连通域的各种属性。  注意,这里jj找出的连通域不包括背景连通域# is_del = Falseif len(jj) == 1:out = img# is_del = Falseelse:# 通过与质心之间的距离进行判断num = labels.max()  #连通域的个数del_array = np.array([0] * (num + 1))#生成一个与连通域个数相同的空数组来记录需要删除的区域(从0开始,所以个数要加1)for k in range(num):#TODO:这里如果遇到全黑的图像的话会报错if k == 0:initial_area = jj[0].areasave_index = 1  # 初始保留第一个连通域else:k_area = jj[k].area  # 将元组转换成arrayif initial_area < k_area:initial_area = k_areasave_index = k + 1del_array[save_index] = 1del_mask = del_array[labels]out = img * del_mask# is_del = Truereturn out

这篇关于skimage包的小优化(2):模仿remove_small_objects()函数保留图片中连通域最大的区域的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108850

相关文章

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过