Преобразование линейного рисунка из растра в вектор **LINES**

Вот уже такие вопросы, как:

... и другие.

У меня есть черно-белое изображение png, содержит рисунок, похожий на лабиринт, например, он содержит только линии , без областей.

Нужно преобразовать его в (любой) векторный формат, но как LINES . Каждая программа, которую я пробовал, например, VectorMagic, potrace и т. д., преобразовывала линии в закрытые области пути.

Небольшая часть исходного изображения PNG - увеличено:введите описание изображения здесь

Результат трассировки:введите описание изображения здесь

Как видите, «линия» прослеживается с обеих сторон , как и любая другая плоская фигура.

Ищете способ, как трассировать линии в настоящие линии (ПУТИ) , лучше всего с соответствующей шириной линии. (но было бы достаточно любой строчки).

Причина: нужно работать с трассируемыми линиями и узлами, например преобразовать некоторые узлы в Безье и тому подобное. Невозможно (легко) с формами.

Есть идеи:

  • как получить векторизованные линии из любой программы трассировки.
  • какой инструмент может это сделать? (любая ОС - можно использовать Windows, OS X, Linux..)

Ответы (6)

Отслеживание центральной линии

Существует бесплатный инструмент AutoTrace с открытым исходным кодом , который может выполнять трассировку центральной линии растрового изображения со штриховой графикой.

введите описание изображения здесь

Запустите AutoTrace , по крайней мере, со следующими параметрами:

autotrace -centerline -color-count 2 -output-file output.svg -output-format SVG input.png 

введите описание изображения здесь

Затем мы можем точно настроить штрихи и добавить желаемую силу штриха.

Мы также можем установить графический интерфейс Frontline для AutoTrace, если мы не знакомы с командной строкой.

Пользователи Linux могут установить автотрассировку из репозиториев по умолчанию в большинстве дистрибутивов. Для Windows есть предварительно скомпилированные пакеты, которые можно загрузить со страницы проекта.

Для AutoTrace существует много дополнительных параметров, которые можно найти на справочной странице приложения или вызвать его с помощью autotrace -help.

Чтобы получить прямые линии, а не сплайны, мы можем, например, использовать следующие параметры:

  • -line-threshold [real]:
    если сплайн не отклоняется от прямой линии, определяемой его конечными точками, более чем на указанное количество пикселей, то он рассматривается как прямая линия (по умолчанию: 1).

  • - line-reversion-threshold [real]:
    если сплайн ближе к прямой линии, взвешенный по квадрату длины кривой, оставьте его прямой линией, даже если это список с кривыми; по умолчанию .01.

Обновлять

В более поздних версиях (Inkscape 1.0+) трассировка центральной линии с использованием автотрассировки включена * в Inkscape через Path > Trace Bitmap :

введите описание изображения здесь


* Ссылка: примечания к выпуску Inkscape 1.0

+1 Знаете ли вы, есть ли возможность, чтобы трассировщик делал только прямые сегменты с автотрассировкой.
@joojaa: см. варианты редактирования.
Хотел бы я получить автотрассировку для сборки... Я бы с удовольствием использовал это
@slashdottir: какую систему вы используете? Сайт проекта переехал на Github для недавней разработки и отчетов об ошибках. Я отредактировал ответ, чтобы включить ссылку.
О гениально! Я использую ОСХ. Большое спасибо за ссылку!
Как заставить его работать в Windows? Я скачал файлы с Github. Должен ли я использовать CMD? После того, как я перехожу в нужное место, я набираю autotrace -help и получаю сообщение: 'autotrace' is not recognized as an internal or external commandКак заставить его работать?
@PrzemyslawRemin: для Windows вам нужно скомпилировать пакет, чтобы иметь возможность его использовать ... есть несколько предварительно скомпилированных двоичных файлов Windows64 ( например, здесь ), но я не смог их протестировать, и они, похоже, имеют только ограниченную функциональность.
+1, пожалуйста, обновите свой ответ, потому что последние версии Inkscape уже включают Autotrace.
@s.ouchene спасибо за уведомление. Включено.

Честно говоря... возьмите инструмент "Перо" и вручную проследите пути. Это приведет к лучшему результату.

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

изображение действительно СЛОЖНОЕ с много-много линий. Также есть больше изображений - просто слишком много работы - ищу альтернативу... ;)
также я надеюсь, что «инструмент» проведет некоторую оптимизацию, например, всегда будет создавать максимально длинные пути и т. Д. ... ручная работа не всегда лучшая;)
Удачи! Я действительно думаю, что то, о чем вы просите, просто требует ручного труда и терпения. Я никогда не видел автоматизированного решения, которое стоило бы создавать отдельные пути. Я думаю, ты ищешь невозможного, если честно.
@scott, хотя я в целом согласен с вашим мнением, в данном конкретном случае это может сработать.

Попробуйте использовать Interpolate Paths после вашей трассировки, как показано здесь:

Средний ход от заливки

ВОТ ЭТО ДА. Это выглядит ОЧЕНЬ многообещающе. Благодарю вас! +1.
@ jm666 jm666 Конечно, этот метод не будет очень хорошо автоматизироваться, если вы не имеете дело с непрерывными путями.

Illustrator может выполнять трассировку центральной линии так же, как и автоматическую трассировку . Это не очень полезно для большинства вещей, но в этом случае изображение очень синтетическое, и оно может сработать.

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

Сделай это:

  1. В настройках трассировки отключите заливку и включите обводку.

  2. Объект → Развернуть

введите описание изображения здесь

Изображение 1 : Объект после трассировки и расширения.

  1. Чтобы еще больше улучшить результаты любых ошибок трассировки, выполните: Object → Path → Simplify , отметьте прямые края.

введите описание изображения здесь

Изображение 2 : после упрощения

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

введите описание изображения здесь

Изображение 3 : Как квантизация может повлиять на результат.

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

PPS: Ваши углы перекрываются, это вызывает некоторые проблемы у автотрассировщиков. Вы можете обнаружить и исправить это с помощью нескольких операторов морфологии, скажем, в ImageMagick, что должно сделать трассировщиков НАМНОГО счастливее.

Тоже приятно. Теперь использую автотрассировку из-за простого использования командной строки - для многих изображений. Растровое изображение выше является небольшой частью большего изображения (увеличение 1300%) :) - поэтому оно выглядит ухудшенным. +1, спасибо.
@ jm666 jm666, конечно, вы также можете использовать иллюстратор из cmd, если хотите, но для начала нужно немного потрудиться.
Я попытался с трассировкой изображения Illustrator и образцом использовать только штрихи. Я не смог получить каких-либо полезных результатов. По общему признанию, я не тратил на это много времени, и образец не идеален для отслеживания. Но я считаю, что в целом настройка трассировки ИИ только на штрихи означает, что вы получаете только 30-60% фактического изображения, если только оригинал не является достаточно твердым и четким перед трассировкой.
@ Скотт, я уменьшил изображение до исходного размера и отрегулировал параметр ширины линии, чтобы он просто работал. Когда вы обводите штрихи разной ширины, вам может понадобиться сделать это за 2 или 3 отдельных прохода.

Для Inkscape на github также доступно расширение трассировки центральной линии: https://github.com/Moini/inkscape-centerline-trace (форк https://github.com/fablabnbg/inkscape-centerline-trace )

Обновление: код форка теперь объединен с оригиналом, используйте ссылку fablabnbg.

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

Метод называется «векторизация в одно касание» и работает хорошо.

Поскольку я исхожу из контекста ГИС - в профессиональной версии есть возможность сначала выполнить географическую привязку к растровым данным - может быть полезно, еще не проверено.