|
@@ -11,7 +11,9 @@ using namespace NICE;
|
|
|
using namespace OBJREC;
|
|
|
|
|
|
#undef DEBUG_CSURK
|
|
|
-#define UNCERTAINTY
|
|
|
+
|
|
|
+#undef UNCERTAINTY
|
|
|
+
|
|
|
|
|
|
SemSegCsurka::SemSegCsurka ( const Config *conf,
|
|
|
const MultiDataset *md )
|
|
@@ -1480,12 +1482,38 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
}
|
|
|
|
|
|
#ifdef UNCERTAINTY
|
|
|
- vector<FloatImage> uncert;
|
|
|
+ std::vector<FloatImage> uncert;
|
|
|
+ std::vector<FloatImage> gpUncertainty;
|
|
|
+ std::vector<FloatImage> gpMean;
|
|
|
+ std::vector<FloatImage> gpMeanRatio;
|
|
|
+ std::vector<FloatImage> gpWeightAll;
|
|
|
+ std::vector<FloatImage> gpWeightRatio;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
for(int s = 0; s < scalesize; s++)
|
|
|
{
|
|
|
uncert.push_back(FloatImage(xsize, ysize));
|
|
|
uncert[s].set(0.0);
|
|
|
+
|
|
|
+ gpUncertainty.push_back(FloatImage(xsize, ysize));
|
|
|
+ gpMean.push_back(FloatImage(xsize, ysize));
|
|
|
+ gpMeanRatio.push_back(FloatImage(xsize, ysize));
|
|
|
+ gpWeightAll.push_back(FloatImage(xsize, ysize));
|
|
|
+ gpWeightRatio.push_back(FloatImage(xsize, ysize));
|
|
|
+
|
|
|
+ gpImpactRatio.push_back(FloatImage(xsize, ysize)); */
|
|
|
+
|
|
|
+ gpUncertainty[s].set(0.0);
|
|
|
+ gpMean[s].set(0.0);
|
|
|
+ gpMeanRatio[s].set(0.0);
|
|
|
+ gpWeightAll[s].set(0.0);
|
|
|
+ gpWeightRatio[s].set(0.0);
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
ColorImage imgrgb ( xsize, ysize );
|
|
|
std::string s;
|
|
|
std::stringstream out;
|
|
@@ -1495,8 +1523,15 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
|
|
|
double maxu = -numeric_limits<double>::max();
|
|
|
double minu = numeric_limits<double>::max();
|
|
|
+
|
|
|
+ double gpNoise = conf->gD("GPHIK", "noise", 0.01);
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
+ #ifdef UNCERTAINTY
|
|
|
+ std::cerr << "compute values for uncertainty stuff as well" << std::endl;
|
|
|
+ #endif
|
|
|
+
|
|
|
if ( classifier != NULL )
|
|
|
{
|
|
|
clog << "[log] SemSegCsruka::classifyregions: Wahrscheinlichkeitskarten erstellen: classifier != NULL" << endl;
|
|
@@ -1508,6 +1543,13 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
{
|
|
|
ClassificationResult r = classifier->classify ( pce[i].second );
|
|
|
|
|
|
+ #ifdef UNCERTAINTY
|
|
|
+
|
|
|
+ double minMeanAbs ( numeric_limits<double>::max() );
|
|
|
+ double maxMeanAbs ( 0.0 );
|
|
|
+ double sndMaxMeanAbs ( 0.0 );
|
|
|
+ #endif
|
|
|
+
|
|
|
for ( int j = 0 ; j < r.scores.size(); j++ )
|
|
|
{
|
|
|
if ( useclass[j] == 0 )
|
|
@@ -1515,6 +1557,23 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
|
|
|
fV[j] += r.scores[j];
|
|
|
preMap.set ( pce[i].second.x, pce[i].second.y, r.scores[j], j + s*klassen );
|
|
|
+
|
|
|
+ #ifdef UNCERTAINTY
|
|
|
+
|
|
|
+ if (abs(r.scores[j]) < minMeanAbs)
|
|
|
+ minMeanAbs = abs(r.scores[j]);
|
|
|
+
|
|
|
+ if (abs(r.scores[j]) > maxMeanAbs)
|
|
|
+ {
|
|
|
+ sndMaxMeanAbs = maxMeanAbs;
|
|
|
+ maxMeanAbs = abs(r.scores[j]);
|
|
|
+ }
|
|
|
+
|
|
|
+ else if (abs(r.scores[j]) > sndMaxMeanAbs)
|
|
|
+ {
|
|
|
+ sndMaxMeanAbs = abs(r.scores[j]);
|
|
|
+ }
|
|
|
+ #endif
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1528,6 +1587,89 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
uncert[s] ( pce[i].second.x, pce[i].second.y ) = r.uncertainty;
|
|
|
maxu = std::max ( r.uncertainty, maxu );
|
|
|
minu = std::min ( r.uncertainty, minu );
|
|
|
+
|
|
|
+
|
|
|
+ double firstTerm (1.0 / sqrt(r.uncertainty+gpNoise));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gpUncertainty[s] ( pce[i].second.x, pce[i].second.y ) = maxMeanAbs*firstTerm;
|
|
|
+
|
|
|
+
|
|
|
+ gpMean[s] ( pce[i].second.x, pce[i].second.y ) = minMeanAbs;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gpMeanRatio[s] ( pce[i].second.x, pce[i].second.y ) = maxMeanAbs - sndMaxMeanAbs;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ std::vector<double> diffToPositive; diffToPositive.clear();
|
|
|
+ std::vector<double> diffToNegative; diffToNegative.clear();
|
|
|
+ double diffToNegativeSum(0.0);
|
|
|
+
|
|
|
+ for ( int j = 0 ; j < r.scores.size(); j++ )
|
|
|
+ {
|
|
|
+ if ( useclass[j] == 0 )
|
|
|
+ continue;
|
|
|
+
|
|
|
+ diffToPositive.push_back(abs(r.scores[j] - 1));
|
|
|
+
|
|
|
+ diffToNegative.push_back(abs(r.scores[j] + 1));
|
|
|
+
|
|
|
+ diffToNegativeSum += abs(r.scores[j] - 1);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ double thirdTerm (numeric_limits<double>::max()) ;
|
|
|
+ for(uint tmpCnt = 0; tmpCnt < diffToPositive.size(); tmpCnt++)
|
|
|
+ {
|
|
|
+ double tmpVal ( diffToPositive[tmpCnt] + (diffToNegativeSum-diffToNegative[tmpCnt]) );
|
|
|
+ if (tmpVal < thirdTerm)
|
|
|
+ thirdTerm = tmpVal;
|
|
|
+ }
|
|
|
+ gpWeightAll[s] ( pce[i].second.x, pce[i].second.y ) = thirdTerm*firstTerm;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ double thirdTermMostPlausible ( 0.0 ) ;
|
|
|
+ double thirdTermSecondMostPlausible ( 0.0 ) ;
|
|
|
+ for(uint tmpCnt = 0; tmpCnt < diffToPositive.size(); tmpCnt++)
|
|
|
+ {
|
|
|
+ if (diffToPositive[tmpCnt] > thirdTermMostPlausible)
|
|
|
+ {
|
|
|
+ thirdTermSecondMostPlausible = thirdTermMostPlausible;
|
|
|
+ thirdTermMostPlausible = diffToPositive[tmpCnt];
|
|
|
+ }
|
|
|
+ else if (diffToPositive[tmpCnt] > thirdTermSecondMostPlausible)
|
|
|
+ {
|
|
|
+ thirdTermSecondMostPlausible = diffToPositive[tmpCnt];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ gpWeightRatio[s] ( pce[i].second.x, pce[i].second.y ) = (thirdTermMostPlausible - thirdTermSecondMostPlausible)*firstTerm;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
#endif
|
|
|
}
|
|
|
}
|
|
@@ -1541,27 +1683,162 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
for ( int i = s; i < ( int ) pce.size(); i += scalesize )
|
|
|
{
|
|
|
ClassificationResult r = vclassifier->classify ( * ( pce[i].second.vec ) );
|
|
|
+
|
|
|
+ #ifdef UNCERTAINTY
|
|
|
+
|
|
|
+ double minMeanAbs ( numeric_limits<double>::max() );
|
|
|
+ double maxMeanAbs ( 0.0 );
|
|
|
+ double sndMaxMeanAbs ( 0.0 );
|
|
|
+ #endif
|
|
|
+
|
|
|
for ( int j = 0 ; j < ( int ) r.scores.size(); j++ )
|
|
|
{
|
|
|
if ( useclass[j] == 0 )
|
|
|
continue;
|
|
|
fV[j] += r.scores[j];
|
|
|
preMap.set ( pce[i].second.x, pce[i].second.y, r.scores[j], j + s*klassen );
|
|
|
+
|
|
|
+ #ifdef UNCERTAINTY
|
|
|
+
|
|
|
+ if (abs(r.scores[j]) < minMeanAbs)
|
|
|
+ minMeanAbs = abs(r.scores[j]);
|
|
|
+
|
|
|
+ if (abs(r.scores[j]) > maxMeanAbs)
|
|
|
+ {
|
|
|
+ sndMaxMeanAbs = maxMeanAbs;
|
|
|
+ maxMeanAbs = abs(r.scores[j]);
|
|
|
+ }
|
|
|
+
|
|
|
+ else if (abs(r.scores[j]) > sndMaxMeanAbs)
|
|
|
+ {
|
|
|
+ sndMaxMeanAbs = abs(r.scores[j]);
|
|
|
+ }
|
|
|
+ #endif
|
|
|
}
|
|
|
#ifdef UNCERTAINTY
|
|
|
uncert[s] ( pce[i].second.x, pce[i].second.y ) = r.uncertainty;
|
|
|
maxu = std::max ( r.uncertainty, maxu );
|
|
|
minu = std::min ( r.uncertainty, minu );
|
|
|
+
|
|
|
+
|
|
|
+ double firstTerm (1.0 / sqrt(r.uncertainty+gpNoise));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gpUncertainty[s] ( pce[i].second.x, pce[i].second.y ) = maxMeanAbs*firstTerm;
|
|
|
+
|
|
|
+
|
|
|
+ gpMean[s] ( pce[i].second.x, pce[i].second.y ) = minMeanAbs;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gpMeanRatio[s] ( pce[i].second.x, pce[i].second.y ) = maxMeanAbs - sndMaxMeanAbs;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ std::vector<double> diffToPositive; diffToPositive.clear();
|
|
|
+ std::vector<double> diffToNegative; diffToNegative.clear();
|
|
|
+ double diffToNegativeSum(0.0);
|
|
|
+
|
|
|
+ for ( int j = 0 ; j < fV.size(); j++ )
|
|
|
+ {
|
|
|
+ if ( useclass[j] == 0 )
|
|
|
+ continue;
|
|
|
+
|
|
|
+ diffToPositive.push_back(abs(r.scores[j] - 1));
|
|
|
+
|
|
|
+ diffToNegative.push_back(abs(r.scores[j] + 1));
|
|
|
+
|
|
|
+ diffToNegativeSum += abs(r.scores[j] - 1);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ double thirdTerm (numeric_limits<double>::max()) ;
|
|
|
+ for(uint tmpCnt = 0; tmpCnt < diffToPositive.size(); tmpCnt++)
|
|
|
+ {
|
|
|
+ double tmpVal ( diffToPositive[tmpCnt] + (diffToNegativeSum-diffToNegative[tmpCnt]) );
|
|
|
+ if (tmpVal < thirdTerm)
|
|
|
+ thirdTerm = tmpVal;
|
|
|
+ }
|
|
|
+ gpWeightAll[s] ( pce[i].second.x, pce[i].second.y ) = thirdTerm*firstTerm;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ double thirdTermMostPlausible ( 0.0 ) ;
|
|
|
+ double thirdTermSecondMostPlausible ( 0.0 ) ;
|
|
|
+ for(uint tmpCnt = 0; tmpCnt < diffToPositive.size(); tmpCnt++)
|
|
|
+ {
|
|
|
+ if (diffToPositive[tmpCnt] > thirdTermMostPlausible)
|
|
|
+ {
|
|
|
+ thirdTermSecondMostPlausible = thirdTermMostPlausible;
|
|
|
+ thirdTermMostPlausible = diffToPositive[tmpCnt];
|
|
|
+ }
|
|
|
+ else if (diffToPositive[tmpCnt] > thirdTermSecondMostPlausible)
|
|
|
+ {
|
|
|
+ thirdTermSecondMostPlausible = diffToPositive[tmpCnt];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ gpWeightRatio[s] ( pce[i].second.x, pce[i].second.y ) = (thirdTermMostPlausible - thirdTermSecondMostPlausible)*firstTerm;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
#endif
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ #ifdef UNCERTAINTY
|
|
|
+ std::cerr << "uncertainty values and derived scores successfully computed" << std::endl;
|
|
|
+ #endif
|
|
|
+
|
|
|
#ifdef UNCERTAINTY
|
|
|
cout << "maxvdirect: " << maxu << " minvdirect: " << minu << endl;
|
|
|
+
|
|
|
FloatImage gaussUncert ( xsize, ysize );
|
|
|
+
|
|
|
+
|
|
|
ICETools::convertToRGB ( uncert[0], imgrgb );
|
|
|
- imgrgb.write ( out.str() + "rough.png" );
|
|
|
+ imgrgb.write ( out.str() + "rough.ppm" );
|
|
|
+
|
|
|
+
|
|
|
+ FloatImage gaussGPUncertainty ( xsize, ysize );
|
|
|
+ FloatImage gaussGPMean ( xsize, ysize );
|
|
|
+ FloatImage gaussGPMeanRatio( xsize, ysize );
|
|
|
+ FloatImage gaussGPWeightAll ( xsize, ysize );
|
|
|
+ FloatImage gaussGPWeightRatio ( xsize, ysize );
|
|
|
+
|
|
|
+
|
|
|
+ ICETools::convertToRGB ( gpUncertainty[0], imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpUncertainty.ppm" );
|
|
|
+ ICETools::convertToRGB ( gpMean[0], imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpMean.ppm" );
|
|
|
+ ICETools::convertToRGB ( gpMeanRatio[0], imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpMeanRatio.ppm" );
|
|
|
+ ICETools::convertToRGB ( gpWeightAll[0], imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpWeightAll.ppm" );
|
|
|
+ ICETools::convertToRGB ( gpWeightRatio[0], imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpWeightRatio.ppm" );
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
vector<double> scalesVec;
|
|
@@ -1659,6 +1936,19 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
#ifdef UNCERTAINTY
|
|
|
filterGaussSigmaApproximate<float, float, float> ( uncert[s], sigma, &gaussUncert );
|
|
|
uncert[s] = gaussUncert;
|
|
|
+
|
|
|
+
|
|
|
+ filterGaussSigmaApproximate<float, float, float> ( gpUncertainty[s], sigma, &gaussGPUncertainty );
|
|
|
+ filterGaussSigmaApproximate<float, float, float> ( gpMean[s], sigma, &gaussGPMean );
|
|
|
+ filterGaussSigmaApproximate<float, float, float> ( gpMeanRatio[s], sigma, &gaussGPMeanRatio );
|
|
|
+ filterGaussSigmaApproximate<float, float, float> ( gpWeightAll[s], sigma, &gaussGPWeightAll );
|
|
|
+ filterGaussSigmaApproximate<float, float, float> ( gpWeightRatio[s], sigma, &gaussGPWeightRatio );
|
|
|
+
|
|
|
+ gpUncertainty[s] = gaussGPUncertainty;
|
|
|
+ gpMean[s] = gaussGPMean;
|
|
|
+ gpMeanRatio[s] = gaussGPMeanRatio;
|
|
|
+ gpWeightAll[s] = gaussGPWeightAll;
|
|
|
+ gpWeightRatio[s] = gaussGPWeightRatio;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -1691,8 +1981,20 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
for ( int s = 0; s < ( int ) scalesize; s++ )
|
|
|
{
|
|
|
gaussUncert(x,y) += uncert[s](x,y);
|
|
|
+
|
|
|
+ gaussGPUncertainty(x,y) += gpUncertainty[s](x,y);
|
|
|
+ gaussGPMean(x,y) += gpMean[s](x,y);
|
|
|
+ gaussGPMeanRatio(x,y) += gpMeanRatio[s](x,y);
|
|
|
+ gaussGPWeightAll(x,y) += gpWeightAll[s](x,y);
|
|
|
+ gaussGPWeightRatio(x,y) += gpWeightRatio[s](x,y);
|
|
|
}
|
|
|
gaussUncert(x,y)/=scalesize;
|
|
|
+
|
|
|
+ gaussGPUncertainty(x,y)/=scalesize;
|
|
|
+ gaussGPMean(x,y)/=scalesize;
|
|
|
+ gaussGPMeanRatio(x,y)/=scalesize;
|
|
|
+ gaussGPWeightAll(x,y)/=scalesize;
|
|
|
+ gaussGPWeightRatio(x,y)/=scalesize;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1726,8 +2028,19 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
gaussUncert(0,0) = 0.0;
|
|
|
gaussUncert(0,1) = 0.04;
|
|
|
ICETools::convertToRGB ( gaussUncert, imgrgb );
|
|
|
- imgrgb.write ( out.str() + "filtered.png" );
|
|
|
-
|
|
|
+ imgrgb.write ( out.str() + "filtered.ppm" );
|
|
|
+
|
|
|
+ ICETools::convertToRGB ( gaussGPUncertainty, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpUncertaintyFiltered.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPMean, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpMeanFiltered.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPMeanRatio, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpMeanRatioFiltered.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPWeightAll, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpWeightAllFiltered.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPWeightRatio, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpWeightRatioFiltered.ppm" );
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
#undef VISSEMSEG
|
|
@@ -1793,7 +2106,13 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
vector<vector <double> > regionprob;
|
|
|
|
|
|
#ifdef UNCERTAINTY
|
|
|
- vector<double> regionUncert;
|
|
|
+ std::vector<double> regionUncert;
|
|
|
+
|
|
|
+ std::vector<double> regionGPUncertainty;
|
|
|
+ std::vector<double> regionGPMean;
|
|
|
+ std::vector<double> regionGPMeanRatio;
|
|
|
+ std::vector<double> regionGPWeightAll;
|
|
|
+ std::vector<double> regionGPWeightRatio;
|
|
|
#endif
|
|
|
|
|
|
|
|
@@ -1808,6 +2127,12 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
Regionen.push_back ( pair<int, Example> ( 0, Example() ) );
|
|
|
#ifdef UNCERTAINTY
|
|
|
regionUncert.push_back ( 0.0 );
|
|
|
+
|
|
|
+ regionGPUncertainty.push_back ( 0.0 );
|
|
|
+ regionGPMean.push_back ( 0.0 );
|
|
|
+ regionGPMeanRatio.push_back ( 0.0 );
|
|
|
+ regionGPWeightAll.push_back ( 0.0 );
|
|
|
+ regionGPWeightRatio.push_back ( 0.0 );
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -1827,11 +2152,16 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
}
|
|
|
#ifdef UNCERTAINTY
|
|
|
regionUncert[pos] += gaussUncert ( x, y );
|
|
|
+
|
|
|
+ regionGPUncertainty[pos] += gaussGPUncertainty ( x, y );
|
|
|
+ regionGPMean[pos] += gaussGPMean ( x, y );
|
|
|
+ regionGPMeanRatio[pos] += gaussGPMeanRatio ( x, y );
|
|
|
+ regionGPWeightAll[pos] += gaussGPWeightAll ( x, y );
|
|
|
+ regionGPWeightRatio[pos] += gaussGPWeightRatio ( x, y );
|
|
|
#endif
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
cout << "regions: " << regionsize << endl;
|
|
|
cout << "outfeats: " << endl;
|
|
@@ -1875,9 +2205,14 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
Regionen[i].first = maxpos;
|
|
|
#ifdef UNCERTAINTY
|
|
|
regionUncert[i] /= Regionen[i].second.weight;
|
|
|
+
|
|
|
+ regionGPUncertainty[i] /= Regionen[i].second.weight;
|
|
|
+ regionGPMean[i] /= Regionen[i].second.weight;
|
|
|
+ regionGPMeanRatio[i] /= Regionen[i].second.weight;
|
|
|
+ regionGPWeightAll[i] /= Regionen[i].second.weight;
|
|
|
+ regionGPWeightRatio[i] /= Regionen[i].second.weight;
|
|
|
#endif
|
|
|
}
|
|
|
-
|
|
|
|
|
|
for ( int y = 0; y < ( int ) mask.cols(); y++ )
|
|
|
{
|
|
@@ -1887,9 +2222,15 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
segresult.setPixel ( x, y, Regionen[pos].first );
|
|
|
#ifdef UNCERTAINTY
|
|
|
gaussUncert ( x, y ) = regionUncert[pos];
|
|
|
+
|
|
|
+ gaussGPUncertainty ( x, y ) = regionGPUncertainty[pos];
|
|
|
+ gaussGPMean ( x, y ) = regionGPMean[pos];
|
|
|
+ gaussGPMeanRatio ( x, y ) = regionGPMeanRatio[pos];
|
|
|
+ gaussGPWeightAll ( x, y ) = regionGPWeightAll[pos];
|
|
|
+ gaussGPWeightRatio ( x, y ) = regionGPWeightRatio[pos];
|
|
|
#endif
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
#ifdef UNCERTAINTY
|
|
|
maxu = -numeric_limits<float>::max();
|
|
|
minu = numeric_limits<float>::max();
|
|
@@ -1907,7 +2248,18 @@ void SemSegCsurka::classifyregions ( CachedExample *ce, NICE::Image & segresult,
|
|
|
|
|
|
|
|
|
ICETools::convertToRGB ( gaussUncert, imgrgb );
|
|
|
- imgrgb.write ( out.str() + "region.png" );
|
|
|
+ imgrgb.write ( out.str() + "region.ppm" );
|
|
|
+
|
|
|
+ ICETools::convertToRGB ( gaussGPUncertainty, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpUncertaintyRegion.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPMean, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpMeanRegion.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPMeanRatio, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpMeanRatioRegion.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPWeightAll, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpWeightAllRegion.ppm" );
|
|
|
+ ICETools::convertToRGB ( gaussGPWeightRatio, imgrgb );
|
|
|
+ imgrgb.write ( out.str() + "gpWeightRatioRegion.ppm" );
|
|
|
#endif
|
|
|
|
|
|
#undef WRITEREGIONS
|