Вычислить минимальное расстояние от точки в маске изображения до набора точек - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть маска изображения (разность M), например: enter image description here

Для каждого отдельного белого пикселя (значение пикселя! = 0) я хочу вычислить минимальное расстояние отэтот пиксель для набора точек.Множество точек - это точки на внешнем контуре, которые будут сохранены в виде пустого массива [x_val y_val].Я думал о том, чтобы сделать это:

...
def calcMinDist(dilPoints):
    ...

#returns 2d array (same shape as image)
def allMinDistDil(dilMask):
    dilPoints = getPoints(dilMask)
    ...
    return arrayOfMinValues

#more code here

blkImg = np.zeros(maskImage.shape,dtype=np.uint8)
blkImg.fill(0) 

img_out = np.where(differenceM,allMinDistDil(dilatedMask),blkImg)

....

Но проблема в том, чтобы вычислить минимальное расстояние от точки пикселя до набора точек (полученное из функции getPoints), мне нужнопередать точку в пикселе (индекс?), а также.Но (если я правильно понимаю) с этой функцией where, она проверяет только значения true и false в первом параметре ... Так что способ, которым я написал функцию np.where (), не будет работать.

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

Могу ли я попросить совета по решениюэтот?Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вместо того чтобы использовать функцию np.where (), чтобы найти конкретные пиксели, которые не равны нулю, я применил:

diffMaskNewArray = np.transpose(np.nonzero(binaryThreshMask))

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

shortestDistDil = np.amin(distance.cdist(a, b, 'euclidean'))

, чтобы найти минимальное расстояние между точкой и наборомграничные точки.

0 голосов
/ 01 октября 2018

(недостаточно повторений, чтобы комментировать) Что касается расстояния, вы, вероятно, хотите scipy.spatial.distance.cdist (X, Y) .Вы можете рассчитать минимальное расстояние с помощью простого:

from scipy.spatial import distance

def min_distance(points, set_of_points):
    return distance.cdist(np.atleast_1d(point), set_of_points).min()

Что касается np. Где вы можете предоставить немного больше информации о своей структуре данных?В большинстве случаев простую булеву маску сделают всю работу ...

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