问题背景
最近基于Matlab处理遥感数据时发现,遥感数据往往很大,直接基于matlab的geotiffread函数读取时,会将整景影像全部读取进内存中,消耗的时间较长,如果遥感数据过大,还会存在内存不足而读取失败的情况。因此,我打算写一个基于给的的行列号范围切片读取遥感影像的函数以解决这个问题。
function [inputRaster,R,info] = readTiff(inputRasterPath,rows,cols)
% readTiff 基于给定的行列号范围读取遥感影像
% inputRasterPath: 输入的遥感影像名称;
% rows:需要读取的遥感影像行号范围,如[1,100],读取第1到第100行;
% cols:需要读取的遥感影像行号范围,如[1,100],读取第1到第100列;
% 示例:inputRasterPath = ',/test.tif';
% rows = [100,1000];
% cols = [100,1000];
% [raster,R,info]=readTiff(inputRasterPath,rows,cols);
% 获取原始遥感数据投影等信息
info = geotiffinfo(inputRasterPath);
% 判断给定的行列号上下限是否超出影像实际范围
if rows(1)>info.Height
rows = [1,info.Height];
disp('行号超出范围,读取原始影像全部行');
elseif rows(2)>info.Height
rows = [rows(1),info.Height];
end
if cols(1)>info.Width
cols = [1,info.Widt