—功能:将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