6个波段的landsat数据怎么在Matlab里叠加成12个波段

引言

很久没用过matlab,不记得了获取矩阵的大小的函数、不记得矩阵的下标索引操作,一些语法都忘记一干二净。但是要记住解决问题的大概思路,换个语言实现也是可以的,过程中遇到问题就去搜索。微信截图_20230210145228

回到这个这篇文章的主题,6个波段的landsat数据怎么在Matlab里叠加成12个波段,是一个网友向我咨询,我给出了大概的思路。

微信截图_20230210152449

试验

由于没有landsat 8影像,这里暂用一张单波段的影像作为示例。

具体代码如下:

clc,clear;
filepath1 = 'D:\hh1.tif'
img_1 = imread(filepath1);

img_2 = img_1;  % 没有第二张影像,使用第一张影像的复制
[row, col, bands] = size(img_1); % 获取数组维度信息
new_bands = bands*2; % 新的影像的波段是原来的两倍
img_3 = zeros([row, col, new_bands]); % 创建新的数组
img_3(:,:,1:bands) = img_1;  % 前一半放第一张影像
img_3(:,:,bands+1:end) = img_2; % 后一半放第二张影像


img_8 = uint8(img_3);  % 数值转换,不一定用得上,看有些数据是8bit 还是10bit\12bit\14bit16bit
% 保存为tif图像
t = Tiff('imageIndiaP.tif','w');
% 影像信息
tagstruct.ImageLength = size(img_8,1); 
tagstruct.ImageWidth = size(img_8,2);  

% 颜色空间解释方式
tagstruct.Photometric = 1;

% 每个像素的数值位数,这里转换为unit8,所以为8位
tagstruct.BitsPerSample = 8;
% 每个像素的波段个数,一般图像为1或3,但是对于遥感影像存在多个波段所以常常大于3
tagstruct.SamplesPerPixel = new_bands;
tagstruct.RowsPerStrip = 16;
tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
% 表示生成影像的软件
tagstruct.Software = 'MATLAB'; 
% 表示对数据类型的解释
tagstruct.SampleFormat = 1;
% 设置Tiff对象的tag
t.setTag(tagstruct);

% 以准备好头文件,开始写数据
t.write(img_8);
% 关闭影像
t.close;

小结

可以在matlab先慢慢入门,多去网上,特别是matlab官网查看别人的代码,多多学习。
在matlab这样读写遥感影像,有1个点值得注意:经纬度的信息如何保存。
俺一开始用matlab是处理NC之类的文件,这类文件存储经纬度不同于TIF文件。

到后续处理tif文件还是要转到使用GDAL的库,在遥感领域免不了使用GDAL