Нахождение массивов пикселей, перпендикулярных производной - PullRequest
0 голосов
/ 18 декабря 2018

Я разрабатываю метод «выпрямления» бинарных масок изображений корней моркови.Я проследил средние линии через маски.Например, я начинаю с двоичной маски:

binary mask

Затем я использую диаграммы Вороного для оценки средней линии, как показано красным:

binary mask + midline

Теперь я хотел бы найти длину «кусочков», которые проходят перпендикулярно средней линии в каждой точке, которые затем составили бы соответствующую ширину корняв любой заданной точке по всей его длине.Я использую метод, аналогичный описанному здесь , чтобы найти производную от соединенных точек сплайна вдоль средней линии:

def get_spline_derivative(points):

x_max = points[:, 0].max()
# x_min = points[:, 0].min()
new_length = x_max

x = points[:, 0]
y = points[:, 1]

# new_x = np.linspace(x_min, x_max, new_length)

# new_x = np.linspace(0, 1, 2000)  # this is the one that works
new_x = np.linspace(0, 1, new_length)  # this is the one that works

tck, u = itp.splprep([x, y])
dx, dy = itp.splev(new_x, tck, der=1)

return list(zip(dx, dy))

Это дает огромный массив, сокращенный здесь (полный вывод здесь ):

[(-559.8864500362733, -105.4032498463578), (-560.2848158832071, -109.774387868758), (-560.6711489905051, -113.82253391400316), (-561.0454493581669, -117.54768798209324), (-561.4077169861929, -120.94985007302827), ... (-533.1106034956821, 74.87936144117594)]

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

У кого-нибудь есть опыт с этим?

...