python遥感影像最大值合成

前言

由于数据处理的区域受云的影响较大,经过去云操作后出现大量0值,故想用该影像周围几天的像元值来填补有云影像



代码

一、引入库?

from osgeo import gdal
import numpy as np
import os

二、完整代码

1.函数

def write_tif(data_raw,targetdata,output_name):
    driver = gdal.GetDriverByName('GTiff')
    out_file = driver.Create(output_name,targetdata.shape[1],targetdata.shape[0],1,6)
    out_file.SetProjection(data_raw.GetProjection())
    out_file.SetGeoTransform(data_raw.GetGeoTransform())
    out_file.GetRasterBand(1).WriteArray(targetdata)
    del out_file

2.主体

input_file = 'G:/Test/'
output_file = 'G:/Test/Test_mvc/'
prefix = '.tif'

if not os.path.exists(output_file):
    os.mkdir(output_file)

file_all = os.listdir(input_file)
file_num = len(file_all)

for i in range(file_num):
    if file_all[i].endswith(prefix):
        data_box = ''
        interpol_data = gdal.Open(input_file + file_all[i])
        interpoled_data = interpol_data.ReadAsArray()
        output_name = output_file + os.path.splitext(file_all[i])[0] + '_mvc.tif'
        if i == 0:
            data_box = file_all[i:i+2]
            for j in range(len(data_box)):
                if file_all[i] == data_box[j]:
                    continue
                else:
                    data = gdal.Open(input_file + data_box[j])
                    data_array = data.ReadAsArray()
                    interpoled_data = (data_array >= interpoled_data)*data_array + (interpoled_data > data_array)*interpoled_data
            write_tif(data,interpoled_data,output_name)
        elif i == 1:
            data_box = file_all[i-1:i+2]
            for j in range(len(data_box)):
                if file_all[i] == data_box[j]:
                    continue
                else:
                    data = gdal.Open(input_file + data_box[j])
                    data_array = data.ReadAsArray()
                    interpoled_data = (data_array >= interpoled_data)*data_array + (interpoled_data > data_array)*interpoled_data
            write_tif(data,interpoled_data,output_name)
        elif i == file_num-1:
            data_box = file_all[i-2:i+1]
            for j in range(len(data_box)):
                if file_all[i] == data_box[j]:
                    continue
                else:
                    data = gdal.Open(input_file + data_box[j])
                    data_array = data.ReadAsArray()
                    interpoled_data = (data_array >= interpoled_data)*data_array + (interpoled_data > data_array)*interpoled_data
            write_tif(data,interpoled_data,output_name)
        elif i == file_num:
            data_box = file_all[i-2:i+1]
            for j in range(len(data_box)):
                if file_all[i] == data_box[j]:
                    continue
                else:
                    data = gdal.Open(input_file + data_box[j])
                    data_array = data.ReadAsArray()
                    interpoled_data = (data_array >= interpoled_data)*data_array + (interpoled_data > data_array)*interpoled_data
            write_tif(data,interpoled_data,output_name)
        else:
            data_box = file_all[i-2:i+2]
            for j in range(len(data_box)):
                if file_all[i] == data_box[j]:
                    continue
                else:
                    data = gdal.Open(input_file + data_box[j])
                    data_array = data.ReadAsArray()
                    interpoled_data = (data_array >= interpoled_data)*data_array + (interpoled_data > data_array)*interpoled_data
            write_tif(data,interpoled_data,output_name)

结果对比

此处以处理前后的同一天影像为例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

以上就是以近5天为窗口对整个文件夹的影像进行滑动最大值合成的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值