Преобразование многоугольника SVG в незамкнутую кривую

Давайте рассмотрим простое следующее изображение в его SVG-представлении (выполнение фрагмента кода отобразит его):

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" height="200" width="200">
  <g>
    <path d="m 90.200184,21.865233 13.886726,0 0,91.406257 q 0,8.4375 -4.306646,11.86524 -3.7793,2.72461 -13.35938,2.72461 -10.37109,0 -18.19336,-1.05469 l -2.46094,-13.53516 q 11.07422,2.02148 18.45704,2.02148 5.97656,0 5.97656,-5.97656 l 0,-87.451177 z"/>
  </g>
</svg>

Путь SVG на самом деле представляет собой набор точек по всей фигуре, хотя это может быть и простая наклонная кривая сверху вниз (красная линия здесь). К сожалению, мне предоставлены эти изображения, и я не могу их изменить.

Я ищу способ преобразовать — или, скорее, приблизить — многоугольник SVG в открытую кривую SVG, либо напрямую, либо в несколько шагов.

Любое решение приветствуется, но я предпочитаю следующий порядок:

  1. программно (чтобы я мог написать сценарий);
  2. используя Inkscape или GIMP (или любую другую программу для Linux);
  3. ну, все, что будет работать.

Спасибо,


person Jon Canning    schedule 14.05.2015    source источник


Ответы (2)


Разве это не так просто, как удалить закрывающий z из пути?

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" height="200" width="200">
  <g>
    <path d="m 90.200184,21.865233 13.886726,0 0,91.406257 q 0,8.4375 -4.306646,11.86524 -3.7793,2.72461 -13.35938,2.72461 -10.37109,0 -18.19336,-1.05469 l -2.46094,-13.53516 q 11.07422,2.02148 18.45704,2.02148 5.97656,0 5.97656,-5.97656 l 0,-87.451177"/>
  </g>
</svg>

Или вы ищете что-то более сложное, чем это?

Очевидно, что удаление закрывающего z легко написать на выбранном вами языке программирования.

person Stephen Thomas    schedule 14.05.2015
comment
Не совсем так, потому что я бы все равно сохранил контур вокруг формы, а не линию. По сути, я хочу получить красную линию на этой картинке: imgur.com/7kzi4Lp. - person Jon Canning; 14.05.2015
comment
Это будет сложно, если не практически невозможно, для произвольных путей. (Если, конечно, вы не хотите углубляться в алгоритмы машинного зрения.) - person Stephen Thomas; 14.05.2015

Этот класс алгоритмов обычно известен как поиск «скелета» или «средней оси». Если вы будете искать по этим терминам, вы найдете документы и другие документы, описывающие различные потенциальные подходы. Однако многие/большинство обычно начинают с растровых изображений.

https://en.wikipedia.org/wiki/Топологический_скелет

person Paul LeBeau    schedule 15.05.2015
comment
Большое спасибо. О скелетах я почему-то не подумал. - person Jon Canning; 15.05.2015