Ver código fonte

fixed bug in coarse segmentation when using context features

Sven Sickert 9 anos atrás
pai
commit
b9da7f954f
1 arquivos alterados com 11 adições e 26 exclusões
  1. 11 26
      semseg/SemSegContextTree3D.cpp

+ 11 - 26
semseg/SemSegContextTree3D.cpp

@@ -1596,7 +1596,11 @@ void SemSegContextTree3D::classify (
                             if ( val < forest[tree][node].decision )
                             {
                                 int left = forest[tree][node].left;
-                                nodeIndices.set ( x, y, z, left, tree );
+
+                                for ( int n = 0; n < labelIncrement; n++ )
+                                    for ( int m = 0; m < labelIncrement; m++ )
+                                        if (x+m < xsize && y+n < ysize)
+                                            nodeIndices.set ( x+m, y+n, z, left, tree );
 #pragma omp critical
                                 {
                                     if ( fasthik != NULL
@@ -1609,7 +1613,10 @@ void SemSegContextTree3D::classify (
                             else
                             {
                                 int right = forest[tree][node].right;
-                                nodeIndices.set ( x, y, z, right, tree );
+                                for ( int n = 0; n < labelIncrement; n++ )
+                                    for ( int m = 0; m < labelIncrement; m++ )
+                                        if (x+m < xsize && y+n < ysize)
+                                            nodeIndices.set ( x+m, y+n, z, right, tree );
 #pragma omp critical
                                 {
                                     if ( fasthik != NULL
@@ -1700,8 +1707,8 @@ void SemSegContextTree3D::classify (
     // final labeling step
     if ( pixelWiseLabeling )
     {
-        for ( int x = 0; x < xsize; x=x+labelIncrement )
-            for ( int y = 0; y < ysize; y=y+labelIncrement )
+        for ( int x = 0; x < xsize; x++ )
+            for ( int y = 0; y < ysize; y++ )
                 for ( int z = 0; z < zsize; z++ )
                 {
                     double maxProb = - numeric_limits<double>::max();
@@ -1725,28 +1732,6 @@ void SemSegContextTree3D::classify (
                     segresult.set ( x, y, maxClass, ( uint ) z );
                 }
 
-        if ( labelIncrement > 1 )
-        {
-            // fill holes in label image
-            for ( int y = 0; y < ysize; y++ )
-                for ( int x = labelIncrement; x < xsize-labelIncrement; x++ )
-                    for ( int z = 0; z < zsize; z++ )
-                    {
-                        unsigned short xs = x % labelIncrement;
-                        if ( xs != 0 )
-                            segresult.set ( x, y, segresult.get ( x-xs, y, (uint)z ), (uint)z );
-                    }
-
-            for ( int x = 0; x < xsize; x++ )
-                for ( int y = 0; y < ysize-labelIncrement; y++ )
-                    for ( int z = 0; z < zsize; z++ )
-                    {
-                        unsigned short ys = y % labelIncrement;
-                        if ( ys != 0 )
-                            segresult.set ( x, y , segresult.get ( x, y-ys, (uint)z), (uint)z );
-                    }
-        }
-
 #ifdef VISUALIZE
         getProbabilityMap( probabilities );
 #endif