OpenCV中ORB的类定义
class ORB { public: /** The patch sizes that can be used (only one right now) */ struct CommonParams { enum { DEFAULT_N_LEVELS = 3, DEFAULT_FIRST_LEVEL = 0}; /** default constructor */ CommonParams(float scale_factor = 1.2f, unsigned int n_levels = DEFAULT_N_LEVELS, int edge_threshold = 31, unsigned int first_level = DEFAULT_FIRST_LEVEL); void read(const FileNode& fn); void write(FileStorage& fs) const; /** Coefficient by which we divide the dimensions from one scale pyramid level to the next */ float scale_factor_; /** The number of levels in the scale pyramid */ unsigned int n_levels_; /** The level at which the image is given * if 1, that means we will also look at the image scale_factor_ times bigger */ unsigned int first_level_; /** How far from the boundary the points should be */ int edge_threshold_; }; // c:function::default constructor ORB(); // constructor that initializes all the algorithm parameters ORB( const CommonParams detector_params ); // returns the number of elements in each descriptor (32 bytes) int descriptorSize() const; // detects keypoints using ORB void operator()(const Mat& img, const Mat& mask, vector<KeyPoint>& keypoints) const; // detects ORB keypoints and computes the ORB descriptors for them; // output vector "descriptors" stores elements of descriptors and has size // equal descriptorSize()*keypoints.size() as each descriptor is // descriptorSize() elements of this vector. void operator()(const Mat& img, const Mat& mask, vector<KeyPoint>& keypoints, cv::Mat& descriptors, bool useProvidedKeypoints=false) const; };
我们可以看到参数主要有4个
float scale_factor = 1.2f, unsigned int n_levels = DEFAULT_N_LEVELS, int edge_threshold = 31, unsigned int first_level = DEFAULT_FIRST_LEVEL
由文献中
In our implementation, smoothing is achieved using an integral image, where each test point is a 5 × 5 subwindow of a 31 × 31 pixel patch
可以知道edge_threshold对应的pixel patch