|
|
|
@ -49,8 +49,6 @@ |
|
|
|
|
namespace cv |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
CV_EXPORTS bool initModule_features2d(void); |
|
|
|
|
|
|
|
|
|
// //! writes vector of keypoints to the file storage
|
|
|
|
|
// CV_EXPORTS void write(FileStorage& fs, const String& name, const std::vector<KeyPoint>& keypoints);
|
|
|
|
|
// //! reads vector of keypoints from the specified file storage node
|
|
|
|
@ -94,12 +92,12 @@ public: |
|
|
|
|
/************************************ Base Classes ************************************/ |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Abstract base class for 2D image feature detectors. |
|
|
|
|
* Abstract base class for 2D image feature detectors and descriptor extractors |
|
|
|
|
*/ |
|
|
|
|
class CV_EXPORTS_W FeatureDetector : public virtual Algorithm |
|
|
|
|
class CV_EXPORTS_W Feature2D : public virtual Algorithm |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
virtual ~FeatureDetector(); |
|
|
|
|
virtual ~Feature2D(); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Detect keypoints in an image. |
|
|
|
@ -108,47 +106,9 @@ public: |
|
|
|
|
* mask Mask specifying where to look for keypoints (optional). Must be a char |
|
|
|
|
* matrix with non-zero values in the region of interest. |
|
|
|
|
*/ |
|
|
|
|
CV_WRAP void detect( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Detect keypoints in an image set. |
|
|
|
|
* images Image collection. |
|
|
|
|
* keypoints Collection of keypoints detected in an input images. keypoints[i] is a set of keypoints detected in an images[i]. |
|
|
|
|
* masks Masks for image set. masks[i] is a mask for images[i]. |
|
|
|
|
*/ |
|
|
|
|
void detect( InputArrayOfArrays images, std::vector<std::vector<KeyPoint> >& keypoints, InputArrayOfArrays masks=noArray() ) const; |
|
|
|
|
|
|
|
|
|
// Return true if detector object is empty
|
|
|
|
|
CV_WRAP virtual bool empty() const; |
|
|
|
|
|
|
|
|
|
// Create feature detector by detector name.
|
|
|
|
|
CV_WRAP static Ptr<FeatureDetector> create( const String& detectorType ); |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
virtual void detectImpl( InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const = 0; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Remove keypoints that are not in the mask. |
|
|
|
|
* Helper function, useful when wrapping a library call for keypoint detection that |
|
|
|
|
* does not support a mask argument. |
|
|
|
|
*/ |
|
|
|
|
static void removeInvalidPoints( const Mat & mask, std::vector<KeyPoint>& keypoints ); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Abstract base class for computing descriptors for image keypoints. |
|
|
|
|
* |
|
|
|
|
* In this interface we assume a keypoint descriptor can be represented as a |
|
|
|
|
* dense, fixed-dimensional vector of some basic type. Most descriptors used |
|
|
|
|
* in practice follow this pattern, as it makes it very easy to compute |
|
|
|
|
* distances between descriptors. Therefore we represent a collection of |
|
|
|
|
* descriptors as a Mat, where each row is one keypoint descriptor. |
|
|
|
|
*/ |
|
|
|
|
class CV_EXPORTS_W DescriptorExtractor : public virtual Algorithm |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
virtual ~DescriptorExtractor(); |
|
|
|
|
CV_WRAP virtual void detect( InputArray image, |
|
|
|
|
CV_OUT std::vector<KeyPoint>& keypoints, |
|
|
|
|
InputArray mask=noArray() ); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Compute the descriptors for a set of keypoints in an image. |
|
|
|
@ -156,157 +116,39 @@ public: |
|
|
|
|
* keypoints The input keypoints. Keypoints for which a descriptor cannot be computed are removed. |
|
|
|
|
* descriptors Copmputed descriptors. Row i is the descriptor for keypoint i. |
|
|
|
|
*/ |
|
|
|
|
CV_WRAP void compute( InputArray image, CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints, OutputArray descriptors ) const; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Compute the descriptors for a keypoints collection detected in image collection. |
|
|
|
|
* images Image collection. |
|
|
|
|
* keypoints Input keypoints collection. keypoints[i] is keypoints detected in images[i]. |
|
|
|
|
* Keypoints for which a descriptor cannot be computed are removed. |
|
|
|
|
* descriptors Descriptor collection. descriptors[i] are descriptors computed for set keypoints[i]. |
|
|
|
|
*/ |
|
|
|
|
void compute( InputArrayOfArrays images, std::vector<std::vector<KeyPoint> >& keypoints, OutputArrayOfArrays descriptors ) const; |
|
|
|
|
|
|
|
|
|
CV_WRAP virtual int descriptorSize() const = 0; |
|
|
|
|
CV_WRAP virtual int descriptorType() const = 0; |
|
|
|
|
CV_WRAP virtual int defaultNorm() const = 0; |
|
|
|
|
|
|
|
|
|
CV_WRAP virtual bool empty() const; |
|
|
|
|
|
|
|
|
|
CV_WRAP static Ptr<DescriptorExtractor> create( const String& descriptorExtractorType ); |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
virtual void computeImpl( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors ) const = 0; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Remove keypoints within borderPixels of an image edge. |
|
|
|
|
*/ |
|
|
|
|
static void removeBorderKeypoints( std::vector<KeyPoint>& keypoints, |
|
|
|
|
Size imageSize, int borderSize ); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CV_WRAP virtual void compute( InputArray image, |
|
|
|
|
CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints, |
|
|
|
|
OutputArray descriptors ); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Abstract base class for simultaneous 2D feature detection descriptor extraction. |
|
|
|
|
*/ |
|
|
|
|
class CV_EXPORTS_W Feature2D : public FeatureDetector, public DescriptorExtractor |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
/*
|
|
|
|
|
* Detect keypoints in an image. |
|
|
|
|
* image The image. |
|
|
|
|
* keypoints The detected keypoints. |
|
|
|
|
* mask Mask specifying where to look for keypoints (optional). Must be a char |
|
|
|
|
* matrix with non-zero values in the region of interest. |
|
|
|
|
* useProvidedKeypoints If true, the method will skip the detection phase and will compute |
|
|
|
|
* descriptors for the provided keypoints |
|
|
|
|
*/ |
|
|
|
|
CV_WRAP_AS(detectAndCompute) virtual void operator()( InputArray image, InputArray mask, |
|
|
|
|
/* Detects keypoints and computes the descriptors */ |
|
|
|
|
CV_WRAP virtual void detectAndCompute( InputArray image, InputArray mask, |
|
|
|
|
CV_OUT std::vector<KeyPoint>& keypoints, |
|
|
|
|
OutputArray descriptors, |
|
|
|
|
bool useProvidedKeypoints=false ) const = 0; |
|
|
|
|
bool useProvidedKeypoints=false ); |
|
|
|
|
|
|
|
|
|
CV_WRAP void compute( InputArray image, CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints, OutputArray descriptors ) const; |
|
|
|
|
CV_WRAP virtual int descriptorSize() const; |
|
|
|
|
CV_WRAP virtual int descriptorType() const; |
|
|
|
|
CV_WRAP virtual int defaultNorm() const; |
|
|
|
|
|
|
|
|
|
// Create feature detector and descriptor extractor by name.
|
|
|
|
|
CV_WRAP static Ptr<Feature2D> create( const String& name ); |
|
|
|
|
// Return true if detector object is empty
|
|
|
|
|
CV_WRAP virtual bool empty() const; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
typedef Feature2D FeatureDetector; |
|
|
|
|
typedef Feature2D DescriptorExtractor; |
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
BRISK implementation |
|
|
|
|
*/ |
|
|
|
|
class CV_EXPORTS_W BRISK : public Feature2D |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
CV_WRAP explicit BRISK(int thresh=30, int octaves=3, float patternScale=1.0f); |
|
|
|
|
|
|
|
|
|
virtual ~BRISK(); |
|
|
|
|
|
|
|
|
|
// returns the descriptor size in bytes
|
|
|
|
|
int descriptorSize() const; |
|
|
|
|
// returns the descriptor type
|
|
|
|
|
int descriptorType() const; |
|
|
|
|
// returns the default norm type
|
|
|
|
|
int defaultNorm() const; |
|
|
|
|
|
|
|
|
|
// Compute the BRISK features on an image
|
|
|
|
|
void operator()(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints) const; |
|
|
|
|
|
|
|
|
|
// Compute the BRISK features and descriptors on an image
|
|
|
|
|
void operator()( InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints, |
|
|
|
|
OutputArray descriptors, bool useProvidedKeypoints=false ) const; |
|
|
|
|
|
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
|
|
|
|
|
CV_WRAP static Ptr<BRISK> create(int thresh=30, int octaves=3, float patternScale=1.0f); |
|
|
|
|
// custom setup
|
|
|
|
|
CV_WRAP explicit BRISK(std::vector<float> &radiusList, std::vector<int> &numberList, |
|
|
|
|
float dMax=5.85f, float dMin=8.2f, std::vector<int> indexChange=std::vector<int>()); |
|
|
|
|
|
|
|
|
|
// call this to generate the kernel:
|
|
|
|
|
// circle of radius r (pixels), with n points;
|
|
|
|
|
// short pairings with dMax, long pairings with dMin
|
|
|
|
|
CV_WRAP void generateKernel(std::vector<float> &radiusList, |
|
|
|
|
std::vector<int> &numberList, float dMax=5.85f, float dMin=8.2f, |
|
|
|
|
std::vector<int> indexChange=std::vector<int>()); |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
|
|
|
|
|
void computeImpl( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors ) const; |
|
|
|
|
void detectImpl( InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const; |
|
|
|
|
|
|
|
|
|
void computeKeypointsNoOrientation(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints) const; |
|
|
|
|
void computeDescriptorsAndOrOrientation(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints, |
|
|
|
|
OutputArray descriptors, bool doDescriptors, bool doOrientation, |
|
|
|
|
bool useProvidedKeypoints) const; |
|
|
|
|
|
|
|
|
|
// Feature parameters
|
|
|
|
|
CV_PROP_RW int threshold; |
|
|
|
|
CV_PROP_RW int octaves; |
|
|
|
|
|
|
|
|
|
// some helper structures for the Brisk pattern representation
|
|
|
|
|
struct BriskPatternPoint{ |
|
|
|
|
float x; // x coordinate relative to center
|
|
|
|
|
float y; // x coordinate relative to center
|
|
|
|
|
float sigma; // Gaussian smoothing sigma
|
|
|
|
|
}; |
|
|
|
|
struct BriskShortPair{ |
|
|
|
|
unsigned int i; // index of the first pattern point
|
|
|
|
|
unsigned int j; // index of other pattern point
|
|
|
|
|
}; |
|
|
|
|
struct BriskLongPair{ |
|
|
|
|
unsigned int i; // index of the first pattern point
|
|
|
|
|
unsigned int j; // index of other pattern point
|
|
|
|
|
int weighted_dx; // 1024.0/dx
|
|
|
|
|
int weighted_dy; // 1024.0/dy
|
|
|
|
|
}; |
|
|
|
|
inline int smoothedIntensity(const cv::Mat& image, |
|
|
|
|
const cv::Mat& integral,const float key_x, |
|
|
|
|
const float key_y, const unsigned int scale, |
|
|
|
|
const unsigned int rot, const unsigned int point) const; |
|
|
|
|
// pattern properties
|
|
|
|
|
BriskPatternPoint* patternPoints_; //[i][rotation][scale]
|
|
|
|
|
unsigned int points_; // total number of collocation points
|
|
|
|
|
float* scaleList_; // lists the scaling per scale index [scale]
|
|
|
|
|
unsigned int* sizeList_; // lists the total pattern size per scale index [scale]
|
|
|
|
|
static const unsigned int scales_; // scales discretization
|
|
|
|
|
static const float scalerange_; // span of sizes 40->4 Octaves - else, this needs to be adjusted...
|
|
|
|
|
static const unsigned int n_rot_; // discretization of the rotation look-up
|
|
|
|
|
|
|
|
|
|
// pairs
|
|
|
|
|
int strings_; // number of uchars the descriptor consists of
|
|
|
|
|
float dMax_; // short pair maximum distance
|
|
|
|
|
float dMin_; // long pair maximum distance
|
|
|
|
|
BriskShortPair* shortPairs_; // d<_dMax
|
|
|
|
|
BriskLongPair* longPairs_; // d>_dMin
|
|
|
|
|
unsigned int noShortPairs_; // number of shortParis
|
|
|
|
|
unsigned int noLongPairs_; // number of longParis
|
|
|
|
|
|
|
|
|
|
// general
|
|
|
|
|
static const float basicSize_; |
|
|
|
|
CV_WRAP static Ptr<BRISK> create(const std::vector<float> &radiusList, const std::vector<int> &numberList, |
|
|
|
|
float dMax=5.85f, float dMin=8.2f, const std::vector<int> indexChange=std::vector<int>()); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
ORB implementation. |
|
|
|
|
*/ |
|
|
|
@ -316,44 +158,10 @@ public: |
|
|
|
|
// the size of the signature in bytes
|
|
|
|
|
enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 }; |
|
|
|
|
|
|
|
|
|
CV_WRAP explicit ORB(int nfeatures = 500, float scaleFactor = 1.2f, int nlevels = 8, int edgeThreshold = 31, |
|
|
|
|
CV_WRAP static Ptr<ORB> create(int nfeatures = 500, float scaleFactor = 1.2f, int nlevels = 8, int edgeThreshold = 31, |
|
|
|
|
int firstLevel = 0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold = 20); |
|
|
|
|
|
|
|
|
|
// returns the descriptor size in bytes
|
|
|
|
|
int descriptorSize() const; |
|
|
|
|
// returns the descriptor type
|
|
|
|
|
int descriptorType() const; |
|
|
|
|
// returns the default norm type
|
|
|
|
|
int defaultNorm() const; |
|
|
|
|
|
|
|
|
|
// Compute the ORB features and descriptors on an image
|
|
|
|
|
void operator()(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints) const; |
|
|
|
|
|
|
|
|
|
// Compute the ORB features and descriptors on an image
|
|
|
|
|
void operator()( InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints, |
|
|
|
|
OutputArray descriptors, bool useProvidedKeypoints=false ) const; |
|
|
|
|
|
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
|
|
|
|
|
void computeImpl( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors ) const; |
|
|
|
|
void detectImpl( InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const; |
|
|
|
|
|
|
|
|
|
CV_PROP_RW int nfeatures; |
|
|
|
|
CV_PROP_RW double scaleFactor; |
|
|
|
|
CV_PROP_RW int nlevels; |
|
|
|
|
CV_PROP_RW int edgeThreshold; |
|
|
|
|
CV_PROP_RW int firstLevel; |
|
|
|
|
CV_PROP_RW int WTA_K; |
|
|
|
|
CV_PROP_RW int scoreType; |
|
|
|
|
CV_PROP_RW int patchSize; |
|
|
|
|
CV_PROP_RW int fastThreshold; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
typedef ORB OrbFeatureDetector; |
|
|
|
|
typedef ORB OrbDescriptorExtractor; |
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
Maximal Stable Extremal Regions class. |
|
|
|
|
|
|
|
|
@ -363,36 +171,19 @@ typedef ORB OrbDescriptorExtractor; |
|
|
|
|
|
|
|
|
|
It returns the regions, each of those is encoded as a contour. |
|
|
|
|
*/ |
|
|
|
|
class CV_EXPORTS_W MSER : public FeatureDetector |
|
|
|
|
class CV_EXPORTS_W MSER : public Feature2D |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
//! the full constructor
|
|
|
|
|
CV_WRAP explicit MSER( int _delta=5, int _min_area=60, int _max_area=14400, |
|
|
|
|
CV_WRAP static Ptr<MSER> create( int _delta=5, int _min_area=60, int _max_area=14400, |
|
|
|
|
double _max_variation=0.25, double _min_diversity=.2, |
|
|
|
|
int _max_evolution=200, double _area_threshold=1.01, |
|
|
|
|
double _min_margin=0.003, int _edge_blur_size=5 ); |
|
|
|
|
|
|
|
|
|
//! the operator that extracts the MSERs from the image or the specific part of it
|
|
|
|
|
CV_WRAP_AS(detect) void operator()( InputArray image, CV_OUT std::vector<std::vector<Point> >& msers, |
|
|
|
|
InputArray mask=noArray() ) const; |
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
void detectImpl( InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const; |
|
|
|
|
|
|
|
|
|
int delta; |
|
|
|
|
int minArea; |
|
|
|
|
int maxArea; |
|
|
|
|
double maxVariation; |
|
|
|
|
double minDiversity; |
|
|
|
|
int maxEvolution; |
|
|
|
|
double areaThreshold; |
|
|
|
|
double minMargin; |
|
|
|
|
int edgeBlurSize; |
|
|
|
|
CV_WRAP virtual int detectAndLabel( InputArray image, OutputArray label, |
|
|
|
|
OutputArray stats=noArray() ) const = 0; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
typedef MSER MserFeatureDetector; |
|
|
|
|
|
|
|
|
|
//! detects corners using FAST algorithm by E. Rosten
|
|
|
|
|
CV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints, |
|
|
|
|
int threshold, bool nonmaxSuppression=true ); |
|
|
|
@ -400,7 +191,7 @@ CV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints, |
|
|
|
|
CV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints, |
|
|
|
|
int threshold, bool nonmaxSuppression, int type ); |
|
|
|
|
|
|
|
|
|
class CV_EXPORTS_W FastFeatureDetector : public FeatureDetector |
|
|
|
|
class CV_EXPORTS_W FastFeatureDetector : public Feature2D |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
enum Type |
|
|
|
@ -408,40 +199,19 @@ public: |
|
|
|
|
TYPE_5_8 = 0, TYPE_7_12 = 1, TYPE_9_16 = 2 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
CV_WRAP FastFeatureDetector( int threshold=10, bool nonmaxSuppression=true); |
|
|
|
|
CV_WRAP FastFeatureDetector( int threshold, bool nonmaxSuppression, int type); |
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
virtual void detectImpl( InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const; |
|
|
|
|
|
|
|
|
|
int threshold; |
|
|
|
|
bool nonmaxSuppression; |
|
|
|
|
int type; |
|
|
|
|
CV_WRAP static Ptr<FastFeatureDetector> create( int threshold=10, bool nonmaxSuppression=true, int type=TYPE_9_16 ); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CV_EXPORTS_W GFTTDetector : public FeatureDetector |
|
|
|
|
class CV_EXPORTS_W GFTTDetector : public Feature2D |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
CV_WRAP GFTTDetector( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1, |
|
|
|
|
CV_WRAP static Ptr<GFTTDetector> create( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1, |
|
|
|
|
int blockSize=3, bool useHarrisDetector=false, double k=0.04 ); |
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
virtual void detectImpl( InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const; |
|
|
|
|
|
|
|
|
|
int nfeatures; |
|
|
|
|
double qualityLevel; |
|
|
|
|
double minDistance; |
|
|
|
|
int blockSize; |
|
|
|
|
bool useHarrisDetector; |
|
|
|
|
double k; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
typedef GFTTDetector GoodFeaturesToTrackDetector; |
|
|
|
|
|
|
|
|
|
class CV_EXPORTS_W SimpleBlobDetector : public FeatureDetector |
|
|
|
|
class CV_EXPORTS_W SimpleBlobDetector : public Feature2D |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
struct CV_EXPORTS_W_SIMPLE Params |
|
|
|
@ -472,81 +242,29 @@ public: |
|
|
|
|
void write( FileStorage& fs ) const; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
CV_WRAP SimpleBlobDetector(const SimpleBlobDetector::Params ¶meters = SimpleBlobDetector::Params()); |
|
|
|
|
|
|
|
|
|
virtual void read( const FileNode& fn ); |
|
|
|
|
virtual void write( FileStorage& fs ) const; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
struct CV_EXPORTS Center |
|
|
|
|
{ |
|
|
|
|
Point2d location; |
|
|
|
|
double radius; |
|
|
|
|
double confidence; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
virtual void detectImpl( InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask=noArray() ) const; |
|
|
|
|
virtual void findBlobs(InputArray image, InputArray binaryImage, std::vector<Center> ¢ers) const; |
|
|
|
|
|
|
|
|
|
Params params; |
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
CV_WRAP static Ptr<SimpleBlobDetector> |
|
|
|
|
create(const SimpleBlobDetector::Params ¶meters = SimpleBlobDetector::Params()); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// KAZE/AKAZE diffusivity
|
|
|
|
|
enum { |
|
|
|
|
DIFF_PM_G1 = 0, |
|
|
|
|
DIFF_PM_G2 = 1, |
|
|
|
|
DIFF_WEICKERT = 2, |
|
|
|
|
DIFF_CHARBONNIER = 3 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// AKAZE descriptor type
|
|
|
|
|
enum { |
|
|
|
|
DESCRIPTOR_KAZE_UPRIGHT = 2, ///< Upright descriptors, not invariant to rotation
|
|
|
|
|
DESCRIPTOR_KAZE = 3, |
|
|
|
|
DESCRIPTOR_MLDB_UPRIGHT = 4, ///< Upright descriptors, not invariant to rotation
|
|
|
|
|
DESCRIPTOR_MLDB = 5 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
KAZE implementation |
|
|
|
|
*/ |
|
|
|
|
class CV_EXPORTS_W KAZE : public Feature2D |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
CV_WRAP KAZE(); |
|
|
|
|
CV_WRAP explicit KAZE(bool extended, bool upright, float threshold = 0.001f, |
|
|
|
|
int octaves = 4, int sublevels = 4, int diffusivity = DIFF_PM_G2); |
|
|
|
|
|
|
|
|
|
virtual ~KAZE(); |
|
|
|
|
|
|
|
|
|
// returns the descriptor size in bytes
|
|
|
|
|
int descriptorSize() const; |
|
|
|
|
// returns the descriptor type
|
|
|
|
|
int descriptorType() const; |
|
|
|
|
// returns the default norm type
|
|
|
|
|
int defaultNorm() const; |
|
|
|
|
|
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
|
|
|
|
|
// Compute the KAZE features on an image
|
|
|
|
|
void operator()(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints) const; |
|
|
|
|
|
|
|
|
|
// Compute the KAZE features and descriptors on an image
|
|
|
|
|
void operator()(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints, |
|
|
|
|
OutputArray descriptors, bool useProvidedKeypoints = false) const; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
DIFF_PM_G1 = 0, |
|
|
|
|
DIFF_PM_G2 = 1, |
|
|
|
|
DIFF_WEICKERT = 2, |
|
|
|
|
DIFF_CHARBONNIER = 3 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
void detectImpl(InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask) const; |
|
|
|
|
void computeImpl(InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors) const; |
|
|
|
|
|
|
|
|
|
CV_PROP bool extended; |
|
|
|
|
CV_PROP bool upright; |
|
|
|
|
CV_PROP float threshold; |
|
|
|
|
CV_PROP int octaves; |
|
|
|
|
CV_PROP int sublevels; |
|
|
|
|
CV_PROP int diffusivity; |
|
|
|
|
CV_WRAP static Ptr<KAZE> create(bool extended=false, bool upright=false, |
|
|
|
|
float threshold = 0.001f, |
|
|
|
|
int octaves = 4, int sublevels = 4, |
|
|
|
|
int diffusivity = KAZE::DIFF_PM_G2); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
@ -555,41 +273,21 @@ AKAZE implementation |
|
|
|
|
class CV_EXPORTS_W AKAZE : public Feature2D |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
CV_WRAP AKAZE(); |
|
|
|
|
CV_WRAP explicit AKAZE(int descriptor_type, int descriptor_size = 0, int descriptor_channels = 3, |
|
|
|
|
float threshold = 0.001f, int octaves = 4, int sublevels = 4, int diffusivity = DIFF_PM_G2); |
|
|
|
|
|
|
|
|
|
virtual ~AKAZE(); |
|
|
|
|
|
|
|
|
|
// returns the descriptor size in bytes
|
|
|
|
|
int descriptorSize() const; |
|
|
|
|
// returns the descriptor type
|
|
|
|
|
int descriptorType() const; |
|
|
|
|
// returns the default norm type
|
|
|
|
|
int defaultNorm() const; |
|
|
|
|
|
|
|
|
|
// Compute the AKAZE features on an image
|
|
|
|
|
void operator()(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints) const; |
|
|
|
|
|
|
|
|
|
// Compute the AKAZE features and descriptors on an image
|
|
|
|
|
void operator()(InputArray image, InputArray mask, std::vector<KeyPoint>& keypoints, |
|
|
|
|
OutputArray descriptors, bool useProvidedKeypoints = false) const; |
|
|
|
|
|
|
|
|
|
AlgorithmInfo* info() const; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
|
|
|
|
|
void computeImpl(InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors) const; |
|
|
|
|
void detectImpl(InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask = noArray()) const; |
|
|
|
|
// AKAZE descriptor type
|
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
DESCRIPTOR_KAZE_UPRIGHT = 2, ///< Upright descriptors, not invariant to rotation
|
|
|
|
|
DESCRIPTOR_KAZE = 3, |
|
|
|
|
DESCRIPTOR_MLDB_UPRIGHT = 4, ///< Upright descriptors, not invariant to rotation
|
|
|
|
|
DESCRIPTOR_MLDB = 5 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
CV_PROP int descriptor; |
|
|
|
|
CV_PROP int descriptor_channels; |
|
|
|
|
CV_PROP int descriptor_size; |
|
|
|
|
CV_PROP float threshold; |
|
|
|
|
CV_PROP int octaves; |
|
|
|
|
CV_PROP int sublevels; |
|
|
|
|
CV_PROP int diffusivity; |
|
|
|
|
CV_WRAP static Ptr<AKAZE> create(int descriptor_type=DESCRIPTOR_MLDB, |
|
|
|
|
int descriptor_size = 0, int descriptor_channels = 3, |
|
|
|
|
float threshold = 0.001f, int octaves = 4, |
|
|
|
|
int sublevels = 4, int diffusivity = KAZE::DIFF_PM_G2); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/****************************************************************************************\
|
|
|
|
|
* Distance * |
|
|
|
|
\****************************************************************************************/ |
|
|
|
|