未经博主同意,请勿转发,保护知识产权
对于多波段的遥感影像读取,我们可以读进来多个单波段然后合成一个矩阵,或者通过tiff格式读取。这个问题昨天困扰我很久,因为读进来的tiff都变成了三个波段,我等菜鸡也不知道为什么,但今天半夜醒来,突然就大彻大悟。还顿悟了三种方法,总有一种适合你。
理论:以Landsat8为例,我们下载后的影像会有11个单波段影像。
那我们就可以用MATLAB挨着读取,然后放在一块组成一个新矩阵。
代码如下:
%先读取第一个波段
B1 = imread('LC08_L1TP_122044_20150103_20170415_01_T1_B1.TIF');
B2 = imread('LC08_L1TP_122044_20150103_20170415_01_T1_B2.TIF');
B3 = imread('LC08_L1TP_122044_20150103_20170415_01_T1_B3.TIF');
B4 = imread('LC08_L1TP_122044_20150103_20170415_01_T1_B4.TIF');
%看看每个波段有多少行多少列,申请内存空间
[M,N] = size(B1);
A = zeros(M,N,4);
%按照顺序存储
A(:,:,1) = B1;
A(:,:,2) = B2;
A(:,:,3) = B3;
A(:,:,4) = B4;
%读取之前,最好裁剪出来需要的研究区域,不然真的好卡
首先要在ENVI Classic中将影像转化为tiff格式。用经典版本,不要用ENVI版本,我不知道为什么,用ENVI转换过来的tiff只有三个波段。但是用envi classic转换过来的就有影像全部的波段。
转换的方式为:
将导入的影像,file->save as -> tiff
I = imread('data3.tif')
这个比较麻烦,但确实是可行的。此处参考帮助文档提供的实例
Setup initial parameters for a data set.
rows=3; cols=3; bands=5;
filename = tempname;
Define the data set.
fid = fopen(filename, 'w', 'ieee-le');
fwrite(fid, 1:rows*cols*bands, 'double');
fclose(fid);
Read every other band of the data using the Band-Sequential format.
im1 = multibandread(filename, [rows cols bands], ...
'double', 0, 'bsq', 'ieee-le', ...
{'Band', 'Range', [1 2 bands]} )
Read the first two rows and columns of data using Band-Interleaved-by-Pixel format.
im2 = multibandread(filename, [rows cols bands], ...
'double', 0, 'bip', 'ieee-le', ...
{'Row', 'Range', [1 2]}, ...
{'Column', 'Range', [1 2]} )
Read the data using Band-Interleaved-by-Line format.
im3 = multibandread(filename, [rows cols bands], ...
'double', 0, 'bil', 'ieee-le')
Delete the file created in this example.
delete(filename);
作为一名混日子还想生存的fake giser,我准备后期更新一些ENVI处理遥感影像的全部流程、MATLAB处理遥感影像,ArcGIS操作和python爬取的相关总结。写下来,总是能让人印象深刻,也希望对你有帮助。