数据
SesWifs数据、MODIS数据
下载网址http://oceandata.sci.gsfc.nasa.gov/SeaWiFS/
本次示例采用的全球叶绿素-a数据
软件
Matlab、SeaDas.、ArcGis
第一种方法
第一步
通过ncdisp看到里面存放叶绿素a数据的变量为chlor_a;
第二步:多种方法:
fname = 'G:\影像\<a href="https://www.ixxin.cn/tag/seawifs/" title="查看更多关于seawifs的文章" target="_blank">seawifs</a>\year_chl_a\2010.nc'; vardata = ncread(fname,'chlor_a');%第一种函数 %vardata = h5read(fname,'/chlor_a'); %第二种函数 I = vardata(:, end:-1:1);%左右翻转 I2=imrotate(I,90,'bilinear');%逆时针旋转90° figure imagesc(I2); colorbar%色度表 caxis([-0.5,0.5]);%设置颜色显示范围
11.24号第一种方法更新
clear;clc; scrsz = get(0,'ScreenSize'); % 是为了获得屏幕大小,Screensize是一个4元素向量[left,bottom, width, height] set(gcf,'Position',scrsz); % 用获得的screensize向量设置figure的position属性,实现最大化的目的 fname = 'G:\影像\<a href="https://www.ixxin.cn/tag/seawifs/" title="查看更多关于seawifs的文章" target="_blank">seawifs</a>\year_chl_a\14.nc'; %vardata = h5read(fname,'/chlor_a'); ncid=netcdf.open(fname,'NC_NOWRITE');%打开 varids=netcdf.inqVarIDs(ncid);%得到变量序号 varname = netcdf.inqVar(ncid,0);%打开ID为0的数据 data = netcdf.getVar(ncid,0);%得到数据的每个像元的值 whos data;%数据属性 vardata = ncread(fname,varname); %读取数据 I = vardata(:, end:-1:1);%左右翻转 I2=imrotate(I,90,'bilinear');%逆时针旋转90° imagesc(I2);%显示数据 Xtick_pos =(0:4320/8:4320);%确定label显示的位置 Xtick_label ={'180°W','120°W','60°W','30°W','0°','30°E','60°E','120°E','180°E'};%或者可以写为 Xtick_label set(gca,'XTickLabel',Xtick_label, 'XTick',Xtick_pos); Ytick_pos =(0:2160/6:2160); Ytick_label ={'90°N','60°N','30°N','0°','30°S','60°S','90°S'};%或者可以写为 Xtick_label set(gca,'YTickLabel',Ytick_label, 'YTick',Ytick_pos); title(['年份:2010 参数:',varname]);%标题自动显示变量 xlabel('经度'); ylabel('纬度'); colorbar;%色度表 caxis([-1,1]);%设置颜色显示范围 print(gcf,'-dpng','G:\影像\seawifs\save\1.png') %保存图片 netcdf.close(ncid)%关闭
演示图:
改进之处
1、不需要ncdisp命令,可以直接显示图像,去除二次操作。
2、添加标题,并自动显示为图像变量。
3、添加经纬度。
4、自动保存图片
5、自动最大化窗口,使显示比例更加合理。
6、命令窗口显示图像属性。
缺点
坐标显示不全
11.24号更新生成连续图片,并进行对比显示,保存生成的动图以及所有单张图片。
clear;clc;%清除 scrsz = get(0,'ScreenSize'); % 是为了获得屏幕大小,Screensize是一个4元素向量[left,bottom, width, height] set(gcf,'Position',scrsz); % 用获得的screensize向量设置figure的position属性,实现最大化的目的 J=cell(1,10);%胞元 for i=1:14 fname=strcat(num2str(i),'.nc'); vardata{i} = h5read(fname,'/chlor_a');%读取 A{i} = vardata{i}(:, end:-1:1);%左右翻转 A2{i}=imrotate(A{i},90,'bilinear');%逆时针旋转90° imagesc(A2{i}); Xtick_pos =(0:4320/8:4320);%确定label显示的位置 Xtick_label ={'180°W','120°W','60°W','30°W','0°','30°E','60°E','120°E','180°E'};%或者可以写为 Xtick_label set(gca,'XTickLabel',Xtick_label, 'XTick',Xtick_pos); Ytick_pos =(0:2160/6:2160); Ytick_label ={'90°N','60°N','30°N','0°','30°S','60°S','90°S'};%或者可以写为 Xtick_label set(gca,'YTickLabel',Ytick_label, 'YTick',Ytick_pos); colorbar;%色度表 caxis([-1,1]);%设置颜色显示范围 title(['参数:chl_a 年份: ',num2str(i+1996)]);%显示年份 xlabel('经度'); ylabel('纬度'); print(gcf,'-djpeg',[num2str(i),'.jpeg']); Img=imread([ num2str(i) '.jpeg']); frame=getframe(gcf); im=frame2im(frame);%制作gif文件,图像必须是index索引图像 [I,map]=rgb2ind(im,256); mov(i)=getframe(gcf); if i == 1; imwrite(I,map,'1.gif','gif','LoopCount',Inf,'DelayTime',1); else imwrite(I,map,'1.gif','gif','WriteMode','append','DelayTime',1); end end
第二种方法:
ncid=netcdf.open('S2010001003505.L2_GAC_IOP.nc','nowrite'); %double A[]; gid=netcdf.inqNcid(ncid,'geophysical_data'); varids=netcdf.inqVarIDs(gid); disp(varids); a=netcdf.getVar(gid,varids(1)); A=cat(1,a); figure(1); imagesc(A);
第二种方法改进
clear all;clc; id = netcdf.open('14.nc','nc_nowrite'); varid = netcdf.inqVarID(id,'chlor_a');%读取变量的id variable = netcdf.getVar(id, varid);%读取数据 I = variable(:, end:-1:1);%左右翻转 I2=imrotate(I,90,'bilinear');%逆时针旋转90° figure(1) imagesc(I2);%显示 title('年份:2010');%标题 colorbar;%色度表 caxis([-1,1]);%设置颜色显示范围 netcdf.close(id)%关闭
eaDas软件
NASA提供的SeaDas软件。提供linux、windows、os x。
下载地址:http://seadas.gsfc.nasa.gov/installers/
ArcMap软件
ESRI公司的ArcMap软件。
1、打开Arctoolbox中的多维工具、创建NetCDF栅格图层。
2、选择.nc数据,选择你的显示变量。
此刻即可显示图像、下一步是保存为TIF格式。
3、右键生成的图层–属性–符号系统–离散颜色。
4、右键生成的图层–数据–导出数据。
5、选择为之保存数据即可,数据格式多种可选,本次选TIF。
结果
SeaDAS:
Arcgis:
其他
ENVI可以直接打开.nc文件。
ID L打开请参考麻辣GIS网站:http://malagis.com/idl-remote-sensing-reads-netcdf.html
参考网站
ncread
matlab读取netcdf(转)
用matlab读取netcdf文件的简单例子,附有说明
Non-SeaDAS Packages (e.g. MATLAB, ENVI, GIS, etc)
如何仅用一行 matlab 代码左右翻转一副图像?
Matlab中图片保存的四种方法
怎么用MATLAB把多张图片合成AVI动画
matlab生成gif动态图像matlab生成GIF动态图像并保存或matlab生成avi视频
[转载]matlab批量保存图像
【转】matlab一次读取多张图片
matlab 图片批量读取
Matlab查看数组大小的命令——size、length、numel和ndims
matlab 中imagesc的用法
SeaWiFS Data Set Readme Contents
行列号转为经纬度
matlab绘制地图后添加纬度
【doc】SeaWiFS产品格式及转换