改变HSI的空间分辨率

—功能:将30×30的空间分辨率变为60×60

import os
import numpy as np
import torch
from PIL import Image
from osgeo import gdal
from torch import nn
import torch.nn.functional as F

def fenbian(x,k):
    img=[]
    for i in range(0,x.shape[0]):
        a=x[i,:,:]
        a=a[np.newaxis,np.newaxis,:]
        a=torch.tensor(a)
        kernel =np.ones((k,k))
        kernel=kernel[np.newaxis,np.newaxis,:]
        kernel=torch.from_numpy(kernel)/1.0
        y = F.conv2d(input=a,weight=kernel,stride=k)
        y=y.numpy()#转array
        y=np.squeeze(y)
        img.append(y)#加入img
        print('第{}个通道正在处理'.format(i+1))
    img = np.array(img)
    return img

if __name__ == '__main__':
    k=2
    srcpath = r'D:\learn_pytorch\ZY_2_30'    #chw
    dstpath = r'D:\learn_pytorch\ZY_2_60'
    img = gdal.Open(srcpath)           #img为Dataset
    data = img.ReadAsArray().astype(np.float64)    #此时data(array):,chw   按块读取栅格
    ret =fenbian(data,k)           #ret(array):
    print(ret.shape)
    driver = gdal.GetDriverByName('GTiff')       #创建空文件,并确定开辟多大内存;每个像素都有一个对应的值,这个值的类型用数据类型指定。这里的数据类型是gdal数据类型
    dst = driver.Create(dstpath, ret.shape[2], ret.shape[1], ret.shape[0], img.GetRasterBand(1).DataType,options=["INTERLEAVE=BAND"])
    #文件路径,列,行,波段数,数据类型,以bsq存储。要是以BIP存储则将BAND改为PIXEL
    for i in range(ret.shape[0]):
        dst.GetRasterBand(i+1).WriteArray(ret[i])
    dst = None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值