Python实现统计图像连通域的示例详解

 更新时间:2023年04月25日 16:32:20   作者:微小冷  
这篇文章主要为大家详细介绍了如何利用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中这些位置的元素求平均。

到此这篇关于Python实现统计图像连通域的示例详解的文章就介绍到这了,更多相关Python统计图像连通域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pandas数据分列实现分割符号&固定宽度

    pandas数据分列实现分割符号&固定宽度

    数据分列在数据处理中很常见,数据分列一般指的都是字符串分割,本文主要介绍了pandas数据分列实现分割符号&固定宽度,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • python实现PyEMD经验模态分解残差量分析

    python实现PyEMD经验模态分解残差量分析

    这篇文章主要为大家介绍了PyEMD经验模态分解及变体残余量分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python用BeautifulSoup库简单爬虫实例分析

    python用BeautifulSoup库简单爬虫实例分析

    文章给大家分享了关于python爬虫的相关实例以及相关代码,有兴趣的朋友们参考下。
    2018-07-07
  • Numpy 三维数组索引与切片的实现

    Numpy 三维数组索引与切片的实现

    本文主要介绍了Numpy 三维数组索引与切片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Keras中Conv1D的使用及说明

    Keras中Conv1D的使用及说明

    这篇文章主要介绍了Keras中Conv1D的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 浅谈Python程序的错误:变量未定义

    浅谈Python程序的错误:变量未定义

    这篇文章主要介绍了浅谈Python程序的错误:变量未定义,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python用dilb提取照片上人脸的示例

    Python用dilb提取照片上人脸的示例

    这篇文章主要介绍了Python用dilb提取照片上人脸的示例,帮助大家更好的利用python处理人像,感兴趣的朋友可以了解下
    2020-10-10
  • 在python中路径含有空格的问题及解决

    在python中路径含有空格的问题及解决

    这篇文章主要介绍了在python中路径含有空格的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • libreoffice python 操作word及excel文档的方法

    libreoffice python 操作word及excel文档的方法

    这篇文章主要介绍了libreoffice python 操作word及excel文档的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • pytz格式化北京时间多出6分钟问题的解决方法

    pytz格式化北京时间多出6分钟问题的解决方法

    这篇文章主要给大家介绍了关于pytz格式化北京时间多出6分钟问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06

最新评论