Iterative nearest point algorithm iterative closest points__ algorithm

Source: Internet
Author: User

"3D" iterative nearest point algorithm iterative closest Points http://blog.csdn.net/xiaowei_cqu/article/details/8470376
Category: "Algorithmic analysis" "Machine vision" 2013-01-21 13:06 17173 people read Comments (47) Collection Report

Directory (?) [+]

A series of articles on postgraduate courses see the Basic principles of those courses in the Faith section

Assuming that two data sets P and Q have been given, the space transformation F of the two point sets is given to enable them to perform spatial matching. The problem here is that f is an unknown function, and the points in the two-point set are not necessarily the same. The most common way to solve this problem is to iterate over the nearest point method (iterative closest Points algorithm).

The basic idea is to match the data according to some geometrical characteristics, and to set these matching points as imaginary corresponding points, and then to solve the motion parameters according to the corresponding relation. The data are transformed using these motion parameters. The new corresponding relation is determined by using the same geometrical feature, and the above process is repeated.


iterative Nearest Point method objective functionTwo 3D points in three-dimensional space, their Euclidean distances are expressed as:

The aim of the three-dimensional point cloud matching problem is to find the matrix R and T of P and Q variations, and to solve the optimal solution by least squares method:

The most hours of R and T.

Data preprocessingIn the experiment, five points were collected as follows: As the first group (1th) and the third group (the first row third) are the model of the frontal cloud, so choose one and three follow-up experiments. First of all, use the Geomagic studio to remove the point of the tool to remove some of the original data isolated noise, the effect is as follows:


separation of parallel movement and rotationFirst, the translation vector T is initially estimated, and the specific method is to get the center of Point set P and Q respectively:

Shift the point set P and Q to the center point:
The above optimization objective function can be converted to:
The optimization problem is decomposed into:
The specific code to make the minimum of E for the translation center point is:
[CPP]  View plain copy//Compute Point Cloud P's center point mean   Void calculatemeanpoint3d (vector<point3d> &p ,  point3d &mean)    {       vector<point3d>::iterator  it;       mean.x = 0;   &NBSP;&NBSP;&NBSP;&NBSP;MEAN.Y  = 0;       mean.z = 0;        For (It=p.begin ();  it!=p.end ();  it++) {            mean.x += it->x;           mean.y +=  it->y;           mean.z += it->z;       }       mean.x = mean.x/p.size ();       mean.y = mean.y/p.size ();       mean.z =& NBsThe initial translation effect of the p;mean.z/p.size ();  }   is as follows:

using control point to find initial rotation matrixWhen determining the corresponding relationship, the geometric feature used is the point closest to the position in the space. Here, we don't even need all the points in the two-point set. You can refer to selecting a portion of a point from a set of points, which is generally calledControl Points。 At this point, the registration problem is transformed into: here, Pi,qi is the nearest match.
Use three points in Geomagic studio to perform manual registration for two models (feel bad translation here, registration, should be "manual matching").

We will export the three points manually selected as the initial control point of the experiment:

For the first-pair point, the matrix Ai for the computed point pair:
, the transpose matrix for the.
(* Here in Miss Cha's class gave a wrong matrix transformation formula) for each pair of matrix AI, compute matrix B:
[CPP]  View Plain copy double b[16];           for (int  i=0;i<16;i++)                B[i]=0;            for (Itp=p.begin (), Itq=q.begin (); Itp!=p.end (); itp++ ,itq++ ) {               double  divpq[3]={itp->x,itp->y,itp->z};                double addpq[3]={itp->x,itp->y,itp->z};                double q[3]={itq->x,itq->y,itq->z};               matrixdiv (divpq,q,3,1);               matrixadd (addpq,q,3,1);               double a[16];                for (int i=0;i<16;i++)                     A[i]=0;                

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.