La razón de esto mosaiked aspecto es que cada imagen es dibujada con escala de grises que se extendía desde la imagen min máximo de la imagen, y NO a través de la global min/max. Al combinar todas las imágenes en una sola, bueno, no es sólo uno de los min/max. Mismo es cierto para VRT, desde VRT trata a todas las imágenes como una sola (cuando usted tiene una mirada en la VRT archivo, verá el común de las estadísticas).
Cuando ambos, de mezcla y de VRT, no son una opción en la siguiente secuencia de comandos podría ayudar.
En el primer bucle que itera sobre todas las capas, recogiendo los rásteres y obtener una estimación de la min/max intervalo. Esta es la manera como QGIS propio trabajo. A partir de estos valores min/max para calcular el mundial de min/max
En el segundo bucle de la representadores para todas las capas ráster está configurada de forma tal que la escala de grises se extendió a través del intervalo global de min/max.
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()