]> Creatis software - clitk.git/blobdiff - segmentation/clitkDecomposeAndReconstructImageFilter.txx
initial entry
[clitk.git] / segmentation / clitkDecomposeAndReconstructImageFilter.txx
diff --git a/segmentation/clitkDecomposeAndReconstructImageFilter.txx b/segmentation/clitkDecomposeAndReconstructImageFilter.txx
new file mode 100755 (executable)
index 0000000..6773be8
--- /dev/null
@@ -0,0 +1,98 @@
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
+
+  Authors belong to: 
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
+
+  This software is distributed WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+  PURPOSE.  See the copyright notices for more information.
+
+  It is distributed under dual licence
+
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+======================================================================-====*/
+#ifndef clitkDecomposeAndReconstructImageFilter_txx
+#define clitkDecomposeAndReconstructImageFilter_txx
+
+/* =================================================
+ * @file   clitkDecomposeAndReconstructImageFilter.txx
+ * @author 
+ * @date   
+ * 
+ * @brief 
+ * 
+ ===================================================*/
+
+
+namespace clitk
+{
+
+  //-------------------------------------------------------------------
+  // Update with the number of dimensions
+  //-------------------------------------------------------------------
+  template<class InputImageType, class OutputImageType>
+  DecomposeAndReconstructImageFilter<InputImageType, OutputImageType>::DecomposeAndReconstructImageFilter()
+  {
+   m_Verbose=false;
+   for (unsigned int i=0; i<InputImageDimension; i++)
+     m_Radius[i]=1;
+   m_NumberOfNewLabels=1;
+   m_FullyConnected=true;
+   m_BackgroundValue=0;
+   m_ForegroundValue=1;
+   m_MaximumNumberOfLabels=10;
+   m_MinimumObjectSize=10;
+   m_MinimumNumberOfIterations=1;
+
+  }
+
+
+  //-------------------------------------------------------------------
+  // Update with the number of dimensions and the pixeltype
+  //-------------------------------------------------------------------
+  template <class InputImageType, class  OutputImageType> 
+  void 
+  DecomposeAndReconstructImageFilter<InputImageType, OutputImageType>::GenerateData()
+  {
+
+
+    // Internal type
+    typedef itk::Image<InternalPixelType, InputImageDimension> InternalImageType;
+
+    // Filters used
+    typedef clitk::DecomposeThroughErosionImageFilter<InputImageType, InternalImageType> DecomposeThroughErosionImageFilterType;
+    typedef clitk::ReconstructThroughDilationImageFilter<InternalImageType, InputImageType> ReconstructThroughDilationImageFilterType;
+
+    // Erode 
+    typename DecomposeThroughErosionImageFilterType::Pointer erosionFilter=DecomposeThroughErosionImageFilterType::New();
+    erosionFilter->SetInput(this->GetInput());
+    erosionFilter->SetVerbose(m_Verbose);
+    erosionFilter->SetFullyConnected(m_FullyConnected);
+    erosionFilter->SetRadius(m_Radius);
+    erosionFilter->SetNumberOfNewLabels(m_NumberOfNewLabels);
+    erosionFilter->SetMinimumObjectSize(m_MinimumObjectSize);
+    erosionFilter->SetMinimumNumberOfIterations(m_MinimumNumberOfIterations);
+    erosionFilter->Update();
+
+    // Reconstruct
+    typename ReconstructThroughDilationImageFilterType::Pointer reconstructionFilter =ReconstructThroughDilationImageFilterType::New();
+    reconstructionFilter->SetInput(erosionFilter->GetOutput());
+    reconstructionFilter->SetVerbose(m_Verbose);
+    reconstructionFilter->SetRadius(m_Radius);
+    reconstructionFilter->SetMaximumNumberOfLabels(m_MaximumNumberOfLabels);
+    reconstructionFilter->SetBackgroundValue(m_BackgroundValue);
+    reconstructionFilter->SetForegroundValue(m_ForegroundValue);
+    reconstructionFilter->Update();
+    
+    // Output
+    this->SetNthOutput(0,reconstructionFilter->GetOutput());
+  }
+
+
+}//end clitk
+#endif //#define clitkDecomposeAndReconstructImageFilter_txx