マルチバンドラスタにNoDataを設定しますか?


10

ここに示すように、NoDataの代わりに黒い領域があるRGBオルソ画像があります。 ここに画像の説明を入力してください

SetNullツールを使用すると、黒い領域は削除されますが、グレースケールのオルソ画像に変換されますが、これは私が望んでいないことです。

ここに画像の説明を入力してください

クリップ(データ管理)ツールを使用してラスター自体をクリップすることでこれを回避する方法があり、NoData値を黒いセルの値(0)に設定できることを知っています。しかし、私は学生向けのワークショップを作成しており、あまり直感的でない方法を使用したいと思います。

もちろん、各バンドで個別にNoDataツールを実行してから3つのバンドを組み合わせるオプションもありますが、band1、band2、およびband3がすべて0になってNoDataとして設定される条件が必要です。ModelBuilderでこれを実行できることが理想的ですが、ArcPyを使用してスクリプトを作成することもできます。

ArcGIS 10.2 DesktopとAdvanced Licenseを使用しています。


「ArcGIS 10.2 Pro」を使用しているとのことですが、ArcGIS ProアプリケーションはArcGIS 10.3 for Desktopでのみリリースされました。質問を編集して、使用しているものを明確にしていただけますか?
PolyGeo

謝罪いたします。AdvancedライセンスでArcGIS 10.2 for Desktopを使用しています。
Alex McVittie、2015

この質問をしていただきありがとうございます。私のクライアントには、自分のイメージに問題があるといつも思っていることがあります。
2015

回答:


12

何がやりたいことはあるセットのラスタプロパティは、スクリプトまたはArcCatalogで、手動で変更します。これにより、新しいラスターが作成されることも、非常に時間がかかることもありません。

Pythonでは少しトリッキーです:

import sys, os, arcpy

InFolder = sys.argv[1]
arcpy.env.workspace = InFolder

for Ras in arcpy.ListRasters():
    arcpy.AddMessage("Processing " + Ras)
    arcpy.SetRasterProperties_management(Ras,nodata="1 0;2 0;3 0")

nodataはリストのかなり下にあるので、それを指定する方が簡単です。パラメータは、すべてのバンドが処理されるまで、Band Value; Band Value; ...です。同じフォルダーにより多くの(または少ない)バンドがある可能性がある場合は、arcpy.DescribebandCountプロパティを使用して、正しい数のバンドにnullを設定する必要があります。

import sys, os, arcpy

InFolder = sys.argv[1]
arcpy.env.workspace = InFolder

for Ras in arcpy.ListRasters():
    arcpy.AddMessage("Processing " + Ras)
    desc = arcpy.Describe(Ras)
    if desc.bandCount == 3:
        arcpy.SetRasterProperties_management(Ras,nodata="1 0;2 0;3 0")
    elif desc.bandCount == 4:
        arcpy.SetRasterProperties_management(Ras,nodata="1 0;2 0;3 0;4 0")
    elif desc.bandCount == 1:
        arcpy.SetRasterProperties_management(Ras,nodata="1 0")

ArcCatalogで、レイヤーを右クリックしてプロパティに移動します。 ここに画像の説明を入力してください

編集ボタンを押します:

ここに画像の説明を入力してください

値を入力し、[OK]をクリックしてNoDataエディターを閉じ、[OK]をクリックして変更を適用します。

これで、セル値が0,0,0の場合、ラスターはArcMapに何も表示しなくなります。


3

ラスタープロパティに移動し、シンボルがRGBコンポジット(そうであるように見える)として設定されている場合、[背景の値を表示(RGB)]ボックスをオンにして、中空の背景として好きなものを設定できます。したがって、0 0 0をバックグラウンド値として設定するだけで、ビジネスを開始できます。


2

これを実現する最も簡単な方法は、最初にnull条件ラスターを作成し、次にそのラスターを使用してNoData値を各バンドに個別に割り当てることだと思います。

Con関数を実行して、ヌル条件ラスターを作成してみてください。

nullCondition = Con(((band1 == 0) & (band2 == 0) & (band3 == 0)), 1, 0)

次に、null条件ラスターを使用して、set Null関数で各バンドにNoData値を割り当てます。これは、モデルビルダーまたはPythonで実行できるはずです。


2

理論的には機能するはずのツリーの異なる手順を使用できると思います。この式を使用できるラスター計算機SETNULL([raster] == value, [raster]) 必要な値のみを再分類する必要がある場所で再分類します。そして、ArcPyを使用して、私がここで見つけたこのスクリプトを使用できます/gis//a/24578/47790

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outSetNull = SetNull("elevation", "elevation", "VALUE = 9999")
outSetNull.save("C:/sapyexamples/output/outsetnull")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.