Go to the documentation of this file.00001
00063 #ifndef __ORGANIZED_NORMAL_ESTIMATION_H__
00064 #define __ORGANIZED_NORMAL_ESTIMATION_H__
00065
00066 #include "cob_3d_features/organized_features.h"
00067
00068 namespace cob_3d_features
00069 {
00070 namespace OrganizedNormalEstimationHelper
00071 {
00072 template <typename PointT, typename LabelT> void
00073 computeSegmentNormal( Eigen::Vector3f& normal_out, int index,
00074 boost::shared_ptr<const pcl::PointCloud<PointT> > surface,
00075 boost::shared_ptr<const pcl::PointCloud<LabelT> > labels,
00076 int r, int steps);
00077 }
00078
00079 template <typename PointInT, typename PointOutT, typename LabelOutT>
00080 class OrganizedNormalEstimation : public OrganizedFeatures<PointInT,PointOutT>
00081 {
00082 public:
00083
00084 using OrganizedFeatures<PointInT,PointOutT>::pixel_search_radius_;
00085 using OrganizedFeatures<PointInT,PointOutT>::pixel_steps_;
00086 using OrganizedFeatures<PointInT,PointOutT>::circle_steps_;
00087 using OrganizedFeatures<PointInT,PointOutT>::inv_width_;
00088 using OrganizedFeatures<PointInT,PointOutT>::mask_;
00089 using OrganizedFeatures<PointInT,PointOutT>::input_;
00090 using OrganizedFeatures<PointInT,PointOutT>::indices_;
00091 using OrganizedFeatures<PointInT,PointOutT>::surface_;
00092 using OrganizedFeatures<PointInT,PointOutT>::skip_distant_point_threshold_;
00093 using OrganizedFeatures<PointInT,PointOutT>::feature_name_;
00094
00095 typedef pcl::PointCloud<PointInT> PointCloudIn;
00096 typedef typename PointCloudIn::Ptr PointCloudInPtr;
00097 typedef typename PointCloudIn::ConstPtr PointCloudInConstPtr;
00098
00099 typedef pcl::PointCloud<PointOutT> PointCloudOut;
00100 typedef typename PointCloudOut::Ptr PointCloudOutPtr;
00101 typedef typename PointCloudOut::ConstPtr PointCloudOutConstPtr;
00102
00103 typedef pcl::PointCloud<LabelOutT> LabelCloudOut;
00104 typedef typename LabelCloudOut::Ptr LabelCloudOutPtr;
00105 typedef typename LabelCloudOut::ConstPtr LabelCloudOutConstPtr;
00106
00107 OrganizedNormalEstimation ()
00108 {
00109 feature_name_ = "OrganizedNormalEstimation";
00110 };
00111
00112 inline void
00113 setOutputLabels(LabelCloudOutPtr labels) { labels_ = labels; }
00114
00115 void
00116 computePointNormal(
00117 const PointCloudIn &cloud,
00118 int index,
00119 float &n_x,
00120 float &n_y,
00121 float &n_z,
00122 int &label_out);
00123
00124 void
00125 recomputeSegmentNormal(PointCloudInConstPtr cloud_in,
00126 LabelCloudOutConstPtr label_in,
00127 int index,
00128 float& n_x,
00129 float& n_y,
00130 float& n_z);
00131
00132 protected:
00133
00134 void
00135 computeFeature (PointCloudOut &output);
00136
00137 LabelCloudOutPtr labels_;
00138
00139 };
00140 }
00141
00142 #endif