【问题标题】:Eccentricity estimation in PythonPython中的偏心率估计
【发布时间】:2011-11-16 21:04:14
【问题描述】:

我有一个二进制 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

【问题讨论】:

  • 你对偏心的定义是什么?你有一个二维数组?您想研究点的惯性张量吗?
  • 偏心率作为衡量每个标记的 blob 的长度的指标。这是一个二维数组,是的。如果它也适用于 3,那就太好了,尽管这可能会在以后使用。

标签: python pca


【解决方案1】:

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

是您的标签(它没有索引,因为它是一个标量)。 然后计算:

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

【讨论】:

  • 这将是完美的。我的直觉告诉我这只是用 scipy 打了几个电话,但我不知道该怎么做......
【解决方案2】:

假设您只为每个标签分配一次:具有偏心 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。

【讨论】:

  • 在很多情况下这会起作用,但是像“T”形这样的情况呢?
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 2017-01-31
  • 2014-08-11
  • 1970-01-01
相关资源
最近更新 更多