File Exchange

## Optimal Step Nonrigid ICP

version 1.2.0.0 (7.54 MB) by Charlie Nash

### Charlie Nash (view profile)

Matlab implementation of non-rigid iterative closest point

Updated 04 Apr 2018

Optimal Step Nonrigid ICP is a MATLAB implementation of a non-rigid variant of the iterative closest point algorithm. It can be used to register 3D surfaces. The method is described in the following paper:
'Optimal Step Nonrigid ICP Algorithms for Surface Registration', Amberg, Romandhani and Vetter, CVPR, 2007.
Features:
* Non-rigid and local deformations of a template surface or point cloud.
* Iterative stiffness reduction allows for global intitial transformations that become increasingly localised.
* Optional initial rigid registration using standard iterative closest point.
* Optional bi-directional distance metric which encourages surface deformations to cover more of the target surface.
* Handles missing data in the target surface by ignoring correspondences with points on target edges.
https://github.com/charlienash/nricp

### Cite As

Charlie Nash (2020). Optimal Step Nonrigid ICP (https://www.github.com/charlienash/nricp), GitHub. Retrieved .

Alessandro Borghi

### Alessandro Borghi (view profile)

my only question is: in the sample data, each mesh has a number of normals which is equal to the number of nodes as opposed to the number of faces. Shouldn't it be the other way round? the code - to work using normals - seems to only work under this condition

Peixin Li

### Peixin Li (view profile)

MatlabNeuling2017

### MatlabNeuling2017 (view profile)

How to use this for point cloud registration ?

if anyone has a solution for my question please write me: auer5@hm.edu

Steven Lewis

### Steven Lewis (view profile)

Is there a video, or tutorial on how to use this, or at least directions on how to? Can this be used on a mesh of faces and vertices, or do you have to alter it to a point cloud?

Chaitanya Patel

### Chaitanya Patel (view profile)

How to use this for point cloud registration ?

James Farrell

Rui Gu

Sheon yan

Gaurav

### Gaurav (view profile)

Awesome code , Thank you :)

Gaurav

Gaurav

anusha gorrila

### anusha gorrila (view profile)

Hello Charlie, Thanks for the code. I run this code again my 2 stl files, with 10,000 * 3 faces and 30000 * 3 vertices, but I get an error which is Index exceeds Matrix Dimensions at Line 213 ie.,
Error in nricp (line 213)
N(j,(4 * j-3):(4 * j)) = [normalsSource(j,:) 1];

can you please guide me on how to resolve this?

Hi, Does it work on point cloud data? And do we need Matlab 2015b ?

feng liu

### feng liu (view profile)

Hi Charlie.When I tried to align my data, the inner loop did not stop. Could you please tell me what should I do to with this problem.

btw, excellent code! thank you very much! It's really inspiring!

Charlie Nash

### Charlie Nash (view profile)

Hi Xiaolong, the method is best described in the paper:

'Optimal Step Nonrigid ICP Algorithms for Surface Registration', Amberg, Romandhani and Vetter, CVPR, 2007.

It seems to be freely available here:

http://gravis.cs.unibas.ch/publications/2007/CVPR07_Amberg.pdf

Xiaolong Zhang

### Xiaolong Zhang (view profile)

Hi Charlie.It's a wonderful code, but could you please provide a detailed documentation(or any link) which explains the code.Thank you very much!

YanFei Gao

### YanFei Gao (view profile)

 23 Jan 2016 1.2.0.0 Bug fix in nricp.m 8 Jan 2016 1.1.0.0 Now handles missing target surface data by ignoring correspondences to points lying on edge of target. Added option to reject correspondences where surface normals are not close. Added demo for missing data. 28 Nov 2015 1.0.0.0 Name change. 19 Nov 2015 1.0.0.0 More minor formatting changes. 19 Nov 2015 1.0.0.0 Minor formatting changes.
##### MATLAB Release Compatibility
Created with R2015a
Compatible with any release
##### Platform Compatibility
Windows macOS Linux