Processamento de Nuvens de Pontos, Prof. Dr.Ing. Jorge Centeno - UFPR

Exercício 01 - Primeiros passos

Neste exercício usaremos a linguagem Python para criar e manipular imagens.

abrir e ler LA

Preparação

  • Copie os arquivos las e laz dados pelo docente.
  • Use estes compactados para download

    LER arquivo LAS

    Para ler um arquivo LAS, podemos usar uma biblioteca do PYTHION, por exemplo a biblioteca LASPY.

    Laspy Laspy is a python library for reading, modifying and creating LAS LiDAR files.

    1. compatible with Python 3.7+.
    2. LAZ support via lazrs or laszip backend.
    3. LAS/LAZ streamed/chunked reading/writting.

    fonte laspy

    instalação

    Laspy can be installed either with pip: pip install laspy # without LAZ support
    # Or
    pip install laspy[laszip] # with LAZ support via LASzip
    # Or
    pip install laspy[lazrs] # with LAZ support via lazrs

    primeiro, instale as bibliotecas las

    !pip install laspy lazrs
    !pip install laspy

    Após a instalação, podemos abrir umas bibliotecas que serão usadas para manupular os dados de um arquivo, e abrir o Google Drive

    import matplotlib.pylab as plt
    import numpy as np
    import laspy
    from google.colab import drive
    drive.mount('/content/drive')

    Abrir um arquivo e ler informações básicas. Use o arquivo "Lake.laz" da pasta data do seu drive.

    depois, pode alterar o nome do arquivo e da pasta.

  • leia o arquivo e imprima
  • numero de pontos
  • minimos e maximos. nome='/content/drive/My Drive/data/lake.laz'
    las = laspy.read(nome)
    print("Pontos:", len(las.points))
    print("X:", min(las.x), max(las.x))
    print("Y:", min(las.y), max(las.y))
    print("Z:", min(las.z), max(las.z))

    Podemos ver o formato os dados. Neste caso:
    O Point Format 1 contém, basicamente:

    1. X, Y, Z
    2. Intensity
    3. Return Number
    4. Number of Returns
    5. Scan Direction Flag
    6. Edge of Flight Line
    7. Classification
    8. Scan Angle
    9. User Data
    10. Point Source ID*
    11. GPS Time

    imprima o formato

    print(las.point_format)

    Podemos dar uma olhada em alguns pontos for i in range(5):
        print(f"Ponto {i}:")
        print(f" X = {las.x[i]}")
        print(f" Y = {las.y[i]}")
        print(f" Z = {las.z[i]}")
        print(f" Intensity = {las.intensity[i]}")
        print(f" GPS time = {las.gps_time[i]}")
        print()

    Podemos visualizar os dados em 3D: fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(
        las.x,
        las.y,
        las.z,
        s=1
    )
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    plt.show()

    Ou melhor, usando uma variação de cores segundo a cota. fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(
        las.x,     las.y,     las.z,     c=las.z,     cmap='viridis',     s=1 )

    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')

    Agora, escreva um programa que crie uma grade regular com esses dados: