在matlab中从等级坐标,其中等级为零

时间:2014-10-18 11:20:21

标签: matlab

我已经使用水平集功能编写了一个用于曲线传播的程序。曲线由等高线图中的零级表示。当我及时行进时,如何获得这些曲线的坐标?

每个时间步都获得轮廓。如何获取每一步的坐标?

1 个答案:

答案 0 :(得分:0)

可以通过contourc获得来自一组点z(x,y)的零水平轮廓。例如,对于peaks - MATLAB的例子,我们得到高度为0的轮廓线,如下所示:

c = contourc(peaks, [0,0]);

如果此轮廓是单行,则只需执行此操作即可。但是,轮廓可能包含多个岛(本例中就是这种情况),这意味着您需要以某种方式在c中拆分(x,y)坐标集。可以通过以下方式获得基于NaN值的分割:

c(:,~c(1,:)) = NaN;

,结果可以通过

绘制
plot(c(1,:),c(2,:),'k');

如果这还不够,您还可以构建岛屿的单元数组c_split

b = find(~c(1,:))+1;
e = b+c(2,b-1)-1;
c_split = arrayfun(@(idx) c(:,b(idx):e(idx)), 1:numel(b), 'uni', 0)';

,可视化非常相似:

idx = 1;
plot(c_split{idx}(1,:),c_split{idx}(2,:),'k');

如果轮廓需要存储多个时间步长,则将所有结果合并到一个单元格中:

c_all{idx} = c;