This repository provides data and source code for algorithms developed within the Most-Likely Point and Deformable Most-Likely Point paradigms described in the following papers:
IMLP: Seth D. Billings, Emad M. Boctor, and Russell H. Taylor, "Iterative Most-Likely Point Registration (IMLP): A Robust Algorithm for Computing Optimal Shape Alignment", PLOS One 10 (3): e0117688 (2015)
IMLOP: Seth D. Billings, Russell H. Taylor, "Iterative most likely oriented point registration", Medical Image Computing and Computer-Assisted Intervention, Lecture Notes in Computer Science 8673: 178--185 (2014)
G-IMLOP: Seth D. Billings, Russell H. Taylor, "Generalized iterative most likely oriented-point (G-IMLOP) registration", International Journal of Computer Assisted Radiology and Surgery 10 (8): 1213--1226 (2015)
P-IMLOP: Seth D. Billings, Hyun J. Kang, Alexis Cheng, Emad M. Boctor, Peter Kazanzides, Russell H. Taylor, "Minimally invasive registration for computer-assisted orthopedic surgery: combining tracked ultrasound and bone surface points via the P-IMLOP algorithm", International Journal of Computer Assisted Radiology and Surgery 10 (6): 761--771 (2015)
D-IMLP: Ayushi Sinha, Seth D. Billings, Austin Reiter, Masaru Ishii, Gregory D. Hager, Russell H. Taylor, "The deformable most likely point paradigm", TBP
D-IMLOP: Ayushi Sinha, Seth D. Billings, Austin Reiter, Masaru Ishii, Gregory D. Hager, Russell H. Taylor, "The deformable most likely point paradigm", TBP
GD-IMLOP: Ayushi Sinha, Xington Liu, Austin Reiter, Masaru Ishii, Gregory D. Hager, Russell H. Taylor, "Endoscopic navigation in the absence of CT imaging", Medical Image Computing and Computer-Assisted Intervention, Lecture Notes in Computer Science (2018)
NOTE: This repository also contains an implementation of ICP, directional ICP and robust ICP. Other algorithms evaluated in these papers, for which source code is not included in this repository, include:
-
GICP
downloaded from http://www.robots.ox.ac.uk/~avsegal/generalized_icp.html
see IMLP paper for minor modifications required for termination condition and to set covariance matrices
-
CPD
downloaded from https://sites.google.com/site/myronenko/research/cpd
see IMLP paper for minor modifications required for termination condition
NOTE: To run experiments described in the IMLP paper, go to https://github.com/sbillin/IMLP. Compile the source code following instructions there (or here) and run the experiments in the PLOSONE folder.
-
CMake (http://www.cmake.org)
-
Visual Studio for Windows (http://www.visualstudio.com/downloads/download-visual-studio-vs)
application was developed in Visual Studio 2013
-
CISST Libraries (https://github.com/jhu-cisst/cisst/)
must compile this from source (instructions below)
-
WildMagic5 Libraries (http://www.geometrictools.com/Downloads/Downloads.html)
requires: Wm5Core.lib, Wm5Mathematics.lib
must compile these from source (instructions below)
included in
dependenciesfolder -
DLib (http://dlib.net/)
for iterative solutions to our minimization problems
included in
dependenciesfolder -
Numerical Recipes (http://numerical.recipes/)
needed only for G-IMLOP and GD-IMLOP algorithm; other algorithms don't use it and the code can be built without it
-
RPly Library
for reading/writing PLY files
included in
dependenciesfolder -
PLY_IO Library (if using Matlab)
for reading/writing PLY files in Matlab
included in
dependencies/Matlab Dependenciesfolder
NOTE: Visual Studio 12 2013 Win64 was used successfully when creating this README. Visual Stuido 14 2015 Win64 did not work due to errors such as cisstNetlib_f2c.lib(endfile.obj) : error LNK2001: unresolved external symbol __imp_sprintf. This issue has not been solved and it is recommended to build the cisstICP application using Visual Studio 2013.
https://github.com/jhu-cisst/cisst/
-
Clone
cisstrepository from githubgit clone https://github.com/jhu-cisst/cisst/
only jhu-cisst/cisst required (not cisst-saw, etc.)
-
Create a build directory
cisst_buildalongside (not inside) thecisstdirectory that was cloned from git -
Create Visual Studio solution for CISST Libraries using CMake
run CMake on
cisstsource directory with build directory set tocisst_build-- check boxes for libraries: CISST_cisstCommon, CISST_cisstVector, CISST_cisstNumerical, CISST_cisstOSAbstraction -- uncheck boxes for cisstMultitask, cisstMutliTask_, cisstParameterTypes, cisstRobot_ -- check box for CISST_HAS_CISSTNETLIBconfigure with
Visual Studio 12 2013 Win64as the compiler -- check box: CISSTNETLIB_DOWNLOAD_NOWconfigure and generate project
open the
cisst_build/cisst.slnfile and build in Visual Studio with build mode set toReleaseandx64
http://www.geometrictools.com/Downloads/Downloads.html These libraries are used solely for the closed-form implementation of computing the decomposition of a 3x3 covariance matrix. The libraries are no longer available online from their author, but they are included in the dependencies folder of the cisstICP repo.
-
Build WildMagic5
extract source from the
WildMagic5p13.zipfile located in thedependenciesfolderopen the
GeometricTools\WildMagic5\WildMagic5Wgl_VC120.slnfile in Visual Studio and set build configurations toReleaseandx64compile Wm5Core.lib and Wm5Mathematics.lib by right clicking
LibCore_VC120andLibMathematics_VC120and selecting build -
See website of WildMagic5 for more instructions on this
- Extract source from the
dlib-a8.6.7zfile located in thedependenciesfolder
- License to use the source code for this must be bought (usually available on amazon along with the book)
- Contact sinha(at)jhu(dot)edu for modifications in numerical recipes code once license is obtained
- Extract source from the
rply-1.1.4.zipfile located in thedependenciesfolder
If using Matlab
- Extract source from the
PLY_IOfile located in thedependencies/Matlab Dependenciesfolder
These instructions are based on the Windows platform with VisualStudio 2013. The output is a static library (cisstICP.lib).
-
Clone
cisstICPrepository from githubgit clone https://github.com/AyushiSinha/cisstICP
-
Create a build directory
cisstICP_buildwithin thecisstICPdirectory that was cloned from git -
run CMake on source directory
cisstICPspecify paths to cisstICP source code and build directories (
cisstICPandcisstICP_build) and configureset cisst_DIR to location of CISST Library build
cisst/cisst_buildand configure again. If the compiled CISST libraries were found correctly by CMake, thenCISST_USE_FILEshould now automatically contain a path to the fileUsecisst.cmakespecify path to WildMagic5 base directory by setting
WM5_BASE_DIRtocisstICP/dependencies/WildMagic5p13/GeometricTools/WildMagic5(other WildMagic5 fields should auto-detect)set
DLIB_INCLUDEto the path to the extracted dlib folderset
RPLY_DIRto the path tocisstICP/dependencies/rply-1.1.4optionally, check
USE_EXTRA_ALGORITHMSto include IMLP_CP (closest point), IMLP_MD (mahalanobis distance) and RobustICP in the buildconfigure and generate project
-
Build cisstICP library in Visual Studio
open
cisstICP_build/cisstICP.slnbuild with build mode set to
Releaseandx64
-
Create a build directory
cisstICP_App_buildwithin thecisstICP_Appdirectoryspecify paths to cisstICP source code and build directories (
cisstICP_AppandcisstICP_App_build) -
run CMake on source directory
cisstICP_Appand configureset
cisst_DIRto the path to thecisst/cisst_buildfolder and configure again. If the compiled CISST libraries were found correctly by CMake, thenCISST_USE_FILEshould now automatically contain a path to the fileUsecisst.cmakeset
DLIB_INCLUDEto the path to the extracted dlib folder.set
WM5_BASE_DIRto the path tocisstICP/dependencies/WildMagic5p13/GeometricTools/WildMagic5set
MATLAB_ENGINE_INCLUDE_DIRandMATLAB_ENGINE_LIB_DIRto your system paths for Matlab, such asC:/Program Files/MATLAB/R2015a/extern/includeandC:/Program Files/MATLAB/R2015a/extern/lib/win64/microsoft(these paths will change depending on the Matlab version).set
cisstICP_LIBto the path to/cisstICP/cisstICP_build/Release/cisstICP.libset
cisstICP_LIB_INCLUDEto the path tocisstICP/cisstICPconfigure again and Generate
-
Build cisstICP_App library in Visual Studio
open the
cisstICP_App_build/cisstICP_App.slnfile in Visual Studio, set the build options to 'Release' and 'x64', and build the solution.
This library provides a Matlab interface to the C++ code of the cisstICP Library. This library is not maintained by me.
-
Create a
matlabICP_buildfolder alongside thematlabICPfolder in the cloned reposet CMake's source and build locations to these folders (
matlabICPandmatlabICP_build) -
run CMake on source directory
matlabICPand configureset
cisst_DIRto the path to thecisst/cisst_buildfolder and configure again. If the compiled CISST libraries were found correctly by CMake, thenCISST_USE_FILEshould now automatically contain a path to the fileUsecisst.cmake.set
DLIB_INCLUDEto the path to the extracted dlib folder.set
WM5_BASE_DIRto the path tocisstICP/dependencies/WildMagic5p13/GeometricTools/WildMagic5set
MATLAB_ENGINE_INCLUDE_DIRandMATLAB_ENGINE_LIB_DIRto your system paths for Matlab, such asC:/Program Files/MATLAB/R2015a/extern/includeandC:/Program Files/MATLAB/R2015a/extern/lib/win64/microsoft(these paths will change depending on the Matlab version).set
cisstICP_LIBto the path to/cisstICP/cisstICP_build/Release/cisstICP.libset
cisstICP_LIB_INCLUDEto the path tocisstICP/cisstICPconfigure again and Generate
-
Build matlabICP library in Visual Studio
open the
matlabICP_build/matlabICP.slnfile in Visual Studio, set the build options to 'Release' and 'x64', and build the solution. -
Add to Matlab
extract the
/cisstICP/dependencies/MatlabDependencies/mtimesx.zipand add it to your Matlab path.add
/cisstICP/dependencies/MatlabDependencies/PLY_IOto your Matlab path. Note that the PLY_IO library code included here containes a bug fix forply_read.m, changing line 571 from
if ( ( nargin > 1 & strcmpi(Str,'Tri') ) || nargout > 2 )to
if ( ( nargin > 1 && strcmpi(Str,'Tri') ) || nargout > 2 )NOTE: If you do not have the Numerical Recipes code, then the Matlab interface for GIMLOP will fail to compile (since GIMLOP will not have been compiled in the C++ library), giving an error. This is not a problem, as the Matlab interfaces for the other algorithms won't be affected and can still be used.
-
cdtocisstICP_App/cisstICP_App_build/Release/and runICP_Appvia command linethis should run the executable with default settings
-
Test whether everything is running correctly
run the following commands:
ICP_App --alg IMLP --out testingforrelease
ICP_App --alg DIMLP --out testingforrelease
ICP_App --alg IMLOP --out testingforrelease
ICP_App --alg DIMLOP --out testingforrelease
ICP_App --alg GIMLOP --out testingforrelease
ICP_App --alg GDIMLOP --out testingforrelease
ICP_App --alg PIMLOP --out testingforrelease -
cdintocisstICP_App/testsand runcompare_outputs_script.min Matlab. If all algorithmspass, then everything is running correctly. This is a good test to run when developing to make sure changes to the code have not broken anything -
Test if the matlabICP libraries are working (if using Matlab)
cdtomatlabICP/TestApps/and runApp_Test_IMLOP.min Matlab (not maintained)