|
@@ -180,143 +180,14 @@ SemSegContextTree3D::~SemSegContextTree3D()
|
|
|
|
|
|
void SemSegContextTree3D::initOperations()
|
|
|
{
|
|
|
- string featsec = "Features";
|
|
|
-
|
|
|
- // operation prototypes
|
|
|
- vector<Operation3D*> tops0, tops1, tops2, tops3, tops4;
|
|
|
-
|
|
|
- if ( conf->gB ( featsec, "int", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new IntegralOps3D() );
|
|
|
- Operation3D* o = new IntegralOps3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "bi_int", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new BiIntegralOps3D() );
|
|
|
- Operation3D* o = new BiIntegralOps3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "bi_int_cent", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new BiIntegralCenteredOps3D() );
|
|
|
- Operation3D* o = new BiIntegralCenteredOps3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "int_cent", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new IntegralCenteredOps3D() );
|
|
|
- Operation3D* o = new IntegralCenteredOps3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar_horz", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new HaarHorizontal3D() );
|
|
|
- Operation3D* o = new HaarHorizontal3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar_vert", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new HaarVertical3D() );
|
|
|
- Operation3D* o = new HaarVertical3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar_stack", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new HaarStacked3D() );
|
|
|
- Operation3D* o = new HaarStacked3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar_diagxy", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new HaarDiagXY3D() );
|
|
|
- Operation3D* o = new HaarDiagXY3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar_diagxz", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new HaarDiagXZ3D() );
|
|
|
- Operation3D* o = new HaarDiagXZ3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar_diagyz", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new HaarDiagYZ3D() );
|
|
|
- Operation3D* o = new HaarDiagYZ3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar3_horz", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new Haar3Horiz3D() );
|
|
|
- Operation3D* o = new Haar3Horiz3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar3_vert", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new Haar3Vert3D() );
|
|
|
- Operation3D* o = new Haar3Vert3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "haar3_stack", true ) )
|
|
|
- {
|
|
|
- tops2.push_back ( new Haar3Stack3D() );
|
|
|
- Operation3D* o = new Haar3Stack3D();
|
|
|
- o->setContext(true);
|
|
|
- tops3.push_back ( o );
|
|
|
- }
|
|
|
-
|
|
|
- if ( conf->gB ( featsec, "minus", true ) )
|
|
|
- {
|
|
|
- tops0.push_back ( new Minus3D() );
|
|
|
- Operation3D* o = new Minus3D();
|
|
|
- o->setContext(true);
|
|
|
- tops4.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "minus_abs", true ) )
|
|
|
- {
|
|
|
- tops0.push_back ( new MinusAbs3D() );
|
|
|
- Operation3D* o = new MinusAbs3D();
|
|
|
- o->setContext(true);
|
|
|
- tops4.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "addition", true ) )
|
|
|
- {
|
|
|
- tops0.push_back ( new Addition3D() );
|
|
|
- Operation3D* o = new Addition3D();
|
|
|
- o->setContext(true);
|
|
|
- tops4.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "only1", true ) )
|
|
|
- {
|
|
|
- tops0.push_back ( new Only13D() );
|
|
|
- Operation3D* o = new Only13D();
|
|
|
- o->setContext(true);
|
|
|
- tops4.push_back ( o );
|
|
|
- }
|
|
|
- if ( conf->gB ( featsec, "rel_x", true ) )
|
|
|
- tops0.push_back ( new RelativeXPosition3D() );
|
|
|
- if ( conf->gB ( featsec, "rel_y", true ) )
|
|
|
- tops0.push_back ( new RelativeYPosition3D() );
|
|
|
- if ( conf->gB ( featsec, "rel_z", true ) )
|
|
|
- tops0.push_back ( new RelativeZPosition3D() );
|
|
|
-
|
|
|
- this->ops.push_back ( tops0 );
|
|
|
- this->ops.push_back ( tops1 );
|
|
|
- this->ops.push_back ( tops2 );
|
|
|
- this->ops.push_back ( tops3 );
|
|
|
- this->ops.push_back ( tops4 );
|
|
|
+ this->ops.push_back ( new SimpleOperationPool ( conf ) );
|
|
|
+ this->ops.push_back ( new RegionOperationPool ( conf ) );
|
|
|
+ this->ops.push_back ( new RectangleOperationPool ( conf ) );
|
|
|
+ this->ops.push_back ( new RectangleOperationPool ( conf, true ) );
|
|
|
+ this->ops.push_back ( new SimpleOperationPool ( conf, true ) );
|
|
|
+
|
|
|
+ for ( unsigned short i = 0; i < ops.size(); i++ )
|
|
|
+ ops[i]->getOperations();
|
|
|
}
|
|
|
|
|
|
double SemSegContextTree3D::getBestSplit (
|
|
@@ -436,14 +307,8 @@ double SemSegContextTree3D::getBestSplit (
|
|
|
f2 = ( int ) ( rand() % classNames->numClasses() );
|
|
|
|
|
|
/* random extraction method (operation) */
|
|
|
- int o = ( int ) ( rand() % ops[ft].size() );
|
|
|
-
|
|
|
- Operation3D *op = ops[ft][o]->clone();
|
|
|
- if ( ft == 3 || ft == 4 )
|
|
|
- op->setContext ( true );
|
|
|
- else
|
|
|
- op->setContext ( false );
|
|
|
-
|
|
|
+ int o = ( int ) ( rand() % ops[ft]->pool.size() );
|
|
|
+ Operation3D *op = ops[ft]->pool[o]->clone();
|
|
|
op->set ( x1, y1, z1, x2, y2, z2, f1, f2, ft );
|
|
|
op->setWSize( windowSize );
|
|
|
|
|
@@ -1890,9 +1755,8 @@ void SemSegContextTree3D::classify (
|
|
|
// TODO: operations in "forest"
|
|
|
while( !ops.empty() )
|
|
|
{
|
|
|
- vector<Operation3D*> &tops = ops.back();
|
|
|
- while ( !tops.empty() )
|
|
|
- tops.pop_back();
|
|
|
+ OperationPool* op = ops.back();
|
|
|
+ op->clear();
|
|
|
|
|
|
ops.pop_back();
|
|
|
}
|
|
@@ -2024,13 +1888,13 @@ void SemSegContextTree3D::restore ( std::istream & is, int format )
|
|
|
{
|
|
|
for ( uint o = 0; o < ops.size(); o++ )
|
|
|
{
|
|
|
- for ( uint o2 = 0; o2 < ops[o].size(); o2++ )
|
|
|
+ for ( uint o2 = 0; o2 < ops[o]->pool.size(); o2++ )
|
|
|
{
|
|
|
if ( forest[t][n].feat == NULL )
|
|
|
{
|
|
|
- if ( ops[o][o2]->getOps() == feattype )
|
|
|
+ if ( ops[o]->pool[o2]->getOps() == feattype )
|
|
|
{
|
|
|
- forest[t][n].feat = ops[o][o2]->clone();
|
|
|
+ forest[t][n].feat = ops[o]->pool[o2]->clone();
|
|
|
break;
|
|
|
}
|
|
|
}
|