멀티 밴드 래스터에 대해 NoData를 설정 하시겠습니까?


10

여기에 그림과 같이 NoData 대신 검은 색 영역이있는 RGB 정사 이미지가 있습니다. 여기에 이미지 설명을 입력하십시오

SetNull 도구를 사용하면 검은 색 영역이 제거되지만 회색조 정사 이미지로 바뀌어 원하는 것이 아닙니다.

여기에 이미지 설명을 입력하십시오

클립 (데이터 관리) 도구를 사용하여 래스터를 자르는 방법 으로이 문제를 해결할 수 있으며 NoData 값을 검은 셀 값 (0)으로 설정할 수 있습니다. 그러나 학생들을위한 워크샵을 만들고 있으며 덜 직관적 인 방법을 사용하고 싶습니다.

물론 각 밴드에서 개별적으로 NoData 도구를 실행 한 다음 세 가지 밴드를 결합하는 옵션이 있지만, band1, band2 및 band3이 모두 0과 같은 조건이 있어야 NoData로 설정할 수 있습니다. ModelBuilder에서이 작업을 수행하는 것이 이상적이지만 ArcPy를 사용하여 스크립팅하는 것도 좋습니다.

고급 라이센스로 ArcGIS 10.2 Desktop을 사용하고 있습니다.


"ArcGIS 10.2 Pro"를 사용하고 있지만 ArcGIS Pro 응용 프로그램은 ArcGIS 10.3 for Desktop에서만 릴리스되었습니다. 사용중인 내용을 명확히하기 위해 질문을 편집 할 수 있습니까 ?
PolyGeo

사과드립니다. Advanced 라이센스가있는 ArcGIS 10.2 for Desktop을 사용하고 있습니다.
Alex McVittie

이 질문을 해주셔서 감사합니다. 이미지에 문제가 있다고 생각하는 고객이 항상 돌아옵니다.
Wes

답변:


12

당신이 원하는 것은 설정 래스터 속성은 스크립트 또는 ArcCatalog에서 수동으로 변경합니다. 새 래스터를 만들거나 시간이 오래 걸리지 않습니다.

파이썬에서는 약간 까다 롭습니다.

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에서 레이어를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동합니다. 여기에 이미지 설명을 입력하십시오

편집 버튼을 누르십시오.

여기에 이미지 설명을 입력하십시오

값을 입력 한 후 확인을 눌러 NoData 편집기를 닫고 확인을 눌러 변경을 적용하십시오.

이제 래스터는 셀 값이 0,0,0 인 ArcMap에 아무것도 표시하지 않습니다.


3

래스터 속성으로 이동하고 심볼이 RGB 복합 (이것이 보이는 것처럼)으로 설정된 경우 RGB (Display Background Values) 상자를 선택하고 원하는 배경을 빈 배경으로 설정할 수 있습니다. 따라서 배경 값으로 0 0 0을 설정하면 비즈니스에 종사 할 수 있습니다.


2

이것을 달성하는 가장 쉬운 방법은 먼저 null 조건 래스터를 만든 다음 해당 래스터를 사용하여 NoData 값을 각 밴드에 별도로 할당하는 것입니다.

Null 조건 래스터를 만들려면 Con 함수 를 실행하십시오 .

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

그런 다음 null 조건 래스터를 사용하여 Null 함수를 설정 하여 각 밴드에 NoData 값을 할당하십시오 . 모델 빌더 또는 파이썬 으로이 작업을 수행 할 수 있어야합니다.


2

이론적으로 작동하는 트리 다른 절차를 사용할 수 있다고 생각합니다. 이 식을 사용할 수있는 래스터 계산기 SETNULL([raster] == value, [raster]) 원하는 값만 다시 분류해야하는 위치를 다시 분류하십시오. 그리고 ArcPy를 사용하면 https://gis.stackexchange.com/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.