Matlab 读取欧空局*.N1卫星遥感图像
程序员文章站
2024-03-14 22:00:17
...
卫星遥感图像往往具有复杂的数据格式,其文件当中既包含了字符串,又包含了图像信息,如果采用直接打开文件的方式,很可能读取到的都是乱码,因此要分步读取文件内容,并对数据进行加工处理。
作者目前了解到遥感数据根据数据的处理程度分为了L0,L1,L2,L3等级别,等级越高的数据处理程度越强,越容易直接读取。(L0级数据就是卫星得到的原始遥感数据)。这里以欧空局L1级IMP.N1数据为例来展示读取遥感数据的步骤,这个步骤对于读取其他复杂文件同样适用。
首先我们需要从网站上的文件描述当中找到文件的头文件所占字节数,及编码类型。表格中包含了文件各部分内容,点进去后就是各部分内容编码格式及所占空间大小。
最终形成代码如下(这里我仅提取了一些对我有用的信息,还有很多数据可以自行提取):
%% Code by JN_Cui
% 2020/10/19
clear;clc;
fid = fopen([filepath,filename]);
data = fread(fid,'uint8');
Main_Product_Header = (char(Data(1:7346)))';
Time1 = Main_Product_Header(1383:1383+26);
Date = time_2_date(Time1);
Time2 = Main_Product_Header(1428:1428+26);
Time_interval = Main_Product_Header(2192:2182+23);
Lat1 = str2num(Main_Product_Header(1473:1482))*10^-6;
Lat2 = str2num(Main_Product_Header(1547:1556))*10^-6;
Lat3 = str2num(Main_Product_Header(1620:1629))*10^-6;
Lat4 = str2num(Main_Product_Header(1693:1702))*10^-6;
Lat5 = str2num(Main_Product_Header(1765:1774))*10^-6;
Lat6 = str2num(Main_Product_Header(1836:1845))*10^-6;
Lon1 = str2num(Main_Product_Header(1511:1520))*10^-6;
Lon2 = str2num(Main_Product_Header(1584:1593))*10^-6;
Lon3 = str2num(Main_Product_Header(1657:1666))*10^-6;
Lon4 = str2num(Main_Product_Header(1730:1739))*10^-6;
Lon5 = str2num(Main_Product_Header(1801:1810))*10^-6;
Lon6 = str2num(Main_Product_Header(1872:1881))*10^-6;
Line_num = str2num(Main_Product_Header(5321:5324));
Figure_number = str2num(Main_Product_Header(5341:5345));
I2 = reshape(Data(end-Line_num*Figure_number+1:end),Figure_number,Line_num);
Image_1 = mat2gray(I2(1:2:end,:));
Image_2 = (I2(2:2:end,:));
Image = (Image_1(1:floor(Figure_number/2),:)+Image_2)/2;
Image = medfilt2(Image,[9 9]);
GL = mean(mean(Image(3000:6000,3000:6000)));
Image = Image/GL*0.3;
imshow(Image')
上一篇: Leetcode学习初篇——两数相加
下一篇: Leetcode初学——搜索二维矩阵