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

作者:微小冷 时间:2022-12-05 09:13:05 

数组统计函数

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

标签:Python,图像,连通域
0
投稿

猜你喜欢

  • vue如何使用router.meta.keepAlive对页面进行缓存

    2024-05-29 22:49:03
  • python unicodedata模块用法

    2021-04-05 20:53:55
  • 在Django框架中自定义模板过滤器的方法

    2021-02-11 20:14:49
  • python常用知识梳理(必看篇)

    2021-04-30 07:37:39
  • asp显示数据库中表名、字段名、字段内容

    2008-06-17 18:09:00
  • python机器学习Github已达8.9Kstars模型解释器LIME

    2022-06-21 13:38:28
  • Python如何使用ElementTree解析xml

    2023-02-05 07:22:06
  • 图文详解OpenCV中光流以及视频特征点追踪

    2022-12-30 01:45:08
  • vue学习教程之带你一步步详细解析vue-cli

    2024-05-09 10:52:46
  • 在Python中测试访问同一数据的竞争条件的方法

    2023-03-29 15:04:06
  • ASP+MSSQL2000 数据库被批量注入后的解决方法第1/2页

    2011-04-06 10:50:00
  • Python实现用户登录并且输入错误三次后锁定该用户

    2022-07-28 12:02:47
  • 浅谈Python中range和xrange的区别

    2021-04-18 14:52:13
  • PHP基于cookie与session统计网站访问量并输出显示的方法

    2023-11-15 08:38:52
  • Django原生sql也能使用Paginator分页的示例代码

    2023-11-09 10:00:06
  • Python图像识别+KNN求解数独的实现

    2021-06-11 19:48:23
  • 解决python中set与dict的无序问题

    2021-02-24 14:50:31
  • oracle下加密存储过程的方法

    2009-02-28 10:50:00
  • 利用phpExcel实现Excel数据的导入导出(全步骤详细解析)

    2023-06-22 02:56:42
  • 详解MySQL数据库之更新语句

    2010-08-08 09:15:00
  • asp之家 网络编程 m.aspxhome.com