Tornar vários rasters mais uniformes

10

Importei alguns rasters que deveriam estar continuamente conectados, mas eles criaram algum tipo de grade limitada entre eles. Eu posso assumir que isso é uma questão de calibração entre os rasters individuais, mas não tenho certeza de como executá-lo de maneira a dados.

Alguém já experimentou algo assim antes e talvez conheça uma possível solução para que o conjunto de todos os rasters seja mais suave.

Supõe-se que todos estes estejam geograficamente conectados. Daí o problema das 'fronteiras' da praça.

Estou usando o QGIS no Windows.

insira a descrição da imagem aqui

MichaelR
fonte

Respostas:

11
  1. Você pode tentar mesclar os rasters em um:

    • Na barra de ferramentas:

      Raster> Diversos> Mesclar

    • Na caixa de ferramentas de processamento:

      GDAL / OGR> Diversos> Mesclar

    • No console da GDAL:

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

  1. Ou crie uma varredura virtual:

    • Raster> Diversos> Criar Virtual Raster
Joseph
fonte
1
+1 para criar o Virtual Raster. Isso criará um arquivo muito pequeno que funcionará como uma única imagem mesclada.
Alexandre Neto
@AlexandreNeto - Obrigado, tenho notado que a diferença no tamanho do arquivo em comparação com as varreduras separadas podem ser bastante surpreendentes =)
Joseph
Ao escolher a mesclagem ou compilação da varredura virtual, recebo um erro ao proclamar que o processo não pôde ser iniciado. O porgram não existe ou eu não tenho os direitos corretos. Portanto, consegui fazer uma mesclagem ou construção carregando todas as rasters no menu Camadas e escolhendo a partir daí. Linha de comando Gdal_merge.bat pode ser muito longo, pelo menos inputx.tif pode suspender a operação em 1000 x (diferentes miras)
MichaelR
@ Michael - Erro Estranho, mas feliz que você encontrou outra maneira de obter os resultados :)
Joseph
1
@ Michael Na linha de comando, você pode alimentar gdalbuildvrtcom o nome de arquivo de um arquivo que contém uma lista de arquivos, e fornecer vários arquivos de imagem como argumentos: gdalbuildvrt -input_file_list my_liste.txt doq_index.vrt
Detlev
3

O motivo dessa aparência aparente é que cada imagem é desenhada com uma escala de cinza esticada de imagem min para imagem max e NÃO entre a min / max global. Quando você mescla todas as imagens em uma, bem, há apenas um mínimo / máximo. O mesmo vale para o VRT, já que o VRT trata todas as imagens como uma (quando você dá uma olhada no arquivo VRT, verá as estatísticas comuns).

Quando ambos, mesclagem e VRT, não são uma opção, o script a seguir pode ajudar.

No primeiro loop, eu itero sobre todas as camadas, escolhendo os rasters e obtendo uma estimativa do intervalo mínimo / máximo. É assim que o próprio QGIS funciona. A partir desses valores mínimo / máximo, calculo o valor mínimo / máximo global

No segundo loop, os renderizadores para todas as camadas de varredura são configurados de modo que a escala de cinza seja esticada no intervalo global mínimo / máximo.

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()
Detlev
fonte