LASファイルをnumpy配列に変換しますか?


15

Pythonで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をインポートしたり、シェープファイルに変換したりしたくありませんでした。

どうすればLASデータをnumpy配列にフィルタリング/読み込むことができますか?


エラーメッセージ(ある場合)とは何ですか?
til_b

エラーなし。フィルタリングの方法がわからず、LASを配列に入れるより良い方法があるかどうか確信がありませんでした。
バルバロッサ

回答:


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つの結果しか得られませんでした。何か案は?
バルバロッサ

これらの5つのレコードは1次元配列です。
バルバロッサ

申し訳ありませんが、上のコードを更新しました。これは、計算を実行するために軸を指定する必要があるためです(それを使用しないと、配列のすべての次元で実行されます)。
om_henners

5

laspyを使用してLASファイルを読み取り、対話可能なnumpy配列としてデータを簡単に返します。laspyは純粋なpythonであり、libLASとほぼ同じ速度で、libLAS Pythonバインディングよりも多くの機能を備えており、デプロイがはるかに簡単です。


0

既にご存知の方には申し訳ありませんが、LASToolsは素晴らしいオープンソースツールであり、ArcGISとQGIS 2.0の両方に統合されています。


@Nicholasに感謝します。私はliblas Pythonライブラリを使用しています。これはLASTools
バルバロッサ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.