注册 登录
  • 本人闲暇时间(周末及其他闲暇时间)接遥感图像处理与IDL编程小活,欢迎骚扰,qq:853060844
  • 2017.2.14今天收到45条恶意评论(全是外文),故评论时请填写必要信息,匿名评论全部拉黑,迫不得已而为之
  • 2017.1.27,2017年春节及至,我谨代表本人祝大家新春快乐,本人年终总结文章请访问:2016年终总结
  • 为防止恶意转载,本站全面禁止复制,并添加图片水印:RGB 3S博客www.ixxin.cn。
  • 本站正式更名为RGB 3S博客,本站将撤消所有非3S内容,其将转移到新博客江湖时代

用matlab打开SeaWifs跟MODIS的.nc文件(更新ArcGis打开方法、更新新方法以及动态显示)

Matlab admin 3358次浏览 已收录 2个评论
[隐藏]
转载请注明来源

数据

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)%关闭

演示图:

duqu

改进之处

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

gif

尴尬,貌似动图显示不出来

第二种方法:

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:
https://img.alicdn.com/imgextra/i1/818354531/TB2Tm2PdheJ.eBjy1zdXXXfmFXa_!!818354531.png
Arcgis:
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产品格式及转换


xxin blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明用matlab打开SeaWifs跟MODIS的.nc文件(更新ArcGis打开方法、更新新方法以及动态显示)
喜欢 (6)
支付宝[853060844@qq.com]
分享 (0)
admin
关于作者:
坐标山科大遥感系小鲜肉一枚。
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到
(2)个小伙伴在吐槽
  1. 为什么nc文件用arcmap操作后,老是显示不出图层。在地理处理结果中看,图标为钟,想知道原因。而且在envi中也打不开
    匿名2017-07-27 10:04 回复 Windows 10 | Chrome 45.0.2454.101
  2. Instructions Priligy generic cialis Stendra Ed Best Website Cialis Y Eyaculacion Precoz
    匿名2017-10-21 01:30 回复 Windows 8.1 | Firefox 53.0