I would like to construct a plane from a list of 3D points in OpenCV. I would like to obtain the result by finding the four parameters in the following form: Ax+By+Cz+
If you want to have equation solved by 3 points, just like follows:
ax + by + cz = 1
you have three points: cv::Point3f p1, p2 and p3, and here is the code:
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;
Then, a, b, c are coef(0), coef(1), coef(2) sequentially.
If the data does not contain outliers and does not contain more than one plane. Furthermore, all the points lay exactly on a plane (the data is not noisy), it is so simple:
x1+by1+cz1+d = 0 x2+by2+cz2+d = 0 x3+by3+cz3+d = 0
then :
A= Choose any number you want in order to match your scale. B= b*A C= c*A D= d*A
If the data is noisy or contains outliers or more than plane (or both) you need then some kind of Robust Estimation techniques. Search for RANSAC as a start.
if you are familar with RANSAC you can see this example here (it is about lines you can simply generlize it to deal with plane)