Author: Julie Digne 2015-2020
julie 'dot' digne 'at' liris 'dot' cnrs 'dot' fr
This code is an implementation of the paper:
Sparse Geometric Representation Through Local Shape Probing, Julie Digne, Sébastien Valette, Raphaëlle Chaine, IEEE Transactions on Visualization and Computer Graphics, vol. 24, n. 7, pp2238-2250, July 2018.
(The paper was presented at Symposium on Geometry Processing - SGP - 2018)
-
Project's webpage:
https://perso.liris.cnrs.fr/julie.digne/articles/lpf.html -
PDF paper:
https://perso.liris.cnrs.fr/julie.digne/articles/lpf.pdf -
IEEE final version:
https://ieeexplore.ieee.org/document/7956272
This code is released under the GNU GPL v3 License. See the attached LICENSE file.
The build process relies on cmake. Tested on Ubuntu 16.04, 18.04, 19.10.
git clone https://github.com/jdigne/LPF
cd LPF
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
This code uses the cmdLine tool by Pascal Monasse (file cmdLine.h). The code is shipped with Eigen and nanoflann and has no other dependency.
lpf INPUT SEEDS OUTPUT -r <radius> -A <natoms>
lpf INPUT SEEDS OUTPUT -r <radius> -R <natoms>
lpf INPUT SEEDS OUTPUT -r <radius> -D <natoms>
INPUT (mandatory) ascii file containing the point set to analyze
SEEDS (mandatory) ascii file containing the seeds where lpf will be anchored
OUTPUT (mandatory) output file
-r <radius>
(recommended) Radius that will be used to interpolate x,y positions. Otherwise r=1 will be used.
-n <nbins>
number of bins: will compute a unit-square grid with nxn points and keep only the points within radius 1. (All neighborhoods will be rescaled to 1). Alternatively use a specific generic pattern (option -g). If no file, an invalid file and no number of bins is specified a default number of bins (10) is used.
-l <lambda>
lambda penalty for the sparse optimization. Default: 0.2.
-s Save immediately the descriptor (low memory consumption).
-A <natoms>
analyse the descriptors.
-R <natoms>
analyse the descriptors and resample.
-D <natoms>
analyse the descriptors and denoise.
-v verify the reconstruction from the descriptors and outputs the point cloud. If -v and -s are both set, then -v will prevail.
-N <n>
number of iterations for the dictionary computation. Default: 10.
-g <file>
sets the generic pattern to a precise file. See also '-n' option. If both -g and -n are used, and if the generic pattern file is valid, -g will prevail.
-d <file>
input dictionary file
-c Compute parameterization instead of using a random initial seed orientation
-p <file>
use a parameterization file for the seeds
The seeds and the input file should be the same:
lpf noisy.txt noisy.txt output.txt -r 0.7 -n 16 -N 20 -D 32 -l 0.2
The seeds can a subset of the input points.
lpf noisy.txt seeds.txt output.txt -r 0.7 -n 16 -N 20 -R 32 -l 0.2
The seeds can a subset of the input points.
lpf noisy.txt seeds.txt output.txt -r 0.7 -n 16 -N 20 -A 32 -l 0.2
This program takes as input a point cloud to analyze, a set of seeds, and optionally a generic pattern file and a dictionary file.
This includes the point cloud to analyse, the set of seeds, and the optional generic pattern files. These files should be formatted as:
x1 y1 z1
x2 y2 z2
. . .
. . .
xn yn zn
The coordinates for the generic pattern points are considered as scales.
The (optional) dictionary file should be formatted as a plain matrix. If the generic pattern contains M points and the dictionary contains D atoms, then this file should have 3M lines and D columns.