mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 19:50:38 +08:00
Merge remote-tracking branch 'itseezstream/master'
This commit is contained in:
commit
e3e5fd5baa
@ -47,6 +47,7 @@
|
|||||||
#include "opencv2/core.hpp"
|
#include "opencv2/core.hpp"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
@ -163,7 +164,8 @@ public:
|
|||||||
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
|
||||||
@ -171,7 +173,7 @@ public:
|
|||||||
\param nonMaxSuppression Whenever non-maximum suppression is done over the branch probabilities
|
\param nonMaxSuppression Whenever non-maximum suppression is done over the branch probabilities
|
||||||
\param minProbability The minimum probability difference between local maxima and local minima ERs
|
\param minProbability The minimum probability difference between local maxima and local minima ERs
|
||||||
*/
|
*/
|
||||||
CV_EXPORTS Ptr<ERFilter> createERFilterNM1(const Ptr<ERFilter::Callback>& cb = Ptr<ERFilter::Callback>(),
|
CV_EXPORTS Ptr<ERFilter> createERFilterNM1(const Ptr<ERFilter::Callback>& cb,
|
||||||
int thresholdDelta = 1, float minArea = 0.00025,
|
int thresholdDelta = 1, float minArea = 0.00025,
|
||||||
float maxArea = 0.13, float minProbability = 0.4,
|
float maxArea = 0.13, float minProbability = 0.4,
|
||||||
bool nonMaxSuppression = true,
|
bool nonMaxSuppression = true,
|
||||||
@ -187,13 +189,31 @@ CV_EXPORTS Ptr<ERFilter> createERFilterNM1(const Ptr<ERFilter::Callback>& cb = P
|
|||||||
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 loadClassifierNM2()
|
||||||
|
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
|
||||||
*/
|
*/
|
||||||
CV_EXPORTS Ptr<ERFilter> createERFilterNM2(const Ptr<ERFilter::Callback>& cb = Ptr<ERFilter::Callback>(),
|
CV_EXPORTS Ptr<ERFilter> createERFilterNM2(const Ptr<ERFilter::Callback>& cb,
|
||||||
float minProbability = 0.3);
|
float minProbability = 0.3);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
CV_EXPORTS Ptr<ERFilter::Callback> loadClassifierNM1(const std::string& 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_classifierNM1.xml) returns a pointer to ERFilter::Callback.
|
||||||
|
*/
|
||||||
|
|
||||||
|
CV_EXPORTS Ptr<ERFilter::Callback> loadClassifierNM2(const std::string& filename);
|
||||||
|
|
||||||
|
|
||||||
// computeNMChannels operation modes
|
// computeNMChannels operation modes
|
||||||
enum { ERFILTER_NM_RGBLGrad = 0,
|
enum { ERFILTER_NM_RGBLGrad = 0,
|
||||||
ERFILTER_NM_IHSGrad = 1
|
ERFILTER_NM_IHSGrad = 1
|
||||||
|
@ -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 -------------------------------*/
|
||||||
|
@ -58,7 +58,7 @@ int main(int argc, const char * argv[])
|
|||||||
double t = (double)getTickCount();
|
double t = (double)getTickCount();
|
||||||
|
|
||||||
// Build ER tree and filter with the 1st stage default classifier
|
// Build ER tree and filter with the 1st stage default classifier
|
||||||
Ptr<ERFilter> er_filter1 = createERFilterNM1();
|
Ptr<ERFilter> er_filter1 = createERFilterNM1(loadClassifierNM1("trained_classifierNM1.xml"));
|
||||||
|
|
||||||
er_filter1->run(grey, regions);
|
er_filter1->run(grey, regions);
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ int main(int argc, const char * argv[])
|
|||||||
t = (double)getTickCount();
|
t = (double)getTickCount();
|
||||||
|
|
||||||
// Default second stage classifier
|
// Default second stage classifier
|
||||||
Ptr<ERFilter> er_filter2 = createERFilterNM2();
|
Ptr<ERFilter> er_filter2 = createERFilterNM2(loadClassifierNM2("trained_classifierNM2.xml"));
|
||||||
er_filter2->run(grey, regions);
|
er_filter2->run(grey, regions);
|
||||||
|
|
||||||
t = (double)getTickCount() - t;
|
t = (double)getTickCount() - t;
|
||||||
|
Loading…
Reference in New Issue
Block a user