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 the points used to compute the normals of 
each point.

3) The restriction of 5 M points has been removed

*********************************************************************************
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
*********************************************************************************
- ComputeNormals (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)
   |- ComputeNormals.mexw64 (compiled MEX)
   |- 2D_scan.m (data file)
   |- drawNormals.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!