View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Finite Iterative Closest Point

5.0 | 16 ratings Rate this file 44 Downloads (last 30 days) File Size: 13.4 KB File ID: #24301 Version: 1.0
image thumbnail

Finite Iterative Closest Point


Dirk-Jan Kroon (view profile)


Iterative Closest Point using finite difference optimization to register 3D point clouds affine.

| Watch this File

File Information

This function ICP_FINITE is an kind of Iterative Closest Point(ICP) registration algorithm for 3D point clouds (like vertice data of meshes ) using finite difference methods.

Normal ICP solves translation and rotation with analytical equations. By using finite difference this function can also solve resizing and shear thus affine registration.

As first step, this function sorts the static points into a grid of overlapping blocks. The block nearest to a moving point will always contain its closest static point, thus the grid allows faster registration.

MATLAB release MATLAB 7.8 (R2009a)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (28)
20 Jul 2016 kian motahari

it does work perfectly,tnx.but i'm wondering whether i can attach the RGB matrix to each point,then the result would contains the color you have any solution?

09 Jun 2016 Sarun

Sarun (view profile)

18 Apr 2016 Diniz Sa

worked as expected, tank you all!

16 Mar 2016 Ahmed Yehia

23 Feb 2016 lightol smith

how to cite your code?

Comment only
02 Jun 2015 Denis Stein

@How to cite the work:
Use his PhD thesis, available at <>. He references to here on page 149.

Comment only
30 Apr 2015 N S

N S (view profile)

to cite*

Comment only
30 Apr 2015 N S

N S (view profile)

I would like to your to your code. can you please tell me how i can do it? thanks

Comment only
13 Jun 2014 Francesco

Hi all, i'd like to know if anybody has tried to use this algorithm on very large datasets (like point clouds with 300000-500000 points) and which options are recommended to minimize calculation times.

thank you all

Comment only
05 Jun 2014 Youssef

Hey Dirk-Jan Kroon.
Thanks for the code! Somehow i cannot run it though. I get "Itteration Error" Can you help me find what's wrong?
both pointclouds I am using are taken from a kinect sensor and slightly different capture angles.

I would appreciate and pointers on that as I am new to this field!

Comment only
07 May 2014 N S

N S (view profile)

Hi Kroon, your code works perfectly for me. now I would like to add "kd tree" function as a matching method to this algorithm, could you please help me to do that? Regards, Nazila

Comment only
17 Dec 2013 Milton

Milton (view profile)

Your ICP code works great and I am able to achieve very good registration of my point cloud.

The point cloud is generated by using the vertices of an isosurface of my 3D grayscale data set. I would like to use the affine transform matrix M to transform the 3D grayscale data in the same way as the point cloud of vertices were transformed.

For some reason this does not seem to work. I cannot get my dataset to rotate correctly when using the output affine transform matrix.

Could you post an example of how you can use M to rotate not a point cloud, but a grayscale 3D dataset? Or is there some reason that should not work?

Thanks for sharing your great work.

10 Sep 2013 Stormshark

very nice code. Easy to understand and apply to other platform

17 Jun 2013 Helia

Helia (view profile)

12 Mar 2013 Chris

Chris (view profile)

great code. similarly, reference/citation information would be great.

Comment only
12 Mar 2013 Chris

Chris (view profile)

14 Jan 2013 gang

gang (view profile)

11 Sep 2012 Luzia

Luzia (view profile)

Hi, I've used your ICP successfully for one of my projects - I would like to put a reference in the paper I'm preparing, could you let me know how you'd like me to cite it?

19 Oct 2011 Ben

Ben (view profile)

Can it be used for registering 2D point sets?

Comment only
07 Feb 2011 Alex

Alex (view profile)

This code works perfectly well! Thank you for your nice and really useful work

13 Jan 2011 JK Hwang

Hi, Dirk-Jan Kroon. I was wondering about your nearest points searching method in your code. What is the reason why you used a grid spacing term, 'spacing=size(Points_Static,1)^(1/6)*sqrt(3);', in your code when uniform grid of points is established. Is there any reference about that?

09 Nov 2010 Dirk-Jan Kroon

Dirk-Jan Kroon (view profile)

* Jacques Saade
The code is written from scratch and not published in a paper.
You can of course reference the original paper.

Comment only
23 Jun 2010 Meidya Koeshardianto

nice code

20 Apr 2010 Jacques Saade

Hi, really great work! But me too I ask if you can put a reference for the work

14 Apr 2010 Robert

Robert (view profile)

Fixed, but a demo code would be a nice addition.

14 Apr 2010 Robert

Robert (view profile)

I tried running this program, and all the points on my data model were transformed to a singular point. If this could be explained, I would revise my rating. For example, put a demo up, so I can see that it works for something you worked with.

02 Apr 2010 yu

yu (view profile)

sorry,but i cannot run it successfully. the error is
''??? Error using ==> tic
Too many output arguments......."
btw, my database contains about 40 thousand 3-D points.

expecting your reply.

Comment only
23 Jul 2009 M.

M. (view profile)

Could you please put a reference for this work? Thanks a lot for uploading it.

Comment only

Contact us