Necesito reducir la extensión de procesamiento de mi ráster mediante algún tipo de procedimiento automático en Python. Actualmente, los bordes del conjunto de datos que he estado usando tienen anomalías (debido a la clasificación de las líneas de escaneo de Landsat).
Me gustaría reducir la extensión del procesamiento de ráster para que cuando recupere la información anterior mediante una función SetNull no se procesen los bordes. Algo como
Ahora esto se puede hacer fácilmente con un extracto por función de máscara (es decir, figura 2), aunque eso requeriría la selección manual de la región de enmascaramiento. ¿Hay algún método que pueda utilizar para calcular la región de extensión (ignorando los valores de nodata) menos el ancho del borde en la dirección x e y de cada fila / columna y luego utilizar arcpy.env.extent
en Python?
fuente
Respuestas:
Este flujo de trabajo trata primero con la basura que flota alrededor de los bordes y luego resuelve el problema.
Crear un indicador binario del área "borde", que considero que incluye todas las celdas NoData circundantes. Es conveniente usar cualquier valor para indicar el borde y NoData para el resto, como en
SetNull(Not(IsNull('X')), 1)
:Agrupe el resultado y seleccione el componente de borde. (Esto generalmente puede automatizarse seleccionando el componente con el mayor valor de [Count]). La imagen se verá casi igual; aquí solo se excluyen unos pocos píxeles perdidos en el centro, pero deben excluirse para que el siguiente paso funcione.
(Un enfoque alternativo es usar operaciones morfológicas primero para reducir el borde y luego volver a expandirlo: esto borra los bits aislados en el medio).
Calcule la cuadrícula de distancia euclidiana al componente de borde.
Enmascara todas las distancias pequeñas en la imagen original, como en
SetNull(([Distance to Border component] < 30),
X)
:(La imagen final muestra el borde original en verde superpuesto, como referencia, en el resultado).
fuente