started to integrate DOT detector

This commit is contained in:
Maria Dimashova
2011-04-26 13:57:55 +00:00
parent 0a8c7d274b
commit cd981f4d13
3 changed files with 1095 additions and 0 deletions

View File

@@ -426,6 +426,8 @@ protected:
Ptr<CvHaarClassifierCascade> oldCascade;
};
void CV_EXPORTS_W groupRectangles( vector<Rect>& rectList, int groupThreshold, double eps, vector<int>* weights, vector<double>* levelWeights );
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
struct CV_EXPORTS_W HOGDescriptor
@@ -574,6 +576,110 @@ protected:
FernClassifier fernClassifier;
};
/****************************************************************************************\
* Dominant Orientation Templates *
\****************************************************************************************/
class CV_EXPORTS DOTDetector
{
public:
struct TrainParams
{
enum { BIN_COUNT = 7 };
static double BIN_RANGE() { return 180.0 / BIN_COUNT; }
TrainParams();
TrainParams( const Size& winSize, int regionSize=7, int minMagnitude=60,
int maxStrongestCount=7, int maxNonzeroBits=6,
float minRatio=0.85f );
void read( FileNode& fn );
void write( FileStorage& fs ) const;
void asserts() const;
Size winSize;
int regionSize;
int minMagnitude;
int maxStrongestCount;
int maxNonzeroBits;
float minRatio;
};
struct DetectParams
{
DetectParams();
DetectParams( float minRatio, int minRegionSize, int maxRegionSize, int regionSizeStep,
bool isGroup, int groupThreshold, double groupEps );
void asserts( float minTrainRatio=1.f) const;
float minRatio;
int minRegionSize;
int maxRegionSize;
int regionSizeStep;
bool isGroup;
int groupThreshold;
double groupEps;
};
struct DOTTemplate
{
DOTTemplate();
DOTTemplate( const cv::Mat& quantizedImage, int classID,
const cv::Mat& maskedImage=cv::Mat(), const cv::Mat& gradientMask=cv::Mat() );
void addClassID( int classID, const cv::Mat& maskedImage=cv::Mat(), const cv::Mat& gradientMask=cv::Mat() );
static float computeTexturelessRatio( const cv::Mat& quantizedImage );
void read( FileNode& fn );
void write( FileStorage& fs ) const;
cv::Mat quantizedImage;
std::vector<int> classIDs;
float texturelessRatio;
std::vector<cv::Mat> maskedImages;
std::vector<cv::Mat> gradientMasks;
};
DOTDetector();
DOTDetector( const std::string& filename ); // load from xml-file
virtual ~DOTDetector();
void clear();
void read( FileNode& fn );
void write( FileStorage& fs ) const;
void load( const std::string& filename );
void save( const std::string& filename ) const;
void train( const string& baseDirName, const TrainParams& trainParams=TrainParams(), bool isAddImageAndGradientMask=false );
void detectMultiScale( const Mat& image, vector<vector<Rect> >& rects,
const DetectParams& detectParams=DetectParams(),
vector<vector<float> >*ratios=0, vector<vector<int> >* trainTemplateIndices=0 ) const;
const vector<DOTTemplate>& getDOTTemplates() const;
const vector<string>& getClassNames() const;
static void groupRectanglesList( std::vector<std::vector<cv::Rect> >& rectList, int groupThreshold, double eps );
protected:
void detectQuantized( const Mat& queryQuantizedImage, float minRatio,
vector<vector<Rect> >& rects, vector<vector<float> >& ratios, vector<vector<int> >& trainTemlateIdxs ) const;
TrainParams trainParams;
bool isAddImageAndGradientMask;
std::vector<std::string> classNames;
std::vector<DOTTemplate> dotTemplates;
};
}
/****************************************************************************************\