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-2011, 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: cvfh.h 4936 2012-03-07 11:12:45Z aaldoma $ 00038 * 00039 */ 00040 00041 #ifndef PCL_FEATURES_CRH_H_ 00042 #define PCL_FEATURES_CRH_H_ 00043 00044 #include <pcl/features/feature.h> 00045 00046 namespace pcl 00047 { 00048 /** \brief CRHEstimation estimates the Camera Roll Histogram (CRH) descriptor for a given 00049 * point cloud dataset containing XYZ data and normals, as presented in: 00050 * - CAD-Model Recognition and 6 DOF Pose Estimation 00051 * A. Aldoma, N. Blodow, D. Gossow, S. Gedikli, R.B. Rusu, M. Vincze and G. Bradski 00052 * ICCV 2011, 3D Representation and Recognition (3dRR11) workshop 00053 * Barcelona, Spain, (2011) 00054 * 00055 * The suggested PointOutT is pcl::Histogram<90>. //dc (real) + 44 complex numbers (real, imaginary) + nyquist (real) 00056 * 00057 * \author Aitor Aldoma 00058 * \ingroup features 00059 */ 00060 template<typename PointInT, typename PointNT, typename PointOutT = pcl::Histogram<90> > 00061 class CRHEstimation : public FeatureFromNormals<PointInT, PointNT, PointOutT> 00062 { 00063 public: 00064 typedef boost::shared_ptr<CRHEstimation<PointInT, PointNT, PointOutT> > Ptr; 00065 typedef boost::shared_ptr<const CRHEstimation<PointInT, PointNT, PointOutT> > ConstPtr; 00066 00067 using Feature<PointInT, PointOutT>::feature_name_; 00068 using Feature<PointInT, PointOutT>::getClassName; 00069 using Feature<PointInT, PointOutT>::indices_; 00070 using Feature<PointInT, PointOutT>::k_; 00071 using Feature<PointInT, PointOutT>::search_radius_; 00072 using Feature<PointInT, PointOutT>::surface_; 00073 using FeatureFromNormals<PointInT, PointNT, PointOutT>::normals_; 00074 00075 typedef typename Feature<PointInT, PointOutT>::PointCloudOut PointCloudOut; 00076 00077 /** \brief Constructor. */ 00078 CRHEstimation () : 00079 vpx_ (0), vpy_ (0), vpz_ (0), nbins_ (90) 00080 { 00081 k_ = 1; 00082 feature_name_ = "CRHEstimation"; 00083 } 00084 ; 00085 00086 /** \brief Set the viewpoint. 00087 * \param[in] vpx the X coordinate of the viewpoint 00088 * \param[in] vpy the Y coordinate of the viewpoint 00089 * \param[in] vpz the Z coordinate of the viewpoint 00090 */ 00091 inline void 00092 setViewPoint (float vpx, float vpy, float vpz) 00093 { 00094 vpx_ = vpx; 00095 vpy_ = vpy; 00096 vpz_ = vpz; 00097 } 00098 00099 /** \brief Get the viewpoint. 00100 * \param[out] vpx the X coordinate of the viewpoint 00101 * \param[out] vpy the Y coordinate of the viewpoint 00102 * \param[out] vpz the Z coordinate of the viewpoint 00103 */ 00104 inline void 00105 getViewPoint (float &vpx, float &vpy, float &vpz) 00106 { 00107 vpx = vpx_; 00108 vpy = vpy_; 00109 vpz = vpz_; 00110 } 00111 00112 inline void 00113 setCentroid (Eigen::Vector4f & centroid) 00114 { 00115 centroid_ = centroid; 00116 } 00117 00118 private: 00119 /** \brief Values describing the viewpoint ("pinhole" camera model assumed). 00120 * By default, the viewpoint is set to 0,0,0. 00121 */ 00122 float vpx_, vpy_, vpz_; 00123 00124 /** \brief Number of bins, this should match the Output type */ 00125 int nbins_; 00126 00127 /** \brief Centroid to be used */ 00128 Eigen::Vector4f centroid_; 00129 00130 /** \brief Estimate the CRH histogram at 00131 * a set of points given by <setInputCloud (), setIndices ()> using the surface in 00132 * setSearchSurface () 00133 * 00134 * \param[out] output the resultant point cloud with a CRH histogram 00135 */ 00136 void 00137 computeFeature (PointCloudOut &output); 00138 }; 00139 } 00140 00141 #ifdef PCL_NO_PRECOMPILE 00142 #include <pcl/features/impl/crh.hpp> 00143 #endif 00144 00145 #endif //#ifndef PCL_FEATURES_CRH_H_