Які інструменти для обробки LiDAR доступні в Python?


22

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

Мені особливо цікаво створювати зображення інтенсивності та щільності на додаток до навісних моделей поверхні з хмарних точок. Чи існує загальновизнаний набір інструментів у Python, який може виконувати такі самі завдання, на які здатний FUSION LTK?


1
Це не пряма відповідь на ваше запитання, але, оскільки я працював над програмним забезпеченням Python для реконструкції ботанічних дерев із отриманих LIDAR хмарних даних, можливо, стек технологій, який я використовував, може дати вам кілька ідей. Зокрема, шар візуалізації побудований за допомогою VTK, який є дуже потужним.
Чаввін

ArcMap 10.1 має утиліти для обробки фільтрів Lidar Datacloud для відображення та аналізу з іншими шарами. C ++ - це, мабуть, найкращий метод для обробки файлів .las, багатих на дані, як рекомендовано вище.

Я не бачу, як ця відповідь є питанням ОП. Він хоче інструмент у Python. Якщо ви пропонуєте C ++, слід створити резервну копію цієї заяви з детальною причиною.
Devdatta Tengshe

Відповіді:


13

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

PDAL має можливість використовувати Python як мову фільтрації в конвеєрі, але це також не є процесором обробки.

У сагайдарі Python не дуже багато для обробки LiDAR та хмарної точки. Я думаю, що щось із цього пов'язане з обсягами даних, які зазвичай обробляються, і типовою відповіддю для C / C ++, коли вони стикаються з проблемою. Я сподіваюся, що в міру вдосконалення Python (PyPy веде багато речей, і саме тому я працював над розробкою ласпі), більше програмного забезпечення для обробки хмарних точок Python стає доступним. Я думаю, що прогноз покращується, але все ще не так вже й існує.


7

Нещодавно я випустив автономну бібліотеку з відкритим кодом (тобто відсутність залежностей) під назвою WhiteboxTools для виконання багатьох видів геопросторового аналізу, включаючи обробку даних LiDAR. Бібліотека написана на Русті і має широку підтримку сценаріїв на основі 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: друкує інформацію про набір даних LDAR (LAS), включаючи заголовок, частоту повернення точки, дані класифікації та інформацію про записи змінної довжини (VLR) та геокей.
  • LidarJoin: Об’єднує декілька файлів LiDAR (LAS) в один файл LAS.
  • LidarKappaIndex: виконує аналіз каппа-індексу узгодження (KIA) щодо класифікації двох файлів LAS.
  • LidarNearestNeighbourGridding: Grids LAS-файли за схемою найближчого сусіда.
  • LidarPointDensity: обчислює просторовий шаблон щільності точок для набору даних LiDAR.
  • LidarPointStats: створює кілька растрових даних, що підсумовують розподіл даних точки LAS.
  • LidarRemoveDuplicates: Вилучає повторювані точки з набору даних LiDAR.
  • LidarRemoveOutliers: видаляє залишки (високі та низькі точки) у хмарі точок LiDAR.
  • LidarSegmentation: Сегментує хмару точок LiDAR на основі звичайних векторів.
  • LidarSegmentationBasedFilter: ідентифікує основні точки у хмарах точок LiDAR за допомогою підходу, заснованого на сегментації.
  • LidarTile: Розміщує файл LiDAR LAS у декілька файлів LAS.
  • LidarTophatTransform: виконує перетворення білого верхнього шапки на наборі даних Lidar; як оцінка висоти над землею, це корисно для моделювання рослинного покриву.
  • NormalVectors: обчислює нормальні вектори для точок у файлі LAS і зберігає ці дані (векторні компоненти XYZ) у полі RGB.

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


Оце Так! З нетерпінням чекаю тестування цих інструментів.
Аарон

Я сподіваюся, що це вийде для вас. Якщо у вас виникли запитання, просто напишіть мені.
WhiteboxDev

Я припускаю, що LidarPointStats схожий на FUSION GridMetrics? Чи існує будь-яка документація, в якій створюються показники сітки при використанні LidarPointStats?
Аарон

@Aaron Я не надто впевнений у інструменті FUSION, оскільки я ніколи не використовував програмне забезпечення, але цей інструмент видає наступні: num_points, num_pulses, z_range, intenz_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, є "Сценарії DEM ARSF", які я написав:

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)

За допомогою обгортки GRASS Python доступно чимало інструментів для обробки LiDAR, які також можна використовувати замість / на додаток до того, що доступно через arsf_dem.


2

pylidarє відносно новим набором модулів Python для обробки LiDAR. Він заснований на SPDLib і RIOS і використовує NumPy.

Він доступний для завантаження звідси



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.