Осевая линия полигонального блоба (двоичное изображение)

У меня есть двоичное изображение червя (извлечение BLOB-объектов, которое хорошо работает). Я заинтересован в установке осевой линии на обдув (червяк).

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

Тем не менее, это вычисление не является надежным (из-за удаления вершин voronoi не внутри многоугольника?) Кто-нибудь знает алгоритмический рабочий процесс, чтобы получить центральную линию многоугольника или центральную линию объекта BLOB-объекта (двоичное изображение). (скелетонизация?, триангуляция многоугольника с использованием средних точек внутренних ребер)

Вот демонстрация:

1 ответ

Решение

Я нашел лучшее решение:

  • скелетизировать двоичный блоб
  • построить график (без циклов) скелета путем отслеживания линий пикселей и точек ветвления
  • получить все кратчайшие пути от каждого конечного узла ко всем остальным конечным узлам и взять самый длинный (приблизительно начало и конец большого двоичного объекта)
  • результирующий путь от одного конечного узла (степень =1) к другому конечному узлу является приближением средней линии червя.

Если кто-то заинтересован в решении, я могу поделиться записной книжкой на Python. конечный результат: зеленый = окончательный срединный график, темно-зеленый = окончательный срединный график

график Скелтона

Исходный код:
Код этого вопроса можно найти здесь: https://github.com/gabyx/WormAnalysis (если вы используете его, пожалуйста, отметьте его)

Другие вопросы по тегам