Важнейшим носителем информации до сих пор является бумага. Вследствие ее структурных и механических свойств, а также как результат не слишком бережного хранения изображение может ухудшаться: стирается информация, изменяется цвет. При сканировании документов нередко появляются линейные искажения, а при хранении картографического материала – нелинейные искажения. Также приходится работать с синьками плохого качества, имеющими неоднородный фон.
Со всеми этими и многими другими дефектами призван справляться модуль «Растр». Рассмотрим его подробнее.
«Растр» – это профессиональный растровый редактор и векторизатор, который работает на Платформе nanoCAD. Модуль располагает множеством команд, применяющихся к растровым изображениям различной сложности, что делает работу проектировщиков быстрой и комфортной.
Перечень задач, которые решает «Растр», очень широк: от поворота растра до улучшения качества с последующей векторизацией. Давайте возьмем конкретную задачу, которая наиболее полно представит его возможности и позволит нам погрузиться в мир проектировщика: построим поверхность по горизонталям, взятым из изображения «Картограмма зимней ветрозащиты территорий» (рис. 1).
Изображение пришло ко мне в формате *.tif. Отмечу, что модуль «Растр» работает со следующими расширениями: *.tif, *.tiff, *.bmp, *.jpg, *.jpeg, *.png, *.pcx, *.gif, *.ecw.
Все исходные и сопутствующие материалы нашей статьи доступны по ссылке (рис. 2).
1. Для начала загрузим исходное изображение в *.dwg-документ (рис. 3). Воспользуемся командой IMAGEATTACH (Вставка растра) и выберем наш растр.
В качестве точки вставки выберем координаты 0,0,0 и нажмем ОК.
2. Так как будущие горизонтали находятся не на всем изображении, обрежем растр с помощью команды CROPBYRECT (Обрезка растра по прямоугольнику) – (рис. 4).
3. Для более точной и корректной векторизации преобразуем цветное изображение в монохромное с помощью команды Binarization (Бинаризация) – (рис. 5). Перед запуском команды необходимо выбрать растр.
Вкладка Диапазон диалогового окна Бинаризация позволит избавиться от лишней информации на обрезанном изображении.
Нажатием на кнопку напротив слоя изменим цвет изображения на черный (рис. 6).
Цвета данных, которые нужно оставить на монохромном изображении, укажем с помощью кнопки Взять пробу . В пространстве модели выберем цвет полилинии. Для лучшей конвертации повторим взятие пробы в нескольких местах. Результат настроек бинаризации динамически отображается в окне предварительного просмотра (рис. 7).
Если вы промахнулись, удалите лишнюю отметку с помощью кнопки Удалить цвет .
После того как мы убедились в правильности полученных данных, нажмем Применить и закроем диалоговое окно. Полученный монохромный растр находится под цветным – чтобы увидеть результат, выберем цветной растр и перенесем его с помощью команды MOVE.
4. Так как некоторые лишние объекты могут быть одного цвета с необходимой информацией (рис. 8), приходится удалять их вручную.
Для этого воспользуемся командой RASTERERASER (Ластик). Введем размер ластика (в пикселях) в командную строку или укажем на экране. После этого удалим ненужную информацию (рис. 9).
Остается векторизовать полученное монохромное изображение. Модуль «Растр» поддерживает два способа векторизации: автоматический и полуавтоматический. Из названия понятно, что автоматическая векторизация не требует ручного контроля со стороны пользователя: при этом способе достаточно настроить параметры и нажать всего одну кнопку. Автоматическую векторизацию можно использовать на любом типе растра. В свою очередь полуавтоматическая векторизация (трассировка) позволяет эффективно устранять дефекты векторных объектов. Покажу оба способа векторизации на нашем монохромном изображении. Для полилиний применим трассировку и будем автоматически размещать их на слое «0», а для текстов используем автоматическую векторизацию и создадим для них слой «Текст».
5. Предварительно настроим параметры преобразования командой R2VSetup.
5.1. После открытия диалогового окна Параметры преобразования перейдем на вкладку Распознавание и отметим флажками Полилинии и Текстовая область [OCR]. Полилинии нам пригодятся для работы с векторными данными после преобразования.
5.2. Настроим работу алгоритмов распознаваемых примитивов во вкладке Параметры (рис. 10).
Точность поставим в область высоких значений. Размеры укажем на растре с помощью кнопки Измерить значение .
5.3. Во вкладке Трассировка выберем Автопродление векторов для форсированного выбора.
5.4. Во вкладке Тексты (рис. 11) укажем произвольную ориентацию, перекрытие графикой и отдельно стоящие буквы. Зададим «1» в таблице высот для результирующего текста, так как высота исходного текста приблизительно равна этому значению. И добавим шаблоны слов «%D» для распознавания только цифр.
5.5. Сохраним настройки, последовательно нажав кнопки Параметры и Сохранить. Подгрузить настройки также можно с помощью кнопок Параметры и Открыть. Далее выбираем настроенный файл из архива pline.tpl (см. рис. 2 – подборку материалов, представленных в начале статьи). Нажимаем ОК для выхода из диалогового окна.
6. Переходим к трассировке полилиний. Выбираем с помощью команды MakeVectorAndEraseRaster режим Создание вектора и стирание растра. Далее нажимаем кнопку Трассировка полилинии и поочередно указываем полилинии на растре. Для перехода на следующий объект следует нажать ENTER.
Если получилось так, что трассировка выбрала неверное направление, как показано на рис. 12, отмените сегмент в командной строке: Отменить_сегмент.
При обнаружении пробелов выберите Нарисовать_сегмент. Обязательное условие: горизонтали не должны прерываться. Но даже если такое случилось – не переживайте, для редактирования векторных полилиний существует удобный инструмент pltools (см. рис. 2 – подборку материалов, представленных в начале статьи).
7. Установим свойство Глобальная ширина равным нулю. С помощью команды QSELECT (Быстрый выбор) укажем все полилинии и в функциональной панели Свойства установим значение 0 (рис. 13).
Полученный результат показан на рис. 14.
8. Копируем растровое изображение и переносим его в другое место, чтобы посмотреть, какие данные остались после трассировки. Как видно на рис. 15, образовался мусор.
Без проблем удаляем его с помощью команды SpeckleRemover (Удаление мусора) – (рис. 16).
Я привык самостоятельно указывать величину растрового мусора при помощи кнопки Измерить максимальный размер . Далее указываем на растре максимальный предполагаемый размер мусора и нажимаем кнопку Применить (рис. 17).
Остальной мусор можем удалить уже знакомым нам ластиком.
9. Снова заходим в параметры преобразования R2VSetup (рис. 18) и на этот раз во вкладке Распознавание указываем только Текстовая область [OCR]. Не стоит надеяться на получение корректного результата при обработке повернутых цифр.
Для автоматической конвертации выберем растр и воспользуемся командой R2VConvertor. Если текст распознался неверно, поправим его вручную. Если же не распознался вообще, переходим к следующему этапу.
10. Запускаем команду STYLE (Текстовые стили), чтобы установить по умолчанию текстовый стиль Standard. Для нераспознанного текста на растре вызываем команду RTEXTEDITCMD. Выделять текст нужно, начиная с горизонтальной линии (рис. 19).
11. Удаляем все растровые изображения. На этом этапе работа с модулем «Растр» завершена. Приводим к нормальному виду векторную графику, объединив несколько полилиний в одну командой PEDIT (Редактирование полилиний) → Несколько (выбираем полилинии) → Добавить. Так же, как в п. 7, с помощью быстрого выбора выделим только тексты и приведем их к единому формату через функциональную панель Свойства: стиль – Standard, Высота – 1.
12. Осталось поднять полилинии на нужный уровень. Для этого подойдет специализированная LISP-утилита isolines.lsp, которая доступна для скачивания по ссылке в начале статьи (см. рис. 2). После подгрузки этого приложения (APPLOAD) запустим команду isolines (рис. 20).
Выбираем слой для текста и полилиний, нажимаем ОК. Как результат, получаем объекты на нужном уровне в соответствии с отметками на полилиниях (рис. 21).
Для дальнейших действий необходимо вертикальное приложение nanoCAD GeoniCS, которое работает на базе Платформы nanoCAD.
13. Создаем проект в nanoCAD GeoniCS командой GcExplorer. Вызываем контекстное меню в разделе Поверхность → Создать поверхность (рис. 22).
Подгружаем горизонтали в проект – эта операция также выполняется с помощью контекстного меню в разделе Поверхность: Данные TIN → Горизонтали → Добавить данные горизонталей (рис. 23). В командной строке указываем поСлою, а затем указываем любую горизонталь и нажимаем клавишу ENTER.
Переходим к завершающему этапу построения поверхности. Вызываем контекстное меню в разделе с названием вашей поверхности и выбираем ПОСТРОИТЬ. В диалоговом окне Свойства поверхности оставляем значения по умолчанию (рис. 24).
Получаем сообщение об успешном построении поверхности с информацией о количестве полученных треугольников (в нашем случае их 1908) – (рис. 25).
Результат всей нашей работы представлен на рис. 26.
Как вы могли заметить, вся работа с исходным растром происходила только в nanoCAD с соответствующими модулями без перехода в сторонние приложения и, соответственно, без переключения внимания пользователей.
Сегодня мы рассмотрели несколько функций, часто используемых при работе с растровыми изображениями, а об остальных возможностях модуля «Растр» вы можете узнать из нашей онлайн-справки (рис. 27).
Удачного проектирования!
Александр Горюнов,
технический специалист
по Платформе nanoCAD
ООО «Нанософт разработка»
Комментарии (3)
A_Degteryov
23.11.2022 23:57Тема интересная, но совсем не раскрыта проблема устранения искажений растра, заявленная в начале статьи. На борьбу с этими искажениями иногда уходит не меньше времени, чем на саму векторизацию, а все имеющиеся на рынке решения до недавних пор использовали достаточно архаичные способы её устранения с большим объёмом ручной работы. Хотя, казалось бы, вот где простор для всякого машинного обучения. Было бы интересно посмотреть, какие именно предлагаются решения здесь. Ну и конечно подсветить уникальные особенности, по сравнению с тем же Easy Trace, а то выглядит, как будто предлагается тот же самый рабочий процесс, но там - бесплатно, а здесь - за деньги. Наверняка ведь есть какие-то свои уникальные особенности?
Интересный момент, который я заметил - расстановка высот по подписям. В теории это может быть очень эффективная штука, но опять же не хватает конкретики. Как предлагается отрабатывать ситуации для линий, на которых не было отметок?
В целом, здорово, что есть движение в области софта для оцифровки: бумажные носители явно в ближайшие годы никуда не исчезнут, но последние лет десять как-то не было видно особого прогресса, хотя вся эта оцифровка довольно трудоёмка и есть ощущение, что всю эту рутину можно значительно сильнее автоматизировать.
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. И написать конкретные пожелания по автоматизации.
filippov70
В мире ГИС (GIS) есть Easy Trace, да и он уже мало кому нужен, уже вектор где надо. В CAD (в решениях типа Civil) возможно и есть потребность у разного рода строителей.