Rendi più uniformi diversi raster


10

Ho importato alcuni raster che dovrebbero essere collegati in modo continuo ma creano invece una sorta di griglia bordata tra di loro. Posso presumere che si tratti di una calibrazione tra i singoli raster, ma non sono sicuro di come eseguirlo in modo dati.

Qualcuno ha sperimentato qualcosa di simile prima e forse conosce una possibile soluzione in modo che il complesso di tutti i raster sia più regolare.

Tutti questi dovrebbero essere geograficamente connessi. Da qui il problema dei "bordi" della piazza.

Sto usando QGIS su Windows.

inserisci qui la descrizione dell'immagine

Risposte:


11
  1. Potresti provare a fondere i raster in uno:

    • Dalla barra degli strumenti:

      Raster> Varie> Unisci

    • Dalla casella degli strumenti di elaborazione:

      GDAL / OGR> Varie> Unisci

    • Dalla console GDAL:

      gdal_merge.py -o merged.tif input1.tif input2.tif
      

  1. O crea un raster virtuale:

    • Raster> Varie> Crea Virtual Raster

1
+1 per costruire Virtual Raster. Questo creerà un file molto piccolo che agirà come una singola immagine unita.
Alexandre Neto,

@AlexandreNeto - Grazie, ho notato che la differenza nella dimensione del file rispetto ai raster separati può essere abbastanza sconcertante =)
Joseph

Quando si sceglie l'unione o si crea un raster virtuale, viene visualizzato un errore che indica che il processo non è stato avviato. Il diagramma non esiste o non ho i diritti giusti. Pertanto sono riuscito a fare una fusione o costruzione caricando tutti i raster nel menu Livelli e scegliendo da lì. La riga di comando Gdal_merge.bat può essere troppo lunga, atleast inputx.tif può sospendere l'operazione a 1000 x (diversi raster)
MichaelR

@Michael - Errore strano ma felice di aver trovato un altro modo per ottenere i risultati :)
Joseph

1
@Michael Alla riga di comando puoi alimentare gdalbuildvrtil nome del file di un file contenente un elenco di file, piuttosto che fornire molti file di immagine come argomenti: gdalbuildvrt -input_file_list my_liste.txt doq_index.vrt
Detlev

3

La ragione di questo aspetto a mosaico è che ogni singola immagine è disegnata con una scala di grigi allungata dall'immagine min a immagine max, e NON attraverso il min / max globale. Quando unisci tutte le immagini in una, beh, c'è solo un min / max. Lo stesso vale per VRT, poiché VRT tratta tutte le immagini come una (quando dai un'occhiata al file VRT vedrai le statistiche comuni).

Quando entrambi, unisci e VRT, non sono un'opzione, il seguente script potrebbe essere d'aiuto.

Nel primo ciclo eseguo l'iterazione su tutti i livelli, selezionando i raster e ottenendo una stima del loro intervallo min / max. Questo è il modo in cui funziona QGIS stesso. Da questi valori min / max ho calcolato il min / max globale

Nel secondo ciclo i renderer per tutti i livelli raster sono configurati in modo tale che la scala dei grigi sia estesa nell'intervallo min / max globale.

gmin = 9999
gmax = -9999
layers = []
# loop over all layers, take rasters and estimate min, max values
for layer in iface.mapCanvas().layers():
    if isinstance(layer, QgsRasterLayer):
        # change percentages and sample size to increase or decrease accuracy
        min_max = layer.dataProvider().cumulativeCut(1, 0.02, 0.98, theSampleSize=250000)
        gmin = min(gmin, min_max[0])
        gmax = max(gmax, min_max[1])
        layers.append(layer)

# for all rasters create a single band gray scale renderer with 
# gray scale stretched across the interval [gmin..gmax]
for rasterlayer in layers:
    renderer = QgsSingleBandGrayRenderer(rasterlayer.dataProvider(), 1)
    # take the first band (0)
    ce = QgsContrastEnhancement(rasterlayer.dataProvider().dataType(0))
    ce.setContrastEnhancementAlgorithm(QgsContrastEnhancement.StretchToMinimumMaximum)
    ce.setMinimumValue(gmin)
    ce.setMaximumValue(gmax)
    renderer.setContrastEnhancement(ce)

    rasterlayer.setRenderer(renderer)

# refresh canvas to show changes
iface.mapCanvas().refresh()
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.