Ver código fonte

probability maps for region-wise labeling

Sven Sickert 11 anos atrás
pai
commit
0703b8c881
1 arquivos alterados com 16 adições e 7 exclusões
  1. 16 7
      semseg/SemSegContextTree3D.cpp

+ 16 - 7
semseg/SemSegContextTree3D.cpp

@@ -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++ )