Я разрабатываю метод «выпрямления» бинарных масок изображений корней моркови.Я проследил средние линии через маски.Например, я начинаю с двоичной маски:
![binary mask](https://i.stack.imgur.com/bMOjT.png)
Затем я использую диаграммы Вороного для оценки средней линии, как показано красным:
![binary mask + midline](https://i.stack.imgur.com/fYcUJ.png)
Теперь я хотел бы найти длину «кусочков», которые проходят перпендикулярно средней линии в каждой точке, которые затем составили бы соответствующую ширину корняв любой заданной точке по всей его длине.Я использую метод, аналогичный описанному здесь , чтобы найти производную от соединенных точек сплайна вдоль средней линии:
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)]
Я не уверен, как затем использовать эти выходные данные, чтобы найти вектор, перпендикулярный этой производной, и затем вычислить длину «бина» пикселей, которыйвнутри многоугольника, идущего вдоль этого вектора.
У кого-нибудь есть опыт с этим?