43 #include <pcl/point_cloud.h>
44 #include <pcl/point_types.h>
45 #include <pcl/keypoints/keypoint.h>
46 #include <pcl/common/intensity.h>
66 using Ptr = shared_ptr<AbstractAgastDetector>;
67 using ConstPtr = shared_ptr<const AbstractAgastDetector>;
76 const std::size_t height,
77 const double threshold,
81 , threshold_ (threshold)
82 , nr_max_keypoints_ (
std::numeric_limits<unsigned int>::max ())
94 detectKeypoints (
const std::vector<unsigned char> &intensity_data,
102 detectKeypoints (
const std::vector<float> &intensity_data,
111 applyNonMaxSuppression (
const std::vector<unsigned char>& intensity_data,
121 applyNonMaxSuppression (
const std::vector<float>& intensity_data,
129 computeCornerScore (
const unsigned char* im)
const = 0;
135 computeCornerScore (
const float* im)
const = 0;
143 threshold_ = threshold;
160 nr_max_keypoints_ = nr_max_keypoints;
167 return (nr_max_keypoints_);
175 detect (
const unsigned char* im,
176 std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const = 0;
182 detect (
const float* im,
183 std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &)
const = 0;
219 const std::vector<ScoreIndex>& scores,
228 computeCornerScores (
const unsigned char* im,
229 const std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > & corners_all,
230 std::vector<ScoreIndex> & scores)
const;
238 computeCornerScores (
const float* im,
239 const std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > & corners_all,
240 std::vector<ScoreIndex> & scores)
const;
268 using Ptr = shared_ptr<AgastDetector7_12s>;
269 using ConstPtr = shared_ptr<const AgastDetector7_12s>;
278 const std::size_t height,
279 const double threshold,
280 const double bmax = 255)
293 computeCornerScore (
const unsigned char* im)
const override;
299 computeCornerScore (
const float* im)
const override;
306 detect (
const unsigned char* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
313 detect (
const float* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
318 initPattern ()
override;
322 static const int border_width_ = 2;
325 std::array<std::int_fast16_t, 12> offset_;
339 using Ptr = shared_ptr<AgastDetector5_8>;
340 using ConstPtr = shared_ptr<const AgastDetector5_8>;
349 const std::size_t height,
350 const double threshold,
351 const double bmax = 255)
364 computeCornerScore (
const unsigned char* im)
const override;
370 computeCornerScore (
const float* im)
const override;
377 detect (
const unsigned char* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
384 detect (
const float* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
389 initPattern ()
override;
393 static const int border_width_ = 1;
396 std::array<std::int_fast16_t, 8> offset_;
410 using Ptr = shared_ptr<OastDetector9_16>;
411 using ConstPtr = shared_ptr<const OastDetector9_16>;
420 const std::size_t height,
421 const double threshold,
422 const double bmax = 255)
435 computeCornerScore (
const unsigned char* im)
const override;
441 computeCornerScore (
const float* im)
const override;
448 detect (
const unsigned char* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
455 detect (
const float* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
460 initPattern ()
override;
464 static const int border_width_ = 3;
467 std::array<std::int_fast16_t, 16> offset_;
480 template <
typename Out>
484 const std::vector<unsigned char> &image_data,
490 detector->applyNonMaxSuppression (image_data, tmp_cloud, output_temp);
500 const std::vector<unsigned char> &image_data,
505 detector->applyNonMaxSuppression (image_data, tmp_cloud, output);
509 template <
typename Out>
513 const std::vector<unsigned char> &image_data,
518 detector->detectKeypoints (image_data, output_temp);
528 const std::vector<unsigned char> &image_data,
532 detector->detectKeypoints (image_data, output);
554 template <
typename Po
intInT,
typename Po
intOutT,
typename IntensityT = pcl::common::IntensityFieldAccessor<Po
intInT> >
717 template <
typename Po
intInT,
typename Po
intOutT = pcl::Po
intUV>
737 name_ =
"AgastKeypoint2D";
781 :
public AgastKeypoint2DBase<pcl::PointXYZ, pcl::PointUV, pcl::common::IntensityFieldAccessor<pcl::PointXYZ> >
787 name_ =
"AgastKeypoint2D";
806 #include <pcl/keypoints/impl/agast_2d.hpp>
AgastDetectorPtr getAgastDetector()
void setAgastDetector(const AgastDetectorPtr &detector)
~AgastDetector5_8()
Destructor.
AgastDetector(const std::vector< unsigned char > &image_data, const pcl::keypoints::agast::AbstractAgastDetector::Ptr &detector, pcl::PointCloud< Out > &output)
double bmax_
Max image value.
double getThreshold()
Get the threshold for corner detection, as set by the user.
AgastApplyNonMaxSuppresion(const std::vector< unsigned char > &image_data, const pcl::PointCloud< pcl::PointUV > &tmp_cloud, const pcl::keypoints::agast::AbstractAgastDetector::Ptr &detector, pcl::PointCloud< pcl::PointUV > &output)
Detects 2D AGAST corner points.
double getMaxDataValue()
Get the bmax image value, as set by the user.
double bmax_
Max image value.
Detector class for AGAST corner point detector (7_12s).
virtual ~AbstractAgastDetector()
Destructor.
~AgastKeypoint2D()
Destructor.
Detects 2D AGAST corner points.
~OastDetector9_16()
Destructor.
AgastKeypoint2D()
Constructor.
typename Keypoint< PointInT, PointOutT >::PointCloudOut PointCloudOut
std::string name_
The key point detection method's name.
std::size_t height_
Height of the image to process.
AgastDetectorPtr detector_
The Agast detector to use.
bool getNonMaxSuppression()
Returns whether non-max-suppression is applied or not.
void setMaxDataValue(const double bmax)
Sets the max image data value (affects how many iterations AGAST does)
unsigned int getMaxKeypoints()
Get the maximum number of keypoints to return, as set by the user.
double threshold_
Threshold for corner detection.
AgastDetector7_12s(const std::size_t width, const std::size_t height, const double threshold, const double bmax=255)
Constructor.
Structure holding an index and the associated keypoint score.
Keypoint represents the base class for key points.
void setMaxKeypoints(const unsigned int nr_max_keypoints)
Sets the maximum number of keypoints to return.
shared_ptr< const AbstractAgastDetector > ConstPtr
A 2D point structure representing pixel image coordinates.
void copyPointCloud(const pcl::PointCloud< PointInT > &cloud_in, pcl::PointCloud< PointOutT > &cloud_out)
Copy all the fields from a given point cloud into a new point cloud.
bool initCompute() override
Initializes everything and checks whether input data is fine.
typename PointCloudIn::ConstPtr PointCloudInConstPtr
A point structure representing Euclidean xyz coordinates.
AgastApplyNonMaxSuppresion(const std::vector< unsigned char > &image_data, const pcl::PointCloud< pcl::PointUV > &tmp_cloud, const pcl::keypoints::agast::AbstractAgastDetector::Ptr &detector, pcl::PointCloud< Out > &output)
~AgastKeypoint2DBase()
Destructor.
AgastKeypoint2D()
Constructor.
~AgastKeypoint2D()
Destructor.
Detector class for AGAST corner point detector (OAST 9_16).
void setThreshold(const double threshold)
Sets the threshold for corner detection.
unsigned int nr_max_keypoints_
The maximum number of keypoints to return.
shared_ptr< AbstractAgastDetector > Ptr
bool apply_non_max_suppression_
Determines whether non-max-suppression is activated.
PointCloud represents the base class in PCL for storing collections of 3D points. ...
~AgastDetector7_12s()
Destructor.
AgastDetector(const std::vector< unsigned char > &image_data, const pcl::keypoints::agast::AbstractAgastDetector::Ptr &detector, pcl::PointCloud< pcl::PointUV > &output)
unsigned int nr_max_keypoints_
The maximum number of keypoints to return.
int k_
The number of K nearest neighbors to use for each point.
std::size_t width_
Width of the image to process.
unsigned int getMaxKeypoints()
Get the maximum number of keypoints to return, as set by the user.
AbstractAgastDetector(const std::size_t width, const std::size_t height, const double threshold, const double bmax)
Constructor.
double getThreshold()
Get the threshold for corner detection, as set by the user.
typename Keypoint< PointInT, PointOutT >::PointCloudOut PointCloudOut
Detector class for AGAST corner point detector (5_8).
shared_ptr< const PointCloud< PointInT > > ConstPtr
void detectKeypoints(PointCloudOut &output) override=0
Detects the keypoints.
Abstract detector class for AGAST corner point detectors.
void setNonMaxSuppression(const bool enabled)
Sets whether non-max-suppression is applied or not.
AgastKeypoint2DBase()
Constructor.
AgastDetector5_8(const std::size_t width, const std::size_t height, const double threshold, const double bmax=255)
Constructor.
pcl::keypoints::agast::AbstractAgastDetector::Ptr AgastDetectorPtr
OastDetector9_16(const std::size_t width, const std::size_t height, const double threshold, const double bmax=255)
Constructor.
void detectKeypoints(PointCloudOut &output) override
Detects the keypoints.
double threshold_
Threshold for corner detection.
void setThreshold(const double threshold)
Sets the threshold for corner detection.
IntensityT intensity_
Intensity field accessor.
void setMaxKeypoints(const unsigned int nr_max_keypoints)
Sets the maximum number of keypoints to return.