Растровое изображение топографического плана может быть взято за основу получения данных при построении 3D-поверхности для решения различных задач проектирования. В этой статье мы рассмотрим несколько алгоритмов векторизации горизонталей с отсканированного изображения и оценим трудозатраты. В качестве примера возьмем цветное растровое изображение геоподосновы, сохраненное в формате *.jpg (рис. 1).

Рис. 1. Исходное изображение
Рис. 1. Исходное изображение

Этот формат не совсем подходит для хранения топографической информации. Тем не менее, мы довольно часто сталкиваемся с выбором пользователями именно формата *.jpg для сохранения отсканированных цветных карт и схем.

Основным недостатком хранения топографической информации в формате *.jpg является появление шумовых ореолов на контрастных контурах и границах изображения, потеря информации об исходном разрешении изображения, избыточное количество цветов (True Color). Формат *.jpg в основном предназначен для хранения фотоизображений и подобных им изображений с плавным переходом яркости и цвета. На топографических изображениях объекты представлены ограниченным набором цветов, поэтому наиболее оптимальным для хранения этой графики является формат *.tif, индексированное изображение, отсканированное с разрешением не менее 300 dpi.

Помимо дефектов формата *.jpg в виде шумов на границах цвета при сканировании, зачастую возникает дефект нелинейного искажения изображения. Перед тем, как приступать к векторизации, необходимо устранить эти дефекты. Нелинейные искажения на изображении геоподосновы легко устраняются при помощи инструмента Калибровка с методом По сетке. О применении этой команды для устранения искажений мы рассказывали в статье «Устранение искажений при помощи калибровки в Spotlight и RasterDesk» .

Рассмотрим основные этапы обработки. Наша главная задача — векторизовать полилинии коричневого цвета. Последовательность обработки и параметры команд необходимо подбирать в соответствии с имеющимся исходным материалом — бумажным оригиналом или отсканированным растровым изображением.

Наибольшую трудность для векторизации представляют участки растра с символьной штриховкой зеленого цвета. Преобразуем растр из True Color в индексированный с помощью команды Классификатор цветов (рис. 2). Чтобы избавиться от оттенков зеленого цвета используем опцию Выбрать цвет с растра (1) и обводим на изображении один из элементов символьной штриховки, захватывая границы с фоном. В результате будут выбраны все цвета, которыми представлена штриховка. Остается «смешать» их в один цвет, используя опцию Объединить цвет (2), и преобразовать полученный цвет в белый при помощи опции Выбрать цвет из диалога (3). Аналогичным образом избавляемся от всех посторонних цветов, кроме оттенков коричневого цвета, которым представлены полилинии (рис. 3−4). Объединять цвета нужно аккуратно, анализируя оставшиеся контуры коричневых полилиний. Из-за сильного «размытия» цветов формата *.jpg есть риск потерять много полезной информации.

Рис. 2. Уменьшение палитры при помощи Классификатора цветов
Рис. 2. Уменьшение палитры при помощи Классификатора цветов
Рис. 3. Фрагмент исходного изображения
Рис. 3. Фрагмент исходного изображения
Рис. 4. Фрагмент изображения после уменьшения палитры
Рис. 4. Фрагмент изображения после уменьшения палитры

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

В результате размытия мы получили след полилинии (рис. 6). Теперь необходимо повысить контрастность. Для этого с помощью команды Уровни задаем точку низшей отметки на следе полилинии и точку высшей отметки на фоне. После применения команды цвет линии станет однородным (рис. 7).

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

Рис. 5. Полилиния после уменьшения палитры
Рис. 5. Полилиния после уменьшения палитры
Рис. 6. Полилиния после адаптивного размытия
Рис. 6. Полилиния после адаптивного размытия
Рис. 7. Повышение контрастности
Рис. 7. Повышение контрастности
Рис. 8. Монохромное изображение перед векторизацией
Рис. 8. Монохромное изображение перед векторизацией

После того, как искажения на растре устранены, можно приступать к выбору способа векторизации. В Spotlight Pro возможны два основных варианта:

  • автоматическая векторизация — преобразование растровых объектов в аппроксимирующие их векторные с настройками, заданными в окне команды Параметры конверсии;
  • полуавтоматическая векторизация (трассировка) — этот метод позволяет трассировать сложные растровые кривые с целью получить полилинии, аппроксимирующие их центральные линии.

Рассмотрим оба метода. Сначала скажем об автоматической векторизации с настроенными параметрами.

Перед автоматической векторизацией полилиний на полученном монохромном изображении необходимо настроить диалог Параметры конверсии (рис. 9).

Рис. 9. Настройка параметров конверсии для автоматической векторизации
Рис. 9. Настройка параметров конверсии для автоматической векторизации

На закладке Распознавание в качестве объектов векторизации выбираем только Полилинии. На закладке Параметры необходимо задать корректные значения:

  • Минимальная длина — параметр задает минимальную длину растрового фрагмента, который должен распознаваться как объект (в данном случае полилиния) в процессе векторизации;
  • Максимальная толщина — параметр задает максимальную толщину растрового объекта;
  • Максимальный разрыв — задает максимально допустимую длину игнорируемого разрыва растровых линий;
  • Точность — этот параметр определяет точность аппроксимации исходного растрового объекта векторным.

Эти параметры подбираются, исходя из отображения результата в окне предварительного просмотра. Максимальный разрыв не следует устанавливать равным максимальному разрыву в полилиниях на всем растре. Желательно указать среднее значение для автоматической компенсации небольших разрывов. Большие разрывы в полилиниях можно будет быстрее устранить другими командами.

Для автоматической векторизации запускаем команду Растр в векторы. Автоматическая векторизация заняла всего несколько секунд (рис. 10).

Рис. 10. Результат автоматической векторизации
Рис. 10. Результат автоматической векторизации

Перед тем, как приступать к ручной правке результата, можно применить команду Автоматическая коррекция полилиний с заранее настроенными параметрами (рис. 11). Оптимальным результатом работы этой команды является:

Рис. 11. Настройка коррекции полилиний
Рис. 11. Настройка коррекции полилиний
  • объединение полилиний, которые визуально отображаются как единая полилиния, но фактически представляют собой несвязанные объекты, в единый объект;
  • удаление мелких сегментов в полилинии (рис. 12−13).

Не следует воспринимать эту команду как универсальное средство устранения всех дефектов векторизованных полилиний после автоматической векторизации.

Для дальнейшей корректировки полилиний можно использовать следующие команды:

  • Собрать в полилинию — в этом режиме, перемещая курсор, выбираем какой из фрагментов будет добавлен к текущей полилинии. При перемещении курсора подсвечивается активный в данный момент объект для присоединения и результат объединения. Выбор производится щелчком мыши (рис. 14);
  • Объединить векторы в полилинию — выбранные объекты автоматически объединяются в полилинию;
  • команды на панели Редактирование полилиний: Удалить вершину, Соединить отрезком, Соединить дугой, Соединить конечные точки, Преобразовать сегмент в отрезок, Преобразовать сегмент в дугу.

Рассмотрим второй вариант векторизации — трассировку. Этот метод есть как в Spotlight Pro, так и в базовой версии Spotlight. В параметрах конверсии, помимо закладок Распознавание и Параметры, необходимо настроить закладку Трассировка. При векторизации полилиний нужно отключить параметр Ортогонализация при трассировке и установить время ожидания для автоматического определения направления (рис. 15).

Рис. 12. Векторные полилинии после автоматической векторизации
Рис. 12. Векторные полилинии после автоматической векторизации
Рис. 13. Векторные полилинии после автоматической коррекции полилиний
Рис. 13. Векторные полилинии после автоматической коррекции полилиний
Рис. 14. Редактирование полилиний
Рис. 14. Редактирование полилиний
Рис. 15. Настройка параметров конверсии для трассировки
Рис. 15. Настройка параметров конверсии для трассировки

При трассировке (рис. 16) пользователь указывает точку на растровой линии, а программа прослеживает эту линию в обе стороны (или в указанном направлении) до ближайших узловых точек линии и создает аппроксимирующую векторную ломаную — полилинию. Узловой точкой растровой линии является либо ее конечная точка, либо точка пересечения с другим растровым объектом. В узловой точке система автоматически принимает решение о направлении трассировки и показывает перекрестие в выбранном направлении. Трассировка будет продолжена автоматически через заданное в параметрах конверсии время ожидания для автоматического определения направления. Если направление трассировки автоматически выбрано неправильно, пользователь может вручную, щелчком мыши указать на полилинию для продолжения трассировки в нужном направлении.

Рис. 16. Трассировка полилинии
Рис. 16. Трассировка полилинии

Совет! Для удобства управления трассировкой можно использовать горячие клавиши [Backspace] Шаг назад, [Ctrl+ Backspace] Отменить сегмент или воспользоваться интерактивными опциями в командной строке.

В отличие от автоматической векторизации при трассировке на корректировку результата требуется существенно меньше времени. Пользователь в процессе трассировки отслеживает геометрию: замыкает разрывы, удаляет сегменты, контролирует ход трассировки. Если трассируемая растровая кривая имеет низкое качество (изменение толщины и сильная «шероховатость»), то для повышения качества результата можно применить команду Автоматическая коррекция полилиний.

Итак, мы рассмотрели два метода векторизации — автоматическую и полуавтоматическую (трассировку) — для выбранного примера — отсканированного изображения в формате *.jpg (24 бит, True Color). Для сравнения можно проделать аналогичную обработку и векторизацию для этого же изображения, сохраненного после сканирования в формате *.tif (8 бит, индексированная палитра). Данные такой обработки и векторизации представлены на диаграмме (рис. 17).

Рис. 17. Время обработки и векторизации изображений
Рис. 17. Время обработки и векторизации изображений

Из этой диаграммы можно сделать следующие основные выводы:

  • общее время на обработку индексированного изображения меньше, чем время обработки полноцветного изображения, за счет сокращения времени на повышение качества растрового изображения и коррекцию элементов после векторизации;
  • автоматическая векторизация при обработке индексированного изображения дает преимущество во времени по сравнению с трассировкой.
Илья Шустиков
CSoft
Тел.: (495) 913−2222
E-mail: