43 #include <pcl/point_cloud.h>
44 #include <pcl/point_types.h>
45 #include <pcl/keypoints/keypoint.h>
46 #include <pcl/common/intensity.h>
47 #include <pcl/common/io.h>
67 using Ptr = shared_ptr<AbstractAgastDetector>;
68 using ConstPtr = shared_ptr<const AbstractAgastDetector>;
77 const std::size_t height,
78 const double threshold,
82 , threshold_ (threshold)
83 , nr_max_keypoints_ (std::numeric_limits<unsigned int>::max ())
95 detectKeypoints (
const std::vector<unsigned char> &intensity_data,
103 detectKeypoints (
const std::vector<float> &intensity_data,
112 applyNonMaxSuppression (
const std::vector<unsigned char>& intensity_data,
122 applyNonMaxSuppression (
const std::vector<float>& intensity_data,
130 computeCornerScore (
const unsigned char* im)
const = 0;
136 computeCornerScore (
const float* im)
const = 0;
144 threshold_ = threshold;
161 nr_max_keypoints_ = nr_max_keypoints;
168 return (nr_max_keypoints_);
176 detect (
const unsigned char* im,
177 std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const = 0;
183 detect (
const float* im,
184 std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &)
const = 0;
220 const std::vector<ScoreIndex>& scores,
229 computeCornerScores (
const unsigned char* im,
230 const std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > & corners_all,
231 std::vector<ScoreIndex> & scores)
const;
239 computeCornerScores (
const float* im,
240 const std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > & corners_all,
241 std::vector<ScoreIndex> & scores)
const;
269 using Ptr = shared_ptr<AgastDetector7_12s>;
270 using ConstPtr = shared_ptr<const AgastDetector7_12s>;
279 const std::size_t height,
280 const double threshold,
281 const double bmax = 255)
294 computeCornerScore (
const unsigned char* im)
const override;
300 computeCornerScore (
const float* im)
const override;
307 detect (
const unsigned char* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
314 detect (
const float* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
319 initPattern ()
override;
323 static const int border_width_ = 2;
326 std::array<std::int_fast16_t, 12> offset_;
340 using Ptr = shared_ptr<AgastDetector5_8>;
341 using ConstPtr = shared_ptr<const AgastDetector5_8>;
350 const std::size_t height,
351 const double threshold,
352 const double bmax = 255)
365 computeCornerScore (
const unsigned char* im)
const override;
371 computeCornerScore (
const float* im)
const override;
378 detect (
const unsigned char* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
385 detect (
const float* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
390 initPattern ()
override;
394 static const int border_width_ = 1;
397 std::array<std::int_fast16_t, 8> offset_;
411 using Ptr = shared_ptr<OastDetector9_16>;
412 using ConstPtr = shared_ptr<const OastDetector9_16>;
421 const std::size_t height,
422 const double threshold,
423 const double bmax = 255)
436 computeCornerScore (
const unsigned char* im)
const override;
442 computeCornerScore (
const float* im)
const override;
449 detect (
const unsigned char* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
456 detect (
const float* im, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &corners_all)
const override;
461 initPattern ()
override;
465 static const int border_width_ = 3;
468 std::array<std::int_fast16_t, 16> offset_;
481 template <
typename Out>
485 const std::vector<unsigned char> &image_data,
491 detector->applyNonMaxSuppression (image_data, tmp_cloud, output_temp);
501 const std::vector<unsigned char> &image_data,
506 detector->applyNonMaxSuppression (image_data, tmp_cloud, output);
510 template <
typename Out>
514 const std::vector<unsigned char> &image_data,
519 detector->detectKeypoints (image_data, output_temp);
529 const std::vector<unsigned char> &image_data,
533 detector->detectKeypoints (image_data, output);
555 template <
typename Po
intInT,
typename Po
intOutT,
typename IntensityT = pcl::common::IntensityFieldAccessor<Po
intInT> >
714 template <
typename Po
intInT,
typename Po
intOutT = pcl::Po
intUV>
734 name_ =
"AgastKeypoint2D";
776 :
public AgastKeypoint2DBase<pcl::PointXYZ, pcl::PointUV, pcl::common::IntensityFieldAccessor<pcl::PointXYZ> >
782 name_ =
"AgastKeypoint2D";
799 #include <pcl/keypoints/impl/agast_2d.hpp>
AgastDetectorPtr getAgastDetector()
void setAgastDetector(const AgastDetectorPtr &detector)
~AgastKeypoint2DBase() override=default
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).
Detects 2D AGAST corner points.
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)
AgastKeypoint2D()
Constructor.
Detector class for AGAST corner point detector (OAST 9_16).
void setThreshold(const double threshold)
Sets the threshold for corner detection.
~AgastKeypoint2D() override=default
Destructor.
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. ...
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.