¿Convertir el archivo LAS a una matriz numpy?

14

Empecé a aprender cómo manipular los datos LAS en Python y quería ver cómo otros manejan los archivos LAS. Me gustaría leer los puntos (estoy usando una matriz numpy) y filtrar las clases 1 y 2 (sin clasificar y moler) a una matriz separada. Tengo el siguiente código pero parece que no puedo filtrar los puntos.

# 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

He visto arcpy.da.featureClassToNumpyArray, pero no quería importar arcpy ni convertir en shapefile.

¿De qué otra manera puedo filtrar / leer datos LAS en una matriz numpy?

    
pregunta Barbarossa 04.11.2013 - 23:31

3 respuestas

13

Tu PointsXYZIC ahora es una matriz numpy. Lo que significa que puede utilizar indexación numpy para filtrar los datos que le interesan. Para Por ejemplo, puedes usar un índice de valores booleanos para determinar qué puntos tomar.

#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]

Ahora debería tener una matriz numpy con todos los valores en los que los datos no están clasificados o son de tierra. Para obtener los valores que se han clasificado puede utilizar:

filter_array = np.all(
    [
        PointsXYZIC[:, 4] != unclassified, #The final column to index against
        PointsXYZIC[:, 4] != ground,
    ],
    axis=0
)
    
respondido por el om_henners 05.11.2013 - 11:53
4

Use laspy para leer los archivos LAS y devolver fácilmente los datos como numerosos arreglos con los que puede interactuar. Laspy es puro python, es casi tan rápido como libLAS, tiene más funciones que los enlaces libLAS Python y es mucho más fácil de implementar.

    
respondido por el Howard Butler 17.12.2013 - 16:57
1

Le pido disculpas si ya lo sabe, pero LASTools es una herramienta fantástica de código abierto que ahora se integra con ArcGIS y QGIS 2.0. opciones para filtrar los datos de la manera que está viendo.

    
respondido por el Nicholas Duggan 05.11.2013 - 10:03

Lea otras preguntas en las etiquetas