raster = np.zeros((bands, rows, cols)) for i in range(bands): band = dataset.GetRasterBand(i+1) raster[i,:,:] = band.ReadAsArray()
时间: 2024-06-05 09:11:07 浏览: 28
这段代码是用来读取一个多波段遥感影像的数据,并将其存储在一个三维的 numpy 数组中。其中,`dataset` 是一个 GDAL 数据集对象,`bands` 是波段数,`rows` 和 `cols` 分别是影像的行数和列数。首先,我们创建一个形状为 `(bands, rows, cols)` 的全 0 数组 `raster`。然后,对于每个波段,我们获取其对应的 GDAL 波段对象 `band`,并使用 `ReadAsArray()` 方法读取其数据,将其存储在 `raster` 数组的对应位置。最终,`raster` 数组就包含了整个遥感影像的数据。
相关问题
# # 全区预测 block_size = 500 # 设置块大小 raster = path + '/bands/ccrop21.tif' output_fname = path + 'predict/RFpredict2021.tif' # 打开 TIFF 文件 raster_dataset = gdal.Open(raster, gdal.GA_ReadOnly) geo_transform = raster_dataset.GetGeoTransform() proj = raster_dataset.GetProjectionRef() # 获取 TIFF 文件的行列数和波段数 rows = raster_dataset.RasterYSize cols = raster_dataset.RasterXSize n_bands = raster_dataset.RasterCount # 创建输出文件 driver = gdal.GetDriverByName('GTiff') out_dataset = driver.Create(output_fname, cols, rows, 1, gdal.GDT_Float32) out_dataset.SetGeoTransform(geo_transform) out_dataset.SetProjection(proj) # 逐块处理数据 for i in range(0, rows, block_size): for j in range(0, cols, block_size): # 计算当前块的行列范围 i_end = min(i + block_size, rows) j_end = min(j + block_size, cols) i_size = i_end - i j_size = j_end - j # 逐块读取数据 bands_data = [] for b in range(1, n_bands + 1): band = raster_dataset.GetRasterBand(b) data = band.ReadAsArray(j, i, j_size, i_size) bands_data.append(data) # 将数据堆叠为一个三维数组 bands_data = np.dstack(bands_data) # 将数据重塑为二维数组 n_samples = i_size * j_size flat_pixels = bands_data.reshape((n_samples, n_bands)) # 预测并将结果写入输出文件 result = RFmodel.predict(flat_pixels) ypredict = result.reshape((i_size, j_size)) out_dataset.GetRasterBand(1).WriteArray(ypredict, j, i) out_dataset.FlushCache() del out_dataset
这段代码是使用随机森林模型对一个TIFF文件进行预测,并将结果写入另一个TIFF文件中。具体来说,它首先打开一个TIFF文件,并获取其行列数和波段数,然后创建一个输出TIFF文件,设置其地理变换和投影信息,并逐块读取数据。对于每个块,它先将各波段数据堆叠为一个三维数组,然后将其重塑为一个二维数组,以便于输入随机森林模型进行预测。最后,将预测结果写入输出文件中。
from tifffile import imread as tfread import numpy as np from Raserize import arr2raster from osgeo import gdal fcn = r'E:\姜璐\再修改复现\轮种\G边缘约束\2\A重采样\xinmin_Resample.tif' # 加入高分分割后的重采样结果 fcn = tfread(fcn) obj = r'E:\姜璐\农作物提取\中期修改代码复现\F高分分割结果\有坐标\新民分割.tif' # 高分辨率的分割结果影像 obj = tfread(obj) num_bands = 8 # 分类数(需算上背景类0) num_obj = obj.max() + 1 # 分割对象数 v = np.zeros((num_obj, num_bands)) # 建一个行为264500,列为8的全0数组 res = np.zeros_like(fcn) # 建一个和fcn同样类型和形状的全0数组 h, w = obj.shape[0], obj.shape[1] # 获取高分分割的行为27674,列为43894 for obj_row, fcn_row in zip(obj, fcn): # 遍历二维数组 for obj_pix, fcn_pix in zip(obj_row, fcn_row): # v[obj_pix, fcn_pix] += 1 # 取obj和fcn的像素值 v = np.argmax(v[:, 1:], axis=-1) + 1 # axis=-1,返回每行的索引最大值,v[:, 1:]取v数组中,行的全部元素,列除第一列的全部元素 for i in range(h): for j in range(w): res[i, j] = v[obj[i, j]] im_path = r'E:\姜璐\再修改复现\轮种\G边缘约束\A重采样\xinmin_yueshu.tif' # 提供坐标投影信息,加入高分分割后的重采样结果 dataset = gdal.Open(im_path) prj = dataset.GetProjection() trans = dataset.GetGeoTransform() save_path = r'E:\姜璐\再修改复现\测试\xinmin_jieguo.tif' # 保存位置 arr2raster(res, save_path, is_label=True, prj=prj, trans=trans, color=True)每行代码意思
这段代码是在Python中使用tifffile库中的imread函数,将读取的图像导入为numpy的多维数组。然后使用Raserize库中的arr2raster函数将数组转换为光栅图像。最后使用gdal库中的函数读取tif文件。其中,变量fcn指向一个tif文件的路径。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)