Point Cloud Library (PCL)
1.7.1
Main Page
Modules
Namespaces
Classes
segmentation
include
pcl
segmentation
segment_differences.h
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2010, Willow Garage, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above
14
* copyright notice, this list of conditions and the following
15
* disclaimer in the documentation and/or other materials provided
16
* with the distribution.
17
* * Neither the name of the copyright holder(s) nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
* POSSIBILITY OF SUCH DAMAGE.
33
*
34
* $Id$
35
*
36
*/
37
38
#ifndef PCL_SEGMENT_DIFFERENCES_H_
39
#define PCL_SEGMENT_DIFFERENCES_H_
40
41
#include <pcl/pcl_base.h>
42
#include <pcl/search/pcl_search.h>
43
44
namespace
pcl
45
{
46
////////////////////////////////////////////////////////////////////////////////////////////
47
/** \brief Obtain the difference between two aligned point clouds as another point cloud, given a distance threshold.
48
* \param src the input point cloud source
49
* \param tgt the input point cloud target we need to obtain the difference against
50
* \param threshold the distance threshold (tolerance) for point correspondences. (e.g., check if f a point p1 from
51
* src has a correspondence > threshold than a point p2 from tgt)
52
* \param tree the spatial locator (e.g., kd-tree) used for nearest neighbors searching built over \a tgt
53
* \param output the resultant output point cloud difference
54
* \ingroup segmentation
55
*/
56
template
<
typename
Po
int
T>
57
void
getPointCloudDifference
(
58
const
pcl::PointCloud<PointT>
&src,
const
pcl::PointCloud<PointT>
&tgt,
59
double
threshold,
const
boost::shared_ptr<
pcl::search::Search<PointT>
> &tree,
60
pcl::PointCloud<PointT>
&output);
61
62
////////////////////////////////////////////////////////////////////////////////////////////
63
////////////////////////////////////////////////////////////////////////////////////////////
64
////////////////////////////////////////////////////////////////////////////////////////////
65
/** \brief @b SegmentDifferences obtains the difference between two spatially
66
* aligned point clouds and returns the difference between them for a maximum
67
* given distance threshold.
68
* \author Radu Bogdan Rusu
69
* \ingroup segmentation
70
*/
71
template
<
typename
Po
int
T>
72
class
SegmentDifferences
:
public
PCLBase
<PointT>
73
{
74
typedef
PCLBase<PointT>
BasePCLBase
;
75
76
public
:
77
typedef
pcl::PointCloud<PointT>
PointCloud
;
78
typedef
typename
PointCloud::Ptr
PointCloudPtr
;
79
typedef
typename
PointCloud::ConstPtr
PointCloudConstPtr
;
80
81
typedef
typename
pcl::search::Search<PointT>
KdTree
;
82
typedef
typename
pcl::search::Search<PointT>::Ptr
KdTreePtr
;
83
84
typedef
PointIndices::Ptr
PointIndicesPtr
;
85
typedef
PointIndices::ConstPtr
PointIndicesConstPtr
;
86
87
/** \brief Empty constructor. */
88
SegmentDifferences
() :
89
tree_
(),
target_
(),
distance_threshold_
(0)
90
{};
91
92
/** \brief Provide a pointer to the target dataset against which we
93
* compare the input cloud given in setInputCloud
94
*
95
* \param cloud the target PointCloud dataset
96
*/
97
inline
void
98
setTargetCloud
(
const
PointCloudConstPtr
&cloud) {
target_
= cloud; }
99
100
/** \brief Get a pointer to the input target point cloud dataset. */
101
inline
PointCloudConstPtr
const
102
getTargetCloud
() {
return
(
target_
); }
103
104
/** \brief Provide a pointer to the search object.
105
* \param tree a pointer to the spatial search object.
106
*/
107
inline
void
108
setSearchMethod
(
const
KdTreePtr
&tree) {
tree_
= tree; }
109
110
/** \brief Get a pointer to the search method used. */
111
inline
KdTreePtr
112
getSearchMethod
() {
return
(
tree_
); }
113
114
/** \brief Set the maximum distance tolerance (squared) between corresponding
115
* points in the two input datasets.
116
*
117
* \param sqr_threshold the squared distance tolerance as a measure in L2 Euclidean space
118
*/
119
inline
void
120
setDistanceThreshold
(
double
sqr_threshold) {
distance_threshold_
= sqr_threshold; }
121
122
/** \brief Get the squared distance tolerance between corresponding points as a
123
* measure in the L2 Euclidean space.
124
*/
125
inline
double
126
getDistanceThreshold
() {
return
(
distance_threshold_
); }
127
128
/** \brief Segment differences between two input point clouds.
129
* \param output the resultant difference between the two point clouds as a PointCloud
130
*/
131
void
132
segment
(
PointCloud
&output);
133
134
protected
:
135
// Members derived from the base class
136
using
BasePCLBase::input_
;
137
using
BasePCLBase::indices_
;
138
using
BasePCLBase::initCompute
;
139
using
BasePCLBase::deinitCompute
;
140
141
/** \brief A pointer to the spatial search object. */
142
KdTreePtr
tree_
;
143
144
/** \brief The input target point cloud dataset. */
145
PointCloudConstPtr
target_
;
146
147
/** \brief The distance tolerance (squared) as a measure in the L2
148
* Euclidean space between corresponding points.
149
*/
150
double
distance_threshold_
;
151
152
/** \brief Class getName method. */
153
virtual
std::string
154
getClassName
()
const
{
return
(
"SegmentDifferences"
); }
155
};
156
}
157
158
#ifdef PCL_NO_PRECOMPILE
159
#include <pcl/segmentation/impl/segment_differences.hpp>
160
#endif
161
162
#endif //#ifndef PCL_SEGMENT_DIFFERENCES_H_