aimsalgo 6.0.0
Neuroimaging image processing
harmonicCageResampler.h
Go to the documentation of this file.
1/* This software and supporting documentation are distributed by
2 * Institut Federatif de Recherche 49
3 * CEA/NeuroSpin, Batiment 145,
4 * 91191 Gif-sur-Yvette cedex
5 * France
6 *
7 * This software is governed by the CeCILL-B license under
8 * French law and abiding by the rules of distribution of free software.
9 * You can use, modify and/or redistribute the software under the
10 * terms of the CeCILL-B license as circulated by CEA, CNRS
11 * and INRIA at the following URL "http://www.cecill.info".
12 *
13 * As a counterpart to the access to the source code and rights to copy,
14 * modify and redistribute granted by the license, users are provided only
15 * with a limited warranty and the software's author, the holder of the
16 * economic rights, and the successive licensors have only limited
17 * liability.
18 *
19 * In this respect, the user's attention is drawn to the risks associated
20 * with loading, using, modifying and/or developing or reproducing the
21 * software by the user in light of its specific status of free software,
22 * that may mean that it is complicated to manipulate, and that also
23 * therefore means that it is reserved for developers and experienced
24 * professionals having in-depth computer knowledge. Users are therefore
25 * encouraged to load and test the software's suitability as regards their
26 * requirements in conditions enabling the security of their systems and/or
27 * data to be ensured and, more generally, to use and operate it in the
28 * same conditions as regards security.
29 *
30 * The fact that you are presently reading this means that you have had
31 * knowledge of the CeCILL-B license and that you accept its terms.
32 */
33
34
35#ifndef AIMS_RESAMPLING_HARMONICCAGERESAMPLER_H
36#define AIMS_RESAMPLING_HARMONICCAGERESAMPLER_H
37
38#include <cartodata/volume/volume.h>
39#include <aims/mesh/surface.h>
40#include <aims/distancemap/stlsort.h> //for Point3dfCompare
41
42namespace aims
43{
44
46{
47public:
49 float spacing);
52 std::vector<Point3df> &controls,
53 short background=0, short border=1, short inside=2);
55
56public:
57 const Point3df &getControl(int ind) const;
58 const carto::VolumeRef<float> &get_image_coords(int ind) const;
59 void set_keep_image_coords(bool state)
60 { _keep_image_coords = state; }
61
62public:
63 void moveControl(int ind, const Point3df &p);
65 Point3df coordinate(const Point3df &p) const;
68 void computeCoordinates(float threshold=10e-4);
69
70protected:
72 std::vector<Point3df> _controls;
74 short _border;
75 short _inside;
77 std::vector<carto::VolumeRef<float> > _image_coords;
78 std::map<Point3df, std::map<int, float>, Point3dfCompare > _weights;
79};
80
81
82inline
84{
85 int ind;
86 Point3df p2(rint(p[0]), rint(p[1]), rint(p[2]));
87 const std::map<int, float> &w = (*(_weights.find(p2))).second;
88 std::map<int, float>::const_iterator i, e;
89
90 Point3df res(0, 0, 0);
91 for (i = w.begin(), e = w.end(); i != e; ++i)
92 {
93 ind = (*i).first;
94 res += (*i).second * _controls[ind];
95 }
96 return res;
97}
98
99
100inline const carto::VolumeRef<float> &
102{
103 return _image_coords[ind];
104}
105
106};
107
108#endif
109
void computeCoordinates(float threshold=10e-4)
HarmonicCageMeshResampler(const AimsSurfaceTriangle &cage, float spacing)
std::map< Point3df, std::map< int, float >, Point3dfCompare > _weights
Point3df coordinate(const Point3df &p) const
from native coordinate to resample coordinates (point version)
const Point3df & getControl(int ind) const
carto::VolumeRef< unsigned int > _cage
const carto::VolumeRef< float > & get_image_coords(int ind) const
AimsSurfaceTriangle * coordinates(const AimsSurfaceTriangle &mesh) const
from native coordinate to resample coordinates (mesh version)
std::vector< carto::VolumeRef< float > > _image_coords
void moveControl(int ind, const Point3df &p)
HarmonicCageMeshResampler(const carto::rc_ptr< carto::Volume< unsigned int > > &cage, std::vector< Point3df > &controls, short background=0, short border=1, short inside=2)
AIMSDATA_API AimsTimeSurface< 3, Void > AimsSurfaceTriangle
AimsVector< float, 3 > Point3df