NASA Astrobee Robot Software  Astrobee Version:
Flight software for the Astrobee robots operating inside the International Space Station.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BAD.h
Go to the documentation of this file.
1 
11 #ifndef INTEREST_POINT_BAD_H_
12 #define INTEREST_POINT_BAD_H_
13 
14 #include <opencv2/opencv.hpp>
15 
16 #include <vector>
17 #include <string>
18 
19 namespace upm {
20 
29 class BAD : public cv::Feature2D {
30  public:
35  enum BadSize {
37  };
38 
48  explicit BAD(float scale_factor = 1.0f, BadSize n_bits = SIZE_512_BITS);
49 
60  static cv::Ptr<BAD> create(float scale_factor = 1.0f, BadSize n_bits = SIZE_512_BITS) {
61  return cv::makePtr<upm::BAD>(scale_factor, n_bits);
62  }
63 
75  void compute(cv::InputArray image,
76  CV_OUT CV_IN_OUT std::vector<cv::KeyPoint> &keypoints,
77  cv::OutputArray descriptors) override;
78 
79  int descriptorSize() const override { return box_params_.size() / 8; }
80  int descriptorType() const override { return CV_8UC1; }
81  int defaultNorm() const override { return cv::NORM_HAMMING; }
82  bool empty() const override { return false; }
83 
84  cv::String getDefaultName() const override { return std::string("BAD") + std::to_string(box_params_.size()); }
85 
86  // Struct representing a pair of boxes in the patch
87  struct BoxPairParams {
88  int x1, x2, y1, y2, boxRadius;
89  };
90 
91  protected:
92  // Computes the BADdescriptor
93  void computeBAD(const cv::Mat &integral_img,
94  const std::vector<cv::KeyPoint> &keypoints,
95  cv::Mat &descriptors);
96 
97  std::vector<float> thresholds_;
98  std::vector<BoxPairParams> box_params_;
99  float scale_factor_ = 1;
100  cv::Size patch_size_ = {32, 32};
101 };
102 
103 } // namespace upm
104 #endif // INTEREST_POINT_BAD_H_
upm::BAD::BoxPairParams::x2
int x2
Definition: BAD.h:88
upm::BAD::box_params_
std::vector< BoxPairParams > box_params_
Definition: BAD.h:98
upm::BAD
Definition: BAD.h:29
upm::BAD::SIZE_256_BITS
@ SIZE_256_BITS
Definition: BAD.h:36
upm::BAD::descriptorSize
int descriptorSize() const override
Definition: BAD.h:79
upm::BAD::getDefaultName
cv::String getDefaultName() const override
Definition: BAD.h:84
upm
Definition: BAD.h:19
upm::BAD::empty
bool empty() const override
Definition: BAD.h:82
upm::BAD::computeBAD
void computeBAD(const cv::Mat &integral_img, const std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors)
Definition: BAD.cpp:549
upm::BAD::BoxPairParams::y2
int y2
Definition: BAD.h:88
upm::BAD::SIZE_512_BITS
@ SIZE_512_BITS
Definition: BAD.h:36
upm::BAD::BoxPairParams::x1
int x1
Definition: BAD.h:88
upm::BAD::thresholds_
std::vector< float > thresholds_
Definition: BAD.h:97
upm::BAD::BoxPairParams
Definition: BAD.h:87
upm::BAD::create
static cv::Ptr< BAD > create(float scale_factor=1.0f, BadSize n_bits=SIZE_512_BITS)
Creates the BAD descriptor.
Definition: BAD.h:60
upm::BAD::patch_size_
cv::Size patch_size_
Definition: BAD.h:100
upm::BAD::BAD
BAD(float scale_factor=1.0f, BadSize n_bits=SIZE_512_BITS)
Definition: BAD.cpp:185
upm::BAD::defaultNorm
int defaultNorm() const override
Definition: BAD.h:81
upm::BAD::BoxPairParams::y1
int y1
Definition: BAD.h:88
upm::BAD::descriptorType
int descriptorType() const override
Definition: BAD.h:80
upm::BAD::BadSize
BadSize
Descriptor number of bits, each bit is a weak-descriptor. The user can choose between 512 or 256 bits...
Definition: BAD.h:35
upm::BAD::compute
void compute(cv::InputArray image, CV_OUT CV_IN_OUT std::vector< cv::KeyPoint > &keypoints, cv::OutputArray descriptors) override
Computes the descriptors for a set of keypoints detected in an image (first variant) or image set (se...
Definition: BAD.cpp:519
upm::BAD::scale_factor_
float scale_factor_
Definition: BAD.h:99
upm::BAD::BoxPairParams::boxRadius
int boxRadius
Definition: BAD.h:88