From f56076255ed1ec2a9576fd402f5d70911a6edec7 Mon Sep 17 00:00:00 2001
From: Jonathan Guinet <jonathan.guinet@c-s.fr>
Date: Wed, 13 Jun 2012 14:18:36 +0200
Subject: [PATCH] ENH: modesearch option name change.

---
 .../otbMeanShiftSmoothingImageFilter.h        | 13 ++++++------
 .../otbMeanShiftSmoothingImageFilter.txx      | 20 +++++++++----------
 .../otbMeanShiftSmoothingImageFilter.cxx      | 10 +++++-----
 ...MeanShiftSmoothingImageFilterThreading.cxx |  8 ++++----
 4 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.h b/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.h
index 0cd93cc062..35401cfe1c 100644
--- a/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.h
+++ b/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.h
@@ -411,7 +411,7 @@ private:
  *
  * MeanShifVector squared norm is compared with Threshold (set using Get/Set accessor) to define pixel convergence (1e-3 by default).
  * MaxIterationNumber defines maximum iteration number for each pixel convergence (set using Get/Set accessor). Set to 4 by default.
- * ModeSearchOptimization is a boolean value, to choose between optimized and non optimized algorithm. If set to true (by default), assign mode value to each pixel on a path covered in convergence steps.
+ * ModeSearch is a boolean value, to choose between optimized and non optimized algorithm. If set to true (by default), assign mode value to each pixel on a path covered in convergence steps.
  *
  * For more information on mean shift techniques, one might consider reading the following article:
  *
@@ -499,11 +499,12 @@ public:
   itkGetConstReferenceMacro(Threshold, double);
   itkSetMacro(Threshold, double);
 
-  /** Toggle mode search optimization, which is enabled by default.
+  /** Toggle mode search, which is enabled by default.
     * When off, the output label image is not available
+    * Be careful, with this option, the result will slightly depend on thread number.
     */
-  itkSetMacro(ModeSearchOptimization, bool);
-  itkGetConstReferenceMacro(ModeSearchOptimization, bool);
+  itkSetMacro(ModeSearch, bool);
+  itkGetConstReferenceMacro(ModeSearch, bool);
 
   /** Toggle bucket optimization, which is disabled by default.
     */
@@ -609,8 +610,8 @@ private:
    */
   typename ModeTableImageType::Pointer m_ModeTable;
 
-  /** Boolean to enable mode search optimization */
-  bool m_ModeSearchOptimization;
+  /** Boolean to enable mode search  */
+  bool m_ModeSearch;
   /** Boolean to enable bucket optimization */
   bool m_BucketOptimization;
 
diff --git a/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.txx b/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.txx
index d9ecca29a0..54db76fff9 100644
--- a/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.txx
+++ b/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.txx
@@ -42,7 +42,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
   // , m_NumberOfComponentsPerPixel(...)
   // , m_JointImage(0)
   // , m_ModeTable(0)
-  , m_ModeSearchOptimization( true )
+  , m_ModeSearch( true )
   , m_BucketOptimization( false )
 {
   this->SetNumberOfOutputs(4);
@@ -316,13 +316,13 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
     }
 */
 
-  //TODO don't create mode table iterator when ModeSearchOptimization is set to false
+  //TODO don't create mode table iterator when ModeSearch is set to false
   m_ModeTable = ModeTableImageType::New();
   m_ModeTable->SetRegions(inputPtr->GetRequestedRegion());
   m_ModeTable->Allocate();
   m_ModeTable->FillBuffer(0);
 
-  if (m_ModeSearchOptimization)
+  if (m_ModeSearch)
     {
     // Image to store the status at each pixel:
     // 0 : no mode has been found yet
@@ -610,7 +610,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
   // Variables used by mode search optimization
   // List of indices where the current pixel passes through
   std::vector<InputIndexType> pointList;
-  if(m_ModeSearchOptimization) pointList.resize(m_MaxIterationNumber);
+  if(m_ModeSearch) pointList.resize(m_MaxIterationNumber);
   // Number of times an already processed candidate pixel is encountered, resulting in no
   // further computation (Used for statistics only)
   unsigned int numBreaks = 0;
@@ -624,7 +624,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
 
     // if pixel has been already processed (by mode search optimization), skip
     typename ModeTableImageType::InternalPixelType const& currentPixelMode = modeTableIt.Get();
-    if(m_ModeSearchOptimization &&  currentPixelMode == 1)
+    if(m_ModeSearch &&  currentPixelMode == 1)
       {
       numBreaks++;
       continue;
@@ -645,7 +645,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
     while ((iteration < m_MaxIterationNumber) && (!hasConverged))
       {
 
-      if (m_ModeSearchOptimization)
+      if (m_ModeSearch)
         {
         // Find index of the pixel closest to the current jointPixel (not normalized by bandwidth)
         for (unsigned int comp = 0; comp < ImageDimension; comp++)
@@ -697,7 +697,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
             }
 
           }
-        } // end if (m_ModeSearchOptimization)
+        } // end if (m_ModeSearch)
 
       //Calculate meanShiftVector
       if(m_BucketOptimization)
@@ -740,7 +740,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
     const typename OutputIterationImageType::PixelType iterationPixel = iteration;
     iterationIt.Set(iterationPixel);
 
-    if (m_ModeSearchOptimization)
+    if (m_ModeSearch)
       {
       // Update the mode table now that the current pixel has been assigned
       modeTableIt.Set(1); // m_ModeTable->SetPixel(currentIndex, 1);
@@ -765,7 +765,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
         labelOutput->SetPixel(pointList[i], label);
         }
       }
-    else // if ModeSearchOptimization is not set LabelOutput can't be generated
+    else // if ModeSearch is not set LabelOutput can't be generated
       {
         LabelType labelZero=0;
         labelIt.Set(labelZero);
@@ -788,7 +788,7 @@ MeanShiftSmoothingImageFilter<TInputImage, TOutputImage, TKernel, TOutputIterati
 
   // Reassign mode labels
   // Note: Labels are only computed when mode search optimization is enabled
-  if (m_ModeSearchOptimization)
+  if (m_ModeSearch)
     {
     // New labels will be consecutive. The following vector contains the new
     // start label for each thread.
diff --git a/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.cxx b/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.cxx
index 00f7519b86..6870c1c3b0 100644
--- a/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.cxx
+++ b/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilter.cxx
@@ -27,7 +27,7 @@ int otbMeanShiftSmoothingImageFilter(int argc, char * argv[])
   if (argc != 10 && argc != 11)
     {
     std::cerr << "Usage: " << argv[0] <<
-    " infname spatialfname spectralfname iterationfname labelfname spatialBandwidth rangeBandwidth threshold maxiterationnumber (useoptimization)"
+    " infname spatialfname spectralfname iterationfname labelfname spatialBandwidth rangeBandwidth threshold maxiterationnumber (usemodesearch)"
               << std::endl;
     return EXIT_FAILURE;
     }
@@ -41,10 +41,10 @@ int otbMeanShiftSmoothingImageFilter(int argc, char * argv[])
   const double       rangeBandwidth            = atof(argv[7]);
   const double       threshold                 = atof(argv[8]);
   const unsigned int maxiterationnumber        = atoi(argv[9]);
-  bool               useoptimization                 = true;
+  bool               usemodesearch                 = true;
   if(argc==11)
     {
-      useoptimization           = atoi(argv[10])!=0;
+      usemodesearch        = atoi(argv[10])!=0;
     }
 
   /* maxit - threshold */
@@ -75,7 +75,7 @@ int otbMeanShiftSmoothingImageFilter(int argc, char * argv[])
   filter->SetThreshold(threshold);
   filter->SetMaxIterationNumber(maxiterationnumber);
   filter->SetInput(reader->GetOutput());
-  filter->SetModeSearchOptimization(useoptimization);
+  filter->SetModeSearch(usemodesearch);
   //filter->SetNumberOfThreads(1);
   SpatialWriterType::Pointer writer1 = SpatialWriterType::New();
   WriterType::Pointer writer2 = WriterType::New();
@@ -89,7 +89,7 @@ int otbMeanShiftSmoothingImageFilter(int argc, char * argv[])
   writer2->SetInput(filter->GetRangeOutput());
   writer4->SetInput(filter->GetIterationOutput());
 
- if (useoptimization) //mode label image is only available with mode search optimization
+ if (usemodesearch) //mode label image is only available with mode search optimization
     {
     LabelWriterType::Pointer writer5 = LabelWriterType::New();
     writer5->SetFileName(labelfname);
diff --git a/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilterThreading.cxx b/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilterThreading.cxx
index d0ddb71e8a..5e987019e2 100644
--- a/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilterThreading.cxx
+++ b/Testing/Code/BasicFilters/otbMeanShiftSmoothingImageFilterThreading.cxx
@@ -27,7 +27,7 @@ int otbMeanShiftSmoothingImageFilterThreading(int argc, char * argv[])
   if (argc != 7)
     {
     std::cerr << "Usage: " << argv[0] <<
-    " inputFileName outputSingleThreadFileName outputMultiThreadFileName spatialBandwidth rangeBandwidth useOptimization"
+    " inputFileName outputSingleThreadFileName outputMultiThreadFileName spatialBandwidth rangeBandwidth useModeSearch"
               << std::endl;
     return EXIT_FAILURE;
     }
@@ -37,7 +37,7 @@ int otbMeanShiftSmoothingImageFilterThreading(int argc, char * argv[])
   const char *       outputMultiThreadFileName  = argv[3];
   const double       spatialBandwidth           = atof(argv[4]);
   const double       rangeBandwidth             = atof(argv[5]);
-  bool               useOptimization            = (atoi(argv[6])!=0);
+  bool               useModeSearch            = (atoi(argv[6])!=0);
 
   const unsigned int Dimension = 2;
   typedef float                                            PixelType;
@@ -58,13 +58,13 @@ int otbMeanShiftSmoothingImageFilterThreading(int argc, char * argv[])
   filterSingle->SetSpatialBandwidth(spatialBandwidth);
   filterSingle->SetRangeBandwidth(rangeBandwidth);
   filterSingle->SetInput(reader->GetOutput());
-  filterSingle->SetModeSearchOptimization(useOptimization);
+  filterSingle->SetModeSearch(useModeSearch);
   filterSingle->SetNumberOfThreads(1);
 
   filterMulti->SetSpatialBandwidth(spatialBandwidth);
   filterMulti->SetRangeBandwidth(rangeBandwidth);
   filterMulti->SetInput(reader->GetOutput());
-  filterMulti->SetModeSearchOptimization(useOptimization);
+  filterMulti->SetModeSearch(useModeSearch);
 
   WriterType::Pointer writerSingle = WriterType::New();
   WriterType::Pointer writerMulti  = WriterType::New();
-- 
GitLab