利用matlab进行20摄氏度中止旬计算

clc
clear

%读取tif文件
%[data_tiff, R] = geotiffread('D:\DATA\1979_avg\19790101_avg.tif');
%展示读取结果
%imshow(data_tiff);

filepath='D:\Test\19790727_avg.tif';                                        %%图像名称与路径
Info=imfinfo(filepath); 
% tif='tif';
% format=Info.Format;
% if  (strcmp(format ,tif)==0)
%     disp('载入的不是tif图像,请确认载入的数据');                  %%确保载入的图像是tiff图像
% end
%  
Slice=size(Info,1);                                            %%获取图片z向帧数
% Width=Info.Width;
% Height=Info.Height;
% Image=zeros(Height,Width,Slice);
 
% for i=1:Slice
%     Image(:,:,i)=imread(filepath,i);                                  %%一层一层的读入图像
% end
% Image
%%获取图片信息并判断是否为tifInfo=imfinfo(data_tiff);
%批量读取文件夹内的tif,并分别存贮
Path = 'D:\Test\';                   % 设置数据存放的文件夹路径
File = dir(fullfile(Path,'*.tif'));  % 显示文件夹下所有符合后缀名为.tif文件的完整信息
FileNames = {File.name}';            % 提取符合后缀名为.tif的所有文件的文件名,转换为n行1列

%获取lat lon 最终利用arcgis general获取
% file_name = 'D:\Test\19790727_avg.tif';
% info = geotiffinfo(file_name);
% [x,y] = pix2map(info.RefMatrix, 1, 1);
% [lat,lon] = projinv(info, x,y);

Length_Names = size(FileNames,1);    % 获取所提取数据文件的个数
%批量读取
data_tiff=cell(1,Length_Names);   %创建存储的空cell
for k = 1 : Length_Names
    K_Trace = strcat(Path, FileNames(k));              % 连接路径和文件名得到完整的文件路径
%     data_tiff=cell(1,Length_Names); 不能在for循环内,否则会一直重置
    [data_tiff{k}, R] = geotiffread(K_Trace{1,1});     %读取二维矩阵,由于data_tiff是1*n的元胞数组,可以用单个k表示第k个内容
%                                                        由于K_Trace是元胞数组格式,需要加{1,1}才能得到字符串
    info = geotiffinfo(K_Trace{1,1});
   
%     读取数据(因为这里是.txt格式数据,所以直接用load()函数)
%     eval(['Data',num2str(k),'=','load(K_Trace{1,1})',';']);
%     注意1:eval()函数是括号内的内容按照命令行执行,
%           即eval(['a','=''2','+','3',';'])实质为a = 2 + 3;
%     注意2:由于K_Trace是元胞数组格式,需要加{1,1}才能得到字符串

end

%创建一个用于标记的400*700的空矩阵
mark=ones(400,700)*0;

%当读到小于20时,满足未被标记的情况,且data_tiff并不是NaN的情况下,将该次读到的时间赋值到mark矩阵中
for k = 1 : Length_Names
    A= data_tiff{k} >= 20;
   for i = 1 : 400
       for j = 1 : 700
           if A(i,j) == 0 && mark(i,j) == 0 && data_tiff{k}(i,j) > -50
               mark(i,j) = k;
           end
       end
   end
end

%将mark矩阵中等于0的值赋值为ArcGIS中的NaN,发现不互通,需要在ArcGIA中操作,使用reclassify进行重新复制
% for i = 1 : 400
%        for j = 1 : 700
%            if mark(i,j) == 0
%                mark(i,j)=-999;
%            end
%        end
% end
%     

for i=1:Slice
    J=uint8(mark(:,:,i));           %%一层一层写出图像 
 
    %%imwrite(J,[dir,'.tif'],'WriteMode','Append');
    imwrite(J,[num2str(i,'%04d'),'.tif']);
end
%会发生倒置现象,需要交换一下
data=flipud(J); 
%输出为tif文件
R = georasterref('RasterSize', size(data),'Latlim', [double(15.0007629395) double(55.0007629395)] , 'Lonlim',[double(70.0000038147) double(140.000003815)]);
   geotiffwrite(['D:\1979a.tif'],data,R);
    disp(['done'])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值