Python实现统计图像连通域的示例详解
作者:微小冷 发布时间:2022-12-05 09:13:05
标签:Python,图像,连通域
数组统计函数
ndimage提供一系列函数,可以计算标注后的数组的相关特征,比如最值、均值、均方根等。
下列函数,如果未作其他说明,那么就有3个参数,分别是(input, labels=None, index=None),其中input为输入数组;labels为input的标签,形状和input相同;index为整数或者整数数列,为用于计算的label。
函数 | 物理量 | 函数 | 物理量 |
---|---|---|---|
mean | 平均值 | center_of_mass | 质心 |
maximum | 最大值 | maximum_position | 最大值位置 |
minimum | 最小值 | minimum_position | 最小值位置 |
median | 中位数 | extrema | 最大值、最小值,及其位置 |
sum_labels | 求和 | ||
variance | 方差 | standard_deviation | 标准差 |
示例如下
import numpy as np
import scipy.ndimage as sn
x = np.random.randint(10, size=(3,3))
print(x)
'''
[[0 3 5]
[9 3 1]
[1 5 7]]
'''
sn.center_of_mass(x) # (1.1470588235294117, 1.088235294117647)
sn.extrema(x) # (0, 9, (0, 0), (1, 0))
连通域标记
通过label函数,可以对数组中的连通区域进行标注,效果如下
from scipy.ndimage import label
import numpy as np
a = np.array([[0,0,1,1,0,0],
[0,0,0,1,0,0],
[1,1,0,0,1,0],
[0,0,0,1,0,0]])
labels, N = label(a)
print(labels)
'''
[[0 0 1 1 0 0]
[0 0 0 1 0 0]
[2 2 0 0 3 0]
[0 0 0 4 0 0]]
'''
print(N) 4
在label函数中,还有一个用于规范何为“连通”的参数,即structure,其数据类型为二值数组,其维度与输入的input相同。
在上面的示例中,连通域1,3,4尽管没有上下左右的联系,但在对角线上是有交集的,通过调整structure参数,可以提供一种将这三个区域连在一起的连通域方案。
stru = np.ones([3,3])
bLab, bN = label(a, stru)
print(bLab)
‘'‘
[[0 0 1 1 0 0]
[0 0 0 1 0 0]
[2 2 0 0 1 0]
[0 0 0 1 0 0]]
'‘'
可见,这次只选出了两组连通域。
连通域统计
前面提到的所有统计函数,形参都有三个,分别是input, labels, index,其中input为输入数组,labels为将要处理的连通域,index为准备处理的连通域序号。
np.random.seed(42)
test = np.random.rand(5,5)
test[test<0.8] = 0
labels, N = sn.label(test)
print(N) # 2
print(labels) #
‘'‘
[[0 1 0 0 0]
[0 0 2 0 0]
[0 2 2 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
'‘'
print(test)
‘'‘
[[0. 0.95071431 0. 0. 0. ]
[0. 0. 0.86617615 0. 0. ]
[0. 0.96990985 0.83244264 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
'‘'
接下来通过连通域统计函数,针对某个连通域进行计算
>>> sn.mean(test, labels, 1)
0.9507143064099162
>>> sn.mean(test, labels, 2)
0.8895095462457837
>>> sn.mean(test, labels, 0)
0.0
当index=1时,会找出labels中为1的位置,然后把test中这些位置的元素求平均。
来源:https://blog.csdn.net/m0_37816922/article/details/130040177


猜你喜欢
- 关于递归函数:函数内部调用自身的函数。以n阶乘为例:f(n) = n ! = 1 x 2 x 3 x 4 x...x(n-1)x(n) =
- 本文实例为大家分享了用matplotlib中scatter方法画散点图的具体代码,供大家参考,具体内容如下1、最简单的绘制方式绘制散点图是数
- 保存Python程序,可以使用以下方法:使用编辑器编写代码并保存1、打开Notepad++2、需要新建文本时,点击左上角”文本“,在弹出的菜
- 本文介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架。一、anaconda安装(一)下载官网下载链接:
- 概述如果你已经阅读过上一个章节,那么你应该已经完成了充分的准备工作并且创建了一个很简单的具有如下文件结构的Web应用: 
- 抽象方法和抽象类 在OOP 语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为 外部代码访问其的接口。而抽象方法就是为了方
- python使用ctypes模块调用windows api GetVersionEx获取当前系统版本,没有使用python32#!c:/py
- python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错,例如l = [1,2,3,4]for
- 摘要:本篇文章介绍了ORACLE数据库的新特性—分区管理,并用例子说明使用方法。 关键词:ORACLE,分区 一、 分区概述: 为了简化数据
- PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php
- 本文实例讲述了php+redis实现注册、删除、编辑、分页、登录、关注等功能。分享给大家供大家参考,具体如下:主要界面连接redisredi
- 目录需求描述步骤分析和前置知识代码实现写在最后需求描述手上现有若干份财务分析报告的Word文档,如下:每一份Word文档中的内容如下:为了方
- 如下所示:file = open('./abc.csv')csv.reader(file, delimiter=',
- 介绍pandas数据聚合和重组的相关知识,仅供参考。1GroupBy技术1.1简介简介:根据一个或多个键进行分组,每一组应用函数,再进行合并
- 互联网上的每台计算机都有独一无二的编号,称为IP地址,每个合法的IP地址由“.”分开的4个数字组成,并且IP地址细分类型的话,可以分为“A”
- 上期回顾:亚马逊购物用户体验分析 (二)方便的导航元素任何网上商店的成功,至关重要的一点,就是用户可以简单轻松地使用导航条。基本店铺分类,用
- 前言相比常用的 os.path而言,pathlib 对于目录路径的操作更简介也更贴近 Pythonic。但是它不单纯是为了简化操作,还有更大
- 一、策略模式策略模式中,首先定义了一系列不同的算法,并把它们一一封装起来,然后在策略类中,使这些算法可以相互替换。这意味着,让一个类的行为(
- 前言当前很多人在闲暇时喜欢听音乐,那么基于这种现象,我也是肝了几个小时完成了基于python的个性化音乐播放器,现在分享给你们。开发组件py
- 1、python代码实现图片分割成九宫格需要包含的库,没有下载安装的,需要自己安装哦。实现原理很简单,就是用PIL库不断画小区域,切下来存储