LAS 파일을 numpy 배열로 변환 하시겠습니까?


15

파이썬에서 LAS 데이터를 조작하는 방법을 배우기 시작했으며 다른 사람들이 LAS 파일을 처리하는 방법을보고 싶었습니다. 포인트를 읽고 (numpy 배열을 사용하고 있습니다) 클래스 1과 2 (분류되지 않은 접지)를 별도의 배열로 필터링하고 싶습니다. 다음 코드가 있지만 포인트를 필터링 할 수 없습니다.

# Import modules
from liblas import file
import numpy as np

if __name__=="__main__":
    '''Read LAS file and create an array to hold X, Y, Z values'''
    # Get file
    las_file = r"E:\Testing\ground_filtered.las"
    # Read file
    f = file.File(las_file, mode='r')
    # Get number of points from header
    num_points = int(f.__len__())
    # Create empty numpy array
    PointsXYZIC = np.empty(shape=(num_points, 5))
    # Load all LAS points into numpy array
    counter = 0
    for p in f:
        newrow = [p.x, p.y, p.z, p.intensity, p.classification]
        PointsXYZIC[counter] = newrow
        counter += 1

arcpy.da.featureClassToNumpyArray를 보았지만 arcpy를 가져 오지 않고 shapefile로 변환하고 싶지 않았습니다.

LAS 데이터를 numpy 배열로 필터링 / 읽는 방법은 무엇입니까?


오류 메시지는 무엇입니까 (있는 경우)?
til_b

오류가 없습니다. 방금 필터링 방법을 몰랐으며 LAS를 배열로 가져 오는 더 좋은 방법이 있는지 확실하지 않았습니다.
Barbarossa

답변:


14

당신 PointsXYZIC은 이제 numpy 배열입니다. 즉, numpy 인덱싱 을 사용 하여 원하는 데이터를 필터링 할 수 있습니다. 예를 들어, 부울 인덱스를 사용하여 어떤 점을 잡을지를 결정할 수 있습니다.

#the values we're classifying against
unclassified = 1
ground = 2

#create an array of booleans
filter_array = np.any(
    [
        PointsXYZIC[:, 4] == unclassified, #The final column to index against
        PointsXYZIC[:, 4] == ground,
    ],
    axis=0
)

#use the booleans to index the original array
filtered_rows = PointsXYZIC[filter_array]

이제 데이터가 분류되지 않거나 접지 된 모든 값을 가진 numpy 배열이 생겼습니다. 분류 된 값을 얻으려면 다음을 사용할 수 있습니다.

filter_array = np.all(
    [
        PointsXYZIC[:, 4] != unclassified, #The final column to index against
        PointsXYZIC[:, 4] != ground,
    ],
    axis=0
)

필터가 작동하는 것 같지만 5 개의 레코드 만 작성합니다. 클래스 1과 2 만 필터링하려고 시도한 다음 1과 2 만 제외하고 모두 필터링하려고 시도했는데 모두 5 개의 결과 만 제공했습니다. 어떤 아이디어?
Barbarossa

이 5 개의 레코드는 1 차원 배열입니다.
Barbarossa

죄송합니다. 위의 코드는 축의 지정이 필요하므로 배열의 모든 차원에서 또는 배열의 모든 차원에서 수행하지 않고 계산을 수행해야합니다.
om_henners 2014

5

laspy 를 사용 하여 LAS 파일을 읽고 상호 작용할 수있는 numpy 배열로 데이터를 쉽게 반환하십시오. laspy는 순수 파이썬이며 libLAS만큼 빠르며 libLAS Python 바인딩보다 더 많은 기능을 가지고 있으며 배포하기가 훨씬 쉽습니다.


0

이미 알고 계신 경우 죄송하지만 LASTools 는 ArcGIS 및 QGIS 2.0과 모두 통합 된 환상적인 오픈 소스 도구입니다. 현재보고있는 방식으로 데이터를 필터링 할 수있는 옵션이 있습니다.


@Nicholas에게 감사드립니다. 저는 liblas python 라이브러리를 사용하고 있습니다.이 라이브러리는 LASTools 와 밀접하게 연결되어 있습니다.
Barbarossa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.