Нахождение средних линий многоугольников по диаграммам Вороного - PullRequest
0 голосов
/ 22 ноября 2018

Я использую подход на основе диаграмм Вороного, изложенный здесь , чтобы найти средние линии двоичных масок корневых изображений.Я использую код Python более или менее точно так, как описано:

import skimage.morphology as morphology

WHITE = 255

image_bool = binary_mask == WHITE
d = morphology.disk(2)
img = morphology.binary_closing(image_bool, selem=d)
skeleton = morphology.medial_axis(img)

Затем идет график: я передаю скелетонизированное изображение в buildTree, как описано в записной книжке пользователя Gabriel iPython: https://github.com/gabyx/WormAnalysis/blob/master/SkeletonTest/Skeletonize.ipynb

В целом это дает отличные результаты.Однако метод иногда дает сбой двумя различными способами:

1) Графики не всегда расширяют всю длину корня:

enter image description here

Midline that does not extend fully

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

rod-like polygon with graph

rod-like polygon with midline

circle-like polygon with graph

circle-like polygon with midline

rod-like polygon with midline with graph

polygon with sharp vertices with midline

Этот последний случай - искусственная маска - ни один из моих настоящих корней не имеет идеально плоских кончиков - но я думаю, что он представляет проблему довольно хорошо.

У кого-нибудь с более тонким пониманием диаграмм Вороного есть какие-либо советы о том, как решить любую из этих проблем, при этом сохраняя общий подход.

Спасибо!

1 Ответ

0 голосов
/ 23 ноября 2018

Обе эти проблемы являются «особенностями» медиальной оси, подход Вороного.

Точка на медиальной оси обладает свойством, что она одинаково удалена от двух или более границ.Это связано с тем, что точки медиальной оси являются точками Вороного или двойными центрами триангуляции Делоне.Это означает, что есть круг с этим центром, весь внутри границы, проходящий через три граничные точки.По крайней мере, это был бы случай, когда дискретизация границы уходит в бесконечность.Поскольку граница не имеет бесконечного числа точек, этот подход является приближением к проблемам, которые вы наблюдали.

1) Средняя ось дуги окружности - это точка.Этот результат хорош.Если форма заканчивается достаточно чистой дугой, то средняя ось «останавливается» в точке, которая является средней осью дуговой части.Это можно увидеть при сравнении различных методов на странице Skeletonize .

2) Средняя ось двух линий проходит через биссектрису угла.Это означает, что если на границе будет больше «углов», в эти углы войдет больше осевых «пальцев».Как средняя ось квадрата имеет форму X.Если вы используете подход WormAnalysis (на который вы ссылались), то извлекается только самый длинный путь на оси.Что хорошо для червей, но не в общем случае.В общем случае было бы лучше очистить ось, удалив части, которые покрывают небольшую часть границы.Как и в первом изображении темы 2) вверх идет осевая часть.То есть часть является средней осью небольшого угла на границе вверху слева.Слева от этого угла на границе находится часть, которая представляет собой дугу с небольшой средней осью.Из-за выбора самой длинной траектории берется тот длинный «палец», который охватывает небольшую часть границы, но меньшая часть медиальной оси, которая охватывает большую часть границы, опущена.

...