对于研究海洋中尺度涡的学者来说,我们都需要确定涡旋的边缘或者外围,通常定义距离涡旋中心最远的闭合等高线为涡旋外围。用matlab具体实现的代码如下所示。
function contourValues = getContourValues(C)
contourValues = [];
idx = 1;
while idx < size(C, 2)
level = C(1, idx);
contourValues = [contourValues, level];
idx = idx + 1 + C(2, idx);
end
end
isClosed = isequal([xx(i).a(1), yy(i).a(1)], [xx(i).a(end), yy(i).a(end)]);
下面是一个反气旋涡的例子,其中的hh就是我们要找的涡旋外围对应的等高线。
function [hh]=contour_find(t)
load('lon.mat');load('lat.mat');load('h.mat');load('area_index.mat');
x0=lon;y0=lat;
%% save bound and eddy center
x1=lon(new(t-14,1):new(t-14,2));y1=lat(new(t-14,3):new(t-14,4)); %51
lon_ind=new(t-14,1):new(t-14,2);lat_ind=new(t-14,3):new(t-14,4);
[x y]=meshgrid(x1,y1);
x=x';y=y';
% steric_h=mean(steric_h(lon_ind,lat_ind,18:23,t),3);
for z=18:23
load('steric_h.mat');
steric_h=steric_h(lon_ind,lat_ind,z,t);
% 设置等高线的间距
contourInterval = 0.0005;
% 生成等高线数据
[C, H] = contour(x,y,steric_h, 'LevelList', 0:contourInterval:max(steric_h(:)));
contourValues = getContourValues(C);
%开始检索
result=[];
for i=1:length(contourValues)
[row2, col2] = find(C==contourValues(i));
col_index(i).a=col2;
num2=C(2,col2); number(i).a=num2;
col=col_index(i).a;num=number(i).a;
x2=C(1,col+1:col+num);y2=C(2,col+1:col+num);
xx(i).a=x2; yy(i).a=y2;
% xf=xx(i).a;yf=yy(1).a;
isClosed = isequal([xx(i).a(1), yy(i).a(1)], [xx(i).a(end), yy(i).a(end)]);
result(end+1)=isClosed;
end
index=find(result==1);
values=[];
for i =1:length(index)
values(end+1)=contourValues(index(i));
end
h=min(values);hh(z-17)=h;
% clabel(C, H);
% set(a,'levelstep',0.001)%线间距
% figure;
% contour(x,y,steric_h,[h h],'red');
% hold on
end
return
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删