¿Crear un shapefile que muestre huellas de rasters?

33

Tengo alrededor de 1,000 imágenes satelitales en formato tiff, y quiero crear un archivo de formas que sirva como índice para los rásteres. Esto es algo similar a un catálogo de ráster, pero no quiero crear un catálogo de ráster.

Algunos obstáculos que puedo prever es que la imagen está georreferenciada, por lo que no tiene forma rectangular (estoy hablando del área de datos).

Para aclarar, requiero que el polígono cubra solo los píxeles distintos de cero (o no nodatos) del ráster, y no todo el ráster rectangular. La mayoría de las respuestas hasta ahora, dan un polígono rectangular, que cubre los datos, así como los píxeles sin datos.

Mi imagen Una muestra de imagen de satélite


Resultado dado por las herramientas que he examinado (como catlog de ráster, varios Arcscripts, script personalizado de Python en una de las respuestas): Resultado


Resultado que quiero: ingrese la descripción de la imagen aquí

Devdatta Tengshe
fuente
44
Parece que crear un catálogo de ráster, incluso temporalmente, sería una buena solución para crear huellas. Puede crear un catálogo no administrado, que crea una tabla de referencias, pero deja las imágenes en su ubicación en el servidor. Es fácil y relativamente rápido realizar una importación por lotes de rásteres a un catálogo. Una vez creado, puede exportar las huellas a una nueva clase de entidad y eliminar el catálogo de ráster. Esto podría ser tan rápido como otras opciones.
Obtenga espacial
2
El dataset de mosaico también produce la huella de las imágenes.
Roy
dataset de mosaico es el camino a seguir. Muy fácil de lograr
Brad Nesom
Entonces, en la última imagen, ¿están los píxeles fuera del cuadro rojo NoData o 0? Si son 0, ¿hay píxeles en el área que desea que también tengan valor 0?
Chad Cooper
1
Los píxeles fuera del borde rojo son nodata; Sin embargo, mis datos multiespectrales tienen 0,0,0 como valores RGB para las áreas de nodos. En ambos casos, no hay píxeles con valor 0 dentro del área requerida.
Devdatta Tengshe

Respuestas:

15

Hay un complemento en QGIS llamado Límite de imagen . Es una gran herramienta Dentro de esta herramienta hay una opción para "Píxeles válidos" que omitirá los bordes negros de una imagen de satélite, por ejemplo.

Ryan Garnett
fuente
Este complemento afirma hacer lo que quería, pero falla en una imagen con la que experimenté. Lo intentaré con mis datos reales mañana.
Devdatta Tengshe
Descubrí que este complemento funciona muy bien con datos multiespectrales, pero a veces da resultados extraños con imágenes pancromáticas de banda única.
Devdatta Tengshe
2
Estoy de acuerdo en que el Límite de imagen de QGIS funciona mejor, pero existe una herramienta para hacer esto para archivos vectoriales en los que no necesitamos el "cuadro delimitador" o la "huella", sino un esquema de polígono donde existen datos.
GeorgeC
Las herramientas de límite de imagen son excelentes, sin embargo, el enlace que proporciona es 404. Creo que las herramientas aún están disponibles si permite complementos experimentales en la configuración de complementos. ¿Quizás usar este enlace ?: github.com/lmotta/imagefootprint_plugin
Aaron
¿Existe alguna documentación para usar Image Boundary?
Loonuh
9

El siguiente código tomará un ráster de entrada, obtendrá su extensión e insertará esa extensión en una clase de entidad de polígono:

import arcpy

r = arcpy.Raster(in_raster)
point = arcpy.Point()
array = arcpy.Array()

corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]

cursor = arcpy.InsertCursor(fc)
feat = cursor.newRow()
for corner in corners:    
    point.X = getattr(r.extent, "%s" % corner).X
    point.Y = getattr(r.extent, "%s" % corner).Y
    array.add(point)
array.add(array.getObject(0))
print len(array)
polygon = arcpy.Polygon(array)
feat.shape = polygon
cursor.insertRow(feat)
array.removeAll()
del feat
del cursor

Puede ejecutarlo en la ventana de ArcMap Python configurando in_rastery fcasí:

>>> fc = 'r_extent'
>>> in_raster = 'CaliCoast10mNED_HavCurvedPCS'

donde r_extentes una clase de entidad poligonal existente. Luego simplemente copie el código y ejecútelo. Entiendo esto:

ingrese la descripción de la imagen aquí

Chad Cooper
fuente
1
He usado el código anterior para hacer lo mismo para una carpeta: gist.github.com/4162013
jeb
7

Puede usar gdaltindex para esto: http://www.gdal.org/gdaltindex.html

Sin embargo, seguirá creando rectángulos (por ejemplo, 4 + 1 puntos) en el mismo sistema de referencia que las imágenes. Pero me pregunto si eso realmente es un problema: ¿qué tan grandes son sus imágenes?

johanvdw
fuente
El problema con gdaltindex es que crea un polígono rectangular para cada imagen. Solo me interesan los píxeles de valor distinto de cero
Devdatta Tengshe
4

Intenté la herramienta "Límite de imagen" en QGIS pero falla con algunos rásteres.

Otra opción que funcionó para mí es: 1. Convertir el ráster de entrada a un único número digital utilizando la utilidad de línea de comandos gdal_translate.

gdal_translate -co compress = lzw -b 1 -ot byte -scale 1 1 inp.tif out.tif

Esto creará un ráster con valores de 1 en todas partes donde inp.tif tenía valores distintos de cero.

  1. Luego, en ArcMap, puede usar la herramienta "ráster a polígono" para obtener un polígono (shapefile).

El archivo de forma de salida tendrá límites no cuadriláteros, con múltiples vértices poligonales, siguiendo el límite real de la imagen.

usuario3294041
fuente
3

Si está interesado en una solución con script, pruebe el comando gdal nearblack . También puede usar la bandera -blanco para recuperar datos delimitados por espacios en blanco. Puede poligonalizar la salida para generar una huella no rectangular de los datos ráster.

##run nearblack
shellcmds = "nearblack -white -o " + outpath + " " + inpath
os.system(shellcmds)

##run polygonize
shellcmds = "gdal_polygonize.py " + outpath + " -f" + """ "ESRI Shapefile"  """ + outpath2 + " nearblack"
os.system(shellcmds)
jsta
fuente
1

Creo que, en el mundo de ArcGIS, puede lograrlo con la herramienta 3D Analyst \ Conversion \ From Raster \ Raster Domain .

Tomek
fuente
Funciona solo en datos 3D, e incluso entonces no da los resultados esperados. No funciona con imágenes de satélite en absoluto.
Devdatta Tengshe
Si eso es verdad. Dejaré la respuesta a otros, para que se den cuenta de eso.
Tomek
0

Existe una herramienta en ArcGIS 3D Analyst llamada Raster Domain que crea un polígono o una huella de polilínea de las porciones de datos de un dataset ráster, e ignora las celdas NoData. Funcionó muy bien para mí.

joey
fuente
1
¡Bienvenido a nuestro sitio! ¿Podría explicar cómo su respuesta difiere de la de Tomek?
whuber
El dominio ráster funcionó para mí, ¡gracias por tu ayuda!
meryloo
0

Puede crear un catálogo de ráster con una referencia espacial asignada, agregar el catálogo de ráster a ArcMap y luego "Exportar huella". Recuerde que existe la opción de crear un catálogo de ráster "NO MANEJADO" para que no realice un duplicado de cada dataset ráster.

nhunsaker
fuente