Point Cloud Library (PCL)
1.7.0
|
00001 /* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Point Cloud Library (PCL) - www.pointclouds.org 00005 * Copyright (c) 2010-2012, Willow Garage, Inc. 00006 * Copyright (c) 2012-, Open Perception, Inc. 00007 * 00008 * All rights reserved. 00009 * 00010 * Redistribution and use in source and binary forms, with or without 00011 * modification, are permitted provided that the following conditions 00012 * are met: 00013 * 00014 * * Redistributions of source code must retain the above copyright 00015 * notice, this list of conditions and the following disclaimer. 00016 * * Redistributions in binary form must reproduce the above 00017 * copyright notice, this list of conditions and the following 00018 * disclaimer in the documentation and/or other materials provided 00019 * with the distribution. 00020 * * Neither the name of the copyright holder(s) nor the names of its 00021 * contributors may be used to endorse or promote products derived 00022 * from this software without specific prior written permission. 00023 * 00024 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00025 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00026 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00027 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00028 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00029 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00030 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00031 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00032 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00033 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00034 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00035 * POSSIBILITY OF SUCH DAMAGE. 00036 * 00037 * $Id$ 00038 */ 00039 00040 #ifndef PCL_FEATURES_SHOT_LRF_H_ 00041 #define PCL_FEATURES_SHOT_LRF_H_ 00042 00043 #include <pcl/point_types.h> 00044 #include <pcl/features/feature.h> 00045 00046 namespace pcl 00047 { 00048 /** \brief SHOTLocalReferenceFrameEstimation estimates the Local Reference Frame used in the calculation 00049 * of the (SHOT) descriptor. 00050 * 00051 * \note If you use this code in any academic work, please cite: 00052 * 00053 * - F. Tombari, S. Salti, L. Di Stefano 00054 * Unique Signatures of Histograms for Local Surface Description. 00055 * In Proceedings of the 11th European Conference on Computer Vision (ECCV), 00056 * Heraklion, Greece, September 5-11 2010. 00057 * - F. Tombari, S. Salti, L. Di Stefano 00058 * A Combined Texture-Shape Descriptor For Enhanced 3D Feature Matching. 00059 * In Proceedings of the 18th International Conference on Image Processing (ICIP), 00060 * Brussels, Belgium, September 11-14 2011. 00061 * 00062 * \author Samuele Salti, Federico Tombari 00063 * \ingroup features 00064 */ 00065 template<typename PointInT, typename PointOutT = ReferenceFrame> 00066 class SHOTLocalReferenceFrameEstimation : public Feature<PointInT, PointOutT> 00067 { 00068 public: 00069 typedef boost::shared_ptr<SHOTLocalReferenceFrameEstimation<PointInT, PointOutT> > Ptr; 00070 typedef boost::shared_ptr<const SHOTLocalReferenceFrameEstimation<PointInT, PointOutT> > ConstPtr; 00071 /** \brief Constructor */ 00072 SHOTLocalReferenceFrameEstimation () 00073 { 00074 feature_name_ = "SHOTLocalReferenceFrameEstimation"; 00075 } 00076 00077 /** \brief Empty destructor */ 00078 virtual ~SHOTLocalReferenceFrameEstimation () {} 00079 00080 protected: 00081 using Feature<PointInT, PointOutT>::feature_name_; 00082 using Feature<PointInT, PointOutT>::getClassName; 00083 //using Feature<PointInT, PointOutT>::searchForNeighbors; 00084 using Feature<PointInT, PointOutT>::input_; 00085 using Feature<PointInT, PointOutT>::indices_; 00086 using Feature<PointInT, PointOutT>::surface_; 00087 using Feature<PointInT, PointOutT>::tree_; 00088 using Feature<PointInT, PointOutT>::search_parameter_; 00089 00090 typedef typename Feature<PointInT, PointOutT>::PointCloudIn PointCloudIn; 00091 typedef typename Feature<PointInT, PointOutT>::PointCloudOut PointCloudOut; 00092 00093 /** \brief Computes disambiguated local RF for a point index 00094 * \param[in] cloud input point cloud 00095 * \param[in] search_radius the neighborhood radius 00096 * \param[in] central_point the point from the input_ cloud at which the local RF is computed 00097 * \param[in] indices the neighbours indices 00098 * \param[in] dists the squared distances to the neighbours 00099 * \param[out] rf reference frame to compute 00100 */ 00101 float 00102 getLocalRF (const int &index, Eigen::Matrix3f &rf); 00103 00104 /** \brief Feature estimation method. 00105 * \param[out] output the resultant features 00106 */ 00107 virtual void 00108 computeFeature (PointCloudOut &output); 00109 }; 00110 } 00111 00112 #ifdef PCL_NO_PRECOMPILE 00113 #include <pcl/features/impl/shot_lrf.hpp> 00114 #endif 00115 00116 #endif // PCL_FEATURES_SHOT_LRF_H_ 00117