Python rasterio.merge遥感影像融合

本文介绍了如何在Python中利用rasterio的merge功能进行遥感影像融合,但发现其内置融合方式无法满足均值融合的需求。作者通过参考max融合的实现,自定义了一个平均值融合的函数,利用numpy的add和true_divide函数计算重叠区域的平均值,并确保处理nodata值。提供的代码示例展示了如何实现这一功能,同时分享了融合后的效果。
摘要由CSDN通过智能技术生成

最近在尝试用Python做遥感影像融合,用到了rasterio.merge.merge(简称merge)功能,可能还有gdal和arcpy,但是还没有用过。

问题:

merge虽然是非常好用的图像融合工具,但是它只提供四种内置融合方式,first,last,min和max,即

MERGE_METHODS = {
    'first': copy_first,
    'last': copy_last,
    'min': copy_min,
    'max': copy_max
}

因为我想用均值融合,所以不能满足需求。

解决方法:

以max最大值融合为例,

def copy_max(old_data, new_data, old_nodata, new_nodata, **kwargs):
	'''找到old_data和new_data重叠的部分'''
    mask = np.empty_like(old_data, dtype='bool')
    np.logical_or(old_nodata, new_nodata, out=mask)
    np.logical_not(mask, out=mask)
	'''对重叠部分计算最大值'''
    np.maximum(old_data, new_data, out=old_data, where=mask)
	'''将new_data有数据而old_data没有数据的像元,把new_data对应值复制到old_data'''
    np.logical_not(new_nodata, out=mask)
    np.logical_and(old_data, mask, out=mask)
    np.copyto(old_data, new_data, where=mask)

这里用到了np.maximum函数,使用方法可以参考https://numpy.org/doc/stable/reference/generated/numpy.maximum.html
仿照上面代码,改进的平均值融合为:

def copy_mean(merged_data, new_data, merged_mask, new_mask, **kwargs):
    mask = np.empty_like(merged_mask, dtype="bool")
    
    '''因为我的数据中同时存在0值和nodata,其实0也是nodata,因此这里把0也放到mask中,用不到可以删除'''
    mask_merged_zero = merged_data==0.0
    mask_new_zero = new_data==0.0
    np.logical_or(mask_new_zero, new_mask, out=new_mask) 
    np.logical_or(mask_merged_zero, merged_mask, out=merged_mask) 
    
    '''提取重叠区域'''
    np.logical_or(merged_mask, new_mask, out=mask)
    np.logical_not(mask, out=mask)
    
    '''求均值'''
    np.add(merged_data,new_data,out=merged_data,where=mask)
    np.true_divide(merged_data,2,out=merged_data,where=mask)
    
    np.logical_not(new_mask, out=mask)
    np.logical_and(merged_mask, mask, out=mask)
    np.copyto(merged_data, new_data, where=mask, casting="unsafe")

np.add和np.true_divide和np.maximum的用法类似,所以没有用np.mean或者np.average

rasterio.merge的用法可以参考
https://automating-gis-processes.github.io/CSC18/lessons/L6/raster-mosaic.html

如果有更好的方法欢迎分享~!

融合效果:
在这里插入图片描述

Python遥感融合是指使用Python编程语言进行遥感图像的波段合并。在这个过程中,可以使用GDAL库来完成多个波段(tif)的合并成一个tif文件,或者将一个多波段的tif文件拆分成单个的tif文件。这个过程可以参考一些博客文章,比如《Python遥感图像处理应用篇(二十):Python+GDAL 批量提取多波段图像为单波段图像》和《Python遥感图像处理应用篇(二十五):Python+GDAL 波段组合_python在遥感中的应用》\[1\]。 在Python中,可以使用merge函数来进行图像融合merge函数提供了四种内置的融合方式,包括'first'、'last'、'min'和'max'。其中,'max'表示使用最大值进行融合\[2\]。以'max'最大值融合为例,可以使用copy_max函数来实现。copy_max函数首先找到两个波段重叠的部分,然后计算重叠部分的最大值,并将新波段中有数据而旧波段中没有数据的像元进行复制\[3\]。 总结起来,Python遥感融合可以通过GDAL库来实现,可以参考相关的博客文章进行操作。在融合过程中,可以选择不同的融合方式,比如使用最大值进行融合。 #### 引用[.reference_title] - *1* [Python遥感开发之波段的合并和拆分](https://blog.csdn.net/qq_32306361/article/details/130034901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python rasterio.merge遥感影像融合](https://blog.csdn.net/weixin_42915923/article/details/122173517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值