mirror of https://github.com/opencv/opencv.git
parent
6a689d82a3
commit
157ed030ce
2 changed files with 96 additions and 40 deletions
@ -0,0 +1,94 @@ |
||||
\cvclass{DynamicDetector} |
||||
An adaptively adjusting detector that iteratively detects until the desired number |
||||
of features are found. |
||||
|
||||
Adapters can easily be implemented for any detector through the creation of an Adjuster |
||||
object. |
||||
|
||||
Beware that this is not thread safe - as the adjustment of parameters breaks the const |
||||
of the detection routine... |
||||
|
||||
\begin{lstlisting} |
||||
//sample usage: |
||||
//will create a detector that attempts to find 100 - 110 FAST Keypoints, and will at most run |
||||
//FAST feature detection 10 times until that number of keypoints are found |
||||
Ptr<FeatureDetector> detector(new DynamicDetector (100, 110, 10,new FastAdjuster(20,true))); |
||||
|
||||
class CV_EXPORTS DynamicDetector: public FeatureDetector { |
||||
public: |
||||
|
||||
/**min_features the minimum desired features |
||||
* max_features the maximum desired number of features |
||||
* max_iters the maximum number of times to try to adjust the feature detector params |
||||
* for the FastAdjuster this can be high, but with Star or Surf this can get time consuming |
||||
* a an AdjusterAdapter that will do the detection and parameter adjustment |
||||
*/ |
||||
DynamicDetector(int min_features, int max_features, int max_iters, |
||||
const Ptr<AdjusterAdapter>& a); |
||||
... |
||||
}; |
||||
\end{lstlisting} |
||||
\cvclass{AdjusterAdapter} |
||||
A feature detector parameter adjuster interface, this is used by the \cvCppCross{DynamicDetector} |
||||
and is a wrapper for \cvCppCross{FeatureDetecto}r that allow them to be adjusted after a detection. |
||||
|
||||
See \cvCppCross{FastAdjuster}, \cvCppCross{StarAdjuster}, \cvCppCross{SurfAdjuster} for concrete implementations. |
||||
\begin{lstlisting} |
||||
class AdjusterAdapter: public FeatureDetector { |
||||
public: |
||||
/** pure virtual interface |
||||
*/ |
||||
virtual ~AdjusterAdapter() { |
||||
} |
||||
/** too few features were detected so, adjust the detector params accordingly |
||||
* \param min the minimum number of desired features |
||||
* \param n_detected the number previously detected |
||||
*/ |
||||
virtual void tooFew(int min, int n_detected) = 0; |
||||
/** too many features were detected so, adjust the detector params accordingly |
||||
* \param max the maximum number of desired features |
||||
* \param n_detected the number previously detected |
||||
*/ |
||||
virtual void tooMany(int max, int n_detected) = 0; |
||||
/** are params maxed out or still valid? |
||||
* \return false if the parameters can't be adjusted any more |
||||
*/ |
||||
virtual bool good() const = 0; |
||||
}; |
||||
\end{lstlisting} |
||||
|
||||
\cvclass{FastAdjuster} |
||||
An \cvCppCross{AdjusterAdapter} for the \cvCppCross{FastFeatureDetector}. This will basically decrement or increment the |
||||
threshhold by 1 |
||||
|
||||
\begin{lstlisting} |
||||
class FastAdjuster FastAdjuster: public AdjusterAdapter { |
||||
public: |
||||
/**\param init_thresh the initial threshhold to start with, default = 20 |
||||
* \param nonmax whether to use non max or not for fast feature detection |
||||
*/ |
||||
FastAdjuster(int init_thresh = 20, bool nonmax = true); |
||||
... |
||||
}; |
||||
\end{lstlisting} |
||||
|
||||
\cvclass{StarAdjuster} |
||||
An \cvCppCross{AdjusterAdapter} for the \cvCppCross{StarFeatureDetector}. This adjusts the responseThreshhold of |
||||
StarFeatureDetector. |
||||
\begin{lstlisting} |
||||
class StarAdjuster: public AdjusterAdapter { |
||||
StarAdjuster(double initial_thresh = 30.0); |
||||
... |
||||
}; |
||||
\end{lstlisting} |
||||
|
||||
|
||||
\cvclass{SurfAdjuster} |
||||
An \cvCppCross{AdjusterAdapter} for the \cvCppCross{SurfFeatureDetector}. This adjusts the responseThreshhold of |
||||
SurfFeatureDetector. |
||||
\begin{lstlisting} |
||||
class SurfAdjuster: public SurfAdjuster { |
||||
SurfAdjuster(); |
||||
... |
||||
}; |
||||
\end{lstlisting} |
Loading…
Reference in new issue