Stai creando lo shapefile che mostra le impronte dei raster?


33

Ho circa 1.000 immagini satellitari in formato tiff e voglio creare un file di forma che fungerà da indice per i raster. Questo è qualcosa di simile a un catalogo raster, ma non voglio creare un catalogo raster.

Alcuni ostacoli che posso prevedere, è che l'immagine è georefrangiata, quindi non ha una forma rettangolare (sto parlando dell'area dati).

Per chiarire, ho bisogno che il poligono copra solo i pixel diversi da zero (o non nodati) del raster e non l'intero raster rettangolare. La maggior parte delle risposte finora fornisce un poligono rettangolare, che copre i dati, nonché i pixel non dati.

La mia immagine Un'immagine satellitare di esempio


Risultato fornito dagli strumenti che ho esaminato (come catlog raster, vari arcscript, script Python personalizzati forniti in una delle risposte): Risultato


Risultato che voglio: inserisci qui la descrizione dell'immagine


4
Sembra che creare un catalogo raster, anche temporaneamente sarebbe una buona soluzione per creare impronte. È possibile creare un catalogo non gestito, che crea una tabella di riferimenti, ma lascia le immagini nella loro posizione sul server. È facile e relativamente veloce eseguire un'importazione in batch di raster in un catalogo. Una volta creato, è possibile esportare le impronte in una nuova featureclass ed eliminare il catalogo raster. Potrebbe essere veloce come altre opzioni.
Ottieni Spatial il

2
Il set di dati Mosaic produce anche l'impronta delle immagini.
Roy

il set di dati del mosaico è la strada da percorrere. Molto facile da realizzare
Brad Nesom,

Quindi nell'ultima immagine, i pixel sono fuori dal riquadro rosso NoData o 0? Se sono 0, ci sono pixel nell'area desiderata che hanno anche un valore 0?
Chad Cooper,

1
I pixel all'esterno del bordo rosso sono nodati; Tuttavia i miei dati multispettrali hanno 0,0,0 come valori RGB per le aree nodate. In entrambi i casi, non ci sono pixel con valore 0 all'interno dell'area richiesta.
Devdatta Tengshe

Risposte:


15

C'è un plugin in QGIS chiamato Image Boundary . E 'un ottimo strumento. All'interno di questo strumento c'è un'opzione per "Pixel validi" che, ad esempio, ometterà i bordi neri di un'immagine satellitare.


Questo plugin afferma di fare quello che volevo, ma non riesce su un'immagine che ho sperimentato. Proverò con i miei dati reali domani.
Devdatta Tengshe,

Ho scoperto che questo plugin funziona molto bene con i dati multispettrali, ma a volte dà risultati strani con immagini pancromatiche a banda singola.
Devdatta Tengshe,

2
Concordo sul fatto che QGIS Image Boundary funzioni al meglio, ma esiste uno strumento per farlo per i file vettoriali in cui non abbiamo bisogno del "riquadro di delimitazione" o "impronta" ma di un poligono che delinea i dati esistenti.
GeorgeC,

Gli strumenti di delimitazione delle immagini sono fantastici, tuttavia, il link fornito è 404. Credo che gli strumenti siano ancora disponibili se si consentono plug-in sperimentali nelle impostazioni del plug-in. Forse usi questo link ?: github.com/lmotta/imagefootprint_plugin
Aaron

Esiste una documentazione per l'utilizzo di Image Boundary?
Loonuh,

9

Il seguente codice prenderà un input raster, ne prenderà l'estensione e la inserirà in una poligonale poligonale:

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

Puoi eseguirlo nella finestra di ArcMap Python impostando in_rastere in questo fcmodo:

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

dove si r_extenttrova una poligonale esistente poligonale. Quindi copia il codice ed eseguilo. Capisco questo:

inserisci qui la descrizione dell'immagine


1
Ho usato il codice sopra per fare lo stesso per una cartella: gist.github.com/4162013
jeb

7

Puoi usare gdaltindex per questo: http://www.gdal.org/gdaltindex.html

Creerà comunque rettangoli (ad es. 4 + 1 punti) nello stesso sistema di riferimento delle immagini. Ma mi chiedo se questo sia davvero un problema: quanto sono grandi le tue immagini?


Il problema con gdaltindex è che crea un poligono rettangolare per ogni immagine. Sono interessato solo ai pixel con valore
diverso da

4

Ho provato lo strumento "Image Boundary" in QGIS ma non funziona con alcuni raster.

Un'altra opzione che ha funzionato per me è: - 1. Convertire l'input raster in un singolo numero digitale utilizzando l'utilità della riga di comando gdal_translate.

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

Questo creerà raster con valori di 1 ovunque inp.tif avesse valori diversi da zero.

  1. Quindi in ArcMap puoi usare lo strumento "raster to poligono" per ottenere il poligono (shapefile).

Il file di forma di output avrà confini non quadrilatero, con più vertici poligonali, seguendo il confine effettivo dell'immagine.


3

Se sei interessato a una soluzione con script, prova il comando gdal nearblack . È possibile utilizzare il flag -white per recuperare anche i dati delimitati da spazi bianchi. È possibile poligonizzare l'output per generare un'impronta non rettangolare dei dati raster.

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


0

Nell'analista 3D ArcGIS è presente uno strumento chiamato Raster Domain che crea un footprint poligonale o polilinea delle porzioni di dati di un set di dati raster e ignora le celle NoData. Ha funzionato alla grande per me.


1
Benvenuti nel nostro sito! Potresti spiegare in che modo la tua risposta differisce da quella di Tomek?
whuber

Il dominio raster ha funzionato per me - grazie per l'aiuto!
meryloo,

0

È possibile creare un catalogo raster con un riferimento spaziale assegnato, aggiungere il catalogo raster ad ArcMap e quindi "Esporta footprint". Ricorda che esiste la possibilità di creare un catalogo raster "UNMANAGED" in modo da non creare un duplicato di ciascun set di dati raster.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.