From da659aa0fba48e56eae4ca01efbe7995047f91d7 Mon Sep 17 00:00:00 2001 From: Guillaume Pasero <guillaume.pasero@c-s.fr> Date: Mon, 21 Aug 2017 14:20:48 +0200 Subject: [PATCH] ENH: switch between raster and vector output --- .../app/otbLargeScaleMeanShift.cxx | 63 +++++++++++++------ 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx index fc19261a52..3bcf3476fc 100644 --- a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx +++ b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx @@ -97,12 +97,26 @@ private: ShareParameter("tilesizex","segmentation.tilesizex"); ShareParameter("tilesizey","segmentation.tilesizey"); - AddParameter(ParameterType_InputImage, "imfield", "Support image for field computation"); - SetParameterDescription( "imfield", "This is an optional support image " - "that can be used to compute field values in each region." ); - MandatoryOff("imfield"); + AddParameter(ParameterType_Choice, "mode","Output mode"); + SetParameterDescription("mode", "Type of segmented output"); - ShareParameter("out","vectorization.out"); + AddChoice("mode.vector", "Segmentation as vector output."); + SetParameterDescription("mode.vector","In this mode, the application will " + "produce a vector file or database and compute field values for each " + "region"); + + AddParameter(ParameterType_InputImage, "mode.vector.imfield", "Support image for field computation"); + SetParameterDescription( "mode.vector.imfield", "This is an optional support image " + "that can be used to compute field values in each region. Otherwise, the " + "input image is used as support." ); + MandatoryOff("mode.vector.imfield"); + + ShareParameter("mode.vector.out","vectorization.out"); + + AddChoice("mode.raster", "Standard segmentation with labeled raster output"); + SetParameterDescription("mode.raster","In this mode, the application will produce a standard labeled raster."); + + ShareParameter("mode.raster.out","merging.out"); AddParameter( ParameterType_Empty, "cleanup", "Temporary files cleaning" ); EnableParameter( "cleanup" ); @@ -135,6 +149,8 @@ private: SetDocExampleParameterValue("out", "regions.shp"); SetOfficialDocLink(); + + DebugOn(); } void DoUpdateParameters() ITK_OVERRIDE @@ -144,9 +160,7 @@ private: { std::vector<std::string> tmpFilenames; tmpFilenames.push_back(GetParameterString("out")+std::string("_labelmap.tif")); - tmpFilenames.push_back(GetParameterString("out")+std::string("_labelmap_merged.tif")); tmpFilenames.push_back(GetParameterString("out")+std::string("_labelmap.geom")); - tmpFilenames.push_back(GetParameterString("out")+std::string("_labelmap_merged.geom")); ExecuteInternal("smoothing"); // in-memory connexion here (saves 1 additional update for foutpos) GetInternalApplication("segmentation")->SetParameterInputImage("in", @@ -165,23 +179,34 @@ private: GetInternalApplication("merging")->SetParameterString("inseg", tmpFilenames[0]); - GetInternalApplication("merging")->SetParameterString("out", - tmpFilenames[1]); - GetInternalApplication("merging")->ExecuteAndWriteOutput(); - - if (IsParameterEnabled("imfield") && HasValue("imfield")) + EnableParameter("mode.raster.out"); + if (GetParameterString("mode") == "vector") { - GetInternalApplication("vectorization")->SetParameterString("in", - GetParameterString("imfield")); + tmpFilenames.push_back(GetParameterString("out")+std::string("_labelmap_merged.tif")); + tmpFilenames.push_back(GetParameterString("out")+std::string("_labelmap_merged.geom")); + GetInternalApplication("merging")->SetParameterString("out", + tmpFilenames[2]); + GetInternalApplication("merging")->ExecuteAndWriteOutput(); + if (IsParameterEnabled("mode.vector.imfield") && + HasValue("mode.vector.imfield")) + { + GetInternalApplication("vectorization")->SetParameterString("in", + GetParameterString("mode.vector.imfield")); + } + else + { + GetInternalApplication("vectorization")->SetParameterString("in", + GetParameterString("in")); + } + GetInternalApplication("vectorization")->SetParameterString("inseg", + tmpFilenames[2]); + ExecuteInternal("vectorization"); } else { - GetInternalApplication("vectorization")->SetParameterString("in", - GetParameterString("in")); + GetInternalApplication("merging")->ExecuteAndWriteOutput(); } - GetInternalApplication("vectorization")->SetParameterString("inseg", - tmpFilenames[1]); - ExecuteInternal("vectorization"); + DisableParameter("mode.raster.out"); if( IsParameterEnabled( "cleanup" ) ) { -- GitLab