Зробіть кілька растр більш рівномірними


10

Я імпортував деякі растри, які повинні постійно підключатися, але натомість вони створюють якусь обмежену сітку між ними. Я можу припустити, що це питання калібрування між окремими растрами, але я не впевнений, як це виконати методом даних.

Хтось раніше переживав щось подібне і, можливо, знав про можливе рішення, щоб загальна кількість всіх растерів була більш гладкою.

Все це повинно бути географічно пов'язане. Звідси біда «кордонів» площі.

Я використовую QGIS на windows.

введіть тут опис зображення

Відповіді:


11
  1. Ви можете спробувати об'єднати растри в одну:

    • На панелі інструментів:

      Растр> Різне> Злиття

    • З Панелі інструментів обробки:

      GDAL / OGR> Різне> Злиття

    • З консолі GDAL:

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

  1. Або створити віртуальний растр:

    • Растрові> Різне> Побудувати віртуальний растр

1
+1 для побудови віртуального растра. Це створить дуже маленький файл, який буде діяти як одне об'єднане зображення.
Олександр Нето

@AlexandreNeto - Спасибі, я помітив, що різниця у розмірі файлу порівняно з окремими растрами може бути досить приголомшливою =)
Йосип

Вибираючи злиття або побудову віртуального растру, я отримую помилку, заявляючи, що процес не може початися. Порграми не існує, або я не маю потрібних прав. Тому мені вдалося зробити об'єднання або збірку, завантаживши всі растри в меню "Шари" і вибравши звідти. Командний рядок Gdal_merge.bat може бути занадто довгим, але принаймні inputx.tif може призупинити операцію на 1000 x (різні растри)
MichaelR

@Michael - Дивна помилка, але радий, що ти знайшов інший спосіб отримати свої результати :)
Джозеф

1
@Michael У командному рядку ви можете подавати gdalbuildvrtназву файлу, що містить список файлів, а не надавати багато файлів зображень як аргументів: gdalbuildvrt -input_file_list my_liste.txt doq_index.vrt
Детлев

3

Причина такого мозаїчного вигляду полягає в тому, що кожне окреме зображення намальовано сірою шкалою, розтягнутою від зображення хв до зображення макс., А НЕ по всьому світу хв / макс. Коли ви об’єднуєте всі зображення в одне, ну, є лише один хв / макс. Те саме стосується VRT, оскільки VRT розглядає всі зображення як одне ціле (коли ви подивитесь на файл VRT, ви побачите загальну статистику).

Коли обидва, merge та VRT, не є варіантом, наступний сценарій може допомогти.

У першому циклі я перебираю всі шари, підбираючи растри і отримую оцінку їхнього інтервалу min / max. Це так, як працює сама QGIS. З цих значень min / max я обчислюю глобальний 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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.