Найти в Дзене
Хроники Георга

Облака точек для задач инфраструктуры. Часть 1 - предобработка и растеризация

Оглавление

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

Тематическая картинка (собственные данные), городская дорога - облако точек в среде CloudCompare
Тематическая картинка (собственные данные), городская дорога - облако точек в среде CloudCompare

1. Инициализация и первичная обработка облаков точек

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

Предполагается, что предоставленное облако точек сидит в "плоских координатах". Существует 2 основных пути получения облака точек - это лазерное сканирование (наземное/воздушное), где съемка ведется сразу в прямоугольных координатах, которые при обработке пересчитываются из условных в прямоугольные другой системы координат и фотограмметрия (где идет сшивка ряда фотографий), где используются географические координаты WGS-84 и последующее преобразование результата (ортофотоплана и облака точек) в нужную СК.

1.1 Если облако точек в СК WGS-84

Встречаются ситуации, когда пользователь так и выгружает облако точек в СК WGS-84. Насколько я знаю, бесплатное ПО не умеет конвертировать подобное представление данных. Это можно сделать программно, и я, пожалуй, это как-то рассмотрю, но пока не будем трогать этот момент.

Примечание: технически, данный процесс реализован утилитой gdalwarp в составе пакета GDAL, но мы посвятим этому отдельную статью позже.

Из коммерческих программ, в базовом функционале которых есть опция преобразования координат точек при загрузке в какую-либо СК, я знаю Autodesk ReCap (преобразование только в плоские международные СК, имеющие код EPSG) и Credo 3D Scan.

2 CloudCompare - загрузка и классификация облаков точек

Имея на руках облако точек в плоских координатах, перейдем к следующей позиции - загрузку его в среду CloudCompare для обработки

CloudCompare - это большой open source проект, само приложение написано на C++ и доступно на github. Когда-нибудь позже я постараюсь написать и про него с программной точки зрения, как получу больше практики в C++.

Скачиваем последнюю версию (можно alpha-версию) отсюда и устанавливаем программу.

Несмотря на наличие русского языка, я предпочитаю пользоваться оригинальной версией
Несмотря на наличие русского языка, я предпочитаю пользоваться оригинальной версией
Открываем наш файл (сформированный в Кредо 3д скан), нажимаем ОК
Открываем наш файл (сформированный в Кредо 3д скан), нажимаем ОК

В случае, если облако "сидит" в любой МСК - у вас появится окно следующего вида: здесь необходимо согласиться с настройками сдвижки (оптимизация веса данных за счет хранения меньшего числа разрядов)

Выбор сдвижки данных (для хранения файла)
Выбор сдвижки данных (для хранения файла)

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

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

2.1 Объединение сканов в 1 файл

В нашем случае, у нас есть группа las-файлов на одну городскую улицу, которые необходимо объединить в 1 скан перед тем, как формировать на его основе растровое представление.

Собственно, вот как это делается из-под CC
Собственно, вот как это делается из-под CC

Примечание: программа крайне нестабильная, и не рекомендуется совершать действия с вращением облака точек до сохранения файла. Особенно это касается площадных/линейных сканов.

Сохраним файл как есть (во внутреннем бинарном формате)
Сохраним файл как есть (во внутреннем бинарном формате)
В отличие от файла выше (сдвижка не задана), размер почти в 2 раза меньше!
В отличие от файла выше (сдвижка не задана), размер почти в 2 раза меньше!

Примечание: внутренний формат данных программы CloudCompare формата (*.bin) стоит использовать только если применяется сдвижка. В остальном, использовать его нет смысла (результирующий размер облака точек может быть почти равен представлению облака точек в текстовом виде - форматы типа PTS/XYZ).

2.3 Фильтр точек земли

Применим к полученному облаку точек плагин, который расчленит облако точек на "точки земли" и "остальные точки". Данная опция лежит в группе "Plugins - CSF Filter".

Dspjd jgwbb
Dspjd jgwbb
Настройки экспорта
Настройки экспорта
См. категории в Навигаторе
См. категории в Навигаторе

2.4 Формирование ортофотоплана

Как правило, результат работы фотограмметрии - это сшитый ортофотоплан по набору геопривязанных фотографий, который зачастую экспортируется в формат облака точек. Бывает обратная ситуация, когда облако точек необходимо преобразовать в растр. Это может быть актуально для возможности работать в среде AutoCAD в режиме 2D-Каркас (где не видно облака точек), для большей оптимизации, либо в среде ПО, где в силу определенных факторов нет возможности загружать данные в ряде форматов.

Вызовем функцию по формированию растра с облака точек
Вызовем функцию по формированию растра с облака точек
Окно настройки параметров экспорта
Окно настройки параметров экспорта

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

Выберем активный слой - RGB (цветовую раскраску)
Выберем активный слой - RGB (цветовую раскраску)
Далее нажмем на позицию Update grid и запустится процесс сопоставления точек облака точек с пикселями будущего растра
Далее нажмем на позицию Update grid и запустится процесс сопоставления точек облака точек с пикселями будущего растра

Предупреждение о числе элементов >10 000 000 можно проигнорировать

Результат обработки
Результат обработки
Запускаем процедуру формирования файла geotiff
Запускаем процедуру формирования файла geotiff
В параметрах экспорта ставим - только RGB цвета (снимаем позицию об экспорте нормалей). Строго говоря, это не ортофотоплан, а скорее растр местности высокого разрешения будет
В параметрах экспорта ставим - только RGB цвета (снимаем позицию об экспорте нормалей). Строго говоря, это не ортофотоплан, а скорее растр местности высокого разрешения будет

2.5 Формирование файла привязки для растра

Полученный растр (формата geotiff) теперь лежит в системе координат облака точек, но информация по системе координат в нем отсутствует.

Выгрузим файл координатной привязки используя сперва стандартный функционал Civil 3D + Raster Design, а потом - с помощью библиотеки GDAL.

2.5.1 Формирование файла привязки через Civil 3D + Raster Design

Создаем новый чертеж и назначаем ему систему координат, в которой выполнялась лазерная съемка (и в которой есть наш растр)
Создаем новый чертеж и назначаем ему систему координат, в которой выполнялась лазерная съемка (и в которой есть наш растр)
Далее командой MAPIINSRT (из рабочего пространства Map 3D) вставляем растр в наш чертеж
Далее командой MAPIINSRT (из рабочего пространства Map 3D) вставляем растр в наш чертеж
Параметры вставки файла. Опцию предпросмотра для производительности целесообразно отключать!
Параметры вставки файла. Опцию предпросмотра для производительности целесообразно отключать!
Вставленное изображение
Вставленное изображение
Включаем подложку - геокарту
Включаем подложку - геокарту
Для визуального позиционирования в свойствах растра ставим пункт "Да" у Прозрачности фона
Для визуального позиционирования в свойствах растра ставим пункт "Да" у Прозрачности фона
Формируем файл привязки для подгруженного растра, нажимая на Enter после высвечивающегося пути к файлу
Формируем файл привязки для подгруженного растра, нажимая на Enter после высвечивающегося пути к файлу

Всё. теперь наше изображение имеет файл привязки (аффинная трансформация):

Файл геопривязки
Файл геопривязки

2.5.2 Формирование геопривязки через консоль GDAL

Здесь нам потребуется всего лишь знать волшебную команду-скрипт для библиотеки GDAL, которая осуществит формирование TFW-файла для нашего растра:

gdal_translate -of GTiff -co tfw=yes PathToOriginRaster PathToFinishRaster

Где PathToOriginRaster - абсолютный путь к исходному файлу, а PathToFinishRaster - абсолютный путь к файлу, который мы хотим получить.

При этом пути должны отличаться (нельзя пересохранить исходный файл). Результат - сформированные пару файлов

Процесс выполнения скрипта
Процесс выполнения скрипта
Результат работы скрипта
Результат работы скрипта

3. Заключение

В данной статье мы с вами рассмотрели один из рабочих процессов по работе с облаками точек для задач инфраструктуры (сведение отфильтрованных "точек земли" облака точек к формату растровой подосновы). В качестве программного обеспечения, использовали приложения с открытым исходным кодом - CloudCompare и QGIS (GDAL-библиотеки).

Не пропускайте публикации, подписывайтесь на Telegram-канал с тизерами статей.