python - Scipy 标签扩张

标签 python numpy scipy

类似于我关于 eroding a scipy label array 的问题,我正在尝试扩大标签区域。

棘手的部分是防止不同区域“相互入侵”。

A开始,我怎样才能得到类似B的东西?

A = array([[0, 0, 0, 0, 0, 0, 0, 0],
           [0, 1, 1, 2, 2, 0, 0, 0],
           [0, 1, 1, 2, 2, 0, 3, 3],
           [0, 0, 0, 0, 0, 0, 3, 3],
           [0, 0, 0, 0, 0, 0, 3, 3],
           [0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0]])

B = array([[1, 1, 1, 2, 2, 2, 0, 0],
           [1, 1, 1, 2, 2, 2, 3, 3],
           [1, 1, 1, 2, 2, 2, 3, 3],
           [1, 1, 1, 2, 2, 3, 3, 3],
           [0, 0, 0, 0, 0, 3, 3, 3],
           [0, 0, 0, 0, 0, 3, 3, 3],
           [0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0]])

有些情况是模棱两可的,我不太确定它应该如何表现,但我认为我所追求的是明确的。

最佳答案

一种选择是只使用最大过滤器,然后重置任何“被入侵”的区域。

举个例子:

import numpy as np
import scipy.ndimage as ndimage

A = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
              [0, 1, 1, 2, 2, 0, 0, 0],
              [0, 1, 1, 2, 2, 0, 3, 3],
              [0, 0, 0, 0, 0, 0, 3, 3],
              [0, 0, 0, 0, 0, 0, 3, 3],
              [0, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0, 0, 0, 0]])

B = ndimage.maximum_filter(A, 3)
B[A != 0] = A[A != 0]

print B

这会产生:

[[1 1 2 2 2 2 0 0]
 [1 1 1 2 2 3 3 3]
 [1 1 1 2 2 3 3 3]
 [1 1 2 2 2 3 3 3]
 [0 0 0 0 0 3 3 3]
 [0 0 0 0 0 3 3 3]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]]

在扩张区域,最大的数字总是“赢”。无论如何,这是一种方法。

关于python - Scipy 标签扩张,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12747319/

相关文章:

numpy - scipy.linalg.eig 是否给出了正确的左特征向量?

python - scipy.optimize.lsq_linear 边界错误

python - 我使用了错误的模块吗? pxssh

python - 计算余弦相似度矩阵,无需 scipy、sklearn.metrics.pairwise

Python IO - 在其他程序写入文本文件时用 Python 读取文本文件是否安全?

python - python(numpy、scipy 等)中是否有 t 测试表?

python - scikit-learn Imputer 类 - 中值策略可能存在错误?

python - 使用哪个三元运算符?

python - 列表列表到 numpy 数组中

python - Scipy.sparse.csr_matrix : How to get top ten values and indices?