OpenCV中3D点的平面构造

时间:2015-11-30 11:09:59

标签: opencv

我想从OpenCV中的3D点列表构建一个平面。我想通过以下列形式找到四个参数来获得结果:Ax+By+Cz+D = 0。有人会建议我这样做吗?

2 个答案:

答案 0 :(得分:4)

如果数据不包含异常值且不包含多个平面。此外,所有点都准确地放在一个平面上(数据没有嘈杂),它很简单:

  1. 拿起三个不在同一行的随机点。
  2. 解决这个线性方程组:
  3. x1+by1+cz1+d = 0
    x2+by2+cz2+d = 0
    x3+by3+cz3+d = 0
    

    然后:

    A= Choose any number you want in order to match your scale. 
    B= b*A 
    C= c*A 
    D= d*A
    

    如果数据有噪声或包含异常值或超过平面(或两者),则需要某种稳健估计技术。搜索RANSAC作为开始。

    如果你熟悉RANSAC,你可以在这里看到this example(它是关于线条你可以简单地通过它来处理飞机)

答案 1 :(得分:1)

利用OpenCV进行回答

如果要使方程式求解3点,则如下所示:

ax + by + cz = 1

示例

您有3点:cv :: Point3f p1,p2和p3,下面是代码:

cv::Matx33f M(p1.x, p1.y, p1.z,
              p2.x, p2.y, p2.z,
              p3.x, p3.y, p3.z);
cv::Vec3f d(1, 1, 1);
cv::Vec3f coef = M.inv() * d;

然后,a,b,c依次为coef(0),coef(1),coef(2)。