В компьютерной графике трассировка изображений , преобразование растра в вектор или векторизация растра — это преобразование растровой графики в векторную .
Изображение не имеет никакой структуры: это просто набор отметок на бумаге, зерен на пленке или пикселей на растровом изображении . Хотя такое изображение полезно, у него есть некоторые ограничения. Если изображение достаточно увеличено, появляются его артефакты. Становятся заметными полутоновые точки, зерна пленки и пиксели. Изображения с острыми краями становятся размытыми или неровными. См., например, пикселизацию . В идеале векторное изображение не имеет той же проблемы. Края и заполненные области представлены в виде математических кривых или градиентов, и их можно произвольно увеличивать (хотя, конечно, конечное изображение также должно быть растеризовано для рендеринга, и его качество зависит от качества алгоритма растеризации для заданных входных данных).
Задача векторизации — преобразовать двумерное изображение в двумерное векторное представление изображения. Это не исследование изображения и не попытка распознать или извлечь трехмерную модель, которая может быть изображена; т. е. это не система зрения . Для большинства приложений векторизация также не включает оптическое распознавание символов ; символы рассматриваются как линии, кривые или заполненные объекты без придания им какого-либо значения. При векторизации сохраняется форма символа, поэтому остаются художественные украшения.
Векторизация — это обратная операция, соответствующая растеризации , как интегрирование — дифференциации . И, как и в случае с этими двумя другими операциями, в то время как растеризация довольно проста и алгоритмична, векторизация подразумевает реконструкцию утраченной информации и, следовательно, требует эвристических методов.
Синтетические изображения, такие как карты, мультфильмы, логотипы, клип-арт и технические чертежи, подходят для векторизации. Эти изображения могли быть изначально сделаны как векторные изображения, поскольку они основаны на геометрических фигурах или нарисованы с помощью простых кривых.
Фотографии с непрерывным тоном (например, живые портреты) не являются хорошими кандидатами для векторизации.
Входными данными для векторизации является изображение, но изображение может иметь множество форм, например, фотографию, рисунок на бумаге или один из нескольких форматов растровых файлов . Программы, которые выполняют преобразование растра в вектор, могут принимать такие форматы растровых изображений, как TIFF , BMP и PNG .
Выходной файл имеет векторный формат . Распространенные векторные форматы: SVG , DXF , EPS , EMF и AI .
Векторизацию можно использовать для обновления изображений или восстановления работы. Персональные компьютеры часто поставляются с простой программой рисования, которая создает выходной файл растрового изображения. Эти программы позволяют пользователям создавать простые иллюстрации, добавляя текст, рисуя контуры и заполняя контуры определенным цветом. Только результаты этих операций (пиксели) сохраняются в результирующем растровом изображении; операции рисования и заливки отбрасываются. Векторизацию можно использовать для восстановления части потерянной информации.
Векторизация также используется для восстановления информации, которая изначально была в векторном формате, но была утеряна или стала недоступной. Компания могла заказать логотип у графической фирмы. Хотя графическая фирма использовала векторный формат, компания-клиент могла не получить копию этого формата. Затем компания может получить векторный формат, отсканировав и векторизовав бумажную копию логотипа.
Векторизация начинается с изображения.
Изображение можно векторизовать вручную. Человек может посмотреть на изображение, сделать некоторые измерения, а затем вручную написать выходной файл. Так было с векторизацией технической иллюстрации о нейтрино. Иллюстрация содержит несколько геометрических фигур и много текста; было относительно легко преобразовать фигуры, а векторный формат SVG позволяет легко вводить текст (даже подстрочные и надстрочные индексы).
Исходное изображение не имело никаких кривых (кроме текста), поэтому преобразование является простым. Кривые усложняют преобразование. Ручная векторизация сложных форм может быть облегчена функцией трассировки, встроенной в некоторые программы редактирования векторной графики .
Если изображение еще не представлено в форме, пригодной для машинного считывания, его необходимо отсканировать в удобный формат файла.
После того, как будет создано машиночитаемое растровое изображение, его можно импортировать в программу редактирования графики (такую как Adobe Illustrator , CorelDRAW или Inkscape ). Затем человек может вручную обвести элементы изображения, используя функции редактирования программы. Кривые на исходном изображении можно аппроксимировать линиями, дугами и кривыми Безье. Программа для иллюстраций позволяет корректировать сплайновые узлы для точного соответствия. Ручная векторизация возможна, но она может быть утомительной.
Хотя графические программы для рисования существуют уже давно, художники могут посчитать возможности рисования от руки неудобными, даже если используется графический планшет. Вместо использования программы Пеппер рекомендует сделать начальный набросок на бумаге. Вместо того чтобы сканировать набросок и обводить его от руки на компьютере, Пеппер утверждает: «Те, кто хорошо владеет графическим планшетом и стилусом, могут вносить следующие изменения непосредственно в CorelDRAW, используя скан эскиза в качестве подложки и рисуя поверх него. Я предпочитаю использовать перо и чернила, а также световой стол»; большая часть окончательного изображения была обведена вручную чернилами. Позже изображение с линейным рисунком было отсканировано с разрешением 600 точек на дюйм, очищено в программе для рисования, а затем автоматически обведено с помощью программы. [1] После того, как черно-белое изображение было в графической программе, были добавлены некоторые другие элементы, и фигура была раскрашена.
Аналогичным образом Плох воссоздал дизайн с цифровой фотографии. JPEG был импортирован, и некоторые «базовые формы» были обведены вручную и раскрашены в графической программе для рисования; более сложные формы обрабатывались по-другому. Плох использовал редактор растровых изображений, чтобы удалить фон и обрезать более сложные компоненты изображения. Затем он распечатал изображение и обвел его вручную на кальке, чтобы получить чистый черно-белый линейный рисунок. Этот рисунок был отсканирован и затем векторизован с помощью программы. [2]
Некоторые программы автоматизируют процесс векторизации. Примерами программ являются Adobe Streamline (выпуск прекращен), Corel PowerTRACE и Potrace . Некоторые из этих программ имеют интерфейс командной строки, в то время как другие являются интерактивными, что позволяет пользователю настраивать параметры преобразования и просматривать результат. Adobe Streamline — это не только интерактивная программа, но и позволяет пользователю вручную редактировать входное растровое изображение и выходные кривые. Доступ к Corel PowerTRACE осуществляется через CorelDRAW; CorelDRAW можно использовать для изменения входного растрового изображения и редактирования выходных кривых. Adobe Illustrator имеет возможность трассировки отдельных кривых. [3]
Автоматизированные программы могут давать неоднозначные результаты. Для преобразования карты PNG в SVG использовалась программа (PowerTRACE). Программа хорошо справилась с границами карты (самая утомительная задача в трассировке), а настройки исключили весь текст (мелкие объекты). Текст был вручную вставлен заново.
Другие преобразования могут пойти не так хорошо. Результаты зависят от наличия высококачественных сканов, разумных настроек и хороших алгоритмов.
Отсканированные изображения часто имеют много шума. Растровое изображение может потребовать много работы, чтобы очистить его. Сотрите случайные отметки и заполните линии и области.
Совет от Corel: положите изображение на световой стол, накройте его веллумом ( калькой ), а затем вручную обведите нужные контуры. Затем отсканируйте веллум и используйте автоматизированную программу преобразования растра в вектор для этого сканирования.
Существует множество различных стилей и возможностей изображения, и ни один метод векторизации не работает хорошо на всех изображениях. Следовательно, программы векторизации имеют много опций, которые влияют на результат.
Одна из проблем заключается в том, какие формы преобладают. Если изображение представляет собой форму заполнения, то, вероятно, оно будет иметь только вертикальные и горизонтальные линии постоянной ширины. Векторизация программы должна это учитывать. С другой стороны, чертеж САПР может иметь линии под любым углом, могут быть кривые линии и может быть несколько толщин линий (толстые для объектов и тонкие для размерных линий). Вместо кривых (или в дополнение к ним) изображение может содержать контуры, заполненные одним и тем же цветом. Adobe Streamline позволяет пользователям выбирать комбинацию распознавания линий (горизонтальные и вертикальные линии), распознавания центральной линии или распознавания контура. [4] Streamline также позволяет отбрасывать небольшие контурные формы; идея заключается в том, что такие небольшие формы являются шумом. [5] Пользователь может установить уровень шума от 0 до 1000; контур, который имеет меньше пикселей, чем эта настройка, отбрасывается.
Другая проблема — количество цветов в изображении. Даже изображения, созданные как черно-белые рисунки, могут в итоге иметь много оттенков серого. Некоторые процедуры рисования линий используют сглаживание; пиксель, полностью покрытый линией, будет черным, но пиксель, покрытый только частично, будет серым. Если исходное изображение находится на бумаге и сканируется, результат будет похожим: пиксели на краях будут серыми. Иногда изображения сжимаются (например, изображения JPEG), и сжатие вводит уровни серого.
Многие программы векторизации группируют пиксели одного цвета в линии, кривые или очерченные фигуры. Если каждый возможный цвет сгруппировать в свой объект, то может быть огромное количество объектов. Вместо этого пользователю предлагается выбрать конечное число цветов (обычно менее 256), изображение уменьшается до использования этого числа цветов (этот шаг называется квантованием цвета ), а затем векторизация выполняется на уменьшенном изображении. [6] Для изображений с непрерывным тоном, таких как фотографии, результатом квантования цвета является постеризация . Градиентные заливки также будут постеризованы. [7]
Уменьшение количества цветов в изображении часто осуществляется с помощью гистограммы. Наиболее распространенные цвета могут быть выбраны в качестве представителей, а другие цвета сопоставляются с их ближайшим представителем. Когда количество цветов установлено равным двум, пользователю может быть предложено задать пороговые значения и настройки контрастности. [8] Настройка контрастности ищет существенные изменения цвета пикселя, а не конкретный цвет; следовательно, она может игнорировать постепенные изменения цвета в градиентной заливке . После извлечения контура пользователь может вручную повторно ввести градиентную заливку.
Программа векторизации захочет сгруппировать область одного цвета в один объект. Она может сделать это, сделав границу области точно следующей за границами пикселей, но результатом будет граница часто коротких ортогональных линий. Результирующее преобразование также будет иметь те же проблемы пикселизации, что и растровое изображение при увеличении. Вместо этого программа векторизации должна аппроксимировать границу области линиями и кривыми, которые близко следуют за границами пикселей, но не являются точно границами пикселей. Параметр допуска сообщает программе, насколько близко она должна следовать за границами пикселей. [9]
Конечным результатом многих программ векторизации являются кривые, состоящие из кубических кривых Безье . Граница области аппроксимируется несколькими сегментами кривой. Чтобы сохранить кривую гладкой, стыки двух кривых ограничиваются, чтобы касательные совпадали. Одна из проблем заключается в определении того, где кривая изгибается настолько резко, что она не должна быть гладкой. [10] Затем гладкие части кривой аппроксимируются процедурой подгонки кривой Безье. Можно использовать последовательное деление. Такая процедура подгонки пытается подгонять кривую к одной кубической кривой; если подгонка приемлема, то процедура останавливается. В противном случае она выбирает некоторую выгодную точку вдоль кривой и разбивает кривую на две части. Затем она подгоняет части, сохраняя касательную к суставу. Если подгонка все еще неприемлема, то она разбивает кривую на большее количество частей. [11]
Некоторые векторизаторы являются автономными программами, но многие имеют интерактивные интерфейсы, которые позволяют пользователю настраивать параметры программы и быстро видеть результат. PowerTRACE, например, может отображать исходное изображение и предварительно просматривать преобразованное изображение, чтобы пользователь мог сравнить их; программа также сообщает информацию, такую как количество кривых. [12]
Справа представлена иллюстрация, демонстрирующая работу радулы у моллюсков. Верхняя часть в основном представляет собой контурную диаграмму с заливкой в один слой, но она имеет сетчатую градиентную заливку вдоль нижней части раковины и вдоль нижней части пищи. Также на ней есть несколько художественных кистей в верхнем левом углу раковины. Нижняя часть иллюстрации имеет четыре толщины линий и несколько мелких символов; цветовая заливка простая, за исключением градиента на неровных линиях.
Изображение размером 531×879 пикселей было прорисовано; было использовано 50 цветов. Большинство (если не все) линий были утеряны; они были превращены в черные области, а их эффективная ширина линий варьировалась. Черный контур вокруг синей еды в верхней части исчез. Градиентные заливки и пятна кисти были утеряны из-за квантования цвета/постеризации; некоторые пятна кисти исчезли. Некоторые буквы пережили векторизацию с искажением, но большинство букв были отброшены. Потеря букв не является большой проблемой; редактирование после преобразования потребовало бы удалить аннотацию и заменить ее текстом, а не кривыми. Тонкие линии, пересекающиеся под небольшим углом, создавали заполненные области, а пересекающиеся контуры заполненных областей становились запутанными; см. нижний правый угол. Трассировка также имеет некоторые странные особенности. Многие черные контуры соприкасаются, поэтому они становятся большими, сложными объектами, а не просто контурами для определенных областей. Вместо простого фона прямоугольная белая область разделяет два очерченных прямоугольника. Объекты, помеченные как op , rp и rr , не являются простыми слоистыми формами; желаемый результат будет иметь rr, наложенный на rp , который наложен на op .
Векторизация эффективна для одноцветных, неградиентных входных данных, таких как подписи.
Векторизация обычно не подходит для изображений с непрерывным тоном, таких как портреты. Результат часто плохой. Например, к изображению JPEG размером 25 кБ было применено много различных алгоритмов трассировки изображений. Полученные векторные изображения по крайней мере в десять раз больше и могут иметь выраженные эффекты постеризации при использовании небольшого количества цветов.