42 #include <pcl/common/point_tests.h>
43 #include <pcl/keypoints/agast_2d.h>
72 template <
typename Po
intInT,
typename Po
intOutT = pcl::Po
intWithScale,
typename IntensityT = pcl::common::IntensityFieldAccessor<Po
intInT> >
76 using Ptr = shared_ptr<BriskKeypoint2D<PointInT, PointOutT, IntensityT> >;
77 using ConstPtr = shared_ptr<const BriskKeypoint2D<PointInT, PointOutT, IntensityT> >;
91 : threshold_ (threshold)
93 , remove_invalid_3D_keypoints_ (false)
96 name_ =
"BriskKeypoint2D";
110 threshold_ = threshold;
144 remove_invalid_3D_keypoints_ = remove;
153 return (remove_invalid_3D_keypoints_);
165 pt.x = pt.y = pt.z = 0;
167 const PointInT &p1 = (*cloud)(u, v);
168 const PointInT &p2 = (*cloud)(u+1, v);
169 const PointInT &p3 = (*cloud)(u, v+1);
170 const PointInT &p4 = (*cloud)(u+1, v+1);
172 float fx = x - float (u), fy = y - float (v);
173 float fx1 = 1.0f - fx, fy1 = 1.0f - fy;
175 float w1 = fx1 * fy1, w2 = fx * fy1, w3 = fx1 * fy, w4 = fx * fy;
208 pt.x = pt.y = pt.z = std::numeric_limits<float>::quiet_NaN ();
211 weight = 1.0f / weight;
212 pt.x *= weight; pt.y *= weight; pt.z *= weight;
227 IntensityT intensity_;
237 bool remove_invalid_3D_keypoints_;
265 Layer (
const std::vector<unsigned char>& img,
266 int width,
int height,
267 float scale = 1.0f,
float offset = 0.0f);
280 getAgastPoints (std::uint8_t threshold, std::vector<
pcl::PointUV, Eigen::aligned_allocator<pcl::PointUV> > &keypoints);
289 getAgastScore (
int x,
int y, std::uint8_t threshold);
296 getAgastScore_5_8 (
int x,
int y, std::uint8_t threshold);
304 getAgastScore (
float xf,
float yf, std::uint8_t threshold,
float scale = 1.0f);
315 getValue (
const std::vector<unsigned char>& mat,
316 int width,
int height,
float xf,
float yf,
float scale);
319 const std::vector<unsigned char>&
336 return (img_height_);
354 inline const std::vector<unsigned char>&
363 halfsample (
const std::vector<unsigned char>& srcimg,
364 int srcwidth,
int srcheight,
365 std::vector<unsigned char>& dstimg,
366 int dstwidth,
int dstheight);
370 twothirdsample (
const std::vector<unsigned char>& srcimg,
371 int srcwidth,
int srcheight,
372 std::vector<unsigned char>& dstimg,
373 int dstwidth,
int dstheight);
376 std::vector<unsigned char> img_;
381 std::vector<unsigned char> scores_;
408 constructPyramid (
const std::vector<unsigned char>& image,
409 int width,
int height);
416 getKeypoints (
const int threshold,
417 std::vector<
pcl::PointWithScale, Eigen::aligned_allocator<pcl::PointWithScale> > &keypoints);
422 isMax2D (
const std::uint8_t layer,
const int x_layer,
const int y_layer);
426 refine1D (
const float s_05,
const float s0,
const float s05,
float& max);
430 refine1D_1 (
const float s_05,
const float s0,
const float s05,
float& max);
434 refine1D_2 (
const float s_05,
const float s0,
const float s05,
float& max);
438 subpixel2D (
const int s_0_0,
const int s_0_1,
const int s_0_2,
439 const int s_1_0,
const int s_1_1,
const int s_1_2,
440 const int s_2_0,
const int s_2_1,
const int s_2_2,
441 float& delta_x,
float& delta_y);
445 refine3D (
const std::uint8_t layer,
446 const int x_layer,
const int y_layer,
447 float& x,
float& y,
float& scale,
bool& ismax);
451 getScoreAbove (
const std::uint8_t layer,
const int x_layer,
const int y_layer);
454 getScoreBelow (
const std::uint8_t layer,
const int x_layer,
const int y_layer);
458 getScoreMaxAbove (
const std::uint8_t layer,
459 const int x_layer,
const int y_layer,
460 const int threshold,
bool& ismax,
461 float& dx,
float& dy);
464 getScoreMaxBelow (
const std::uint8_t layer,
465 const int x_layer,
const int y_layer,
466 const int threshold,
bool& ismax,
467 float& dx,
float& dy);
471 std::vector<pcl::keypoints::brisk::Layer>
pyramid_;
486 #include <pcl/keypoints/impl/brisk_2d.hpp>