Определить среднюю линию изогнутой, вытянутой области

представьте, что у меня есть двумерное изображение хот-дога. Я могу нарисовать прямую линию в игре между двумя концами. Назовем это линии. Одним из его свойств является то, что это ось, вокруг которой (2D) хотдог имеет наименьший момент инерции.

теперь, если я согну хот-дог по дуге, эта средняя линия также исказится.

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

4 ответов


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

Hotdog with midline

(Это просто иллюстрация-вероятно, не геометрически правильная средняя линия!)

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

Hotdog iteration 0

Если вы делаете это для каждой точки, вы должны получить лучшее приближение к срединной линии.

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

один из способов обойти это-использовать более физически вдохновленную модель:

  • вычислить преобразование расстояния для внутренней части объекта (расстояние от каждой точки до ближайшей пограничной точки)
  • найдите гладкую линию через объект, который максимизирует Интеграл пути Изображения преобразования расстояния:

Distance transform

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

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

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


может,скелетируют ваш согнутый хот-дог.

вы должны thresold it, затем используйте алгоритм прореживания.

вот некоторые интересные ссылки:

http://xphilipp.developpez.com/contribuez/Skeleton-Algorithm.pdf http://www-prima.inrialpes.fr/perso/Tran/Draft/gateway.cfm.pdf http://www.geometrictools.com/Documentation/Skeletons.pdf


Если подход скелетирования не работает, вы, вероятно, смотрите на более сложную проблему, которая вызывает ряд вопросов: насколько ограничены ваши формы? они всегда выпуклые? так далее. В зависимости от ответов вы можете рассмотреть возможность параметризации фигуры.

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


вы, вероятно, ищете диаграмму Вороного, которая даст вам все точки, которые равноудалены от краев формы "хот-дог" - например, путь/позвоночник/хребет/средняя линия вниз по середине.

и вот изображение, чтобы помочь визуализировать его:http://vision.ai.uiuc.edu / ~sintod / изображения / исследования / VoronoiDiag.png

сопоставление этого изображения с вашим примером, тяжелые синие контуры-это ваши формы "хот-дога", а тонкий синий позвоночник / средняя линия в интерьере дано диаграммой Вороного. Точки На этой средней линии хребта одинаково далеки от тяжелых синих краев.