38 #ifndef PCL_NARF_KEYPOINT_H_
39 #define PCL_NARF_KEYPOINT_H_
41 #include <pcl/pcl_macros.h>
42 #include <pcl/point_cloud.h>
43 #include <pcl/point_types.h>
44 #include <pcl/keypoints/keypoint.h>
50 class RangeImageBorderExtractor;
63 typedef boost::shared_ptr<NarfKeypoint>
Ptr;
64 typedef boost::shared_ptr<const NarfKeypoint>
ConstPtr;
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(0),
80 max_no_of_threads(1), use_recursive_scale_reduction(false),
81 calculate_sparse_interest_image(true) {}
137 setRangeImage (
const RangeImage* range_image);
144 const ::pcl::PointCloud<InterestPoint>&
148 const std::vector<bool>&
161 compute (PointCloudOut& output);
166 calculateScaleSpace ();
168 calculateInterestImage ();
170 calculateCompleteInterestImage ();
172 calculateSparseInterestImage ();
174 calculateInterestPoints ();
179 detectKeypoints (PointCloudOut& output);
182 using BaseClass::name_;
206 #endif //#ifndef PCL_NARF_KEYPOINT_H_
bool calculate_sparse_interest_image
Use some heuristics to decide which areas of the interest image can be left out to improve the runtim...
PointCloud represents the base class in PCL for storing collections of 3D points. ...
NARF (Normal Aligned Radial Feature) keypoints.
std::vector< RangeImageBorderExtractor * > border_extractor_scale_space_
float support_size
This defines the area 'covered' by an interest point (in meters)
float * getInterestImage()
Extract interest value per image point.
const ::pcl::PointCloud< InterestPoint > & getInterestPoints()
Extract maxima from an interest image.
RangeImageBorderExtractor * getRangeImageBorderExtractor()
Get the RangeImageBorderExtractor member.
Extract obstacle borders from range images, meaning positions where there is a transition from foregr...
Parameters used in this class.
Keypoint represents the base class for key points.
bool add_points_on_straight_edges
If this is set to true, there will also be interest points on straight edges, e.g., just indicating an area of high surface change.
std::vector< RangeImage * > range_image_scale_space_
Keypoint< PointWithRange, int >::PointCloudOut PointCloudOut
std::vector< float * > interest_image_scale_space_
boost::shared_ptr< const NarfKeypoint > ConstPtr
Parameters & getParameters()
Getter for the parameter struct.
float min_surface_change_score
The minimum value of the surface change score to consider a point.
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...
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...
std::ostream & operator<<(std::ostream &os, const BivariatePolynomialT< real > &p)
Keypoint< PointWithRange, int > BaseClass
int max_no_of_threads
The maximum number of threads this code is allowed to use with OPNEMP.
int max_no_of_interest_points
The maximum number of interest points that will be returned.
boost::shared_ptr< NarfKeypoint > Ptr
RangeImage is derived from pcl/PointCloud and provides functionalities with focus on situations where...
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...
bool no_of_polynomial_approximations_per_point
If this is >0, the exact position of the interest point is determined using bivariate polynomial appr...
float min_distance_between_interest_points
Minimum distance between maximas (this is a factor for support_size, i.e.
const std::vector< bool > & getIsInterestPointImage()
Set all points in the image that are interest points to true, the rest to false.
float min_interest_value
The minimum value to consider a point as an interest point.
int optimal_range_image_patch_size
The size (in pixels) of the image patches from which the interest value should be computed...
::pcl::PointCloud< InterestPoint > * interest_points_
std::vector< bool > is_interest_point_image_
bool use_recursive_scale_reduction
Try to decrease runtime by extracting interest points at lower reolution in areas that contain enough...
RangeImageBorderExtractor * range_image_border_extractor_