我有一组 3D 点。
Points_[x,y,z]% n*3 where n is number of points
我想安装一架飞机(它是地板)并检查飞机的高度。我认为这是二维问题。
z=bo+b1x+b2y;
我找不到 2D ransac 平面拟合的链接。有人可以给这个链接或文件。
其次,一些软件(商业)给出了平面的高度值。它是平均值或一些复杂的值。
问候,
我有一组 3D 点。
Points_[x,y,z]% n*3 where n is number of points
我想安装一架飞机(它是地板)并检查飞机的高度。我认为这是二维问题。
z=bo+b1x+b2y;
我找不到 2D ransac 平面拟合的链接。有人可以给这个链接或文件。
其次,一些软件(商业)给出了平面的高度值。它是平均值或一些复杂的值。
问候,
如果您形成以下“A”矩阵
A = [ones(numel(Points_X),1), Points_X(:), Points_Y(:)];
这(:)
是给你列向量的地方(以防它们不是开始的)
然后你可以把你的方程写成经典的线性方程组:
A*b = Points_Z(:);
其中 b = [b0; b1; b2] - 您尝试确定的参数的列向量。这有规范的解决方案
b=A\Points_Z(:)
或者 b=pinv(A)*Points_Z(:)
请参阅有关 mldivide 和 pinv 的帮助。
你必须有 3 个或更多的点,它们并不都在一条线上。对于像这样的超定系统, pinv 和 \ 基本上会产生相同的结果。如果它们几乎共线,则使用 .
b中的3个参数基本上是平面在原点以上的高度,x斜率,平面的y斜率。如果您考虑一下,飞机的“高度”就是您的 z 项。您可以谈论高于某个点的高度(例如原点)。现在,如果你想在采样点的质心高度,你会做
z_mean = [1 mean(Points_X(:) ) mean( Points_Y(:) )] * b
这可能只相当于mean( Points_Z(:) )
. 要使此定义有意义,您必须确保在感兴趣区域上具有均匀间隔的网格。
可能还有其他定义,具体取决于您的应用程序。例如,如果您试图找到房间中心的高度,沿墙壁和内部采样点,那么用中值替换平均值可能更合适。