Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef __OPENCV_NONFREE_FEATURES_2D_HPP__
00044 #define __OPENCV_NONFREE_FEATURES_2D_HPP__
00045
00046 #include "opencv2/features2d/features2d.hpp"
00047
00048 #ifdef __cplusplus
00049
00050 namespace cv
00051 {
00052
00058 class CV_EXPORTS_W SIFT : public Feature2D
00059 {
00060 public:
00061 CV_WRAP explicit SIFT( int nfeatures=0, int nOctaveLayers=3,
00062 double contrastThreshold=0.04, double edgeThreshold=10,
00063 double sigma=1.6);
00064
00066 CV_WRAP int descriptorSize() const;
00067
00069 CV_WRAP int descriptorType() const;
00070
00072 void operator()(InputArray img, InputArray mask,
00073 vector<KeyPoint>& keypoints) const;
00076 void operator()(InputArray img, InputArray mask,
00077 vector<KeyPoint>& keypoints,
00078 OutputArray descriptors,
00079 bool useProvidedKeypoints=false) const;
00080
00081 AlgorithmInfo* info() const;
00082
00083 void buildGaussianPyramid( const Mat& base, vector<Mat>& pyr, int nOctaves ) const;
00084 void buildDoGPyramid( const vector<Mat>& pyr, vector<Mat>& dogpyr ) const;
00085 void findScaleSpaceExtrema( const vector<Mat>& gauss_pyr, const vector<Mat>& dog_pyr,
00086 vector<KeyPoint>& keypoints ) const;
00087
00088 protected:
00089 void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;
00090 void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;
00091
00092 CV_PROP_RW int nfeatures;
00093 CV_PROP_RW int nOctaveLayers;
00094 CV_PROP_RW double contrastThreshold;
00095 CV_PROP_RW double edgeThreshold;
00096 CV_PROP_RW double sigma;
00097 };
00098
00099 typedef SIFT SiftFeatureDetector;
00100 typedef SIFT SiftDescriptorExtractor;
00101
00107 class CV_EXPORTS_W SURF : public Feature2D
00108 {
00109 public:
00111 CV_WRAP SURF();
00113 explicit CV_WRAP SURF(double hessianThreshold,
00114 int nOctaves=4, int nOctaveLayers=2,
00115 bool extended=true, bool upright=false);
00116
00118 CV_WRAP int descriptorSize() const;
00119
00121 CV_WRAP int descriptorType() const;
00122
00124 void operator()(InputArray img, InputArray mask,
00125 CV_OUT vector<KeyPoint>& keypoints) const;
00127 void operator()(InputArray img, InputArray mask,
00128 CV_OUT vector<KeyPoint>& keypoints,
00129 OutputArray descriptors,
00130 bool useProvidedKeypoints=false) const;
00131
00132 AlgorithmInfo* info() const;
00133
00134 CV_PROP_RW double hessianThreshold;
00135 CV_PROP_RW int nOctaves;
00136 CV_PROP_RW int nOctaveLayers;
00137 CV_PROP_RW bool extended;
00138 CV_PROP_RW bool upright;
00139
00140 protected:
00141
00142 void detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;
00143 void computeImpl( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;
00144 };
00145
00146 typedef SURF SurfFeatureDetector;
00147 typedef SURF SurfDescriptorExtractor;
00148
00149 }
00150
00151 #endif
00152
00153 #endif
00154
00155