3

分析:简而言之,我正在使用散射仪数据寻找森林砍伐率。为此,我需要将所有数据(941 个 .sir 文件)加载到一个数组中。每个 .sir 文件代表 4 天的数据。然后我使用这个数组来找到平均值和标准差。为了检测植被的变化,我需要确定并去除季节性平均值。然后,我将估计数据的标准偏差和与当地标准相关的阈值,并确定给定年份中变化较大(高标准)的区域。这些地区发生重大变化,可能与森林砍伐有关。高阈值是去除海洋。低值是关键——要可靠地看到变化,它必须大于标准偏差的 3 倍。

问题/问题:我不知道如何平均然后将 7 个数据文件(28 天,大约一个月)存储到一个数组中。

目标:获取每个月平均值之间的差异(7-8 个 .sir 文件)并将这些值存储到数组中以进行比较。

例子

尝试这样做:

1) 填充 3D 矩阵/数组。预分配数组。设置一个计数器变量。循环遍历每 7 个文件(例如,names(1:7:end))并将其插入矩阵,使用计数器作为第三维的索引:
myMat(:,:,counter) = loadingir(...);
计数器 = 计数器 + 1;

整个代码实际上是这样的:

%monthly avg test
%N=floor(length(fname)/7);
%dayv = zeros(7,x2-x1+1,y2-y1+1);
%for i=1:N
  %tmp2=zeros(size(tmp));
  %M=min(7,length(fname)-((N-1)*6+1));
  %for j=1:M
    %ii=j+(i-1)*7;
    %tmp = loadsir(fname(ii).name);
    %tmp2=tmp2+tmp/M;


x1=495;
x2=600;
y1=394;
y2=501;

meanArray = zeros(1,941);
fname = dir('*sir');
[tmp, head] = loadsir(fname(1).name);
dayh = zeros(length(fname),x2-x1+1,y2-y1+1);

%use temporary array to simplify 3d array creation
for i=1:length(fname)
   tmp = loadsir(fname(i).name);
   dayh(i,:,:) = tmp(x1:x2,y1:y2);
end

% create mean and standard deviation images
av=squeeze(mean(dayh,1));
st=squeeze(std(dayh,1));

%store means into an array
meanArray(:,:) = av;

% display mean image
figure(1)
imagesc(av)
colorbar;

% display std image
figure(2)
imagesc(st)
colorbar;

% High threshold = bad data
ThresH=0.35;
% Low threshold = area of significant change
thresL=st*3;

% create copy of mean image
img=av;
% apply threshold
ind= st>ThresL & st <ThresH;
img(ind)=0; % set to high value to make more visible
ind=find(st>=ThresH);
img(ind)=-30; % discard very high variance areas

% display image with significant change indicated
figure(3)
imagesc(img)
colorbar;

如果有人想提供帮助,他们可以在 gtalk 上添加我:exzacklyright@gmail.com 我最好在星期五之前完成这个,这样我就有时间在下星期一之前设置一个演示文稿。

4

0 回答 0