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

Со всеми этими и многими другими дефектами призван справляться модуль «Растр». Рассмотрим его подробнее.

«Растр» – это профессиональный растровый редактор и векторизатор, который работает на Платформе nanoCAD. Модуль располагает множеством команд, применяющихся к растровым изображениям различной сложности, что делает работу проектировщиков быстрой и комфортной.

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

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

Изображение пришло ко мне в формате *.tif. Отмечу, что модуль «Растр» работает со следующими расширениями: *.tif, *.tiff, *.bmp, *.jpg, *.jpeg, *.png, *.pcx, *.gif, *.ecw.

Все исходные и сопутствующие материалы нашей статьи доступны по ссылке (рис. 2).

Рис. 2. Исходные и сопутствующие материалы статьи
Рис. 2. Исходные и сопутствующие материалы статьи

1. Для начала загрузим исходное изображение в *.dwg-документ (рис. 3). Воспользуемся командой IMAGEATTACH (Вставка растра) и выберем наш растр.

Рис. 3. Вставка исходного изображения в *.dwg-файл
Рис. 3. Вставка исходного изображения в *.dwg-файл

В качестве точки вставки выберем координаты 0,0,0 и нажмем ОК.

2. Так как будущие горизонтали находятся не на всем изображении, обрежем растр с помощью команды CROPBYRECT (Обрезка растра по прямоугольнику) – (рис. 4).

Рис. 4. Обрезка по прямоугольнику
Рис. 4. Обрезка по прямоугольнику

3. Для более точной и корректной векторизации преобразуем цветное изображение в монохромное с помощью команды Binarization (Бинаризация) – (рис. 5). Перед запуском команды необходимо выбрать растр.

Вкладка Диапазон диалогового окна Бинаризация позволит избавиться от лишней информации на обрезанном изображении.

Рис. 5. Бинаризация
Рис. 5. Бинаризация

Нажатием на кнопку напротив слоя изменим цвет изображения на черный (рис. 6).

Рис. 6. Выбор цвета
Рис. 6. Выбор цвета

Цвета данных, которые нужно оставить на монохромном изображении, укажем с помощью кнопки Взять пробу . В пространстве модели выберем цвет полилинии. Для лучшей конвертации повторим взятие пробы в нескольких местах. Результат настроек бинаризации динамически отображается в окне предварительного просмотра (рис. 7).

Рис. 7. Окно предварительного просмотра
Рис. 7. Окно предварительного просмотра

Если вы промахнулись, удалите лишнюю отметку с помощью кнопки Удалить цвет .

После того как мы убедились в правильности полученных данных, нажмем Применить и закроем диалоговое окно. Полученный монохромный растр находится под цветным – чтобы увидеть результат, выберем цветной растр и перенесем его с помощью команды MOVE.

4. Так как некоторые лишние объекты могут быть одного цвета с необходимой информацией (рис. 8), приходится удалять их вручную.

Рис. 8. Лишние объекты
Рис. 8. Лишние объекты

Для этого воспользуемся командой RASTERERASER (Ластик). Введем размер ластика (в пикселях) в командную строку или укажем на экране. После этого удалим ненужную информацию (рис. 9).

Рис. 9. Удаление объектов с помощью ластика
Рис. 9. Удаление объектов с помощью ластика

Остается векторизовать полученное монохромное изображение. Модуль «Растр» поддерживает два способа векторизации: автоматический и полуавтоматический. Из названия понятно, что автоматическая векторизация не требует ручного контроля со стороны пользователя: при этом способе достаточно настроить параметры и нажать всего одну кнопку. Автоматическую векторизацию можно использовать на любом типе растра. В свою очередь полуавтоматическая векторизация (трассировка) позволяет эффективно устранять дефекты векторных объектов. Покажу оба способа векторизации на нашем монохромном изображении. Для полилиний применим трассировку и будем автоматически размещать их на слое «0», а для текстов используем автоматическую векторизацию и создадим для них слой «Текст».

5. Предварительно настроим параметры преобразования командой R2VSetup.

5.1. После открытия диалогового окна Параметры преобразования перейдем на вкладку Распознавание и отметим флажками Полилинии и Текстовая область [OCR]. Полилинии нам пригодятся для работы с векторными данными после преобразования.

5.2. Настроим работу алгоритмов распознаваемых примитивов во вкладке Параметры (рис. 10).

Рис. 10. Параметры преобразования
Рис. 10. Параметры преобразования

Точность поставим в область высоких значений. Размеры укажем на растре с помощью кнопки Измерить значение .

5.3. Во вкладке Трассировка выберем Автопродление векторов для форсированного выбора.

5.4. Во вкладке Тексты (рис. 11) укажем произвольную ориентацию, перекрытие графикой и отдельно стоящие буквы. Зададим «1» в таблице высот для результирующего текста, так как высота исходного текста приблизительно равна этому значению. И добавим шаблоны слов «%D» для распознавания только цифр.

Рис. 11. Параметры преобразования текстов
Рис. 11. Параметры преобразования текстов

5.5. Сохраним настройки, последовательно нажав кнопки Параметры и Сохранить. Подгрузить настройки также можно с помощью кнопок Параметры и Открыть. Далее выбираем настроенный файл из архива pline.tpl (см. рис. 2 – подборку материалов, представленных в начале статьи). Нажимаем ОК для выхода из диалогового окна.

6. Переходим к трассировке полилиний. Выбираем с помощью команды MakeVectorAndEraseRaster режим Создание вектора и стирание растра. Далее нажимаем кнопку Трассировка полилинии и поочередно указываем полилинии на растре. Для перехода на следующий объект следует нажать ENTER.

Если получилось так, что трассировка выбрала неверное направление, как показано на рис. 12, отмените сегмент в командной строке: Отменить_сегмент.

Рис. 12. Неверный сегмент
Рис. 12. Неверный сегмент

При обнаружении пробелов выберите Нарисовать_сегмент. Обязательное условие: горизонтали не должны прерываться. Но даже если такое случилось – не переживайте, для редактирования векторных полилиний существует удобный инструмент pltools (см. рис. 2 – подборку материалов, представленных в начале статьи).

7. Установим свойство Глобальная ширина равным нулю. С помощью команды QSELECT (Быстрый выбор) укажем все полилинии и в функциональной панели Свойства установим значение 0 (рис. 13).

Рис. 13. Свойства полилинии
Рис. 13. Свойства полилинии

Полученный результат показан на рис. 14.

Рис. 14. Векторные полилинии
Рис. 14. Векторные полилинии

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

Рис. 15. Растровый мусор
Рис. 15. Растровый мусор

Без проблем удаляем его с помощью команды SpeckleRemover (Удаление мусора) – (рис. 16).

Рис. 16. Удаление мусора
Рис. 16. Удаление мусора

Я привык самостоятельно указывать величину растрового мусора при помощи кнопки Измерить максимальный размер . Далее указываем на растре максимальный предполагаемый размер мусора и нажимаем кнопку Применить (рис. 17).

Рис. 17. Результат очистки от мусора
Рис. 17. Результат очистки от мусора

Остальной мусор можем удалить уже знакомым нам ластиком.

9. Снова заходим в параметры преобразования R2VSetup (рис. 18) и на этот раз во вкладке Распознавание указываем только Текстовая область [OCR]. Не стоит надеяться на получение корректного результата при обработке повернутых цифр.

Рис. 18. Распознавание текста
Рис. 18. Распознавание текста

Для автоматической конвертации выберем растр и воспользуемся командой R2VConvertor. Если текст распознался неверно, поправим его вручную. Если же не распознался вообще, переходим к следующему этапу.

10. Запускаем команду STYLE (Текстовые стили), чтобы установить по умолчанию текстовый стиль Standard. Для нераспознанного текста на растре вызываем команду RTEXTEDITCMD. Выделять текст нужно, начиная с горизонтальной линии (рис. 19).

Рис. 19. Нераспознанный текст
Рис. 19. Нераспознанный текст

11. Удаляем все растровые изображения. На этом этапе работа с модулем «Растр» завершена. Приводим к нормальному виду векторную графику, объединив несколько полилиний в одну командой PEDIT (Редактирование полилиний) → Несколько (выбираем полилинии) → Добавить. Так же, как в п. 7, с помощью быстрого выбора выделим только тексты и приведем их к единому формату через функциональную панель Свойства: стиль – Standard, Высота – 1.

12. Осталось поднять полилинии на нужный уровень. Для этого подойдет специализированная LISP-утилита isolines.lsp, которая доступна для скачивания по ссылке в начале статьи (см. рис. 2). После подгрузки этого приложения (APPLOAD) запустим команду isolines (рис. 20).

Рис. 20. Работа утилиты isolines
Рис. 20. Работа утилиты isolines

Выбираем слой для текста и полилиний, нажимаем ОК. Как результат, получаем объекты на нужном уровне в соответствии с отметками на полилиниях (рис. 21).

Рис. 21. Поднятие полилиний на уровни
Рис. 21. Поднятие полилиний на уровни

Для дальнейших действий необходимо вертикальное приложение nanoCAD GeoniCS, которое работает на базе Платформы nanoCAD.

13. Создаем проект в nanoCAD GeoniCS командой GcExplorer. Вызываем контекстное меню в разделе Поверхность Создать поверхность (рис. 22).

Рис. 22. Создание поверхностей
Рис. 22. Создание поверхностей

Подгружаем горизонтали в проект – эта операция также выполняется с помощью контекстного меню в разделе Поверхность: Данные TIN Горизонтали Добавить данные горизонталей (рис. 23). В командной строке указываем поСлою, а затем указываем любую горизонталь и нажимаем клавишу ENTER.

Рис. 23. Прополка горизонталей
Рис. 23. Прополка горизонталей

Переходим к завершающему этапу построения поверхности. Вызываем контекстное меню в разделе с названием вашей поверхности и выбираем ПОСТРОИТЬ. В диалоговом окне Свойства поверхности оставляем значения по умолчанию (рис. 24).

Рис. 24. Свойства поверхности
Рис. 24. Свойства поверхности

Получаем сообщение об успешном построении поверхности с информацией о количестве полученных треугольников (в нашем случае их 1908) – (рис. 25).

Рис. 25. Сообщение об успешном выполнении команды
Рис. 25. Сообщение об успешном выполнении команды

Результат всей нашей работы представлен на рис. 26.

Рис. 26. Поверхность по растровому изображению
Рис. 26. Поверхность по растровому изображению

Как вы могли заметить, вся работа с исходным растром происходила только в nanoCAD с соответствующими модулями без перехода в сторонние приложения и, соответственно, без переключения внимания пользователей.

Сегодня мы рассмотрели несколько функций, часто используемых при работе с растровыми изображениями, а об остальных возможностях модуля «Растр» вы можете узнать из нашей онлайн-справки (рис. 27).

Рис. 27. Онлайн-справка о модуле «Растр»
Рис. 27. Онлайн-справка о модуле «Растр»

Удачного проектирования!

Александр Горюнов,
технический специалист
по Платформе nanoCAD
ООО «Нанософт разработка»

Комментарии (3)


  1. filippov70
    23.11.2022 10:04

    В мире ГИС (GIS) есть Easy Trace, да и он уже мало кому нужен, уже вектор где надо. В CAD (в решениях типа Civil) возможно и есть потребность у разного рода строителей.


  1. A_Degteryov
    23.11.2022 23:57

    Тема интересная, но совсем не раскрыта проблема устранения искажений растра, заявленная в начале статьи. На борьбу с этими искажениями иногда уходит не меньше времени, чем на саму векторизацию, а все имеющиеся на рынке решения до недавних пор использовали достаточно архаичные способы её устранения с большим объёмом ручной работы. Хотя, казалось бы, вот где простор для всякого машинного обучения. Было бы интересно посмотреть, какие именно предлагаются решения здесь. Ну и конечно подсветить уникальные особенности, по сравнению с тем же Easy Trace, а то выглядит, как будто предлагается тот же самый рабочий процесс, но там - бесплатно, а здесь - за деньги. Наверняка ведь есть какие-то свои уникальные особенности?

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

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


    1. Maha_On Автор
      24.11.2022 11:39

      Спасибо за обратную связь по статье. По поводу устранения искажений есть несколько удобных инструментов: устранение перекоса (автоматически, вручную), корректировка по 4 точкам и несколько других команд. Дополнительно есть возможность устранять нелинейные искажения растра с помощью команды Калибровка (видео работы команды на нашем форуме: https://forum.nanocad.ru/index.php?/blogs/entry/71-demonstratsiya-instrumenta-kalibrovki-po-ustraneniyu-nelineynyh-iskazheniy-rastra/).

      Также можете скачать пробную версию nanoCAD с модулем "Растр" и сравнить с другими решениями: https://www.nanocad.ru/products/module_rastr/. Для линий у которых нет отметок, можно воспользоваться функционалом Raster Arts Spotlight (команда ранжировки полилиний).

      Предлагаю Вам зарегистрироваться на нашем форуме forum.nanocad.ru. И написать конкретные пожелания по автоматизации.