我有一组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 = [ones(numel(Points_X),1), Points_X(:), Points_Y(:)];
其中(:)
表示将列向量转化(如果原本不是列向量)
然后你可以将方程写成经典的线性方程组形式:
A*b = Points_Z(:);
b = [b0; b1; b2],其中b是您要确定的参数的列向量。 这有一个经典的解决方案。
b=A\Points_Z(:)
或者 b=pinv(A)*Points_Z(:)
参见 mldivide 和 pinv 的帮助文档。
您必须有三个或更多不全在一条直线上的点。对于这样一个过度确定的系统,pinv 和 \ 基本上会产生相同的结果。如果它们几乎共线,使用 . 可能有一些优势。
b 中的 3 个参数基本上是平面高度相对于原点的高度、平面的 x 斜率和 y 斜率。如果您考虑一下,一个平面的“高度”就是您的 z 项。您可以谈论关于某个点(如原点)的高度。现在,如果您想要在采样点的质心处得到高度,则可以执行:
z_mean = [1 mean(Points_X(:) ) mean( Points_Y(:) )] * b
mean( Points_Z(:) )
。为了使定义有意义,您需要确保在感兴趣的区域上有一个均匀间隔的网格。