概要
特異な空間特性を持つ LAS ポイントをノイズとして分類します。
使用法
LAS リターンのノイズ ポイントは通常、データのビジュアライゼーションおよび解析に有害な影響を与えます。たとえば、高く飛んでいる鳥や散在している波動が雲、霞、水系、大きく反射する鏡に遭遇した場合のリターンは、その場所の周囲のポイントの Z 範囲を歪める可能性があります。この種のポイントをノイズとして識別すると、フィルター処理によって表示から除外し、派生データ (標高サーフェス、傾斜面、傾斜方向など) の生成に一切使用されないようにすることができます。
[分離] 方法は、[近傍の幅] および [近傍の高さ] パラメーターによって定義された領域に基づいて、タイル化された 3x3 のビン内の LAS データを処理します。解析ボリューム中の LAS ポイントの数が [近傍のポイント制限] パラメーターより少ない場合、それらの LAS ポイントはノイズとして扱われます。このポイント制限には、解析ボリューム中で予測可能な LIDAR ポイント密度と LAS ポイントの数に基づく妥当な近似が反映される必要があります。
LIDAR 測量によって取得された領域で特定の LAS ポイント リターンに異常に低い/高い Z 値が含まれている場合は、範囲外ポイントをノイズとして迅速に識別するために、[絶対高度] 方法を使用してデータの Z 値の閾値を定義することを検討してください。
特定の地域の LAS ポイントに異常に低い/高い Z 値が含まれているが、これらの値が LIDAR 測量で取得された有効な計測値の範囲内にある場合は、[相対高度] 方法を使用し、地表からのオフセットに基づいて有効なデータの Z 値の閾値を定義することを検討してください。地表面を生成するには、LAS データをフィルター処理して地表の分類ポイントを取得し、[LAS データセット → ラスター (LAS Dataset to Raster)] ツールを使用します。
クラス コード値が 0 または 1 の LAS ポイントだけが再分類されます。その他の値によって未分類ポイントが表現されている場合は、[LAS クラス コードの変更 (Change LAS Class Codes)] ツールを使用して、未分類ポイントに値 1 を割り当てることを検討してください。ノイズ ポイントが分類されるときに [分離] 方法または [絶対高度] 方法が使用された場合は、すべてのノイズ ポイントにクラス コード値 7 が割り当てられます。[相対高度] 方法が使用された場合は、[最小高さ] 閾値を下回るノイズ ポイントに値 7 (低ノイズを表す) が割り当てられ、[最大高さ] 閾値を上回るノイズ ポイントに値 18 (高ノイズを表す) が割り当てられます。
ノイズ ポイントの判定に使用する設定がわからない場合は、LAS 分類コードの編集オプション無効化して、ノイズとして検出された LAS ポイントをポイント フィーチャとしてエクスポートすることを検討してください。出力ポイントに求める結果が反映されたら、[近接性による LAS ポイントの特定 (Locate LAS Points By Proximity)] ツールでこれらのフィーチャを使用して LAS ポイントを分類できます。
分離方法は、大きなビン サイズを高速で実行するパフォーマンス重視の操作です。データの性質や分布に応じて、可能な限り最大サイズのビンを指定してみてください。
構文
arcpy.ddd.ClassifyLasNoise(in_las_dataset, method, edit_las, withheld, {compute_stats}, ground, low_z, high_z, max_neighbors, step_width, step_height, {extent}, {process_entire_files}, {out_feature_class})
パラメーター | 説明 | データ タイプ |
in_las_dataset | 処理対象の LAS データセット。 | LAS Dataset Layer |
method | 使用されるノイズ検出方法。
| String |
edit_las | ノイズとして識別された LAS ポイントが再分類されるかどうかを示します。
| Boolean |
withheld | 保留分類フラグをノイズ ポイントに割り当てるかどうかを示します。このオプションは、edit_las パラメーターが CLASSIFY に設定されている場合のみ適用されます。
| Boolean |
compute_stats (オプション) | LAS データセットで参照されている LAS ファイルの統計情報を計算するかどうかを指定します。統計情報を計算することで、LAS ファイルごとの空間インデックスが提供され、解析と表示のパフォーマンスが向上します。また統計によって、分類コードやリターン情報などの LAS 属性の表示が LAS ファイルに存在する値に制限されるので、フィルタリングとシンボルのエクスペリエンスも強化されます。
| Boolean |
ground | 相対高度の定義に使用される地表面。 | Raster Layer |
low_z | ノイズ ポイントを識別するために最小 Z 値の閾値を定義する高さ。指定された値を下回るポイントはすべてノイズに分類されます。地表面が指定されている場合、この閾値は地表からのオフセットに基づきます。したがって、値「-3 フィート」は、地表面から 3 フィート以上低いポイントがすべてノイズに分類されることを意味します。 | Linear Unit |
high_z | ノイズ ポイントを識別するために最大 Z 値の閾値を定義する高さ。指定された値を上回るポイントはすべてノイズに分類されます。地表面が指定されている場合、この閾値は地表からのオフセットに基づきます。したがって、値「250 メートル」は、地表面から 250 メートル以上高いポイントがすべてノイズに分類されることを意味します。 | Linear Unit |
max_neighbors | [分離] 方法の使用時にノイズと見なすことができる、解析ボリューム中のポイントの最大数。解析ボリューム中に含まれる LAS ポイントの数がこの値以下である場合、これらのポイントはノイズに分類されます。 | Long |
step_width | [分離] 方法の使用時における、解析ボリュームの XY 空間の各ディメンションのサイズ。 | Linear Unit |
step_height | [分離] 方法の使用時における、解析ボリュームの高さ。 | Linear Unit |
extent (オプション) | このツールが評価するデータの範囲を指定します。 | Extent |
process_entire_files (オプション) | 処理範囲の適用方法を指定します。
| Boolean |
out_feature_class (オプション) | ノイズとして識別された LAS ポイントを表す出力ポイント フィーチャ。 | Feature Class |
派生した出力
名前 | 説明 | データ タイプ |
out_las_dataset | 変更対象の LAS データセット。 | LAS データセット レイヤー |
コードのサンプル
ClassifyLasNoise (LAS ノイズの分類) の例 1 (Python ウィンドウ)
次のサンプルは、Python ウィンドウでこのツールを使用する方法を示しています。
arcpy.env.workspace = 'C:/data'
arcpy.ddd.ClassifyLasNoise('Denver_2.lasd', "ABSOLUTE_HEIGHT",
edit_las='CLASSIFY', withheld='WITHHELD',
high_z='450 Feet')
ClassifyLasNoise (LAS ノイズの分類) の例 2 (スタンドアロン スクリプト)
次のサンプルは、スタンドアロン Python スクリプトでこのツールを使用する方法を示しています。
'''****************************************************************************
Name: Classify Lidar & Extract Building Footprints
Description: Extract footprint from lidar points classified as buildings,
regularize its geometry, and calculate the building height.
****************************************************************************'''
import arcpy
lasd = arcpy.GetParameterAsText(0)
dem = arcpy.GetParameterAsText(1)
footprint = arcpy.GetParameterAsText(2)
try:
desc = arcpy.Describe(lasd)
if desc.spatialReference.linearUnitName in ['Foot_US', 'Foot']:
unit = 'Feet'
else:
unit = 'Meters'
ptSpacing = desc.pointSpacing * 2.25
sampling = '{0} {1}'.format(ptSpacing, unit)
# Classify overlap points
arcpy.ddd.ClassifyLASOverlap(lasd, sampling)
# Classify ground points
arcpy.ddd.ClassifyLasGround(lasd)
# Filter for ground points
arcpy.management.MakeLasDatasetLayer(lasd, 'ground', class_code=[2])
# Generate DEM
arcpy.conversion.LasDatasetToRaster('ground', dem, 'ELEVATION',
'BINNING NEAREST NATURAL_NEIGHBOR',
sampling_type='CELLSIZE',
sampling_value=desc.pointSpacing)
# Classify noise points
arcpy.ddd.ClassifyLasNoise(lasd, method='ISOLATION', edit_las='CLASSIFY',
withheld='WITHHELD', ground=dem,
low_z='-2 feet', high_z='300 feet',
max_neighbors=ptSpacing, step_width=ptSpacing,
step_height='10 feet')
# Classify buildings
arcpy.ddd.ClassifyLasBuilding(lasd, '7.5 feet', '80 Square Feet')
#Classify vegetation
arcpy.ddd.ClassifyLasByHeight(lasd, 'GROUND', [8, 20, 55],
compute_stats='COMPUTE_STATS')
# Filter LAS dataset for building points
lasd_layer = 'building points'
arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=[6])
# Export raster from lidar using only building points
temp_raster = 'in_memory/bldg_raster'
arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
# Convert building raster to polygon
temp_footprint = 'in_memory/footprint'
arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
# Regularize building footprints
arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint,
method='RIGHT_ANGLES')
except arcpy.ExecuteError:
print(arcpy.GetMessages())
環境
ライセンス情報
- Basic: 次のものが必要 3D Analyst
- Standard: 次のものが必要 3D Analyst
- Advanced: 次のものが必要 3D Analyst