|
|
@ -137,7 +137,7 @@ class CV_EXPORTS ERClassifierNM1 : public ERFilter::Callback |
|
|
|
{ |
|
|
|
{ |
|
|
|
public: |
|
|
|
public: |
|
|
|
//Constructor
|
|
|
|
//Constructor
|
|
|
|
ERClassifierNM1(); |
|
|
|
ERClassifierNM1(const std::string& filename); |
|
|
|
// Destructor
|
|
|
|
// Destructor
|
|
|
|
~ERClassifierNM1() {}; |
|
|
|
~ERClassifierNM1() {}; |
|
|
|
|
|
|
|
|
|
|
@ -153,7 +153,7 @@ class CV_EXPORTS ERClassifierNM2 : public ERFilter::Callback |
|
|
|
{ |
|
|
|
{ |
|
|
|
public: |
|
|
|
public: |
|
|
|
//constructor
|
|
|
|
//constructor
|
|
|
|
ERClassifierNM2(); |
|
|
|
ERClassifierNM2(const std::string& filename); |
|
|
|
// Destructor
|
|
|
|
// Destructor
|
|
|
|
~ERClassifierNM2() {}; |
|
|
|
~ERClassifierNM2() {}; |
|
|
|
|
|
|
|
|
|
|
@ -988,24 +988,13 @@ int ERFilterNM::getNumRejected() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// load default 1st stage classifier if found
|
|
|
|
// load default 1st stage classifier if found
|
|
|
|
ERClassifierNM1::ERClassifierNM1() |
|
|
|
ERClassifierNM1::ERClassifierNM1(const std::string& filename) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
if (ifstream("./trained_classifierNM1.xml")) |
|
|
|
if (ifstream(filename.c_str())) |
|
|
|
{ |
|
|
|
boost.load( filename.c_str(), "boost" ); |
|
|
|
// The file with default classifier exists
|
|
|
|
|
|
|
|
boost.load("./trained_classifierNM1.xml", "boost"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (ifstream("./training/trained_classifierNM1.xml")) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// The file with default classifier exists
|
|
|
|
|
|
|
|
boost.load("./training/trained_classifierNM1.xml", "boost"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
CV_Error(CV_StsBadArg, "Default classifier file not found!"); |
|
|
|
// File not found
|
|
|
|
|
|
|
|
CV_Error(CV_StsBadArg, "Default classifier ./trained_classifierNM1.xml not found!"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
double ERClassifierNM1::eval(const ERStat& stat) |
|
|
|
double ERClassifierNM1::eval(const ERStat& stat) |
|
|
@ -1026,24 +1015,12 @@ double ERClassifierNM1::eval(const ERStat& stat) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// load default 2nd stage classifier if found
|
|
|
|
// load default 2nd stage classifier if found
|
|
|
|
ERClassifierNM2::ERClassifierNM2() |
|
|
|
ERClassifierNM2::ERClassifierNM2(const std::string& filename) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
if (ifstream(filename.c_str())) |
|
|
|
if (ifstream("./trained_classifierNM2.xml")) |
|
|
|
boost.load( filename.c_str(), "boost" ); |
|
|
|
{ |
|
|
|
|
|
|
|
// The file with default classifier exists
|
|
|
|
|
|
|
|
boost.load("./trained_classifierNM2.xml", "boost"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (ifstream("./training/trained_classifierNM2.xml")) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// The file with default classifier exists
|
|
|
|
|
|
|
|
boost.load("./training/trained_classifierNM2.xml", "boost"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
CV_Error(CV_StsBadArg, "Default classifier file not found!"); |
|
|
|
// File not found
|
|
|
|
|
|
|
|
CV_Error(CV_StsBadArg, "Default classifier ./trained_classifierNM2.xml not found!"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
double ERClassifierNM2::eval(const ERStat& stat) |
|
|
|
double ERClassifierNM2::eval(const ERStat& stat) |
|
|
@ -1079,7 +1056,8 @@ double ERClassifierNM2::eval(const ERStat& stat) |
|
|
|
local minimum is greater than minProbabilityDiff). |
|
|
|
local minimum is greater than minProbabilityDiff). |
|
|
|
|
|
|
|
|
|
|
|
\param cb Callback with the classifier. |
|
|
|
\param cb Callback with the classifier. |
|
|
|
if omitted tries to load a default classifier from file trained_classifierNM1.xml |
|
|
|
default classifier can be implicitly load with function loadClassifierNM1() |
|
|
|
|
|
|
|
from file in samples/cpp/trained_classifierNM1.xml |
|
|
|
\param thresholdDelta Threshold step in subsequent thresholds when extracting the component tree |
|
|
|
\param thresholdDelta Threshold step in subsequent thresholds when extracting the component tree |
|
|
|
\param minArea The minimum area (% of image size) allowed for retreived ER's |
|
|
|
\param minArea The minimum area (% of image size) allowed for retreived ER's |
|
|
|
\param minArea The maximum area (% of image size) allowed for retreived ER's |
|
|
|
\param minArea The maximum area (% of image size) allowed for retreived ER's |
|
|
@ -1099,10 +1077,7 @@ Ptr<ERFilter> createERFilterNM1(const Ptr<ERFilter::Callback>& cb, int threshold |
|
|
|
|
|
|
|
|
|
|
|
Ptr<ERFilterNM> filter = makePtr<ERFilterNM>(); |
|
|
|
Ptr<ERFilterNM> filter = makePtr<ERFilterNM>(); |
|
|
|
|
|
|
|
|
|
|
|
if (cb == NULL) |
|
|
|
filter->setCallback(cb); |
|
|
|
filter->setCallback(makePtr<ERClassifierNM1>()); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
filter->setCallback(cb); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filter->setThresholdDelta(thresholdDelta); |
|
|
|
filter->setThresholdDelta(thresholdDelta); |
|
|
|
filter->setMinArea(minArea); |
|
|
|
filter->setMinArea(minArea); |
|
|
@ -1123,7 +1098,8 @@ Ptr<ERFilter> createERFilterNM1(const Ptr<ERFilter::Callback>& cb, int threshold |
|
|
|
additional features: hole area ratio, convex hull ratio, and number of outer inflexion points. |
|
|
|
additional features: hole area ratio, convex hull ratio, and number of outer inflexion points. |
|
|
|
|
|
|
|
|
|
|
|
\param cb Callback with the classifier |
|
|
|
\param cb Callback with the classifier |
|
|
|
if omitted tries to load a default classifier from file trained_classifierNM2.xml |
|
|
|
default classifier can be implicitly load with function loadClassifierNM1() |
|
|
|
|
|
|
|
from file in samples/cpp/trained_classifierNM2.xml |
|
|
|
\param minProbability The minimum probability P(er|character) allowed for retreived ER's |
|
|
|
\param minProbability The minimum probability P(er|character) allowed for retreived ER's |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
Ptr<ERFilter> createERFilterNM2(const Ptr<ERFilter::Callback>& cb, float minProbability) |
|
|
|
Ptr<ERFilter> createERFilterNM2(const Ptr<ERFilter::Callback>& cb, float minProbability) |
|
|
@ -1133,15 +1109,33 @@ Ptr<ERFilter> createERFilterNM2(const Ptr<ERFilter::Callback>& cb, float minProb |
|
|
|
|
|
|
|
|
|
|
|
Ptr<ERFilterNM> filter = makePtr<ERFilterNM>(); |
|
|
|
Ptr<ERFilterNM> filter = makePtr<ERFilterNM>(); |
|
|
|
|
|
|
|
|
|
|
|
if (cb == NULL) |
|
|
|
filter->setCallback(cb); |
|
|
|
filter->setCallback(makePtr<ERClassifierNM2>()); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
filter->setCallback(cb); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filter->setMinProbability(minProbability); |
|
|
|
filter->setMinProbability(minProbability); |
|
|
|
return (Ptr<ERFilter>)filter; |
|
|
|
return (Ptr<ERFilter>)filter; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
|
|
|
Allow to implicitly load the default classifier when creating an ERFilter object. |
|
|
|
|
|
|
|
The function takes as parameter the XML or YAML file with the classifier model |
|
|
|
|
|
|
|
(e.g. trained_classifierNM1.xml) returns a pointer to ERFilter::Callback. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
Ptr<ERFilter::Callback> loadClassifierNM1(const std::string& filename) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return makePtr<ERClassifierNM1>(filename); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
|
|
|
Allow to implicitly load the default classifier when creating an ERFilter object. |
|
|
|
|
|
|
|
The function takes as parameter the XML or YAML file with the classifier model |
|
|
|
|
|
|
|
(e.g. trained_classifierNM2.xml) returns a pointer to ERFilter::Callback. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
Ptr<ERFilter::Callback> loadClassifierNM2(const std::string& filename) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return makePtr<ERClassifierNM2>(filename); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------*/ |
|
|
|
/* ------------------------------------------------------------------------------------*/ |
|
|
|
/* -------------------------------- Compute Channels NM -------------------------------*/ |
|
|
|
/* -------------------------------- Compute Channels NM -------------------------------*/ |
|
|
|