Commit f4c74eb5 authored by Maria Dimashova's avatar Maria Dimashova

changed the dot

parent d0a91f8f
...@@ -596,7 +596,7 @@ public: ...@@ -596,7 +596,7 @@ public:
void read( FileNode& fn ); void read( FileNode& fn );
void write( FileStorage& fs ) const; void write( FileStorage& fs ) const;
void asserts() const; void isConsistent() const;
Size winSize; Size winSize;
int regionSize; int regionSize;
...@@ -612,9 +612,9 @@ public: ...@@ -612,9 +612,9 @@ public:
{ {
DetectParams(); DetectParams();
DetectParams( float minRatio, int minRegionSize, int maxRegionSize, int regionSizeStep, DetectParams( float minRatio, int minRegionSize, int maxRegionSize, int regionSizeStep,
bool isGroup, int groupThreshold, double groupEps ); bool isGroup, int groupThreshold=3, double groupEps=0.2f );
void asserts( float minTrainRatio=1.f) const; void isConsistent( float minTrainRatio=1.f ) const;
float minRatio; float minRatio;
...@@ -623,17 +623,27 @@ public: ...@@ -623,17 +623,27 @@ public:
int regionSizeStep; int regionSizeStep;
bool isGroup; bool isGroup;
int groupThreshold; int groupThreshold;
double groupEps; double groupEps;
}; };
struct CV_EXPORTS DOTTemplate struct CV_EXPORTS DOTTemplate
{ {
struct CV_EXPORTS TrainData
{
TrainData();
TrainData( const Mat& maskedImage, const cv::Mat& strongestGradientsMask );
cv::Mat maskedImage;
cv::Mat strongestGradientsMask;
};
DOTTemplate(); DOTTemplate();
DOTTemplate( const cv::Mat& quantizedImage, int classID, DOTTemplate( const cv::Mat& quantizedImage, int objectClassID,
const cv::Mat& maskedImage=cv::Mat(), const cv::Mat& gradientMask=cv::Mat() ); const cv::Mat& maskedImage=cv::Mat(), const cv::Mat& strongestGradientsMask=cv::Mat() );
void addClassID( int classID, const cv::Mat& maskedImage=cv::Mat(), const cv::Mat& gradientMask=cv::Mat() );
void addObjectClassID( int objectClassID, const cv::Mat& maskedImage=cv::Mat(), const cv::Mat& strongestGradientsMask=cv::Mat() );
const TrainData* getTrainData( int objectClassID ) const;
static float computeTexturelessRatio( const cv::Mat& quantizedImage ); static float computeTexturelessRatio( const cv::Mat& quantizedImage );
...@@ -641,11 +651,9 @@ public: ...@@ -641,11 +651,9 @@ public:
void write( FileStorage& fs ) const; void write( FileStorage& fs ) const;
cv::Mat quantizedImage; cv::Mat quantizedImage;
std::vector<int> classIDs;
float texturelessRatio; float texturelessRatio;
std::vector<int> objectClassIDs;
std::vector<cv::Mat> maskedImages; std::vector<TrainData> trainData;
std::vector<cv::Mat> gradientMasks;
}; };
DOTDetector(); DOTDetector();
...@@ -661,22 +669,24 @@ public: ...@@ -661,22 +669,24 @@ public:
void save( const std::string& filename ) const; void save( const std::string& filename ) const;
void train( const string& baseDirName, const TrainParams& trainParams=TrainParams(), bool isAddImageAndGradientMask=false ); void train( const string& baseDirName, const TrainParams& trainParams=TrainParams(), bool isAddImageAndGradientMask=false );
void detectMultiScale( const Mat& image, vector<vector<Rect> >& rects, void detectMultiScale( const Mat& image, vector<vector<Rect> >& rects, const DetectParams& detectParams=DetectParams(),
const DetectParams& detectParams=DetectParams(), vector<vector<float> >* ratios=0, vector<vector<int> >* dotTemplateIndices=0 ) const;
vector<vector<float> >*ratios=0, vector<vector<int> >* trainTemplateIndices=0 ) const;
const vector<DOTTemplate>& getDOTTemplates() const; const vector<DOTTemplate>& getDOTTemplates() const;
const vector<string>& getClassNames() const; const vector<string>& getObjectClassNames() const;
static void groupRectanglesList( std::vector<std::vector<cv::Rect> >& rectList, int groupThreshold, double eps ); static void groupRectanglesList( std::vector<std::vector<cv::Rect> >& rectList, int groupThreshold, double eps );
protected: protected:
void detectQuantized( const Mat& queryQuantizedImage, float minRatio, void detectQuantized( const Mat& queryQuantizedImage, float minRatio,
vector<vector<Rect> >& rects, vector<vector<float> >& ratios, vector<vector<int> >& trainTemlateIdxs ) const; vector<vector<Rect> >& rects,
vector<vector<float> >& ratios,
vector<vector<int> >& dotTemplateIndices ) const;
TrainParams trainParams; TrainParams trainParams;
bool isAddImageAndGradientMask; //bool isAddImageAndGradientMask;
std::vector<std::string> classNames; std::vector<std::string> objectClassNames;
std::vector<DOTTemplate> dotTemplates; std::vector<DOTTemplate> dotTemplates;
}; };
......
This diff is collapsed.
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
using namespace cv; using namespace cv;
using namespace std; using namespace std;
#define SHOW_ALL_RECTS_BY_ONE 1 #define SHOW_ALL_RECTS_BY_ONE 0
static void fillColors( vector<Scalar>& colors ) static void fillColors( vector<Scalar>& colors )
{ {
cv::RNG rng = theRNG(); cv::RNG rng = theRNG();
...@@ -34,6 +35,8 @@ static void readTestImageNames( const string& descrFilename, vector<string>& nam ...@@ -34,6 +35,8 @@ static void readTestImageNames( const string& descrFilename, vector<string>& nam
file.close(); file.close();
} }
// find -name "image_*.png" | grep -v mask | sed 's/.\///' >> images.txt
int main( int argc, char **argv ) int main( int argc, char **argv )
{ {
if( argc != 1 && argc != 3 ) if( argc != 1 && argc != 3 )
...@@ -68,10 +71,10 @@ int main( int argc, char **argv ) ...@@ -68,10 +71,10 @@ int main( int argc, char **argv )
DOTDetector dotDetector; DOTDetector dotDetector;
dotDetector.train( baseDirName, trainParams, true ); dotDetector.train( baseDirName, trainParams, true );
const vector<string>& classNames = dotDetector.getClassNames(); const vector<string>& objectClassNames = dotDetector.getObjectClassNames();
const vector<DOTDetector::DOTTemplate>& dotTemplates = dotDetector.getDOTTemplates(); const vector<DOTDetector::DOTTemplate>& dotTemplates = dotDetector.getDOTTemplates();
vector<Scalar> colors( classNames.size() ); vector<Scalar> colors( objectClassNames.size() );
fillColors( colors ); fillColors( colors );
cout << "Templates count " << dotTemplates.size() << endl; cout << "Templates count " << dotTemplates.size() << endl;
...@@ -88,6 +91,7 @@ int main( int argc, char **argv ) ...@@ -88,6 +91,7 @@ int main( int argc, char **argv )
detectParams.minRatio = 0.8f; detectParams.minRatio = 0.8f;
detectParams.minRegionSize = 5; detectParams.minRegionSize = 5;
detectParams.maxRegionSize = 11; detectParams.maxRegionSize = 11;
#if SHOW_ALL_RECTS_BY_ONE #if SHOW_ALL_RECTS_BY_ONE
detectParams.isGroup = false; detectParams.isGroup = false;
#endif #endif
...@@ -102,26 +106,43 @@ int main( int argc, char **argv ) ...@@ -102,26 +106,43 @@ int main( int argc, char **argv )
continue; continue;
cout << "Detection start ..." << endl; cout << "Detection start ..." << endl;
vector<vector<Rect> > rects; vector<vector<Rect> > rects;
#if SHOW_ALL_RECTS_BY_ONE
vector<vector<float> > ratios; vector<vector<float> > ratios;
vector<vector<int> > trainTemlateIdxs; vector<vector<int> > dotTemlateIndices;
dotDetector.detectMultiScale( queryImage, rects, detectParams, &ratios, &trainTemlateIdxs ); dotDetector.detectMultiScale( queryImage, rects, detectParams, &ratios, &dotTemlateIndices );
const vector<DOTDetector::DOTTemplate>& dotTemplates = dotDetector.getDOTTemplates();
#else
dotDetector.detectMultiScale( queryImage, rects, detectParams );
#endif
cout << "end" << endl; cout << "end" << endl;
Mat draw; Mat draw;
cvtColor( queryImage, draw, CV_GRAY2BGR ); cvtColor( queryImage, draw, CV_GRAY2BGR );
#if SHOW_ALL_RECTS_BY_ONE
DOTDetector::groupRectanglesList( rects, 3, 0.2 );
#endif
const int textStep = 25; const int textStep = 25;
for( size_t ci = 0; ci < classNames.size(); ci++ ) for( size_t ci = 0; ci < objectClassNames.size(); ci++ )
{ {
putText( draw, classNames[ci], Point(textStep, textStep*(1+ci)), 1, 2, colors[ci], 3 ); putText( draw, objectClassNames[ci], Point(textStep, textStep*(1+ci)), 1, 2, colors[ci], 3 );
for( size_t ri = 0; ri < rects[ci].size(); ri++ ) for( size_t ri = 0; ri < rects[ci].size(); ri++ )
{ {
rectangle( draw, rects[ci][ri], colors[ci], 3 ); rectangle( draw, rects[ci][ri], colors[ci], 3 );
#if SHOW_ALL_RECTS_BY_ONE
int dotTemplateIndex = dotTemlateIndices[ci][ri];
const DOTDetector::DOTTemplate::TrainData* trainData = dotTemplates[dotTemplateIndex].getTrainData(ci);
imshow( "maskedImage", trainData->maskedImage );
imshow( "strongestGradientsMask", trainData->strongestGradientsMask );
Mat scaledDraw;
cv::resize( draw, scaledDraw, Size(640, 480) );
imshow( "detection result", scaledDraw );
cv::waitKey();
#endif
} }
} }
Mat scaledDraw; Mat scaledDraw;
...@@ -130,5 +151,4 @@ int main( int argc, char **argv ) ...@@ -130,5 +151,4 @@ int main( int argc, char **argv )
cv::waitKey(); cv::waitKey();
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment