Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef PCL_KEYPOINTS_AGAST_KEYPOINT_2D_IMPL_H_
00040 #define PCL_KEYPOINTS_AGAST_KEYPOINT_2D_IMPL_H_
00041
00042 #include <pcl/common/io.h>
00043
00045 template <typename PointInT, typename PointOutT, typename IntensityT> bool
00046 pcl::AgastKeypoint2DBase<PointInT, PointOutT, IntensityT>::initCompute ()
00047 {
00048 if (!pcl::Keypoint<PointInT, PointOutT>::initCompute ())
00049 {
00050 PCL_ERROR ("[pcl::%s::initCompute] init failed.!\n", name_.c_str ());
00051 return (false);
00052 }
00053
00054 if (!input_->isOrganized ())
00055 {
00056 PCL_ERROR ("[pcl::%s::initCompute] %s doesn't support non organized clouds!\n", name_.c_str ());
00057 return (false);
00058 }
00059
00060 return (true);
00061 }
00062
00064 template <typename PointInT, typename PointOutT> void
00065 pcl::AgastKeypoint2D<PointInT, PointOutT>::detectKeypoints (PointCloudOut &output)
00066 {
00067
00068 const size_t width = input_->width;
00069 const size_t height = input_->height;
00070
00071
00072 std::vector<unsigned char> image_data (width*height);
00073
00074 for (size_t i = 0; i < image_data.size (); ++i)
00075 image_data[i] = static_cast<unsigned char> (intensity_ ((*input_)[i]));
00076
00077 if (!detector_)
00078 detector_.reset (new pcl::keypoints::agast::AgastDetector7_12s (width, height, threshold_, bmax_));
00079
00080 detector_->setMaxKeypoints (nr_max_keypoints_);
00081
00082 if (apply_non_max_suppression_)
00083 {
00084 pcl::PointCloud<pcl::PointUV> tmp_cloud;
00085 detector_->detectKeypoints (image_data, tmp_cloud);
00086
00087 pcl::keypoints::internal::AgastApplyNonMaxSuppresion<PointOutT> anms (
00088 image_data, tmp_cloud, detector_, output);
00089 }
00090 else
00091 {
00092 pcl::keypoints::internal::AgastDetector<PointOutT> dec (
00093 image_data, detector_, output);
00094 }
00095
00096
00097 output.is_dense = true;
00098 }
00099
00100
00101 #define AgastKeypoint2D(T,I) template class PCL_EXPORTS pcl::AgastKeypoint2D<T,I>;
00102 #endif