Ресамплинг изображения rasterio/gdal, Python

Как я могу передискретизировать один канал GeoTIFF с помощью билинейной интерполяции?

import os

import rasterio
from rasterio.enums import Resampling
from rasterio.plot import show,show_hist
import numpy as np

if __name__ == "__main__":
    

    input_Dir = 'sample.tif'
    #src = rasterio.open(input_Dir) 
    #show(src,cmap="magma")

    upscale_factor = 2

    with rasterio.open(input_Dir) as dataset:
        
        # resample data to target shape
        data = dataset.read(
            out_shape=(
                dataset.count,
                int(dataset.height * upscale_factor),
                int(dataset.width * upscale_factor)
            ),
            resampling=Resampling.bilinear
        )

        # scale image transform
        transform = dataset.transform * dataset.transform.scale(
            (dataset.width / data.shape[-1]),
            (dataset.height / data.shape[-2])
        )
        show(dataset,cmap="magma",transform=transform)

Я пробовал следующий код, и мой вывод выглядит следующим образом:

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

Я пытаюсь добиться следующего результата:

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


person azis511    schedule 20.07.2020    source источник
comment
если вам не нужно сохранять преобразованный tif, matplotlib сделает эту интерполяцию за вас matplotlib.org/3.1.1/gallery/images_contours_and_fields/   -  person Paul H    schedule 20.07.2020
comment
но вы не показываете свой передискретизированный data. вы показываете оригинал dataset   -  person Paul H    schedule 20.07.2020
comment
мне придется создать новый растр? потому что просто передать переменную данных в методе show не получится.   -  person azis511    schedule 20.07.2020
comment
если вы используете matplotlib напрямую, нет, вам не нужно будет создавать новый tiff, как я уже сказал   -  person Paul H    schedule 20.07.2020
comment
Спасибо. Это сработало   -  person azis511    schedule 21.07.2020


Ответы (1)


Одним из вариантов было бы использовать привязки Python GDAL. Затем вы можете выполнить повторную выборку в памяти (или вы можете сохранить изображение, если хотите). Предполагая, что старое разрешение растра было 0,25x0,25, а вы передискретизируете до 0,10x0,10:

from osgeo import gdal

input_Dir = 'sample.tif'

ds = gdal.Translate('', input_Dir, xres=0.1, yres=0.1, resampleAlg="bilinear", format='vrt')

Если вы хотите сохранить изображение, укажите выходной путь к файлу вместо пустой строки в качестве первого аргумента и измените формат на «tif»!

person JWB    schedule 22.07.2020