42 #include <pcl/point_cloud.h>
44 #include <pcl/keypoints/keypoint.h>
50 class RangeImageBorderExtractor;
63 using Ptr = shared_ptr<NarfKeypoint>;
64 using ConstPtr = shared_ptr<const NarfKeypoint>;
75 Parameters() : support_size(-1.0f), max_no_of_interest_points(-1), min_distance_between_interest_points(0.25f),
76 optimal_distance_to_high_surface_change(0.25), min_interest_value(0.45f),
77 min_surface_change_score(0.2f), optimal_range_image_patch_size(10),
78 distance_for_additional_points(0.0f), add_points_on_straight_edges(false),
79 do_non_maximum_suppression(true), no_of_polynomial_approximations_per_point(false),
80 max_no_of_threads(1), use_recursive_scale_reduction(false),
81 calculate_sparse_interest_image(true) {}
144 const ::pcl::PointCloud<InterestPoint>&
148 const std::vector<bool>&
182 using BaseClass::name_;
Keypoint represents the base class for key points.
NARF (Normal Aligned Radial Feature) keypoints.
const RangeImage & getRangeImage()
Getter for the range image of range_image_border_extractor_.
Keypoint< PointWithRange, int >::PointCloudOut PointCloudOut
Parameters & getParameters()
Getter for the parameter struct.
::pcl::PointCloud< InterestPoint > * interest_points_
shared_ptr< NarfKeypoint > Ptr
void calculateInterestPoints()
const ::pcl::PointCloud< InterestPoint > & getInterestPoints()
Extract maxima from an interest image.
void detectKeypoints(PointCloudOut &output) override
Detect key points.
void compute(PointCloudOut &output)
Overwrite the compute function of the base class.
std::vector< float * > interest_image_scale_space_
void calculateInterestImage()
NarfKeypoint(RangeImageBorderExtractor *range_image_border_extractor=nullptr, float support_size=-1.0f)
void calculateCompleteInterestImage()
void setRangeImage(const RangeImage *range_image)
Set the RangeImage member of the RangeImageBorderExtractor.
void setRangeImageBorderExtractor(RangeImageBorderExtractor *range_image_border_extractor)
Set the RangeImageBorderExtractor member (required)
void clearData()
Erase all data calculated for the current range image.
float * getInterestImage()
Extract interest value per image point.
std::vector< RangeImageBorderExtractor * > border_extractor_scale_space_
shared_ptr< const NarfKeypoint > ConstPtr
RangeImageBorderExtractor * getRangeImageBorderExtractor()
Get the RangeImageBorderExtractor member.
void calculateSparseInterestImage()
const std::vector< bool > & getIsInterestPointImage()
Set all points in the image that are interest points to true, the rest to false.
std::vector< bool > is_interest_point_image_
void calculateScaleSpace()
RangeImageBorderExtractor * range_image_border_extractor_
std::vector< RangeImage * > range_image_scale_space_
PointCloud represents the base class in PCL for storing collections of 3D points.
RangeImage is derived from pcl/PointCloud and provides functionalities with focus on situations where...
Defines all the PCL implemented PointT point type structures.
Defines functions, macros and traits for allocating and using memory.
std::ostream & operator<<(std::ostream &os, const BivariatePolynomialT< real > &p)
Defines all the PCL and non-PCL macros used.
Parameters used in this class.
float min_distance_between_interest_points
Minimum distance between maximas (this is a factor for support_size, i.e.
float optimal_distance_to_high_surface_change
The distance we want keep between keypoints and areas of high surface change (this is a factor for su...
bool use_recursive_scale_reduction
Try to decrease runtime by extracting interest points at lower reolution in areas that contain enough...
float min_surface_change_score
The minimum value of the surface change score to consider a point.
int max_no_of_interest_points
The maximum number of interest points that will be returned.
float distance_for_additional_points
All points in this distance to a found maximum, that are above min_interest_value are also added as i...
bool add_points_on_straight_edges
If this is set to true, there will also be interest points on straight edges, e.g....
bool do_non_maximum_suppression
If this is set to false there will be much more points (can be used to spread points over the whole s...
float min_interest_value
The minimum value to consider a point as an interest point.
int max_no_of_threads
The maximum number of threads this code is allowed to use with OPNEMP.
bool calculate_sparse_interest_image
Use some heuristics to decide which areas of the interest image can be left out to improve the runtim...
bool no_of_polynomial_approximations_per_point
If this is >0, the exact position of the interest point is determined using bivariate polynomial appr...
int optimal_range_image_patch_size
The size (in pixels) of the image patches from which the interest value should be computed.
float support_size
This defines the area 'covered' by an interest point (in meters)