Copyright 2023. All rights reserved.
Robotics Research Group, University of Lleida.

Authors: Eduard Clotet.

The core of ComputeNormals is based on the LIBICP library provided by Andreas Geiger
(Karlsruhe Institute of Technology, Germany). LIBICP can be downladed from
the following link: 
https://github.com/MichiganTechRoboticsLab/SLAM-Scan-Matching/tree/master/ICP/libicp

Boost library is used to improve performance:
http://www.boost.org/users/download/

ComputeNormals is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or any later version.

ComputeNormals is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
ComputeNormals; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02110-1301, USA 

*********************************************************************************
Release Info
*********************************************************************************
- Version: 1.2
- Release date: 07/12/2023

*********************************************************************************
Change LOG (V1.2)
*********************************************************************************
1) The number of neighbors used to compute the normals can now be specified

2) The library now returns the index of th

*********************************************************************************
Release Info
*********************************************************************************
- Version: 1
- Release date: 30/11/2023


*********************************************************************************
Index
*********************************************************************************
1) Directory Content
2) How to use
3) How to compile
4) Special mention

*********************************************************************************
Directory Content
*********************************************************************************
- SLAMICP V4 (folder)
|- Compiled library  (folder)
|  |- ComputeNormals.mex64 (MEX file)
|
|- Documentation (folder)
|  |- Documentation.txt (text file)
|
|- To Compile (folder)
|  |- ComputeNormals.cpp (source code)
|  |- make.m (compile script)
|  |- src (folder)
|     |- kdtree.cpp
|     |- kdtree.h
|     |- matrix.cpp
|     |- matrix.h
|
|- Examples (folder)
   |- CalculateNormals.mexw64 (compiled MEX)
   |- data_2D.m (data file)
   |- example.m (example code)

*********************************************************************************
How to compile
*********************************************************************************
1) Donload and install the boost library (Only tested with boost_1_57_0 version)
https://www.boost.org/users/history/

2) Copy the "boost" directory created during the installation of the boost library into the "To compile/src" folder.
 *This may not be the most elegant way of accessing the libraries, but it should always work.

  The resulting directory structure should look like this:

   |- To Compile (folder)
   |  |- ComputeNormals.cpp (source code)
   |  |- make.m (compile script)
   |  |- src (folder)
   |     |- boost
   |     |  |- accumulators
   |     |  |- algorithm
   |     |  |- ...
   |     |  
   |     |- kdtree.cpp
   |     |- kdtree.h
   |     |- matrix.cpp
   |     |- matrix.h

3) From a Matlab terminal, run the "make.m" script.

4) The "ComputeNormals.mex64" file should appear into the "To Compile" directory.

* Note: this library has been compiled successfuly from Matlab using Windows 10 O.S. (x64) and 'Microsoft Visual C++ 2015 Professional (C)'.

*********************************************************************************
How to use
*********************************************************************************
To get a list of all the input/output parameters supported by this library, type "ComputeNormals" in a Matlab terminal.

*********************************************************************************
Special mention
*********************************************************************************
We thank Andreas Geiger and the Michigan Tech Robotics Lab for sharing the implementation of their ICP algorithm under the GNU General Public License.

Make sure to visit Andreas Geiger webpage: 
https://www.cvlibs.net/software/libicp/

And other interesting projecs:
https://www.cvlibs.net/projects.php

THANKS!