python - Scipy 标签并测量每个标签中的最大像素

标签 python numpy scipy ipython ndimage

所以我想使用 scipy 测量每个标签(在多个数组中)的最大像素和平均像素。 例如

(img,其他是打开的tif的numpy数组)

import numpy as np
import scipy.ndimage as ndi

a = img > 200
labels,nb = ndi.labels(a)

merge = np.zeros(img.shape)
merge = other * a

因此,对于每个标签,我想为 img 和合并找到像素的最小值、像素的最大值和强度的平均值(我可以计算每个标签的面积)。我希望能够用每个标签的这些计数(img 中的连接区域)制作直方图。 (一旦我有了 np 数组或列表,我就知道如何制作直方图了)

我正在考虑为每个标签创建一个循环,然后仅使用该标签创建一个二元结构并测量值。是否有任何快速的 scipy/numpy 方法可以在不经过循环的情况下执行此操作?

谢谢!

最佳答案

您可以使用 labeled_comprehension 一次性完成所有这些:

#!/usr/bin/env python2.7
import numpy as np
from scipy import ndimage as nd


hist = []

def analyze(x):
    xmin = x.min()
    xmax = x.max()
    xmean = x.mean()
    xhist = np.histogram(x, range=(xmin, xmax))
    hist.append({'min': xmin,
                 'max': xmax,
                 'mean': xmean,
                 'hist': xhist})
    return 1

a = np.array([[1, 2, 0, 0],
              [5, 3, 0, 4],
              [0, 0, 0, 7],
              [9, 3, 0, 0]])

lbl, nlbl = nd.label(a)

lbls = np.arange(1, nlbl + 1)

nd.labeled_comprehension(a, lbl, lbls, analyze, float, -1)

print a
print
print lbl
print
print hist

关于python - Scipy 标签并测量每个标签中的最大像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145127/

相关文章:

python - 将 matlab 循环转换为 python 循环

python - 如何用 Pythonese 说 - 做某事,除非它导致错误(不诉诸多级 try/execpt block )

python - 在 setuputils 包中获取入口点脚本文件位置?

python - Numpy savez 异常

python - 为什么在OpenCV中将laplacian转换为uint8?

python - Scipy ODR python

python - 为什么 `scipy.stats.rv_continuous` 的这个子类没有生成正确范围内的随机变量?

python - Numpy 滚动列相关

python - 如何在 pandas 数据框中有一个空的第一行

python - scipy中fmin_cg的梯度函数