Fitting a plane through a 3D point data

For example, i have 3d point cloud data [xi, yi, zi] as the attachment .txt file. I want to fit a plane to a set of 3D point data. What kind of method to do that?

1 Kommentar

Matt J
Matt J am 6 Mai 2018
How does one know that M and L are different planes and not just noise? Is there a known upper bound on the noise? A known lower bound on the separation distance between M and L?

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Matt J
Matt J am 6 Mai 2018

0 Stimmen

You will probably have to implement a RANSAC plane fitting routine.

5 Kommentare

ha ha
ha ha am 6 Mai 2018
I also think that I need to use RANSAC approach. Do you have a matlab code to do it?
Matt J
Matt J am 6 Mai 2018
No, I do not.
Matt J
Matt J am 6 Mai 2018
However, you may be able to modify this RANSAC line fitting routine
ha ha
ha ha am 6 Mai 2018
Thanks.
Matt J
Matt J am 6 Mai 2018
Bearbeitet: Matt J am 6 Mai 2018
One approach you might consider is to take planar cross sections of your data. This will give 2D data for a line, with outliers. Then you can apply a ready-made RANSAC line-fitter, like the one I linked you to. From line fits in two or more cross-secting planes you should be able to construct the desired plane K.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Walter Roberson
Walter Roberson am 6 Mai 2018

0 Stimmen

data = load('1.txt');
coeffs = [data(:,1:2), ones(size(data,1),1)]\data(:,3);
The equation of the plane is then coeffs(1)*x + coeffs(2)*y - coeffs(3) = z

1 Kommentar

ha ha
ha ha am 6 Mai 2018
Bearbeitet: ha ha am 6 Mai 2018
From your answer, I plot the surface as below image. But That plane is not same as my expected plane. If we use the formulas as your proposed method, the plane is fitting through all points & will be slightly different with my expected plane K(=plane M)

Melden Sie sich an, um zu kommentieren.

Matt J
Matt J am 6 Mai 2018
Bearbeitet: Matt J am 6 Mai 2018

0 Stimmen

xyz=load('1.txt');
xyz(xyz(:,2)>40, :)=[];
mu=mean(xyz,1);
[~,~,V]=svd(xyz-mu,0);
normal=V(:,end).';
d=normal*mu';
The equation of the plane is then xyz*normal.' = d

3 Kommentare

Why you delete my data by using below syntax:
xyz(xyz(:,2)>40, :)=[];
In general, how can you know the value of Y coordinate which is larger than 40 will be deleted????
ha ha
ha ha am 6 Mai 2018
In my question: Plane M contains a large number of point data when compared with plane L(i.e., 90%). I wanna find the plane can cover large number points as plane M. Example: in the general, there are some outlier(or noise) points. So, the result will be affected significantly. Because you are using "least square regression method" as I guessed
Matt J
Matt J am 6 Mai 2018
How does one know that M and L are different planes and not just noise? Is there a known upper bound on the noise? A known lower bound on the separation distance between M and L?

Melden Sie sich an, um zu kommentieren.

Tags

Gefragt:

am 6 Mai 2018

Bearbeitet:

am 6 Mai 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by