1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
5 // By downloading, copying, installing or using the software you agree to this license.
6 // If you do not agree to this license, do not download, install,
7 // copy or use the software.
8 //
9 //
10 // Intel License Agreement
11 // For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000, Intel Corporation, all rights reserved.
14 // Third party copyrights are property of their respective owners.
15 //
16 // Redistribution and use in source and binary forms, with or without modification,
17 // are permitted provided that the following conditions are met:
18 //
19 // * Redistribution's of source code must retain the above copyright notice,
20 // this list of conditions and the following disclaimer.
21 //
22 // * Redistribution's in binary form must reproduce the above copyright notice,
23 // this list of conditions and the following disclaimer in the documentation
24 // and/or other materials provided with the distribution.
25 //
26 // * The name of Intel Corporation may not be used to endorse or promote products
27 // derived from this software without specific prior written permission.
28 //
29 // This software is provided by the copyright holders and contributors "as is" and
30 // any express or implied warranties, including, but not limited to, the implied
31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
32 // In no event shall the Intel Corporation or contributors be liable for any direct,
33 // indirect, incidental, special, exemplary, or consequential damages
34 // (including, but not limited to, procurement of substitute goods or services;
35 // loss of use, data, or profits; or business interruption) however caused
36 // and on any theory of liability, whether in contract, strict liability,
37 // or tort (including negligence or otherwise) arising in any way out of
38 // the use of this software, even if advised of the possibility of such damage.
39 //
40 //M*/
41
42 #include "precomp.hpp"
43
44 namespace cv
45 {
46
47 class GFTTDetector_Impl : public GFTTDetector
48 {
49 public:
GFTTDetector_Impl(int _nfeatures,double _qualityLevel,double _minDistance,int _blockSize,bool _useHarrisDetector,double _k)50 GFTTDetector_Impl( int _nfeatures, double _qualityLevel,
51 double _minDistance, int _blockSize,
52 bool _useHarrisDetector, double _k )
53 : nfeatures(_nfeatures), qualityLevel(_qualityLevel), minDistance(_minDistance),
54 blockSize(_blockSize), useHarrisDetector(_useHarrisDetector), k(_k)
55 {
56 }
57
setMaxFeatures(int maxFeatures)58 void setMaxFeatures(int maxFeatures) { nfeatures = maxFeatures; }
getMaxFeatures() const59 int getMaxFeatures() const { return nfeatures; }
60
setQualityLevel(double qlevel)61 void setQualityLevel(double qlevel) { qualityLevel = qlevel; }
getQualityLevel() const62 double getQualityLevel() const { return qualityLevel; }
63
setMinDistance(double minDistance_)64 void setMinDistance(double minDistance_) { minDistance = minDistance_; }
getMinDistance() const65 double getMinDistance() const { return minDistance; }
66
setBlockSize(int blockSize_)67 void setBlockSize(int blockSize_) { blockSize = blockSize_; }
getBlockSize() const68 int getBlockSize() const { return blockSize; }
69
setHarrisDetector(bool val)70 void setHarrisDetector(bool val) { useHarrisDetector = val; }
getHarrisDetector() const71 bool getHarrisDetector() const { return useHarrisDetector; }
72
setK(double k_)73 void setK(double k_) { k = k_; }
getK() const74 double getK() const { return k; }
75
detect(InputArray _image,std::vector<KeyPoint> & keypoints,InputArray _mask)76 void detect( InputArray _image, std::vector<KeyPoint>& keypoints, InputArray _mask )
77 {
78 std::vector<Point2f> corners;
79
80 if (_image.isUMat())
81 {
82 UMat ugrayImage;
83 if( _image.type() != CV_8U )
84 cvtColor( _image, ugrayImage, COLOR_BGR2GRAY );
85 else
86 ugrayImage = _image.getUMat();
87
88 goodFeaturesToTrack( ugrayImage, corners, nfeatures, qualityLevel, minDistance, _mask,
89 blockSize, useHarrisDetector, k );
90 }
91 else
92 {
93 Mat image = _image.getMat(), grayImage = image;
94 if( image.type() != CV_8U )
95 cvtColor( image, grayImage, COLOR_BGR2GRAY );
96
97 goodFeaturesToTrack( grayImage, corners, nfeatures, qualityLevel, minDistance, _mask,
98 blockSize, useHarrisDetector, k );
99 }
100
101 keypoints.resize(corners.size());
102 std::vector<Point2f>::const_iterator corner_it = corners.begin();
103 std::vector<KeyPoint>::iterator keypoint_it = keypoints.begin();
104 for( ; corner_it != corners.end(); ++corner_it, ++keypoint_it )
105 *keypoint_it = KeyPoint( *corner_it, (float)blockSize );
106
107 }
108
109 int nfeatures;
110 double qualityLevel;
111 double minDistance;
112 int blockSize;
113 bool useHarrisDetector;
114 double k;
115 };
116
117
create(int _nfeatures,double _qualityLevel,double _minDistance,int _blockSize,bool _useHarrisDetector,double _k)118 Ptr<GFTTDetector> GFTTDetector::create( int _nfeatures, double _qualityLevel,
119 double _minDistance, int _blockSize,
120 bool _useHarrisDetector, double _k )
121 {
122 return makePtr<GFTTDetector_Impl>(_nfeatures, _qualityLevel,
123 _minDistance, _blockSize, _useHarrisDetector, _k);
124 }
125
126 }
127