关于葵花卫星NC文件的读取
其实很早就想写一下,因为去年的时候自己也是慢慢研究。其实这东西很简单,但是对于当时刚了解这玩意,网上也没找到,自己瞎搞了半天。现在共享一下,希望可以帮助刚刚了解的人。
先上代码,然后再解释。
首先贴上代码:
clc;
clear all;
ncFilePath ='NC_H08_20150707_0400_R21_FLDK.02401_02401.nc';
nc_name='20150707_0400'
% latitude = ncread(ncFilePath, 'latitude');
% longitude = ncread(ncFilePath, 'longitude');
% albedo_03 = ncread(ncFilePath, 'albedo_03'); albedo_03 = albedo_03';
% 读取文件各通道变量
latitude = ncread(ncFilePath, 'latitude');
longitude = ncread(ncFilePath, 'longitude');
albedo_01 = ncread(ncFilePath, 'albedo_01'); albedo_01 = albedo_01';
albedo_02 = ncread(ncFilePath, 'albedo_02'); albedo_02 = albedo_02';
albedo_03 = ncread(ncFilePath, 'albedo_03'); albedo_03 = albedo_03';
albedo_04 = ncread(ncFilePath, 'albedo_04'); albedo_04 = albedo_04';
albedo_05 = ncread(ncFilePath, 'albedo_05'); albedo_05 = albedo_05';
albedo_06 = ncread(ncFilePath, 'albedo_06'); albedo_06 = albedo_06';
tbb_07 = ncread(ncFilePath, 'tbb_07'); tbb_07 = tbb_07';
tbb_08 = ncread(ncFilePath, 'tbb_08'); tbb_08 = tbb_08';
tbb_09 = ncread(ncFilePath, 'tbb_09'); tbb_09 = tbb_09';
tbb_10 = ncread(ncFilePath, 'tbb_10'); tbb_10 = tbb_10';
tbb_11 = ncread(ncFilePath, 'tbb_11'); tbb_11 = tbb_11';
tbb_12 = ncread(ncFilePath, 'tbb_12'); tbb_12 = tbb_12';
tbb_13 = ncread(ncFilePath, 'tbb_13'); tbb_13 = tbb_13';
tbb_14 = ncread(ncFilePath, 'tbb_14'); tbb_14 = tbb_14';
tbb_15 = ncread(ncFilePath, 'tbb_15'); tbb_15 = tbb_15';
tbb_16 = ncread(ncFilePath, 'tbb_16'); tbb_16 = tbb_16';
a = 351; a1 = a + 511;
b = 731; b1 = b + 511;
latitude_part = latitude(a:a1);
longitude_part = longitude(b: b1);
albedo_01_part = albedo_01(a:a1, b: b1);
albedo_02_part = albedo_02(a:a1, b: b1);
albedo_03_part = albedo_03(a:a1, b: b1);
albedo_04_part = albedo_04(a:a1, b: b1);
albedo_05_part = albedo_05(a:a1, b: b1);
albedo_06_part = albedo_06(a:a1, b: b1);
tbb_07_part = tbb_07(a:a1, b: b1);
tbb_08_part = tbb_08(a:a1, b: b1);
tbb_09_part = tbb_09(a:a1, b: b1);
tbb_10_part = tbb_10(a:a1, b: b1);
tbb_11_part = tbb_11(a:a1, b: b1);
tbb_12_part = tbb_12(a:a1, b: b1);
tbb_13_part = tbb_13(a:a1, b: b1);
tbb_14_part = tbb_14(a:a1, b: b1);
tbb_15_part = tbb_15(a:a1, b: b1);
tbb_16_part = tbb_16(a:a1, b: b1);
SAZ = ncread(ncFilePath, 'SAZ'); % satellite zenith angle
SAA = ncread(ncFilePath, 'SAA'); % satellite azimuth angle
SOZ = ncread(ncFilePath, 'SOZ'); SOZ = SOZ'; % solar zenith angle
SOA = ncread(ncFilePath, 'SOA'); % solar azimuth angle
Hour = ncread(ncFilePath, 'Hour');
SOZ_part = SOZ(a: a1, b: b1);
tmp_SOZ = cosd(SOZ_part);
albedo_01_soz = albedo_01_part ;
albedo_02_soz = albedo_02_part ;
albedo_03_soz = albedo_03_part ;
albedo_04_soz = albedo_04_part ;
albedo_05_soz = albedo_05_part ;
albedo_06_soz = albedo_06_part ;
%1
min_01 = min(min(albedo_01_soz));
max_01 = max(max(albedo_01_soz));
X_01 = (albedo_01_soz - min_01);
max_X_01 = max(max(X_01));
X_01 = (X_01/max_X_01);
%2
min_02 = min(min(albedo_02_soz));
max_02 = max(max(albedo_02_soz));
X_02 = (albedo_02_soz - min_02);
max_X_02 = max(max(X_02));
X_02 = (X_02/max_X_02);
%3
min_03 = min(min(albedo_03_soz));
max_03 = max(max(albedo_03_soz));
X_03 = (albedo_03_soz - min_03);
max_X_03 = max(max(X_03));
X_03 = (X_03/max_X_03);
%4
min_04 = min(min(albedo_04_soz));
max_04 = max(max(albedo_04_soz));
X_04 = (albedo_04_soz - min_04);
max_X_04 = max(max(X_04));
X_04 = (X_04/max_X_04);
%5
min_05 = min(min(albedo_05_soz));
max_05 = max(max(albedo_05_soz));
X_05 = (albedo_05_soz - min_05);
max_X_05 = max(max(X_05));
X_05 = (X_05/max_X_05);
%6
min_06 = min(min(albedo_06_soz));
max_06 = max(max(albedo_06_soz));
X_06 = (albedo_06_soz - min_06);
max_X_06 = max(max(X_06));
X_06 = (X_06/max_X_06);
%7
min_07 = min(min(tbb_07_part));
max_07 = max(max(tbb_07_part));
X_07 = (tbb_07_part - min_07);
max_X_07 = max(max(X_07));
X_07 = (X_07/max_X_07);
%8
min_08 = min(min(tbb_08_part));
max_08 = max(max(tbb_08_part));
X_08 = (tbb_08_part - min_08);
max_X_08 = max(max(X_08));
X_08 = (X_08/max_X_08);
%9
min_09 = min(min(tbb_09_part));
max_09 = max(max(tbb_09_part));
X_09 = (tbb_09_part - min_09);
max_X_09 = max(max(X_09));
X_09 = (X_09/max_X_09);
%10
min_10 = min(min(tbb_10_part));
max_10 = max(max(tbb_10_part));
X_10 = (tbb_10_part - min_10);
max_X_10 = max(max(X_10));
X_10 = (X_10/max_X_10);
%11
min_11 = min(min(tbb_11_part));
max_11 = max(max(tbb_11_part));
X_11 = (tbb_11_part - min_11);
max_X_11 = max(max(X_11));
X_11 = (X_11/max_X_11);
%12
min_12 = min(min(tbb_12_part));
max_12 = max(max(tbb_12_part));
X_12 = (tbb_12_part - min_12);
max_X_12 = max(max(X_12));
X_12 = (X_12/max_X_12);
%13
min_13 = min(min(tbb_13_part));
max_13 = max(max(tbb_13_part));
X_13 = (tbb_13_part - min_13);
max_X_13 = max(max(X_13));
X_13 = (X_13/max_X_13);
%14
min_14 = min(min(tbb_14_part));
max_14 = max(max(tbb_14_part));
X_14 = (tbb_14_part - min_14);
max_X_14 = max(max(X_14));
X_14 = (X_14/max_X_14);
%15
min_15 = min(min(tbb_15_part));
max_15 = max(max(tbb_15_part));
X_15 = (tbb_15_part - min_15);
max_X_15 = max(max(X_15));
X_15 = (X_15/max_X_15);
%16
min_16 = min(min(tbb_16_part));
max_16 = max(max(tbb_16_part));
X_16 = (tbb_16_part - min_16);
max_X_16 = max(max(X_16));
X_16 = (X_16/max_X_16);
if ~exist('F:\csdn\Band1','dir')
mkdir('F:\csdn\Band1');
end
savepath_01= strcat('F:\csdn\Band1', '\', nc_name, '.png');
imwrite( albedo_01_part, savepath_01);
if ~exist('F:\csdn\Band2','dir')
mkdir('F:\csdn\Band2');
end
savepath_02= strcat('F:\csdn\Band2', '\', nc_name, '.png');
imwrite(albedo_02_part, savepath_02);
if ~exist('F:\csdn\Band3','dir')
mkdir('F:\csdn\Band3');
end
savepath_03= strcat('F:\csdn\Band3', '\', nc_name, '.png');
imwrite(albedo_03_part, savepath_03);
if ~exist('F:\csdn\Band4','dir')
mkdir('F:\csdn\Band4');
end
savepath_04= strcat('F:\csdn\Band4', '\', nc_name, '.png');
imwrite(albedo_04_part, savepath_04);
if ~exist('F:\csdn\Band5','dir')
mkdir('F:\csdn\Band5');
end
savepath_05= strcat('F:\csdn\Band5', '\', nc_name, '.png');
imwrite(albedo_05_part, savepath_05);
if ~exist('F:\csdn\Band6','dir')
mkdir('F:\csdn\Band6');
end
savepath_06= strcat('F:\csdn\Band6', '\', nc_name, '.png');
imwrite(albedo_06_part, savepath_06);
if ~exist('F:\csdn\Band7','dir')
mkdir('F:\csdn\Band7');
end
savepath_07= strcat('F:\csdn\Band7', '\', nc_name, '.png');
imwrite( X_07, savepath_07);
if ~exist('F:\csdn\Band8','dir')
mkdir('F:\csdn\Band8');
end
savepath_08= strcat('F:\csdn\Band8', '\', nc_name, '.png');
imwrite( X_08, savepath_08);
if ~exist('F:\csdn\Band9','dir')
mkdir('F:\csdn\Band9');
end
savepath_09= strcat('F:\csdn\Band9', '\', nc_name, '.png');
imwrite( X_09, savepath_09);
if ~exist('F:\csdn\Band10','dir')
mkdir('F:\csdn\Band10');
end
savepath_10= strcat('F:\csdn\Band10', '\', nc_name, '.png');
imwrite( X_10, savepath_10);
if ~exist('F:\csdn\Band11','dir')
mkdir('F:\csdn\Band11');
end
savepath_11= strcat('F:\csdn\Band11', '\', nc_name, '.png');
imwrite( X_11, savepath_11);
if ~exist('F:\csdn\Band12','dir')
mkdir('F:\csdn\Band12');
end
savepath_12= strcat('F:\csdn\Band12', '\', nc_name, '.png');
imwrite( X_12, savepath_12);
if ~exist('F:\csdn\Band13','dir')
mkdir('F:\csdn\Band13');
end
savepath_13= strcat('F:\csdn\Band13', '\', nc_name, '.png');
imwrite( X_13, savepath_13);
if ~exist('F:\csdn\Band14','dir')
mkdir('F:\csdn\Band14');
end
savepath_14= strcat('F:\csdn\Band14', '\', nc_name, '.png');
imwrite( X_14, savepath_14);
if ~exist('F:\csdn\Band15','dir')
mkdir('F:\csdn\Band15');
end
savepath_15= strcat('F:\csdn\Band15', '\', nc_name, '.png');
imwrite( X_15, savepath_15);
if ~exist('F:\csdn\Band16','dir')
mkdir('F:\csdn\Band16');
end
savepath_16= strcat('F:\csdn\Band16', '\', nc_name, '.png');
imwrite( X_16, savepath_16);
%--------------------你可以把它十六个通道保存在一个mat里,其实我们需要的还是它的原始数据------------------------------------------
% savepath_16= strcat('F:\测试', '\', nc_name, '.mat');
% save(savepath_16,'tbb_07_part','tbb_08_part','tbb_14_part','tbb_15_part');
代码解释:
这就是读取nc文件中的数据嘛,我所使用的是葵花十六个通道的NC文件,可以读取上述的属性。
这个是区域的选择,可以从读取的经度和纬度的矩阵里选取自己需要读取的经纬度的行列数。我是以512读取的。
变成图片嘛,自然需要归一化一下。十六个通道都归一化一下。
保存图片嘛,有十六个通道自然需要十六个文件夹,然后imwrite,写进去。
你如果想保存原来的数值,你就采用mat文件存储,因为有十六个通道,我就不一一写了。
以下是例子,你可以把16个通道都放一个mat里。
结果展示:
好了,到此结束。
其实有代码你们可以稍微看看运行一下就懂了。很简单,没有参考的话 自己真的是搞半天。