ArcPyまたはArcGIS Desktopでのラスター処理の範囲を削減しますか?


8

Pythonで何らかの自動手順を実行して、ラスターの処理範囲を減らす必要があります。現在、私が使用しているデータセットの境界に異常があります(ランドサット走査線の分類のため)。

分類されたスキャンライン

上記の情報をSetNull関数で取得したときに境界線が処理されないように、ラスター処理の範囲を縮小したいと思います。何かのようなもの 範囲

これは、マスク領域の手動での選択を必要としますが、マスク関数による抽出(つまり、figure2)で簡単に実行できます。エクステント領域(nodata値を無視)から各行/列のx方向とy方向の境界幅を引いたものを計算arcpy.env.extentしてPythonで利用する方法はありますか?


ラスター全体の範囲を取得してから、両側から標準距離を差し引くことはできますか?それとも単純すぎますか?
レーダー

これは、エクステントがエリア全体ではなく値を持つエリア(つまり、nodata値)から派生していることを前提として機能します
BJEBN

1
「境界線」を構成するものを理解するのに少し問題があります。スキャンの異常を自動的に検出してからトリミングしますか?もしそうなら、これらの異常を検出できるようにする方法を探していますか?
レーダー

境界線は値を含むラスターの領域です-おそらく上の2番目の画像は、値が範囲外であることを今見ると少し混乱しています(画面を取得したときに追加のレイヤーがアクティブである必要があります)。上の実線の領域はラスター境界線です。現在のラスター範囲は画像全体(白の* nodata値を含む)ですが、赤い四角が目的のラスター範囲です
BJEBN

回答:


9

このワークフローでは、まずエッジに浮かぶジャンクを処理し、次に問題を解決します。

  1. 「境界」領域のバイナリインジケーターを作成します。周囲のすべてのNoDataセルを含めるために使用します。次のように、任意の値を使用して境界線と残りのNoDataを示すと便利ですSetNull(Not(IsNull('X')), 1)

    境界

  2. 結果を領域グループ化し、境界線コンポーネントを選択します。 (これは通常、[カウント]の最大値を持つコンポーネントを選択することで自動化できます。)画像はほとんど同じに見えます。ここで除外されるのは、中央の数個の浮遊ピクセルだけですが、次のステップが機能するためには、それらを除外する必要あります。

    (別のアプローチは、最初にモルフォロジー演算を使用して境界を縮小し、次にそれを再拡大することです。これにより、中央の孤立したビットが消去されます。)

  3. 境界コンポーネントまでのユークリッド距離グリッドを計算します。

    距離

  4. SetNull(([Distance to Border component] < 30),Xのように、元の画像のすべての小さな距離をマスクします)

    結果

(最終的な画像は、元の境界線を結果に参考のために重ねて示しています。)

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