10 votos

Configuración de NoData para un ráster multibanda?

Tengo un RGB ortoimagen que tiene el color negro de la zona en lugar de NoData, como se muestra aquí: enter image description here

Cuando yo uso el SetNull herramienta, no eliminar el negro de la zona, sin embargo luego se convierte en una escala de grises de la ortoimagen, que no es lo que quiero.

enter image description here

Sé que hay una forma de evitar esto mediante el Clip (Gestión de Datos) de la herramienta de clip de la trama a sí misma y no puede establecer el valor NoData a ser el valor de las casillas negras (0). Sin embargo, estoy creando un taller para los estudiantes y me gustaría usar una menos intuitivo método.

Hay, por supuesto, la opción de ejecutar el NoData herramienta en cada banda de forma individual y, a continuación, la combinación de las tres bandas juntas, sin embargo necesito tener una condición donde band1, band2, y band3 todos iguales a 0 para establecer que como NoData. Ser capaz de hacer esto en ModelBuilder sería lo ideal, pero de secuencias de comandos utilizando ArcPy también sería bueno.

Estoy utilizando ArcGIS 10.2 Escritorio con Licencia Avanzada.

12voto

Flinkman Puntos 4821

Lo que quiero hacer es Establecer Propiedades del Raster en una secuencia de comandos o cambiar manualmente en ArcCatalog. Esto no va a crear una nueva trama o incluso tomar mucho tiempo.

En python es un poco complicado.

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")

Debido a que el nodata es el camino hacia abajo de la lista creo que es más fácil especificar que; los parámetros son de la Banda de Valor;la Banda de Valor;... hasta que todas las bandas son abordados. Si usted es propenso a tener más bandas (o menos) en la misma carpeta, entonces usted tendrá que utilizar arcpy.Describir y el bandCount de la propiedad para establecer el valor null para el correcto número de bandas:

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")

En ArcCatalog, haga clic derecho sobre la capa y vaya a propiedades: enter image description here

pulse el botón editar:

enter image description here

Introduzca los valores, a continuación, pulse OK para descartar el NoData y el editor de ACEPTAR para aplicar el cambio.

Ahora la trama se mostrará nada en ArcMap, donde el valor de la celda es 0,0,0.

3voto

Brett Allen Puntos 231

Si vas a las propiedades del raster, y si la simbología que se establece como RGB compuesto (que parece ser), se puede comprobar el Fondo de la Pantalla de Valores (RGB) y el cuadro de conjunto de lo que quieras como un hueco de fondo. Así que acaba de establecer 0 0 0 como el valor de fondo y debe estar en el negocio.

2voto

Barry Brown Puntos 9774

Creo que la manera más sencilla de lograr esto sería crear una condición nula raster en primer lugar, a continuación, utilizar ese ráster para asignar los valores NoData para cada banda por separado.

Trate de ejecutar el Con la función para crear la condición nula la trama.

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

A continuación, utilice la condición null raster para asignar valores NoData para cada banda con el set Null función. Usted debe ser capaz de hacer esto con model builder o python.

2voto

Elements in Space Puntos 794

Creo que puede utilizar el árbol de los diferentes procedimientos que los teóricos deben trabajar. Trama calculater donde se puede utilizar esta expresión SETNULL([raster] == value, [raster]) Reclasificar donde sólo debe reclass el valor que desee. Y el uso de ArcPy puede utilizar esta secuencia de comandos que he encontrado aquí http://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")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X