二维平面拟合,ransac,matlab,link

二维平面拟合,ransac,matlab,link,matlab,Matlab,我有一组3D点 Points_[x,y,z]% n*3 where n is number of points 我想装一架飞机(它是地板)并检查飞机的高度。我认为这是2D问题 z=bo+b1x+b2y; 我找不到2D ransac平面拟合的链接。有人可以给这个链接或文件 其次,一些商业软件给出了飞机的高度值。它是平均值或某个复杂值 关于,如果您形成以下“A”矩阵 其中,(:)将为您提供列向量(以防它们不是以 然后你可以把你的方程写成经典的线性方程组: A*b = Points_Z(:);

我有一组3D点

Points_[x,y,z]% n*3 where n is number of points
我想装一架飞机(它是地板)并检查飞机的高度。我认为这是2D问题

z=bo+b1x+b2y;
我找不到2D ransac平面拟合的链接。有人可以给这个链接或文件

其次,一些商业软件给出了飞机的高度值。它是平均值或某个复杂值

关于,如果您形成以下“A”矩阵

其中,
(:)
将为您提供列向量(以防它们不是以

然后你可以把你的方程写成经典的线性方程组:

A*b = Points_Z(:);
其中b=[b0;b1;b2]——您试图确定的参数的列向量。 这是标准解

b=A\Points_Z(:)
b=pinv(A)*点Z(:)

请参阅有关mldivide和pinv的帮助

你必须有3个或3个以上的点,这些点并不都在一条线上。对于这样一个过度确定的系统,pinv和\基本上会产生相同的结果。如果它们几乎是共线的,那么使用它们可能有一些优势

b中的3个参数基本上是平面高于原点的高度、平面的x坡度和y坡度。如果你仔细想想,一个平面的“高度”就是你的z项。你可以谈论高于某个点的高度(比如原点)。现在,如果你想要采样点重心的高度,你可以这样做

z_mean = [1 mean(Points_X(:) ) mean( Points_Y(:) )] * b
这可能正好等于
平均值(Points_Z(:)
。要使此定义有意义,您必须确保在感兴趣的区域上具有均匀间隔的栅格


根据您的应用程序,可能还有其他定义。例如,如果您试图找到房间中心的高度,沿着墙壁和内部采样点,那么用中间值替换平均值可能更合适。

我不清楚您的要求。平面有无限的宽度和长度,但没有高度。然而,这里有一个2D RANSAC实现:除非他预期会有很多糟糕的测量,否则RANSAC似乎有点过头了。传统的线性最小二乘法应该可以很好地工作。
z_mean = [1 mean(Points_X(:) ) mean( Points_Y(:) )] * b