Оценка эксцентриситета в Python - PullRequest
3 голосов
/ 17 ноября 2011

Я получил двоичный массив NumPy и пометил связанные области с помощью scipy.ndimage. Могу ли я позвонить, чтобы оценить эксцентриситет каждой маркированной секции?

Edit:

Я пытаюсь разработать критерии для поиска и отбрасывания помеченных разделов, которые намного длиннее, чем они широкие. В следующем массиве я могу оставить 7 и бросить 3.

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

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Полагаю, сначала вам нужно немного математики. Давайте сначала рассмотрим, что у вас есть только один BLOB-объект с меткой 1. Ваша матричная метка будет скалярным полем. Сначала вы должны вычислить его среднее значение:

mean

, где rho - это ваша метка (это не индекс, поскольку это скаляр). Затем вычислите:

tensor

Хорошим определением эксцентриситета будет отношение двух самых больших собственных значений бесследной части этой матрицы (в 2D у вас будет только 2 собственных значения). Вы также можете нормализовать его, чтобы получить значение от 0 до 1. Я недостаточно использую scipy для написания эффективного кода для этого.

1 голос
/ 17 ноября 2011

Предполагается, что вы назначаете каждую метку только один раз: матрица с эксцентричным блобом будет иметь больше пустых строк, чем пустой столбец или наоборот.

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)

Это удалит очень длинные (вертикально) капли, превратит строкии колонны вокруг, чтобы удалить горизонтально растянутые капли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...