Point Cloud Library (PCL)  1.11.1-dev
densecrf.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  *
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * * Neither the name of Willow Garage, Inc. nor the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  * Author : Christian Potthast
36  * Email : potthast@usc.edu
37  *
38  */
39 
40 #pragma once
41 
42 #include <pcl/ml/pairwise_potential.h>
43 #include <pcl/memory.h>
44 #include <pcl/pcl_macros.h>
45 
46 namespace pcl {
47 
49 public:
50  /** Constructor for DenseCrf class. */
51  DenseCrf(int N, int m);
52 
53  /** Deconstructor for DenseCrf class. */
54  ~DenseCrf();
55 
56  /** Set the input data vector.
57  *
58  * The input data vector holds the measurements coordinates as ijk of the voxel grid.
59  */
60  void
61  setDataVector(const std::vector<Eigen::Vector3i,
62  Eigen::aligned_allocator<Eigen::Vector3i>> data);
63 
64  /** The associated color of the data. */
65  void
66  setColorVector(const std::vector<Eigen::Vector3i,
67  Eigen::aligned_allocator<Eigen::Vector3i>> color);
68 
69  void
70  setUnaryEnergy(const std::vector<float> unary);
71 
72  void
73  addPairwiseEnergy(const std::vector<float>& feature,
74  const int feature_dimension,
75  const float w);
76 
77  /** Add a pairwise gaussian kernel. */
78  void
79  addPairwiseGaussian(float sx, float sy, float sz, float w);
80 
81  /** Add a bilateral gaussian kernel. */
82  void
83  addPairwiseBilateral(
84  float sx, float sy, float sz, float sr, float sg, float sb, float w);
85 
86  void
87  addPairwiseNormals(
88  std::vector<Eigen::Vector3i, Eigen::aligned_allocator<Eigen::Vector3i>>& coord,
89  std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f>>& normals,
90  float sx,
91  float sy,
92  float sz,
93  float snx,
94  float sny,
95  float snz,
96  float w);
97 
98  void
99  inference(int n_iterations, std::vector<float>& result, float relax = 1.0f);
100 
101  void
102  mapInference(int n_iterations, std::vector<int>& result, float relax = 1.0f);
103 
104  void
105  expAndNormalize(std::vector<float>& out,
106  const std::vector<float>& in,
107  float scale,
108  float relax = 1.0f) const;
109 
110  void
111  expAndNormalizeORI(float* out,
112  const float* in,
113  float scale = 1.0f,
114  float relax = 1.0f);
115  void
116  map(int n_iterations, std::vector<int> result, float relax = 1.0f);
117 
118  std::vector<float>
119  runInference(int n_iterations, float relax);
120 
121  void
122  startInference();
123 
124  void
125  stepInference(float relax);
126 
127  void
128  runInference(float relax);
129 
130  void
131  getBarycentric(int idx, std::vector<float>& bary);
132 
133  void
134  getFeatures(int idx, std::vector<float>& features);
135 
136 protected:
137  /** Number of variables and labels */
138  int N_, M_;
139 
140  /** Data vector */
141  std::vector<Eigen::Vector3i, Eigen::aligned_allocator<Eigen::Vector3i>> data_;
142 
143  /** Color vector */
144  std::vector<Eigen::Vector3i, Eigen::aligned_allocator<Eigen::Vector3i>> color_;
145 
146  /** CRF unary potentials */
147  /** TODO: double might use to much memory */
148  std::vector<float> unary_;
149 
150  std::vector<float> current_;
151  std::vector<float> next_;
152  std::vector<float> tmp_;
153 
154  /** Pairwise potentials */
155  std::vector<PairwisePotential*> pairwise_potential_;
156 
157  /** Input types */
158  bool xyz_, rgb_, normal_;
159 
160 public:
162 };
163 
164 } // namespace pcl
pcl_macros.h
Defines all the PCL and non-PCL macros used.
pcl::DenseCrf
Definition: densecrf.h:48
pcl
Definition: convolution.h:46
pcl::DenseCrf::next_
std::vector< float > next_
Definition: densecrf.h:151
pcl::DenseCrf::N_
int N_
Number of variables and labels.
Definition: densecrf.h:138
pcl::DenseCrf::color_
std::vector< Eigen::Vector3i, Eigen::aligned_allocator< Eigen::Vector3i > > color_
Color vector.
Definition: densecrf.h:144
pcl::DenseCrf::unary_
std::vector< float > unary_
CRF unary potentials.
Definition: densecrf.h:148
pcl::DenseCrf::tmp_
std::vector< float > tmp_
Definition: densecrf.h:152
pcl::DenseCrf::data_
std::vector< Eigen::Vector3i, Eigen::aligned_allocator< Eigen::Vector3i > > data_
Data vector.
Definition: densecrf.h:141
PCL_MAKE_ALIGNED_OPERATOR_NEW
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
Definition: memory.h:63
pcl::DenseCrf::xyz_
bool xyz_
Input types.
Definition: densecrf.h:158
pcl::DenseCrf::current_
std::vector< float > current_
Definition: densecrf.h:150
pcl::DenseCrf::pairwise_potential_
std::vector< PairwisePotential * > pairwise_potential_
Pairwise potentials.
Definition: densecrf.h:155
memory.h
Defines functions, macros and traits for allocating and using memory.
PCL_EXPORTS
#define PCL_EXPORTS
Definition: pcl_macros.h:323