|
@@ -1996,6 +1996,7 @@ void SemSegContextTree3D::classify (
|
|
|
|
|
|
regionProbs.clear();
|
|
|
regionProbs = vector<vector<double> > ( amountRegions, vector<double> ( classes, 0.0 ) );
|
|
|
+ vector<vector<double> > regionProbsCount ( amountRegions, vector<double> ( classes, 0.0 ) );
|
|
|
|
|
|
vector<int> bestlabels ( amountRegions, labelmapback[classesInImg[0]] );
|
|
|
for ( int z = 0; z < zsize; z++ )
|
|
@@ -2010,39 +2011,47 @@ void SemSegContextTree3D::classify (
|
|
|
int c = classesInImg[i];
|
|
|
// get mean voting of all trees
|
|
|
regionProbs[r][c] += getMeanProb ( x, y, z, c, nodeIndices );
|
|
|
+ regionProbsCount[r][c]++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ for ( int r = 0; r < amountRegions; r++ )
|
|
|
+ for ( int c = 0; c < classes; c++ )
|
|
|
+ regionProbs[r][c] /= regionProbsCount[r][c];
|
|
|
+
|
|
|
+
|
|
|
for ( int r = 0; r < amountRegions; r++ )
|
|
|
{
|
|
|
double maxProb = regionProbs[r][classesInImg[0]];
|
|
|
bestlabels[r] = classesInImg[0];
|
|
|
|
|
|
for ( int c = 1; c < classes; c++ )
|
|
|
- {
|
|
|
if ( maxProb < regionProbs[r][c] )
|
|
|
{
|
|
|
maxProb = regionProbs[r][c];
|
|
|
bestlabels[r] = c;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
bestlabels[r] = labelmapback[bestlabels[r]];
|
|
|
}
|
|
|
|
|
|
// copy region labeling into segresults (output)
|
|
|
for ( int z = 0; z < zsize; z++ )
|
|
|
- {
|
|
|
for ( int y = 0; y < ysize; y++ )
|
|
|
- {
|
|
|
for ( int x = 0; x < xsize; x++ )
|
|
|
{
|
|
|
- segresult.set ( x, y, bestlabels[regions ( x,y, ( uint ) z ) ], ( uint ) z );
|
|
|
+ int r = regions ( x,y, (uint) z );
|
|
|
+ int l = bestlabels[ r ];
|
|
|
+
|
|
|
+ segresult.set ( x, y, l, (uint) z );
|
|
|
+ for ( int c = 0; c < classes; c++ )
|
|
|
+ {
|
|
|
+ double curProb = regionProbs[r][c];
|
|
|
+ probabilities.set( x, y, z, curProb, c );
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
#ifdef WRITEREGIONS
|
|
|
for ( int z = 0; z < zsize; z++ )
|