3

我有一个二进制 numpy 数组,并用 scipy.ndimage 标记了连接区域。我可以打电话来估计每个标记部分的偏心率吗?

编辑:

我正在尝试制定标准来查找和折腾比它们宽得多的标记部分。在下面的数组中,我可能想保留 7s 并折腾 3s。

3 3 0 0 0 0
3 3 0 7 7 7
3 3 0 7 7 7
3 3 0 7 0 7
3 3 0 0 0 0
4

2 回答 2

2

我想你首先需要一点数学知识。首先考虑您只有一个标记为 1 的 blob。您的矩阵标签将是一个标量字段。您应该首先计算其平均值:

意思是

你的标签在哪里rho(它没有索引,因为它是一个标量)。然后计算:

张量

偏心率的一个很好的定义是该矩阵的无迹部分的两个最大特征值的比率(在 2D 中,您将只有 2 个特征值)。您还可以对其进行规范化以获得介于 0 和 1 之间的值。我对 scipy 的使用还不够,无法为此编写有效的代码。

于 2011-11-18T06:04:37.080 回答
1

假设您只分配每个标签一次:具有偏心 blob 的矩阵将具有比空列更多的空行,反之亦然。

labels = [2,3,7] # or whatever you have
good_labels = []
for label in labels:
    m = matrix == label
    non_empty_columns = sum(sum(m)>0)
    non_empty_rows = sum(sum(m.transpose())>0)
    if 1.0 * non_empty_rows / (non_empty_columns+0.001) > threshold:
        good_labels.append(label)

这将删除非常长(垂直)的 blob,转动行和列以删除水平拉伸的 blob。

于 2011-11-17T16:06:27.953 回答