2016-08-17 2 views
2

En essayant de faire un peu de filtrage d'image de base. J'ai inclus un extrait verbatim du livre de recettes rasterio (j'ai supprimé .astype() de la sortie du filtre médian). Le problème est que mes rasters d'entrée et de sortie devraient avoir la même étendue mais non. La transformation et affine sont différentes pour l'entrée et la sortie. Est-ce le comportement attendu? Ai-je besoin de faire quelque chose à l'affine et de le transformer pour que la sortie soit la même que l'entrée?rasterio transformer et affiner

Python 2.7.11 | Anaconda 4.0.0 (64 bits) | (Valeur par défaut 16 Fév 2016 09:58:36) [MSC de 64 bits (la AMD64)] sur Win32

rasterio == 0.36.0

import rasterio 
from scipy.signal import medfilt 

path = "map.tif" 
output = "map2.tif" 

with rasterio.open(path) as src: 
    array = src.read() 
    profile = src.profile 

# apply a 5x5 median filter to each band 
filtered = medfilt(array, (1, 5, 5)) 

# Write to tif, using the same profile as the source 
with rasterio.open(output, 'w', **profile) as dst: 
    dst.write(filtered) 

    print profile 
    print dst.profile 

>>> {'count': 1, 'crs': CRS({'init': u'epsg:3857'}), 'interleave': 'band', 'dtype': 'float64', 'affine': Affine(100.0, 0.0, -13250000.0, 0.0, 100.0, 3980000.0), 'driver': u'GTiff', 'transform': (-13250000.0, 100.0, 0.0, 3980000.0, 0.0, 100.0), 'height': 1700, 'width': 1700, 'tiled': False, 'nodata': None} 
>>> {'count': 1, 'crs': CRS({'init': u'epsg:3857'}), u'interleave': 'band', 'dtype': 'float64', 'affine': Affine(-13250000.0, 100.0, 0.0, 3980000.0, 0.0, 100.0), 'driver': u'GTiff', 'transform': (0.0, -13250000.0, 100.0, 100.0, 3980000.0, 0.0), 'height': 1700, 'width': 1700, u'tiled': False, 'nodata': None} 

Répondre

0

Les rasterio documents comprennent un history affine/transform usage que vous pouvez trouver utile. J'avais l'habitude d'avoir quelques lignes comme suit pour gérer ceci:

out_profile = src.profile.copy() 
out_affine = out_profile.pop("affine") 
out_profile["transform"] = out_affine 

# then, write the output raster 

with rasterio.open(output, 'w', **out_profile) as dst: 
    dst.write(filtered) 

Je pense que c'est ce qui est nécessaire ici.