Jakie narzędzia przetwarzania LiDAR są dostępne w Pythonie?


22

Korzystam z FUSION i wiersza poleceń FUSION Lidar Toolkit (LTK) do przetwarzania danych LiDAR. Szeroka wyszukiwarka Google („Lidar Python”) dała biblioteki libLAS i pyLAS jako biblioteki Python LiDAR, jednak wydaje się, że zapewniają one dostęp tylko do odczytu i zapisu danych LAS.

Szczególnie interesuje mnie tworzenie obrazów intensywności i gęstości oprócz modeli powierzchni czaszy z chmur punktów. Czy istnieje ogólnie akceptowany zestaw narzędzi w Pythonie, które mogą wykonywać te same zadania, do których jest zdolny FUSION LTK?


1
Nie jest to bezpośrednia odpowiedź na twoje pytanie, ale ponieważ pracowałem nad oprogramowaniem Python do rekonstrukcji drzew botanicznych z danych uzyskanych w LIDAR w chmurze punktów, być może stos technologii, z którego korzystałem, może dać ci kilka pomysłów. W szczególności warstwa wizualizacji jest budowana za pomocą VTK, który jest bardzo potężny.
— cjauvin

ArcMap 10.1 ma możliwości obsługi filtrów Lidar Datacloud do wyświetlania i analizy z innymi warstwami. C ++ jest prawdopodobnie najlepszą metodą obsługi plików .las bogatych w dane, zgodnie z powyższymi zaleceniami.

Nie rozumiem, jak ta odpowiedź jest pytaniem PO. Chce narzędzia w Pythonie. Jeśli sugerujesz C ++, powinieneś wykonać kopię zapasową tego roszczenia ze szczegółowym powodem.
— Devdatta Tengshe

Odpowiedzi:


13

laspy to kolejne dobre oprogramowanie do odczytu / zapisu LAS. Obsługuje pracę z danymi bezpośrednio w tablicach numpy i szereg innych fajnych funkcji Pythonic. Jednak samo w sobie nie przetwarza oprogramowania.

PDAL ma możliwość używania Pythona jako języka filtrującego w potoku, ale nie jest to również silnik przetwarzania.

W kołczanie Python nie ma zbyt wiele do przetwarzania LiDAR i przetwarzania chmury punktów. Myślę, że część tego ma związek z zwykle przetwarzanymi woluminami danych i typową odpowiedzią na sięganie po C / C ++ w obliczu wyzwania. Mam nadzieję, że gdy Python się poprawi (PyPy napędza wiele rzeczy i to jest powód, dla którego pracowałem nad stworzeniem laspy), dostępne jest więcej oprogramowania do przetwarzania chmury punktów w Pythonie. Myślę, że perspektywy się poprawiają, ale wciąż jeszcze nie wszystko.


7

Niedawno wydałem autonomiczną bibliotekę Open Source (MIT) (tj. Bez zależności) o nazwie WhiteboxTools do wykonywania wielu rodzajów analiz geoprzestrzennych, w tym przetwarzania danych LiDAR. Biblioteka jest napisana w języku Rust i ma szerokie wsparcie dla skryptów opartych na języku Python . Na przykład następujący skrypt w języku Python używa biblioteki WhiteboxTools do zapełniania danych kolorów RGB punktów LiDAR w pliku 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) 

Narzędzia przetwarzania specyficzne dla LiDAR WhiteboxTools obejmują następujące funkcje:

  • BlockMaximum: Tworzy raster o maksymalnym bloku z wejściowego pliku LAS.
  • BlockMinimum: Tworzy raster o minimalnym bloku z wejściowego pliku LAS.
  • FilterLidarScanAngles: Usuwa punkty w pliku LAS, których kąty skanowania są większe niż próg.
  • FindFlightlineEdgePoints: Identyfikuje punkty wzdłuż krawędzi linii lotniczej w pliku LAS.
  • FlightlineOverlap: czyta plik punktu LiDAR (LAS) i wysyła raster zawierający liczbę nakładających się linii lotu w każdej komórce siatki.
  • LidarElevationSlice: Wyprowadza wszystkie punkty w pliku punktów LiDAR (LAS), które leżą między określonym zakresem wysokości.
  • LasToAscii: Konwertuje jeden lub więcej plików LAS na pliki tekstowe ASCII.
  • LidarColourize: Dodaje pola koloru czerwono-zielono-niebieskiego do pliku LiDAR (LAS) na podstawie obrazu wejściowego.
  • LidarGroundPointFilter: Identyfikuje punkty naziemne w zbiorze danych LiDAR.
  • LidarIdwInterpolation: interpoluje pliki LAS przy użyciu schematu ważonego odwrotnie (IDW).
  • LidarHillshade: Oblicza wartość cienia wzgórza dla punktów w pliku LAS i przechowuje te dane w polu RGB.
  • LidarHistogram: Tworzy histogram z danych LiDAR.
  • LidarInfo: Drukuje informacje o zestawie danych LiDAR (LAS), w tym dane nagłówka, częstotliwości powrotu punktu i dane klasyfikacyjne oraz informacje o rekordach o zmiennej długości (VLR) i geokeys.
  • LidarJoin: Łączy wiele plików LiDAR (LAS) w jeden plik LAS.
  • LidarKappaIndex: Wykonuje analizę kappa indeksu zgodności (KIA) na podstawie klasyfikacji dwóch plików LAS.
  • LidarNearestNeighbourGridding: Grids pliki LAS przy użyciu schematu najbliższego sąsiada.
  • LidarPointDensity: Oblicza przestrzenny wzór gęstości punktów dla zestawu danych LiDAR.
  • LidarPointStats: Tworzy kilka rastrów podsumowujących rozkład danych punktów LAS.
  • LidarRemoveDuplicates: Usuwa zduplikowane punkty ze zbioru danych LiDAR.
  • LidarRemoveOutliers: Usuwa wartości odstające (wysokie i niskie punkty) w chmurze punktów LiDAR.
  • LidarSegmentation: Segmentuje chmurę punktów LiDAR na podstawie normalnych wektorów.
  • LidarSegmentationBasedFilter: Identyfikuje punkty naziemne w chmurach punktów LiDAR przy użyciu podejścia opartego na segmentacji.
  • LidarTile: sąsiadująco umieszcza plik LAS LiDAR w wielu plikach LAS.
  • LidarTophatTransform: Wykonuje białą transformację w top-hat na zestawie danych Lidar; jako oszacowanie wysokości nad ziemią jest to przydatne do modelowania baldachimu roślinności.
  • NormalVectors: Oblicza wektory normalne dla punktów w pliku LAS i przechowuje te dane (elementy wektorowe XYZ) w polu RGB.

Ponadto istnieje wiele narzędzi do przetwarzania DEM, które są interpolowane z danych źródłowych LiDAR (np. Denoising z zachowaniem funkcji, wymuszanie hydro itp.). Szczegóły można znaleźć w instrukcji obsługi . Kod źródłowy można znaleźć tutaj , a skompilowane pliki binarne znajdują się na stronie Geomorphometry and Hydrogeomatics tutaj .


Łał! Czekamy na przetestowanie tych narzędzi.
— Aaron

Mam nadzieję, że ci się uda. Po prostu napisz do mnie, jeśli masz jakieś pytania.
— WhiteboxDev

Zakładam, że LidarPointStats jest podobny do FUSION GridMetrics? Czy istnieje dokumentacja, w której metryki siatki są tworzone przy użyciu LidarPointStats?
— Aaron

@Aaron Nie jestem zbyt pewien narzędzia FUSION, ponieważ nigdy nie korzystałem z tego oprogramowania, ale to narzędzie generuje następujące wyniki: num_points, num_pulses, z_range, intensywność_range, predom_class. Szczegóły można znaleźć tutaj ( github.com/jblindsay/whitebox-geospatial-analysis-tools/blob/… ), a także w instrukcji obsługi.
— WhiteboxDev

@Aaron Prawdopodobnie powinienem również wyjaśnić, że narzędzie lidar_point_stats raportuje każdą z tych statystyk na zasadzie komórka po komórce. Oznacza to, że dla każdej ze statystyk określonych przez użytkownika jako pożądany wynik jest generowany raster. Na przykład: lidar_point_stats ('input.las', resolution = 1.0, num_points = True, num_pulses = True)
— WhiteboxDev

2

Chociaż nie jest to ściśle biblioteka „Python”, ale raczej zestaw opakowań dla innych narzędzi, w szczególności GRASS, istnieją „Skrypty ARSF DEM”, które napisałem:

https://github.com/pmlrsg/arsf_dem_scripts

Jednym z celów było zapewnienie wspólnego zestawu funkcji Pythona dla różnych narzędzi wiersza poleceń (nazywanych przy użyciu podprocesu) z methodflagą używaną do określenia tego narzędzia.

Przykład użycia do generowania obrazu DSM, intensywności i gęstości to:

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)

Istnieje wiele narzędzi do przetwarzania LiDAR dostępnych za pośrednictwem otoki GRASS Python, które mogą być również używane zamiast / oprócz tego, co jest dostępne arsf_dem.




Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.