эффективное извлечение локальных максимумов (координат) из двумерной матрицы правдоподобия (массива numpy) - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь извлечь координаты локальных максимумов из простой двумерной матрицы.значения являются числами от 0 до 1, представляющими вероятность того, что объект находится в этом месте.

Я попытался портировать матрицу и извлечь argmax, сохранить координаты, изменить его значение на 0 и выполнить циклпока не достигнут порог.

 detections = []
 while True:
    maxloc = np.unravel_index(np.argmax(scmap),
                              scmap.shape)
    if scmap[maxloc] > 0.9:
        # other code ..
        detections.append(maxloc)
        scmap[maxloc] = 0
# after that, what i did is calculating the euclidean distance 
# between each pair and excluded the ones that does not meet the  
# threshold

Я не удовлетворен этим, и я думаю, что есть более эффективные элегантные способы извлечения локальных максимумов.мысли?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Определение локальных максимумов - это встроенная функция scikit-image, которая находит максимальные значения в пределах некоторого заранее определенного расстояния.

from skimage.feature import peak_local_max
coordinates = peak_local_max(scmax, min_distance=5)

Я не уверен, как это на самом деле реализовано, но один метод реализации- выполнить немаксимальное подавление (т.е. выполнить итерацию по каждому значению в матрице и сравнить со всеми значениями в радиусе. Если значение не является максимальным в этом окне, установите его в ноль).Затем возьмите координаты всех ненулевых значений (возможно, выше некоторого доверительного порога) в качестве набора локальных максимумов.

0 голосов
/ 09 июля 2019

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

import numpy as np
data = np.array([
    [0, 0.5, 0.95],
    [0, 0.95, 0.5],
    [0.95, 0.5, 0]
])
thresholded_coordinates = np.argwhere(data > 0.9)

# array([[0, 2], [1,1], [2, 0]])

Выходные данныеthresholded_coordinates является попарной коллекцией координат.(0,2) указывает, что это третье значение в первой строке (0-индексированное).Вывод указывается в комментарии в последней строке.

...