# What is the most accurate method to get intersection point in 3D?

I have been given 3D point data, belonging to different planar segments. Points are not exactly laid on the planes so that I have fitted best planes using least square solutions. Now, I want to find the intersection point where more than 2 planes are intersected. I found there are two methods for that

1. By computing intersection lines using 2 plane pairs and then find the final point using some adjustment process

2. BY using 3D planes itself and find the intersection point.

So, now I would like to know which method is given most accurate result. I guess each method is given 2 difference results.

-

## 1 Answer

I think neither methods will lead to the most accurate solution: If one first estimates the planes and then find the intersection point, one does not enforce directly the constraint that all planes intersect exactly in a single point.

If I understand correctly, this is what we know:

• There is a set of $M$ planes (three or more) which intersect in a single point $\mathbf a$. (This is our parametric model.)
• The planes are represented by a set of $K$ points $\mathbf x^{(k)}$ affected by zero-mean Gaussian noise (our data).
• We assume that we know which point belong to which plane. Thus we have a mapping $I: \{1,...,K\} \rightarrow \mathbb N$ which maps a point index $k$ onto a plane index $I(k)$. (If we don't know the mapping $I$, we can find it using RANSAC or a similar method.)

Maximizing the likelihood of the model parameters is equivalent to minimizing the geometric error between the data and the model.

Our model might look as follows:

All planes intersect in a single point $\mathbf a = (a_1,a_2,a_3)^\top$. Each plane has a different orientation specified by a normal vector $\mathbf n^{(m)}$. Now our $M$ planes are represented by $(3+3M)$ parameters: $$\mathbf p = (a_1,a_2,a_3,n_1^{(1)},n_2^{(1)},n_3^{(1)} ,...,n_1^{(M)},n_2^{(M)},n_3^{(M)})^\top$$ (However, the problem has only $3+2M$ degree of freedom since the length of the normals are insignificant. Thus, we have a gauge freedom of $M$ dimension. If necessary, this free gauge can be removed by using a minimal/two-dimensional parametrisation of the normals. A good possibility is to restrict the normals to lie on a sphere as described in Hartley, Zisserman: "Multiple View Geometry", Second edition, A 6.9.3.)

Now the geometric error we wish to minimize is:

$$S = \sum_{1=k}^K [d(\mathbf x^{(k)}, \mathbf a,\mathbf n^{(I(k))})]^2$$

Here, $d(\mathbf x, \mathbf a,\mathbf n)$ is the distance between a point $\mathbf x$ and a plane $(\mathbf a,\mathbf n)$.

We can find the optimal plane parameters $\mathbf p$ by jointly minimizing $S$ wrt. to $\mathbf p$.

-

thank you for your good explanation. during last couple of months i was using line intersection to get intersection point of many planes. But, now i have been directed back to get intersection point using plane intersection itself. So, i need your comments again to achive this. If we suppose, that we already obtained good planes which fit the points on RANSAC or suppose we have only the plane parameters. then, i need to know the way of getting intersection point where many planes meet. i would like to do this with least square solutions but i am poor in mathematics. plz help me. thanks. – niro Dec 2 '11 at 11:39
if i will be supported step wise how this can implemte in matrix form then, i hope i could implement this. thanks. sorry for disturbing you. – niro Dec 2 '11 at 11:44
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 20, "mathjax_display_tex": 2, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": false, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 5, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9319347739219666, "perplexity_flag": "head"}