我有一组等值线点(或轮廓点),如下所示:

替代文本 http://www.rcad.eu/triang&isolines%20example1.jpg

等值线上的每个点都有其各自的 X、Y 和 Z 坐标。由于它们是等值线,这意味着每个点将具有唯一的 X-Y 对,但同一条线上的点将具有相同的 Z 坐标。

现在,是否有任何算法或任何软件包(C# 或 C++ 或 MATLAB 语言)可以用来将等值线点插值到完整的 3-D 表面中?

备注:我不仅对最终输出感兴趣,而且对获取插值曲面数据感兴趣,以便我可以自己绘制曲面。

编辑:C++ 解决方案也受到欢迎。

有帮助吗?

解决方案

在 MATLAB 中,您可以使用以下函数 griddata 或者 TriScatteredInterp 班级 (笔记:自 R2013a 起 scatteredInterpolant 是推荐的替代方案)。这两个都允许您将规则间隔的数据表面拟合到一组非均匀间隔的点(尽管看起来 griddata 在较新的 MATLAB 版本中不再推荐)。下面介绍了如何使用它们:

  • griddata:

    [XI,YI,ZI] = griddata(x,y,z,XI,YI)
    

    在哪里 x,y,z 每个表示每个点(在本例中为等高线上的点)的笛卡尔坐标向量。行向量 XI 和列向量 YI 是笛卡尔坐标 griddata 对值进行插值 ZI 的安装表面。为矩阵返回的新值 XI,YI 与通过的结果相同 XI,YImeshgrid 创建统一的点网格。

  • TriScatteredInterp 班级:

    [XI,YI] = meshgrid(...);
    F = TriScatteredInterp(x(:),y(:),z(:));
    ZI = F(XI,YI);
    

    在哪里 x,y,z 再次表示每个点的笛卡尔坐标向量,只是这次我使用了 结肠重塑手术 (:) 以确保每个都是 列向量 (所需的格式为 TriScatteredInterp)。插值法 F 然后使用矩阵进行评估 XI,YI 您必须使用创建 meshgrid.

示例与比较

下面是一些示例代码及其生成的结果图,用于使用上述两种方法从轮廓数据重建表面。轮廓数据是用 contour 功能:

% First plot:

subplot(2,2,1);
[X,Y,Z] = peaks;  % Create a surface
surf(X,Y,Z);
axis([-3 3 -3 3 -8 9]);
title('Original');

% Second plot:

subplot(2,2,2);
[C,h] = contour(X,Y,Z);  % Create the contours
title('Contour map');

% Format the coordinate data for the contours:

Xc = [];
Yc = [];
Zc = [];
index = 1;
while index < size(C,2)
  Xc = [Xc C(1,(index+1):(index+C(2,index)))];
  Yc = [Yc C(2,(index+1):(index+C(2,index)))];
  Zc = [Zc C(1,index).*ones(1,C(2,index))];
  index = index+1+C(2,index);
end

% Third plot:

subplot(2,2,3);
[XI,YI] = meshgrid(linspace(-3,3,21));  % Generate a uniform grid
ZI = griddata(Xc,Yc,Zc,XI,YI);          % Interpolate surface
surf(XI,YI,ZI);
axis([-3 3 -3 3 -8 9]);
title('GRIDDATA reconstruction');

% Fourth plot:

subplot(2,2,4);
F = TriScatteredInterp(Xc(:),Yc(:),Zc(:));  % Generate interpolant
ZIF = F(XI,YI);                             % Evaluate interpolant
surf(XI,YI,ZIF);
axis([-3 3 -3 3 -8 9]);
title('TriScatteredInterp reconstruction');

enter image description here

请注意,两个结果之间几乎没有差异(至少在这个范围内)。另请注意,由于这些点处轮廓数据的稀疏性,插值曲面在拐角附近有空白区域。

其他提示

您可以使用 gridfit 工具,在发现MATLAB中央文件交换。有一个问题我给的例子正是你想做的事,从等值线取点的列表开始的,我从数据重建光滑的表面。事实上,我使用的示例中被带到从地形图。

我想你想被称为“轮廓拼接”的东西,例如在的本文

scroll top