Какие инструменты обработки LiDAR доступны в Python?

22

Я использовал FUSION и командную строку FUSION Lidar Toolkit (LTK) для обработки данных LiDAR. Широкий поиск в Google («Lidar Python») привел к тому, что libLAS и pyLAS стали библиотеками Python LiDAR, однако, по-видимому, они обеспечивают только чтение и запись данных LAS.

Я особенно заинтересован в создании изображений интенсивности и плотности в дополнение к моделям поверхности купола из облаков точек. Существует ли общепринятый набор инструментов в Python, который может выполнять такие же задачи, на которые способен FUSION LTK?

Аарон
источник
1
Это не прямой ответ на ваш вопрос, но, поскольку я работаю над программным обеспечением Python для восстановления ботанических деревьев из полученных в LIDAR данных облака точек, возможно, стек технологий, который я использовал, мог бы дать вам некоторые идеи. В частности, слой визуализации построен с использованием VTK, который является очень мощным.
cjauvin
ArcMap 10.1 имеет функции для работы с фильтрами Lidar Datacloud для отображения и анализа с другими слоями. C ++, вероятно, является лучшим методом для обработки файлов .las с богатыми данными, как рекомендовано выше.
Я не понимаю, как этот ответ на вопрос ОП. Он хочет инструмент в Python. Если вы предлагаете C ++, вы должны подтвердить это заявление с подробной причиной.
Девдатта Тенгше

Ответы:

13

laspy - еще одна хорошая программа для чтения / записи LAS. Он поддерживает работу с данными непосредственно в массивах NumPy и ряд других приятных функций Pythonic. Однако это не обработка программного обеспечения как такового.

PDAL имеет возможность использовать Python в качестве языка фильтрации в конвейере, но это также не механизм обработки.

В колчане Python не так уж много для обработки LiDAR и облаков точек. Я думаю, что это связано с объемами данных, которые обычно обрабатываются, и с типичным ответом на C / C ++ при решении этой проблемы. Я очень надеюсь, что по мере улучшения Python (PyPy движет многими вещами, и именно поэтому я работал над созданием laspy), становится доступным все больше программного обеспечения для обработки облачных точек Python. Я думаю, что перспективы улучшаются, но вещи еще не совсем там.

Говард Батлер
источник
7

Недавно я выпустил автономную библиотеку с открытым исходным кодом (т.е. без зависимостей) под названием WhiteboxTools для выполнения многих типов геопространственного анализа, включая обработку данных LiDAR. Библиотека написана на Rust и имеет обширную поддержку сценариев на основе Python . Например, следующий скрипт Python использует библиотеку WhiteboxTools для заполнения данных цвета RGB точек LiDAR в файле LAS:

from whitebox_tools import WhiteboxTools

wbt = WhiteboxTools()
wbt.work_dir = "/path/to/data/"
in_lidar = "lidar_data.las"
in_image = "airphoto.tif"
out_lidar = "colourized_lidar.las"
wbt.lidar_colourize(in_lidar, in_image, out_lidar) 

Специфичные для LiDAR инструменты обработки WhiteboxTools включают в себя следующие функции:

  • BlockMaximum: создает растр с максимальным блоком из входного файла LAS.
  • BlockMinimum: создает растр с минимальным блоком из входного файла LAS.
  • FilterLidarScanAngles: удаляет точки в файле LAS с углами сканирования, превышающими пороговое значение.
  • FindFlightlineEdgePoints: Определяет точки вдоль кромки линии полета в файле LAS.
  • FlightlineOverlap: читает файл точек LiDAR (LAS) и выводит растр, содержащий количество перекрывающихся линий полета в каждой ячейке сетки.
  • LidarElevationSlice: выводит все точки в файле точек LiDAR (LAS), которые лежат между указанным диапазоном высот.
  • LasToAscii: конвертирует один или несколько файлов LAS в текстовые файлы ASCII.
  • LidarColourize: добавляет красно-зелено-синие цветовые поля файла LiDAR (LAS) на основе входного изображения.
  • LidarGroundPointFilter: определяет наземные точки в наборе данных LiDAR.
  • LidarIdwInterpolation: интерполирует файлы LAS с использованием схемы, взвешенной по обратному расстоянию (IDW).
  • LidarHillshade: вычисляет значение холма для точек в файле LAS и сохраняет эти данные в поле RGB.
  • LidarHistogram: создает гистограмму из данных LiDAR.
  • LidarInfo: печатает информацию о наборе данных LiDAR (LAS), включая заголовок, частоту возврата точки и данные классификации, а также информацию о записях переменной длины (VLR) и геоки.
  • LidarJoin: объединяет несколько файлов LiDAR (LAS) в один файл LAS.
  • LidarKappaIndex: выполняет анализ индекса согласия по Kappa по классификациям двух файлов LAS.
  • LidarNearestNeighbourGridding: Сетка файлов LAS с использованием схемы ближайшего соседа.
  • LidarPointDensity: вычисляет пространственную структуру плотности точек для набора данных LiDAR.
  • LidarPointStats: создает несколько растров, суммирующих распределение данных точек LAS.
  • LidarRemoveDuplicates: удаляет дублирующиеся точки из набора данных LiDAR.
  • LidarRemoveOutliers: удаляет выбросы (высокие и низкие точки) в облаке точек LiDAR.
  • LidarSegmentation: сегментирует облако точек LiDAR на основе нормальных векторов.
  • LidarSegmentationBasedFilter: определяет наземные точки в облаках точек LiDAR, используя подход, основанный на сегментации.
  • LidarTile: Разбивает файл LiDAR LAS на несколько файлов LAS.
  • LidarTophatTransform: выполняет преобразование белого цилиндра в наборе данных Lidar; в качестве оценки высоты над землей это полезно для моделирования растительного покрова.
  • NormalVectors: вычисляет векторы нормалей для точек в файле LAS и сохраняет эти данные (векторные компоненты XYZ) в поле RGB.

Кроме того, существует множество инструментов для обработки ЦМР, которые интерполируются из исходных данных LiDAR (например, шумоподавление с сохранением характеристик, гидроизоляция и т. Д.). Подробности можно найти в руководстве пользователя . Исходный код можно найти здесь , а скомпилированные двоичные файлы находятся на веб-сайте Geomorphometry and Hydrogeomatics, здесь .

WhiteboxDev
источник
Вот Это Да! С нетерпением ждем тестирования этих инструментов.
Аарон
Я надеюсь, что это сработает для вас. Просто напишите мне, если у вас есть какие-либо вопросы.
WhiteboxDev
Я предполагаю, что LidarPointStats похож на FUSION GridMetrics? Есть ли документация, в которой метрики сетки создаются при использовании LidarPointStats?
Аарон
@ Аарон Я не слишком уверен в инструменте FUSION, так как я никогда не использовал программное обеспечение, но этот инструмент выводит следующее: num_points, num_pulses, z_range, интенсивности_range, predom_class. Подробности можно найти здесь ( github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/… ), а также в руководстве пользователя.
WhiteboxDev
@Aaron Я, вероятно, также должен был пояснить, что инструмент lidar_point_stats сообщает о каждой из этих статистических характеристик по ячейкам. То есть существует растр, созданный для каждой статистики, которую пользователь указывает в качестве желаемого результата. Например: lidar_point_stats ('input.las', разрешение = 1.0, num_points = True, num_pulses = True)
WhiteboxDev
2

Хотя это не просто библиотека Python, а скорее набор оберток для других инструментов, в частности GRASS, есть сценарии ARSF DEM, которые я написал:

https://github.com/pmlrsg/arsf_dem_scripts

Одна из целей состояла в том, чтобы предоставить общий набор функций Python для различных инструментов командной строки (называемых с помощью подпроцесса) с methodфлагом, используемым для указания инструмента.

Пример использования для создания изображения DSM, интенсивности и плотности:

from arsf_dem import dem_lidar

# DSM image (GRASS, points2grid, SPDLib, FUSION or licensed LAStools)
dem_lidar.las_to_dsm('in_las.las', 'out_dsm.tif',
                      method='points2grid')

# Intensity image (GRASS or licensed version of LAStools)
dem_lidar.las_to_intensity('in_las.las', 'out_intensity.tif',
                           method='GRASS')

# Density image (GRASS only)
dem_lidar.grass_lidar.las_to_density('in_las.las', 'out_density.tif',
                                     bin_size=10)

Существует множество инструментов обработки LiDAR, доступных через оболочку GRASS Python, которые также можно использовать вместо / в дополнение к тому, что доступно через arsf_dem.

danclewley
источник
2

pylidarэто относительно новый набор модулей Python для обработки LiDAR. Он основан на SPDLib и RIOS и использует numpy.

Доступно для скачивания здесь

DMCI
источник
2

Начиная играть с инструментами, найденными здесь. Это было довольно полезно. https://github.com/brycefrank/pyfor

bw4sz
источник
Отличная ссылка! Я особенно с нетерпением жду игры с метриками сетки.
Аарон