Найти ближайшее значение X в ndarray в numpy, Python - PullRequest
0 голосов
/ 03 марта 2020

У меня есть ndarray, сформированный в 2D матрицу значений между 0 и 255. Давайте назовем это img. Кроме того, у меня есть значение х между 0 и 255, например 120. Я хочу создать матрицу dist_img, которая вычисляет расстояние до ближайшего значения х или ниже. Поэтому я хотел бы иметь что-то вроде этого:

x = 120
img = [[100, 120, 130],
       [110, 140, 160],
       [130, 150, 170]]
some_function(img, x)

И получить что-то вроде этого

dist_img = [[0, 0, 1],
            [0, 1, 2],
            [1, 2, 3]]

Если бы я мог быть пиковым, я бы хотел иметь расстояние в геометрии такси, но Евклидова геометрия будет работать. Извините за бедного Энгли sh, но надеюсь все понятно.

1 Ответ

2 голосов
/ 03 марта 2020

Создайте маску из значений, соответствующих условию, а затем используйте scipy.ndimage.morphology.distance_transform_cdt для создания карты расстояний:

import numpy as np
from scipy.ndimage.morphology import distance_transform_cdt

x = 120
img = np.array([[100, 120, 130],
                [110, 140, 160],
                [130, 150, 170]])
m = img <= x
d = distance_transform_cdt(~m, 'taxicab')
print(d)
# [[0 0 1]
#  [0 1 2]
#  [1 2 3]]
...