Rasterio变换和仿射变换

4
我正在尝试进行基本的图像过滤。我从rasterio cookbook中抽出了一个片段(我从中删除了.median filter输出中的.astype())。问题是我的输入和输出光栅应该具有相同的范围,但事实并非如此。输入和输出的变换和仿射变换是不同的。这是预期的行为吗?我需要对仿射变换和变换做些什么才能使输出与输入相同吗?
Python 2.7.11 |Anaconda 4.0.0 (64-bit)| (default, Feb 16 2016, 09:58:36) [MSC v.1500 64 bit (AMD64)] on 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}
1个回答

1
Rasterio文档中包含一个关于历史仿射/变换用法的部分,您可能会发现它很有用。我曾经使用以下几行代码来处理这个问题:
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)

我认为这是必要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接