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.