NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
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