42 #include <pcl/features/eigen.h>
43 #include <pcl/common/common_headers.h>
44 #include <pcl/point_representation.h>
52 #define NARF_DEFAULT_SURFACE_PATCH_PIXEL_SIZE 10
76 const Narf& operator=(
const Narf& other);
84 extractFromRangeImageAndAddToList (
const RangeImage& range_image,
const Eigen::Vector3f& interest_point,
int descriptor_size,
85 float support_size,
bool rotation_invariant, std::vector<Narf*>& feature_list);
88 extractFromRangeImageAndAddToList (
const RangeImage& range_image,
float image_x,
float image_y,
int descriptor_size,
89 float support_size,
bool rotation_invariant, std::vector<Narf*>& feature_list);
93 int descriptor_size,
float support_size,
bool rotation_invariant, std::vector<Narf*>& feature_list);
96 extractForEveryRangeImagePointAndAddToList (
const RangeImage& range_image,
int descriptor_size,
float support_size,
97 bool rotation_invariant, std::vector<Narf*>& feature_list);
106 extractFromRangeImage (
const RangeImage& range_image,
const Eigen::Affine3f& pose,
int descriptor_size,
float support_size,
107 int surface_patch_world_size=NARF_DEFAULT_SURFACE_PATCH_PIXEL_SIZE);
111 extractFromRangeImage (
const RangeImage& range_image,
float x,
float y,
int descriptor_size,
float support_size);
115 extractFromRangeImage (
const RangeImage& range_image,
const InterestPoint& interest_point,
int descriptor_size,
float support_size);
119 extractFromRangeImage (
const RangeImage& range_image,
const Eigen::Vector3f& interest_point,
int descriptor_size,
float support_size);
124 extractFromRangeImageWithBestRotation (
const RangeImage& range_image,
const Eigen::Vector3f& interest_point,
125 int descriptor_size,
float support_size);
132 getRotations (std::vector<float>& rotations, std::vector<float>& strengths)
const;
141 getRotatedVersions (
const RangeImage& range_image,
const std::vector<float>& rotations, std::vector<Narf*>& features)
const;
145 getDescriptorDistance (
const Narf& other)
const;
149 getNoOfBeamPoints ()
const {
return (static_cast<int> (pcl_lrint (ceil (0.5f *
float (surface_patch_pixel_size_))))); }
153 copyToNarf36 (
Narf36& narf36)
const;
157 saveBinary (
const std::string& filename)
const;
171 extractDescriptor (
int descriptor_size);
187 inline const Eigen::Vector3f&
190 inline Eigen::Vector3f&
193 inline const Eigen::Affine3f&
196 inline Eigen::Affine3f&
224 freeSurfacePatch () {
delete[] surface_patch_; surface_patch_=NULL; surface_patch_pixel_size_=0; }
253 deepCopy (
const Narf& other);
256 getBlurredSurfacePatch (
int new_pixel_size,
int blur_radius)
const;
260 saveHeader (std::ostream& file)
const;
263 loadHeader (std::istream& file)
const;
266 static const std::string
270 const static int VERSION = 1;
285 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
287 #undef NARF_DEFAULT_SURFACE_PATCH_PIXEL_SIZE
291 #include <pcl/features/impl/narf.hpp>
293 #endif //#ifndef PCL_NARF_H_