]> Creatis software - clitk.git/commitdiff
- new GF system
authordsarrut <dsarrut>
Fri, 29 Jan 2010 07:27:31 +0000 (07:27 +0000)
committerdsarrut <dsarrut>
Fri, 29 Jan 2010 07:27:31 +0000 (07:27 +0000)
34 files changed:
common/clitkCommon.h
common/clitkImageToImageGenericFilter.cxx
common/clitkImageToImageGenericFilter.h
common/vvImage.cxx
common/vvImage.h
filters/CMakeLists.txt
filters/clitkGuerreroVentilationGenericFilter.cxx
filters/clitkGuerreroVentilationGenericFilter.h
filters/clitkImageArithmGenericFilter.cxx
filters/clitkImageArithmGenericFilter.h
filters/clitkImageConvertGenericFilter.cxx
filters/clitkImageConvertGenericFilter.h
filters/clitkImageFillRegionGenericFilter.cxx
filters/clitkImageFillRegionGenericFilter.h
filters/clitkImageFillRegionGenericFilter.txx
filters/clitkImageResampleGenericFilter.cxx
filters/clitkImageResampleGenericFilter.h
filters/clitkImageResampleGenericFilter.txx
filters/clitkSplitImageGenericFilter.cxx
filters/clitkSplitImageGenericFilter.h
filters/clitkSplitImageGenericFilter.txx
filters/clitkVFResampleGenericFilter.cxx
filters/clitkVFResampleGenericFilter.h
filters/clitkVFResampleGenericFilter.txx
tools/CMakeLists.txt
tools/clitkAffineTransform.cxx
tools/clitkAverageTemporalDimension.cxx
tools/clitkInvertVF.cxx
tools/clitkSetBackgroundGenericFilter.h
tools/clitkSignalMeanPositionFilter.cxx
tools/clitkSignalMeanPositionFilter.h
tools/clitkWarpImageGenericFilter.h
tools/clitkWarpImageGenericFilter.txx
tools/clitkWriteDicomSeries.cxx

index 5831d7b8ec08b514dd59e5ae2a8e8e09b3afa294..ce70757a5496a74d2df199c7197879d34cb84e35 100644 (file)
@@ -50,25 +50,13 @@ namespace clitk {
   
   //--------------------------------------------------------------------
   // GGO with modified struct name
-#define GGO(ggo_filename, args_info)                                             \
-  gengetopt_args_info_##ggo_filename args_info;                                        \
-    cmdline_parser2(argc, argv, &args_info, 1, 1, 0);                  \
-    if (args_info.config_given)                                                \
-      cmdline_parser_configfile (args_info.config_arg, &args_info, 0, 0, 1); \
-    else cmdline_parser(argc, argv, &args_info);
-  
-
-  /*   //--------------------------------------------------------------------
-  // GGO default
 #define GGO(ggo_filename, args_info)                                    \
-  gengetopt_args_info_##ggo_filename args_info;                         \
+  args_info_##ggo_filename args_info;                                  \
   cmdline_parser2(argc, argv, &args_info, 1, 1, 0);                    \
   if (args_info.config_given)                                          \
     cmdline_parser_configfile (args_info.config_arg, &args_info, 0, 0, 1); \
-  else cmdline_parser(argc, argv, &args_info);
-  
- //--------------------------------------------------------------------
- */
+  else cmdline_parser(argc, argv, &args_info);  
+
   //--------------------------------------------------------------------
   // skip line with #
   void skipComment(std::istream & is);
index 0428c70c7cc921ad980299c86df1d6b26514a0e1..f41f8d36b3e09178d0cbb666bfc44ca36bb37ba2 100644 (file)
 #include "clitkImageCommon.h"
 
 //--------------------------------------------------------------------
-clitk::ImageToImageGenericFilter::ImageToImageGenericFilter() :
-    mIOVerbose(false)
-{}
+clitk::ImageToImageGenericFilterBase::ImageToImageGenericFilterBase(std::string n)
+  :mIOVerbose(false) {
+  mFilterName = n;
+  mListOfAllowedDimension.clear();
+  mListOfAllowedPixelType.clear();
+  mFailOnImageTypeError = true;
+}
 //--------------------------------------------------------------------
 
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::AddImageType(unsigned int d, std::string p) {
+  // Search for dimension (to not duplicate)
+  std::vector<unsigned int>::const_iterator it = 
+    std::find (mListOfAllowedDimension.begin(), 
+               mListOfAllowedDimension.end(), d);
+  if (it == mListOfAllowedDimension.end()) mListOfAllowedDimension.push_back(d);
+  // Search for PixelType (to not duplicate)
+  std::vector<std::string>::const_iterator itt = 
+    std::find (mListOfAllowedPixelType.begin(), 
+               mListOfAllowedPixelType.end(), p);
+  if (itt == mListOfAllowedPixelType.end()) mListOfAllowedPixelType.push_back(p);
+}
 //--------------------------------------------------------------------
-void clitk::ImageToImageGenericFilter::SetInputFilenames(const std::vector<std::string> & filenames) {
+
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::SetInputFilenames(const std::vector<std::string> & filenames) {
   mInputFilenames.resize(filenames.size());
   std::copy(filenames.begin(), filenames.end(), mInputFilenames.begin());
 }
+//--------------------------------------------------------------------
+
 
-void clitk::ImageToImageGenericFilter::SetInputFilename(const std::string & filename) {
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::SetInputFilename(const std::string & filename) {
   std::vector<std::string> f;
   f.push_back(filename);
   SetInputFilenames(f);
 }
+//--------------------------------------------------------------------
 
-void clitk::ImageToImageGenericFilter::AddInputFilename(const std::string & filename) {
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::AddInputFilename(const std::string & filename) {
   mInputFilenames.push_back(filename);
 }
 //--------------------------------------------------------------------
 
+
 //--------------------------------------------------------------------
-void clitk::ImageToImageGenericFilter::SetOutputFilename(const std::string & filename) {
+void clitk::ImageToImageGenericFilterBase::SetOutputFilename(const std::string & filename) {
   mOutputFilenames.clear();
   mOutputFilenames.push_back(filename);
 }
-void clitk::ImageToImageGenericFilter::AddOutputFilename(const std::string & filename)
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::AddOutputFilename(const std::string & filename)
 {
   mOutputFilenames.push_back(filename);
 }
-void clitk::ImageToImageGenericFilter::SetOutputFilenames(const std::vector<std::string> & filenames)
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::SetOutputFilenames(const std::vector<std::string> & filenames)
 {
     std::copy(filenames.begin(), filenames.end(), mOutputFilenames.begin());
 }
-std::string clitk::ImageToImageGenericFilter::GetOutputFilename()
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+std::string clitk::ImageToImageGenericFilterBase::GetOutputFilename()
 {
     assert(mOutputFilenames.size() == 1);
     return mOutputFilenames.front();
 }
 //--------------------------------------------------------------------
-void clitk::ImageToImageGenericFilter::GetInputImageDimensionAndPixelType(unsigned int& dim,\
+
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::GetInputImageDimensionAndPixelType(unsigned int& dim, \
         std::string& pixeltype,unsigned int& components)
 {
-    if (mInputFilenames.size())
+  if (mInputFilenames.size())
     {
-        int comp_temp,dim_temp; //clitkCommonImage takes ints
-        ReadImageDimensionAndPixelType(mInputFilenames[0], dim_temp, pixeltype,comp_temp);
-        components=comp_temp; dim=dim_temp;
+      int comp_temp,dim_temp; //clitkCommonImage takes ints
+      ReadImageDimensionAndPixelType(mInputFilenames[0], dim_temp, pixeltype,comp_temp);
+      components=comp_temp; dim=dim_temp;
     }
-    else if (mInputVVImages.size())
+  else if (mInputVVImages.size())
     {
-        pixeltype=mInputVVImages[0]->GetScalarTypeAsString();
-        dim=mInputVVImages[0]->GetNumberOfDimensions();
-        components=mInputVVImages[0]->GetNumberOfScalarComponents();
+      pixeltype=mInputVVImages[0]->GetScalarTypeAsString();
+      dim=mInputVVImages[0]->GetNumberOfDimensions();
+      components=mInputVVImages[0]->GetNumberOfScalarComponents();
     }
-    else
-        assert(false); //No input image, shouldn't happen
+  else
+    assert(false); //No input image, shouldn't happen
+  
+  if (mIOVerbose) {
+    std::cout << "Input is " << mDim << "D " << mPixelTypeName << "." << std::endl;
+  }
 }
-vvImage::Pointer clitk::ImageToImageGenericFilter::GetOutputVVImage ()
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+vvImage::Pointer clitk::ImageToImageGenericFilterBase::GetOutputVVImage ()
 {
     assert(mOutputVVImages.size());
     return mOutputVVImages[0];
 }
+//--------------------------------------------------------------------
+
 
-std::vector<vvImage::Pointer> clitk::ImageToImageGenericFilter::GetOutputVVImages()
+//--------------------------------------------------------------------
+std::vector<vvImage::Pointer> clitk::ImageToImageGenericFilterBase::GetOutputVVImages()
 {
     return mOutputVVImages;
 }
+//--------------------------------------------------------------------
+
 
-void clitk::ImageToImageGenericFilter::SetInputVVImage (vvImage::Pointer input)
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::SetInputVVImage (vvImage::Pointer input)
 {
     mInputVVImages.clear();
     mInputVVImages.push_back(input);
 }
+//--------------------------------------------------------------------
+
 
-void clitk::ImageToImageGenericFilter::AddInputVVImage (vvImage::Pointer input)
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::AddInputVVImage (vvImage::Pointer input)
 {
     mInputVVImages.push_back(input);
 }
+//--------------------------------------------------------------------
 
-void clitk::ImageToImageGenericFilter::SetInputVVImages (std::vector<vvImage::Pointer> input)
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::SetInputVVImages (std::vector<vvImage::Pointer> input)
 {
     mInputVVImages=input;
 }
+//--------------------------------------------------------------------
+
+
+
+//--------------------------------------------------------------------
+bool clitk::ImageToImageGenericFilterBase::CheckImageType() {
+  return (CheckDimension() && CheckPixelType());
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+bool clitk::ImageToImageGenericFilterBase::CheckDimension(unsigned int d) {
+  bool b = false;
+  unsigned int i=0;
+  while ((!b) && (i<mListOfAllowedDimension.size())) {
+    b = (mListOfAllowedDimension[i] == d);
+    i++;
+  }
+  return b;
+}
+//--------------------------------------------------------------------
 
+
+//--------------------------------------------------------------------
+bool clitk::ImageToImageGenericFilterBase::CheckPixelType(std::string pt) {
+  bool b = false;
+  unsigned int i=0;
+  while ((!b) && (i<mListOfAllowedPixelType.size())) {
+    b = (mListOfAllowedPixelType[i] == pt);
+    i++;
+  }
+  return b;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+bool clitk::ImageToImageGenericFilterBase::CheckDimension() {
+  return CheckDimension(mDim);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+bool clitk::ImageToImageGenericFilterBase::CheckPixelType() {
+  return CheckPixelType(mPixelTypeName);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::PrintAvailableImageTypes() {
+  std::cout << "The filter <" << mFilterName << "> manages ";
+  for(unsigned int i=0; i<mListOfAllowedDimension.size(); i++) {
+    std::cout << mListOfAllowedDimension[i] << "D ";
+  }
+  std::cout << "images, with pixel types: ";
+  for(unsigned int i=0; i<mListOfAllowedPixelType.size(); i++) {
+    std::cout << mListOfAllowedPixelType[i] << " ";
+  }
+  std::cout << std::endl;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::ImageTypeError() {
+  std::cerr << "**Error** The filter <" << mFilterName << "> is not available for " 
+            << mDim << "D images with pixel=" 
+            << mPixelTypeName << "." << std::endl;
+  std::cerr << "**Error** Allowed image dim: \t";
+  for(unsigned int i=0; i<mListOfAllowedDimension.size(); i++) {
+    std::cerr << mListOfAllowedDimension[i] << " ";
+  }
+  std::cerr << std::endl << "**Error** Allowed pixel types: \t";
+  for(unsigned int i=0; i<mListOfAllowedPixelType.size(); i++) {
+    std::cerr << mListOfAllowedPixelType[i] << " ";
+  }
+  std::cerr << std::endl;
+  exit(0);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::SetImageTypeError() {
+  std::cerr << "TODO ! " << std::endl;
+  exit(0);
+}
+//--------------------------------------------------------------------
index 43a62df8aaaabc969842ba388860fe03e6daec20..c065fc921ff3041c00fc6e9041dd584d7fa7bda7 100644 (file)
@@ -1,21 +1,41 @@
-#ifndef CLITKIMAGETOIMAGEGENERICFILTER_H
-#define CLITKIMAGETOIMAGEGENERICFILTER_H
+/*=========================================================================
+
+  Program:   clitk
+  Module:    $RCSfile: clitkImageToImageGenericFilter.h,v $
+  Language:  C++
+  Date:      $Date: 2010/01/29 07:27:31 $
+  Version:   $Revision: 1.2 $
+  Author :   Joel Schaerer <joel.schaerer@creatis.insa-lyon.fr>
+             David Sarrut <david.sarrut@creatis.insa-lyon.fr>
+
+  Copyright (C) 2008
+  Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+  CREATIS-LRMN http://www.creatis.insa-lyon.fr
 
-/**
- ===================================================================
- * @file   clitkImageToImageGenericFilter.h
- * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
- * @date   05 May 2008 14:40:51
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
 
- * @brief  
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
 
- ===================================================================*/
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+  =========================================================================*/
+
+#ifndef CLITKIMAGETOIMAGEGENERICFILTER_H
+#define CLITKIMAGETOIMAGEGENERICFILTER_H
 
 // clitk include
 #include "clitkCommon.h"
 #include "clitkImageCommon.h"
+#include "clitkCommonGenericFilter.h"
 #include <itkImage.h>
 
+// vv include
 #include <vvImage.h>
 #include <vvFromITK.h>
 #include <vvToITK.h>
 
 namespace clitk {
   
-  class ImageToImageGenericFilter: public itk::Object {
+  //--------------------------------------------------------------------
+  class ImageToImageGenericFilterBase: public itk::Object {
     
   public: 
     // constructor - destructor
-    ImageToImageGenericFilter();
+    ImageToImageGenericFilterBase(std::string filterName);
+    virtual ~ImageToImageGenericFilterBase() {}
 
     // Types
-    typedef ImageToImageGenericFilter     Self;
+    typedef ImageToImageGenericFilterBase Self;
     typedef Object                        Superclass;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
+    // Filters information
+    const std::string & GetFilterName() { return mFilterName; }
+    void SetFilterName(std::string & n) { mFilterName = n; }
+
     // Generic IO
     /// Returns the dimension and pixel type of the *first* input
     void GetInputImageDimensionAndPixelType(unsigned int& dim, std::string& pixeltype,unsigned int & components);
@@ -56,16 +82,25 @@ namespace clitk {
     vvImage::Pointer GetOutputVVImage ();
     std::vector<vvImage::Pointer> GetOutputVVImages ();
 
-    /// Main function to implement
-    virtual void Update() = 0;
-    
-  protected:
+    // Information on available image types
+    void PrintAvailableImageTypes();
+    bool CheckDimension(unsigned int d);
+    bool CheckPixelType(std::string pt);
+
+    // Main function to call for using the filter. 
+    virtual bool Update() = 0;
+
+    // Use internally only (TO PUT PROTECTED !!!)
+    void AddImageType(unsigned int d, std::string p);
+
+  protected:  
     /// Call this function to dispatch an output towards the correct sink
     template<class ImageType> 
-        void SetNextOutput(typename ImageType::Pointer output);
+    void SetNextOutput(typename ImageType::Pointer output);
+
     /// Call this function to get the nth itk input image, regardless of input source
     template<class ImageType> 
-        typename ImageType::Pointer GetInput(unsigned int n);
+    typename ImageType::Pointer GetInput(unsigned int n);
 
     std::vector<std::string> mInputFilenames;
     std::list<std::string> mOutputFilenames;
@@ -74,34 +109,53 @@ namespace clitk {
     unsigned int mDim;
     std::string mPixelTypeName;
     unsigned int mNbOfComponents;
+    std::string mFilterName;
 
     std::vector<vvImage::Pointer> mInputVVImages;
     std::vector<vvImage::Pointer> mOutputVVImages;
 
+    std::vector<std::string> mListOfAllowedPixelType;
+    std::vector<unsigned int> mListOfAllowedDimension;    
+    bool CheckImageType();
+    bool CheckDimension();
+    bool CheckPixelType();
+    void ImageTypeError();
+    void SetImageTypeError();
+    bool mFailOnImageTypeError;
+
   }; // end class clitk::ImageToImageGenericFilter
 
+
+  //--------------------------------------------------------------------
+  template<class FilterType>
+  class ImageToImageGenericFilter: public ImageToImageGenericFilterBase {
+    
+  public: 
+    
+    typedef ImageToImageGenericFilter<FilterType> Self;
+
+    // constructor - destructor
+    ImageToImageGenericFilter(std::string filterName);
+    virtual ~ImageToImageGenericFilter() { delete mImageTypesManager; }
+
+    // Main function to call for using the filter. 
+    virtual bool Update();
+
+  protected:
+    // Object that will manage the list of templatized function for
+    // each image type.
+    ImageTypesManager<FilterType> * mImageTypesManager;
+    
+  }; // end class clitk::ImageToImageGenericFilter
+
+  // #define ADD_IMAGE_DIMENSION(DIM) Initialize<DIM>();
+
+#define ADD_IMAGE_TYPE(DIM, PT) this->mImageTypesManager->template AddNewDimensionAndPixelType<DIM, PT>();
+
+
+#include "clitkImageToImageGenericFilter.txx"
+
 } // end namespace
 
-template<class ImageType> 
-void clitk::ImageToImageGenericFilter::SetNextOutput(typename ImageType::Pointer output)
-{
-    if (mOutputFilenames.size())
-    {
-        clitk::writeImage<ImageType>(output, mOutputFilenames.front(), mIOVerbose);
-        mOutputFilenames.pop_front();
-    }
-    if (mInputVVImages.size()) //We assume that if a vv image is set as input, we want one as the output
-        mOutputVVImages.push_back(vvImageFromITK<ImageType::ImageDimension,typename ImageType::PixelType>(output));
-}
-template<class ImageType> 
-typename ImageType::Pointer clitk::ImageToImageGenericFilter::GetInput(unsigned int n)
-{
-    if (mInputFilenames.size() > n)
-        return clitk::readImage<ImageType>(mInputFilenames[n], mIOVerbose);
-    else if (mInputVVImages.size() > n)
-        return typename ImageType::Pointer(const_cast<ImageType*>(vvImageToITK<ImageType>(mInputVVImages[n]).GetPointer()));
-    else
-        assert(false); //No input, this shouldn't happen
-}
 #endif /* end #define CLITKIMAGETOIMAGEGENERICFILTER_H */
 
index 7d68a1438e70e4656a430d153ec0145b247225d2..ae5c5a645ca5c842524be2c8b03c617485254571 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef VVIMAGE_CXX
 #define VVIMAGE_CXX
 
-/*=========================================================================
+/*-------------------------------------------------------------------------
 
 Program:   vv
 Language:  C++
@@ -23,29 +23,29 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-=========================================================================*/
+-------------------------------------------------------------------------*/
 
 #include "vvImage.h"
 #include "vtkImageData.h"
 #include "clitkCommon.h"
 #include <cassert>
 
-//====================================================================
+//--------------------------------------------------------------------
 vvImage::vvImage() {
     mVtkImages.resize(0);
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 vvImage::~vvImage() {
     for (unsigned int i = 0; i < mVtkImages.size(); i++) {
         if (mVtkImages[i] != NULL)
             mVtkImages[i]->Delete();
     }
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 void vvImage::SetImage(std::vector<vtkImageData*> images) {
     for (unsigned int i = 0; i < mVtkImages.size(); i++) {
         if (mVtkImages[i] != NULL)
@@ -56,15 +56,15 @@ void vvImage::SetImage(std::vector<vtkImageData*> images) {
         mVtkImages.push_back(images[i]);
     }
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 void vvImage::AddImage(vtkImageData* image) {
     mVtkImages.push_back(image);
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 void vvImage::Init() {
     for (unsigned int i = 0; i < mVtkImages.size(); i++) {
         if (mVtkImages[i] != NULL)
@@ -72,9 +72,9 @@ void vvImage::Init() {
     }
     mVtkImages.resize(0);
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 int vvImage::GetNumberOfSpatialDimensions() {
     int dim=GetNumberOfDimensions();
     if (IsTimeSequence())
@@ -82,9 +82,9 @@ int vvImage::GetNumberOfSpatialDimensions() {
     else
         return dim;
 }
-//====================================================================
+//--------------------------------------------------------------------
 //
-//====================================================================
+//--------------------------------------------------------------------
 int vvImage::GetNumberOfDimensions() const {
     if (mVtkImages.size())
     {
@@ -99,7 +99,7 @@ int vvImage::GetNumberOfDimensions() const {
     }
     return 0;
 }
-//====================================================================
+//--------------------------------------------------------------------
 void vvImage::GetScalarRange(double* range)
 {
     assert(mVtkImages.size());
@@ -113,25 +113,25 @@ void vvImage::GetScalarRange(double* range)
     }
 }
 
-//====================================================================
+//--------------------------------------------------------------------
 std::string vvImage::GetScalarTypeAsString() {
     return mVtkImages[0]->GetScalarTypeAsString();
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 int vvImage::GetNumberOfScalarComponents() {
     return mVtkImages[0]->GetNumberOfScalarComponents();
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 int vvImage::GetScalarSize() {
     return mVtkImages[0]->GetScalarSize();
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 std::vector<double> vvImage::GetSpacing() {
     std::vector<double> spacing;
     int dim = this->GetNumberOfDimensions();
@@ -144,9 +144,9 @@ std::vector<double> vvImage::GetSpacing() {
     }
     return spacing;
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 std::vector<double> vvImage::GetOrigin() const {
     std::vector<double> origin;
     int dim = this->GetNumberOfDimensions();
@@ -159,9 +159,9 @@ std::vector<double> vvImage::GetOrigin() const {
     }
     return origin;
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 std::vector<int> vvImage::GetSize() {
     std::vector<int> size0;
     int dim = this->GetNumberOfDimensions();
@@ -174,9 +174,9 @@ std::vector<int> vvImage::GetSize() {
     }
     return size0;
 }
-//====================================================================
+//--------------------------------------------------------------------
 
-//====================================================================
+//--------------------------------------------------------------------
 unsigned long vvImage::GetActualMemorySize() {
     unsigned long size = 0;
     for (unsigned int i = 0; i < mVtkImages.size(); i++) {
@@ -184,6 +184,56 @@ unsigned long vvImage::GetActualMemorySize() {
     }
     return size;
 }
-//====================================================================
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+bool vvImage::IsTimeSequence() {
+  return mVtkImages.size()>1;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+const std::vector<vtkImageData*>& vvImage::GetVTKImages() {
+  return mVtkImages;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+vtkImageData* vvImage::GetFirstVTKImageData() { 
+  return mVtkImages[0]; 
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+bool vvImage::IsScalarTypeInteger() {
+  assert(mVtkImages.size()> 0);
+  int t = mVtkImages[0]->GetScalarType();
+  return IsScalarTypeInteger(t);
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+bool vvImage::IsScalarTypeInteger(int t) {
+  if ((t == VTK_BIT) ||
+      (t == VTK_CHAR) ||
+      (t == VTK_UNSIGNED_CHAR) ||
+      (t == VTK_SHORT) ||
+      (t == VTK_UNSIGNED_SHORT) ||
+      (t == VTK_INT) ||
+      (t == VTK_UNSIGNED_INT) ||
+      (t == VTK_LONG) ||
+      (t == VTK_UNSIGNED_LONG))    {
+    return true;
+  }
+  else {
+    return false;
+  }
+}
+//--------------------------------------------------------------------
+
 
 #endif // VVIMAGE_CXX
index 6ab4c2b4c62c91e54bbdf7205bc2601f69e4bb21..ae2b7a6a048d5b1b3a6d50b6a78c48e80c5dc76d 100644 (file)
@@ -1,28 +1,31 @@
 /*=========================================================================
 
- Program:   vv
- Language:  C++
- Author :   Pierre Seroul (pierre.seroul@gmail.com)
+  Program:   vv
+  Module:    $RCSfile: vvImage.h,v $
+  Language:  C++
+  Date:      $Date: 2010/01/29 07:27:45 $
+  Version:   $Revision: 1.3 $
+  Author :   Pierre Seroul (pierre.seroul@gmail.com)
 
-Copyright (C) 2008
-Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
-CREATIS-LRMN http://www.creatis.insa-lyon.fr
+  Copyright (C) 2008
+  Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+  CREATIS-LRMN http://www.creatis.insa-lyon.fr
 
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, version 3 of the License.
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-=========================================================================*/
-#ifndef vvImage_h
-#define vvImage_h
+  =========================================================================*/
+#ifndef VVIMAGE_H
+#define VVIMAGE_H
 
 #include <iostream>
 #include <vector>
@@ -30,39 +33,37 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 class vtkImageData;
 
-class vvImage : public itk::LightObject
-{
+class vvImage : public itk::LightObject {
 public :
-    typedef vvImage Self;
-    typedef itk::SmartPointer<Self> Pointer;
-    itkNewMacro(Self);
+  typedef vvImage Self;
+  typedef itk::SmartPointer<Self> Pointer;
+  itkNewMacro(Self);
 
-    void Init();
-    void SetImage(std::vector<vtkImageData*> images);
-    void AddImage(vtkImageData* image);
-    const std::vector<vtkImageData*>& GetVTKImages() {
-        return mVtkImages;
-    }
-
-    int GetNumberOfDimensions() const;
-    int GetNumberOfSpatialDimensions();
-    ///Writes the scalar range to the provided array, which must have room for two doubles
-    void GetScalarRange(double* range);
-    unsigned long GetActualMemorySize();
-    std::vector<double> GetSpacing();
-    std::vector<double> GetOrigin() const;
-    std::vector<int> GetSize();
-    std::string GetScalarTypeAsString();
-    int GetNumberOfScalarComponents();
-    int GetScalarSize();
-    bool IsTimeSequence() {
-        return mVtkImages.size()>1;
-    }
+  void Init();
+  void SetImage(std::vector<vtkImageData*> images);
+  void AddImage(vtkImageData* image);
+  const std::vector<vtkImageData*>& GetVTKImages();
+  vtkImageData* GetFirstVTKImageData();
+  
+  int GetNumberOfDimensions() const;
+  int GetNumberOfSpatialDimensions();
+  ///Writes the scalar range to the provided array, which must have room for two doubles
+  void GetScalarRange(double* range);
+  unsigned long GetActualMemorySize();
+  std::vector<double> GetSpacing();
+  std::vector<double> GetOrigin() const;
+  std::vector<int> GetSize();
+  std::string GetScalarTypeAsString();
+  int GetNumberOfScalarComponents();
+  int GetScalarSize();
+  bool IsTimeSequence();
+  bool IsScalarTypeInteger();
+  bool IsScalarTypeInteger(int t);
 
 private:
-    vvImage();
-    ~vvImage();
-    std::vector<vtkImageData*> mVtkImages;
+  vvImage();
+  ~vvImage();
+  std::vector<vtkImageData*> mVtkImages;
 
 };
 
index 0172d19c7066c4b34a5a066640733c63446b14ec..469d17bb8b0716cd81998a12d8a337c424583767 100644 (file)
@@ -3,14 +3,15 @@
 #=========================================================
 # make clitk libraries
 
-SET(    clitkFilters_SRC
-clitkGuerreroVentilationGenericFilter.cxx
-clitkImageArithmGenericFilter.cxx
-clitkImageConvertGenericFilter.cxx
-clitkImageFillRegionGenericFilter.cxx
-clitkImageResampleGenericFilter.cxx
-clitkSplitImageGenericFilter.cxx
-clitkVFResampleGenericFilter.cxx
-)  
+SET(clitkFilters_SRC
+  clitkGuerreroVentilationGenericFilter.cxx
+  clitkImageArithmGenericFilter.cxx
+  clitkImageConvertGenericFilter.cxx
+  clitkImageFillRegionGenericFilter.cxx
+  clitkImageResampleGenericFilter.cxx
+  clitkSplitImageGenericFilter.cxx
+  clitkVFResampleGenericFilter.cxx
+  clitkBinarizeImageGenericFilter.cxx
+  )  
 
 ADD_LIBRARY(clitkFilters STATIC ${clitkFilters_SRC})
index 426765ba89397249030e918a6260c17fa5bcfea2..47a0359bb48841ffff51a0081fd39ffe5fbfec8a 100644 (file)
  * @brief  
  -------------------------------------------------------------------*/
 
+#include <sstream>
 #include "clitkGuerreroVentilationGenericFilter.h"
 #include <itkBinaryGuerreroFilter.h>
 #include <itkImageDuplicator.h>
-//--------------------------------------------------------------------
-clitk::GuerreroVentilationGenericFilter::GuerreroVentilationGenericFilter() 
-{
-    blood_mass_factor=1.;
-}
-//--------------------------------------------------------------------
+#include <itkExtractImageFilter.h>
 
 //--------------------------------------------------------------------
-void clitk::GuerreroVentilationGenericFilter::Update () {
-  
-  // Determine dim, pixel type, number of components
-  this->GetInputImageDimensionAndPixelType(mDim,mPixelTypeName,mNbOfComponents);
-  
-  // Switch by dimension
-  if (mDim == 3) { Update_WithDim<3>(); return; }
-  if (mDim == 2) { Update_WithDim<2>(); return; }
-  std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2 or 3." << std::endl;
-  exit(0);
+clitk::GuerreroVentilationGenericFilter::GuerreroVentilationGenericFilter() 
+  :ImageToImageGenericFilter<Self>("GuerreroVentilationGenericFilter") {
+  blood_mass_factor=1.;
+  InitializeImageType<2>();
+  InitializeImageType<3>();
 }
 //--------------------------------------------------------------------
 
-//This is where you put the actual implementation
-
-#include <sstream>
-#include <itkExtractImageFilter.h>
-
-
 //--------------------------------------------------------------------
 template<unsigned int Dim>
-void clitk::GuerreroVentilationGenericFilter::Update_WithDim() { 
-#define TRY_TYPE(TYPE)                                                 \
-  if (IsSameType<TYPE>(mPixelTypeName)) { Update_WithDimAndPixelType<Dim, TYPE>(); return; } 
-  // TRY_TYPE(signed char);
-  // TRY_TYPE(uchar);
-  TRY_TYPE(short);
-  //TRY_TYPE(ushort);
-  // TRY_TYPE(int);
-//   TRY_TYPE(unsigned int); 
-  //TRY_TYPE(float);
-  // TRY_TYPE(double);
-#undef TRY_TYPE
-
-  std::string list = CreateListOfTypes<uchar, short, ushort, int, uint, float, double>();
-  std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '"
-           << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl;
-  exit(0);
+void clitk::GuerreroVentilationGenericFilter::InitializeImageType() {      
+  ADD_IMAGE_TYPE(Dim, short);
 }
 //--------------------------------------------------------------------
 
+
 //--------------------------------------------------------------------
-template<unsigned int Dim, class PixelType>
-void clitk::GuerreroVentilationGenericFilter::Update_WithDimAndPixelType() {
+template<class ImageType>
+void clitk::GuerreroVentilationGenericFilter::UpdateWithInputImageType() {
 
-    // Read input
+    // Input should be 2
     assert(mInputFilenames.size() == 2);
-    typedef itk::Image<PixelType,Dim> ImageType;
-    typedef itk::Image<float,Dim> OutputImageType;
-    typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames[0], mIOVerbose);
-    typename ImageType::Pointer ref = clitk::readImage<ImageType>(mInputFilenames[1], mIOVerbose);
 
+    // Reading input
+    typedef ImageType InputImageType;
+    typename InputImageType::Pointer input = this->template GetInput<InputImageType>(0);
+    typename InputImageType::Pointer ref = this->template GetInput<InputImageType>(1);
+
+    typedef itk::Image<float,InputImageType::ImageDimension> OutputImageType;
+    //    typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames[0], mIOVerbose);
+    //typename ImageType::Pointer ref = clitk::readImage<ImageType>(mInputFilenames[1], mIOVerbose);
 
     typedef itk::BinaryGuerreroFilter<ImageType,ImageType,OutputImageType> GFilterType;
     typename GFilterType::Pointer filter = GFilterType::New();
@@ -90,6 +65,7 @@ void clitk::GuerreroVentilationGenericFilter::Update_WithDimAndPixelType() {
     filter->SetBloodCorrectionFactor(blood_mass_factor);
     filter->SetUseCorrectFormula(use_correct_formula);
     filter->Update();
+
     this->SetNextOutput<OutputImageType>(filter->GetOutput());
     //clitk::writeImage<OutputImageType>(filter->GetOutput(), mOutputFilename, mIOVerbose);
     //std::cout << "Warning: removed " << filter->GetFunctor().aberant_voxels << " aberant voxels from the ventilation image"
index c3fd2b19a84ae89973f8a1cac63fd164ce00cfee..5d1062a54c9080c02fcc0719f7fc981e40d676fb 100644 (file)
 namespace clitk {
   
   //--------------------------------------------------------------------
-  class GuerreroVentilationGenericFilter : public ImageToImageGenericFilter {
-  
+  class GuerreroVentilationGenericFilter : 
+  public ImageToImageGenericFilter<GuerreroVentilationGenericFilter> {
   public:
        
     // Constructor 
-    GuerreroVentilationGenericFilter ();
+    GuerreroVentilationGenericFilter();
+    virtual ~GuerreroVentilationGenericFilter() {}
 
     // Types
     typedef GuerreroVentilationGenericFilter  Self;
-    typedef ImageToImageGenericFilter     Superclass;
+    typedef ImageToImageGenericFilterBase     Superclass;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
@@ -54,19 +55,17 @@ namespace clitk {
     void SetBloodCorrectionFactor(double f) {blood_mass_factor=f;}
     void SetUseCorrectFormula(bool u) {use_correct_formula=u;}
 
-    // Update
-    void Update ();
+    //--------------------------------------------------------------------
+    // Main function called each time the filter is updated
+    template<class InputImageType>  
+    void UpdateWithInputImageType();
 
   protected:  
+    template<unsigned int Dim> void InitializeImageType();
     //Parameters
     double blood_mass_factor;
     bool use_correct_formula;
 
-    //--------------------------------------------------------------------
-    template<unsigned int Dim> void Update_WithDim();
-    template<unsigned int Dim, class PixelType> void Update_WithDimAndPixelType();
-    //--------------------------------------------------------------------
-
   }; // end class GuerreroVentilationGenericFilter
 //--------------------------------------------------------------------
 
index 2683a9352ba344330688e3eff114c4f7598e4c86..7e344e74c592f1c6059b161b028c157124cf3a65 100644 (file)
 #include "clitkImageArithmGenericFilter.h"
 
 //--------------------------------------------------------------------
-clitk::ImageArithmGenericFilter::ImageArithmGenericFilter():mTypeOfOperation(0) {
+clitk::ImageArithmGenericFilter::ImageArithmGenericFilter()
+  :ImageToImageGenericFilter<Self>("ImageArithmGenericFilter"),mTypeOfOperation(0) {
+  InitializeImageType<2>();
+  InitializeImageType<3>();
+  InitializeImageType<4>();  
   mIsOperationUseASecondImage = false;
 }
 //--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
-void clitk::ImageArithmGenericFilter::Update () {
-  
-  // Load image header
-  itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]);
-  
-  // Determine dim, pixel type, number of components
-  mDim = header->GetNumberOfDimensions();
-  mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());  
-  mNbOfComponents = header->GetNumberOfComponents();
-  
+template<unsigned int Dim>
+void clitk::ImageArithmGenericFilter::InitializeImageType() {      
+  ADD_IMAGE_TYPE(Dim, char);
+  ADD_IMAGE_TYPE(Dim, short);
+  /*  ADD_IMAGE_TYPE(Dim, short);
+  ADD_IMAGE_TYPE(Dim, ushort;
+  ADD_IMAGE_TYPE(Dim, int);
+  ADD_IMAGE_TYPE(Dim, unsigned int);
+  ADD_IMAGE_TYPE(Dim, float);
+  ADD_IMAGE_TYPE(Dim, double);
+  */
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class ImageType>
+void clitk::ImageArithmGenericFilter::UpdateWithInputImageType() {
+
+  // Check Input
+
+  //DS TO BE CHANGED IN GetNumberOfInput() !!!!!!!!
+
   if (mInputFilenames.size() == 0) {
     std::cerr << "ERROR : please provide at least a input filename." << std::endl;
   }
@@ -54,13 +71,197 @@ void clitk::ImageArithmGenericFilter::Update () {
     std::cerr << "ERROR : please provide only 1 or 2 input filenames." << std::endl;
   }
 
-  // Switch by dimension
-  if (mDim == 2) { Update_WithDim<2>(); return; }
-  if (mDim == 3) { Update_WithDim<3>(); return; }
-  if (mDim == 4) { Update_WithDim<4>(); return; }
+  // Read input1
+  //  typename ImageType::Pointer input1 = clitk::readImage<ImageType>(mInputFilenames[0], mIOVerbose);
+  typename ImageType::Pointer input1 = this->template GetInput<ImageType>(0);
+  typename ImageType::Pointer outputImage;  
+
+  // Read input2 (float is ok altough it could take too memory ...)
+  if (mIsOperationUseASecondImage) {
+    typedef itk::Image<float,ImageType::ImageDimension> ImageType2;
+    //    typename ImageType2::Pointer input2 = clitk::readImage<ImageType2>(mInputFilenames[1], mIOVerbose);
+    typename ImageType2::Pointer input2 = this->template GetInput<ImageType2>(1);
+    outputImage = ComputeImage<ImageType, ImageType2>(input1, input2);
+  }
+  else {
+    outputImage = ComputeImage<ImageType>(input1);
+  }
+
+  // Write results
+  this->SetNextOutput<ImageType>(outputImage);
+  //clitk::writeImage<ImageType>(outputImage, mOutputFilename, mIOVerbose);
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+template<class ImageType>
+typename ImageType::Pointer 
+clitk::ImageArithmGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) {
+
+  typedef typename ImageType::PixelType PixelType;
+  typedef itk::ImageRegionIterator<ImageType> IteratorType;
+  IteratorType it(inputImage, inputImage->GetLargestPossibleRegion());
+  it.GoToBegin();
+  
+  switch (mTypeOfOperation) {
+  case 0: // Addition
+    while (!it.IsAtEnd()) {
+      it.Set(PixelTypeDownCast<double, PixelType>((double)it.Get() + mScalar) ); 
+      ++it;
+    }
+    break;
+  case 1: // Multiply
+    while (!it.IsAtEnd()) {
+      it.Set(PixelTypeDownCast<double, PixelType>((double)it.Get() * mScalar) ); 
+      ++it;
+    }
+    break;
+  case 2: // Inverse
+    while (!it.IsAtEnd()) {
+      if (it.Get() != 0)
+       it.Set(PixelTypeDownCast<double, PixelType>(mScalar / (double)it.Get())); 
+      else it.Set(mDefaultPixelValue);
+      ++it;
+    }
+    break;
+  case 3: // Max 
+    while (!it.IsAtEnd()) {
+      if (it.Get() < mScalar) it.Set(PixelTypeDownCast<double, PixelType>(mScalar)); 
+      ++it;
+    }
+    break;
+  case 4: // Min
+    while (!it.IsAtEnd()) {
+      if (it.Get() > mScalar) it.Set(PixelTypeDownCast<double, PixelType>(mScalar)); 
+      ++it;
+    }
+    break;
+  case 5: // Absolute value 
+    while (!it.IsAtEnd()) {
+      if (it.Get() <= 0) it.Set(PixelTypeDownCast<double, PixelType>(-it.Get())); 
+      // <= zero to avoid warning for unsigned types
+      ++it;
+    }
+    break;
+  case 6: // Squared value
+    while (!it.IsAtEnd()) {
+      it.Set(PixelTypeDownCast<double, PixelType>((double)it.Get()*(double)it.Get())); 
+      ++it;
+    }
+    break;
+  case 7: // Log
+    while (!it.IsAtEnd()) {
+      if (it.Get() > 0) 
+       it.Set(PixelTypeDownCast<double, PixelType>(log((double)it.Get()))); 
+      else it.Set(mDefaultPixelValue);
+      ++it;
+    }
+    break;
+  case 8: // exp
+    while (!it.IsAtEnd()) {
+      it.Set(PixelTypeDownCast<double, PixelType>(exp((double)it.Get()))); 
+      ++it;
+    }
+    break;
+  case 9: // sqrt
+    while (!it.IsAtEnd()) {
+      if (it.Get() > 0) 
+       it.Set(PixelTypeDownCast<double, PixelType>(sqrt((double)it.Get()))); 
+      else {
+       if (it.Get() ==0) it.Set(0);
+       else it.Set(mDefaultPixelValue);
+      }
+      ++it;
+    }
+    break;
+  default: // error ?
+    std::cerr << "ERROR : the operation number (" << mTypeOfOperation << ") is not known." << std::endl;
+    exit(-1);
+  }
+
+  return inputImage;
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+template<class ImageType1, class ImageType2>
+typename ImageType1::Pointer
+clitk::ImageArithmGenericFilter::ComputeImage(typename ImageType1::Pointer inputImage1, 
+                                      typename ImageType2::Pointer inputImage2) {
+
+  typedef typename ImageType1::PixelType PixelType;
+  typedef itk::ImageRegionIterator<ImageType1> IteratorType;
+  IteratorType it1(inputImage1, inputImage1->GetLargestPossibleRegion());
+  it1.GoToBegin();
+  
+  typedef itk::ImageRegionConstIterator<ImageType2> ConstIteratorType;
+  ConstIteratorType it2(inputImage2, inputImage2->GetLargestPossibleRegion());
+  it2.GoToBegin();
+  
+  switch (mTypeOfOperation) {
+  case 0: // Addition
+    while (!it1.IsAtEnd()) {
+      it1.Set(PixelTypeDownCast<double, PixelType>((double)it1.Get() + (double)it2.Get()) ); 
+      ++it1; ++it2;
+    }
+    break;
+  case 1: // Multiply
+    while (!it1.IsAtEnd()) {
+      it1.Set(PixelTypeDownCast<double, PixelType>((double)it1.Get() * (double)it2.Get()) ); 
+      ++it1; ++it2;
+    }
+    break;
+  case 2: // Divide
+    while (!it1.IsAtEnd()) {
+      if (it1.Get() != 0)
+       it1.Set(PixelTypeDownCast<double, PixelType>((double)it1.Get() / (double)it2.Get())); 
+      else it1.Set(mDefaultPixelValue);
+      ++it1; ++it2;
+    }
+    break;
+  case 3: // Max 
+    while (!it1.IsAtEnd()) {
+      if (it1.Get() < it2.Get()) it1.Set(PixelTypeDownCast<double, PixelType>(it2.Get())); 
+      ++it1; ++it2;
+    }
+    break;
+  case 4: // Min
+    while (!it1.IsAtEnd()) {
+      if (it1.Get() > it2.Get()) it1.Set(PixelTypeDownCast<double, PixelType>(it2.Get())); 
+      ++it1; ++it2;
+    }
+    break;
+  case 5: // Absolute difference
+    while (!it1.IsAtEnd()) {
+      it1.Set(PixelTypeDownCast<double, PixelType>(fabs(it2.Get()-it1.Get()))); 
+      ++it1; ++it2;
+    }
+    break;
+  case 6: // Squared differences
+    while (!it1.IsAtEnd()) {
+      it1.Set(PixelTypeDownCast<double, PixelType>(pow((double)it1.Get()-(double)it2.Get(),2))); 
+      ++it1; ++it2;
+    }
+    break;
+  case 7: // Difference
+    while (!it1.IsAtEnd()) {
+      it1.Set(PixelTypeDownCast<double, PixelType>((double)it1.Get()-(double)it2.Get())); 
+      ++it1; ++it2;
+    }
+    break;
+  case 8: // Relative Difference
+    while (!it1.IsAtEnd()) {
+      if (it1.Get() != 0) it1.Set(PixelTypeDownCast<double, PixelType>(((double)it1.Get()-(double)it2.Get()))/(double)it1.Get()); 
+      else it1.Set(0.0);
+      ++it1; ++it2;
+    }
+    break;
+  default: // error ?
+    std::cerr << "ERROR : the operation number (" << mTypeOfOperation << ") is not known." << std::endl;
+    exit(-1);
+  }
 
-  std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3." << std::endl;
-  exit(0);
+  return inputImage1;
 }
 //--------------------------------------------------------------------
 
index 88449119e7639c079d279e172bdadcd1f48ebfcd..afc6134eba3365f14c9f72cd2b17175209bc4dc8 100644 (file)
@@ -38,7 +38,8 @@ namespace clitk {
   //--------------------------------------------------------------------
   // Main class for an Image Resample Generic Filter 
   // (multiple dimensions, multiple pixel types)
-  class ImageArithmGenericFilter : public clitk::ImageToImageGenericFilter {
+  class ImageArithmGenericFilter:
+  public clitk::ImageToImageGenericFilter<ImageArithmGenericFilter> {
   
   public:
        
@@ -47,7 +48,7 @@ namespace clitk {
 
     // Types
     typedef ImageArithmGenericFilter      Self;
-    typedef ImageToImageGenericFilter     Superclass;
+    typedef ImageToImageGenericFilterBase     Superclass;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
@@ -64,19 +65,18 @@ namespace clitk {
     int GetTypeOfOperation () { return  mTypeOfOperation ;} 
     double GetScalar () { return  mScalar ;} 
 
-    // Update
-    void Update ();
+    //--------------------------------------------------------------------
+    // Main function called each time the filter is updated
+    template<class InputImageType>  
+    void UpdateWithInputImageType();
 
   protected:  
+    template<unsigned int Dim> void InitializeImageType();
     bool mIsOperationUseASecondImage;
     double mScalar;
     double mDefaultPixelValue;
     int mTypeOfOperation;  
 
-    //--------------------------------------------------------------------
-    template<unsigned int Dim> void Update_WithDim();
-    template<unsigned int Dim, class PixelType> void Update_WithDimAndPixelType();
-
     template<class ImageType>
     typename ImageType::Pointer ComputeImage(typename ImageType::Pointer inputImage);
 
@@ -89,7 +89,7 @@ namespace clitk {
   }; // end class ImageArithmGenericFilter
 //--------------------------------------------------------------------
 
-#include "clitkImageArithmGenericFilter.txx"
+//#include "clitkImageArithmGenericFilter.txx"
 
 } // end namespace
 //--------------------------------------------------------------------
index 6afb8ab74f9ed85a881b2981591115690c13d29e..b4b8bc466bf0d0a07ac9c6a543e9fe9733b2bc4c 100644 (file)
 #include "clitkImageConvertGenericFilter.h"
 
 //--------------------------------------------------------------------
-clitk::ImageConvertGenericFilter::ImageConvertGenericFilter():ImageToImageGenericFilter() {
+clitk::ImageConvertGenericFilter::ImageConvertGenericFilter():
+  clitk::ImageToImageGenericFilter<Self>("ImageConvert") {
   mOutputPixelTypeName = "NotSpecified";
+  InitializeImageType<2>();
+  InitializeImageType<3>();  
+  InitializeImageType<4>();  
 }
 //--------------------------------------------------------------------
 
+
+//--------------------------------------------------------------------
+template<unsigned int Dim>
+void clitk::ImageConvertGenericFilter::InitializeImageType() {      
+  ADD_IMAGE_TYPE(Dim, char);
+  ADD_IMAGE_TYPE(Dim, short);
+  ADD_IMAGE_TYPE(Dim, unsigned short);
+  ADD_IMAGE_TYPE(Dim, int);
+  ADD_IMAGE_TYPE(Dim, float);
+  ADD_IMAGE_TYPE(Dim, double);
+}
 //--------------------------------------------------------------------
-void clitk::ImageConvertGenericFilter::Update() {  
-  // Load image header
-  itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]);
 
-  // Determine dim, pixel type, number of components
-  mDim = header->GetNumberOfDimensions();
-  mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());  
-  mNbOfComponents = header->GetNumberOfComponents();
+
+//--------------------------------------------------------------------
+template<class InputImageType>
+void clitk::ImageConvertGenericFilter::UpdateWithInputImageType() {
 
   // Verbose stuff
   if (mIOVerbose) {
     if (mInputFilenames.size() == 1) {
       std::cout << "Input image <" << mInputFilenames[0] << "> is ";
+      itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]);
       printImageHeader(header, std::cout);
       std::cout << std::endl;
     }
@@ -47,16 +60,82 @@ void clitk::ImageConvertGenericFilter::Update() {
     }
   }
 
-  // Switch by dimension
-  if (mInputFilenames.size() > 1) mDim++;
-  if (mDim == 2) { Update_WithDim<2>(); return; }
-  if (mDim == 3) { Update_WithDim<3>(); return; }
-  if (mDim == 4) { Update_WithDim<4>(); return; }
 
-  std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl;
-  exit(0);
+  if ((mPixelTypeName == mOutputPixelTypeName) || (mOutputPixelTypeName == "NotSpecified")) {
+    //    typename InputImageType::Pointer input = clitk::readImage<InputImageType>(mInputFilenames);
+    typename InputImageType::Pointer input = this->template GetInput<InputImageType>(0);
+    //clitk::writeImage<InputImageType>(input, mOutputFilename, mIOVerbose);
+    this->SetNextOutput<InputImageType>(input);
+  }
+  else {
+#define TRY_TYPE(TYPE) \
+    if (IsSameType<TYPE>(mOutputPixelTypeName)) { UpdateWithOutputType<InputImageType, TYPE>(); return; }
+    TRY_TYPE(char);
+    // TRY_TYPE(signed char);
+    TRY_TYPE(uchar);
+    TRY_TYPE(short);
+    TRY_TYPE(ushort);
+    TRY_TYPE(int); // no uint ...
+    TRY_TYPE(float);
+    TRY_TYPE(double);
+#undef TRY_TYPE
+
+    std::string list = CreateListOfTypes<char, uchar, short, ushort, int, float, double>();
+    std::cerr << "Error, I don't know the output type '" << mOutputPixelTypeName 
+             << "'. " << std::endl << "Known types are " << list << "." << std::endl;
+    exit(0);
+  }  
 }
-//--------------------------------------------------------------------
+//====================================================================
+
+//====================================================================
+template<class InputImageType, class OutputPixelType>
+void clitk::ImageConvertGenericFilter::UpdateWithOutputType() {
+  // Read
+  typename InputImageType::Pointer input =this->template GetInput<InputImageType>(0);
+
+  // Typedef
+  typedef typename InputImageType::PixelType PixelType;
+
+  // Warning
+  if (std::numeric_limits<PixelType>::is_signed) {
+    if (!std::numeric_limits<OutputPixelType>::is_signed) {
+      std::cerr << "Warning, input type is signed (" << mPixelTypeName << ") while output type is not (" 
+               << mOutputPixelTypeName << "), use at your own responsability." << std::endl;
+    }
+  }
+  if (!std::numeric_limits<PixelType>::is_integer) {
+    if (std::numeric_limits<OutputPixelType>::is_integer) {
+      std::cerr << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" 
+               << mOutputPixelTypeName << "), use at your own responsability." << std::endl;
+    }
+  }
+  //  DD(std::numeric_limits<PixelType>::digits10);
+  // DD(std::numeric_limits<OutputPixelType>::digits10);
+  if (!std::numeric_limits<PixelType>::is_integer) {
+    if (std::numeric_limits<OutputPixelType>::is_integer) {
+      std::cerr << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" 
+               << mOutputPixelTypeName << "), use at your own responsability." << std::endl;
+    }
+  }
+  if (std::numeric_limits<PixelType>::digits10 > std::numeric_limits<OutputPixelType>::digits10) {
+    std::cerr << "Warning, possible loss of precision : input type is (" << mPixelTypeName << ") while output type is (" 
+               << mOutputPixelTypeName << "), use at your own responsability." << std::endl;
+  }
+
+  // Cast
+  typedef itk::Image<OutputPixelType,InputImageType::ImageDimension> OutputImageType;
+  typedef itk::CastImageFilter<InputImageType, OutputImageType> FilterType;
+  typename FilterType::Pointer filter = FilterType::New();
+  filter->SetInput(input);
+  filter->Update();
+
+  // Write
+  SetNextOutput<OutputImageType>(filter->GetOutput());
+  //clitk::writeImage<OutputImageType>(filter->GetOutput(), mOutputFilename, mIOVerbose);
+}
+//====================================================================
+
 
 #endif /* end #define CLITKIMAGECONVERTGENERICFILTER_CXX */
 
index 50f80ef51d042b5fa7a062b06a2d7112e026bf88..e46fb2640ca1461ba14d95f6082424a4c1237c2f 100644 (file)
@@ -19,7 +19,8 @@
 
 namespace clitk {
   
-  class ImageConvertGenericFilter: public clitk::ImageToImageGenericFilter {
+  class ImageConvertGenericFilter: 
+    public clitk::ImageToImageGenericFilter<ImageConvertGenericFilter> {
     
   public: 
     // constructor - destructor
@@ -27,7 +28,6 @@ namespace clitk {
 
     // Types
     typedef ImageConvertGenericFilter     Self;
-    typedef ImageToImageGenericFilter     Superclass;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
@@ -36,18 +36,21 @@ namespace clitk {
     
     // Members functions
     void SetOutputPixelType(std::string p) { mOutputPixelTypeName = p; }
-    void Update();
+
+    //--------------------------------------------------------------------
+    // Main function called each time the filter is updated
+    template<class InputImageType>  
+    void UpdateWithInputImageType();
 
   protected:
+    template<unsigned int Dim> void InitializeImageType();
     std::string mOutputPixelTypeName;
 
-    template<unsigned int Dim> void Update_WithDim();
-    template<unsigned int Dim, class PixelType> void Update_WithDimAndPixelType();
-    template<unsigned int Dim, class PixelType, class OutputPixelType> void Update_WithDimAndPixelTypeAndOutputType();
+    template<class InputImageType, class OutputPixelType> void UpdateWithOutputType();
 
   }; // end class ImageConvertGenericFilter
 
-#include "clitkImageConvertGenericFilter.txx"
+  //#include "clitkImageConvertGenericFilter.txx"
 
 } // end namespace
 
index 59bbff4f85921a622b713b35b0b6f0a8b21d6c02..8e5e35d1fadef2820e05ede029be8733299dbb55 100644 (file)
 #include "clitkImageFillRegionGenericFilter.h"
 
 //--------------------------------------------------------------------
-clitk::ImageFillRegionGenericFilter::ImageFillRegionGenericFilter() {
+clitk::ImageFillRegionGenericFilter::ImageFillRegionGenericFilter():
+  clitk::ImageToImageGenericFilter<Self>("ImageFillRegion") {
+  InitializeImageType<2>();
+  InitializeImageType<3>();   
   mPixelValue = 0;
   m_IsCentered=false;
-  mSphericRegion=false;
+  mSphericRegion=false;  
 }
 //--------------------------------------------------------------------
 
 
+//--------------------------------------------------------------------
+template<unsigned int Dim>
+void clitk::ImageFillRegionGenericFilter::InitializeImageType() {      
+  // ADD_IMAGE_TYPE(Dim, char);
+  ADD_IMAGE_TYPE(Dim, short);
+  // ADD_IMAGE_TYPE(Dim, unsigned short);
+//   ADD_IMAGE_TYPE(Dim, int);
+  ADD_IMAGE_TYPE(Dim, float);
+  // ADD_IMAGE_TYPE(Dim, double);
+}
+//--------------------------------------------------------------------
+
+
+
+//--------------------------------------------------------------------
+template<class ImageType>
+void clitk::ImageFillRegionGenericFilter::UpdateWithInputImageType() {
+
+  // Typedef
+  typedef typename ImageType::PixelType PixelType;
+  static unsigned int Dim = ImageType::ImageDimension;
+
+  // Spheric region
+  if (mSphericRegion) return Update_WithDimAndPixelType_SphericRegion<ImageType::ImageDimension,PixelType>();
+
+  // Read input
+  typename ImageType::Pointer input = GetInput<ImageType>(0);
+
+  // Get pixel value in correct type
+  PixelType value = PixelTypeDownCast<double, PixelType>(mPixelValue); 
+
+  // Get region
+  typedef typename ImageType::RegionType RegionType;
+  typedef typename ImageType::SizeType SizeType;
+  typedef typename ImageType::IndexType IndexType;
+  RegionType region;
+  SizeType size;
+  IndexType start;
+  for(unsigned int i=0; i<Dim; i++) {
+    size[i] = mSize[i];
+    start[i] = mStart[i];
+  }
+  region.SetSize(size);
+  region.SetIndex(start);
+
+  // Build iterator
+  typedef itk::ImageRegionIterator<ImageType> IteratorType;
+  IteratorType it(input, region);
+  it.GoToBegin();
+  while (!it.IsAtEnd()) {
+    it.Set(value);
+    ++it;
+  }
+
+  // Write results
+  SetNextOutput<ImageType>(input);
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+template<unsigned int Dim, class PixelType>
+void clitk::ImageFillRegionGenericFilter::Update_WithDimAndPixelType_SphericRegion() {
+
+  // Read input
+  typedef itk::Image<PixelType,Dim> ImageType;
+  //typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames[0], mIOVerbose);
+  typename ImageType::Pointer input = GetInput<ImageType>(0);
+
+  // Get pixel value in correct type
+  PixelType value = PixelTypeDownCast<double, PixelType>(mPixelValue); 
+
+  // Centered?
+  if(m_IsCentered)
+    {
+      typename ImageType::SizeType size= input->GetLargestPossibleRegion().GetSize();
+      typename ImageType::SpacingType spacing= input->GetSpacing();
+      typename ImageType::PointType origin= input->GetOrigin();
+      mCenter.resize(Dim);
+      for (unsigned int i=0; i<Dim; i++)
+       mCenter[i]=origin[i]+(double)size[i]/2*spacing[i];
+    }
+
+  // Build iterator
+  typedef itk::ImageRegionIteratorWithIndex<ImageType> IteratorType;
+  IteratorType it(input, input->GetLargestPossibleRegion());
+  it.GoToBegin();
+
+  typename ImageType::PointType point; 
+  //typename itk::Vector<double, Dim> distance; 
+  typename ImageType::IndexType index;
+  //bool inside;
+  double distance;
+  
+  while (!it.IsAtEnd())
+    {    
+      //      inside=true;
+      index=it.GetIndex();
+      input->TransformIndexToPhysicalPoint(index, point);
+      distance=0.0;      
+      for(unsigned int i=0; i<Dim; i++)
+       distance+=powf( ( (mCenter[i]-point[i])/mRadius[i] ), 2);
+       
+      //  inside= ( (fabs(distance[i])<fabs(mRadius[i])) && inside );
+      //         distance[i]=mCenter[i]-point[i];
+      //         inside= ( (fabs(distance[i])<fabs(mRadius[i])) && inside );
+      //       }
+      
+      if (distance<1)
+       it.Set(value);
+      ++it;
+    }
+
+  // Write results
+  SetNextOutput<ImageType>(input);
+}
+
+//--------------------------------------------------------------------
+
+
+
 //--------------------------------------------------------------------
 void clitk::ImageFillRegionGenericFilter::SetSphericRegion(std::vector<double> &  radius, 
                                                           std::vector<double> & center) 
@@ -57,25 +180,4 @@ void clitk::ImageFillRegionGenericFilter::SetSphericRegion(std::vector<double> &
 //--------------------------------------------------------------------
 
 
-//--------------------------------------------------------------------
-void clitk::ImageFillRegionGenericFilter::Update () {
-  
-  // Load image header
-  itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]);
-  
-  // Determine dim, pixel type, number of components
-  mDim = header->GetNumberOfDimensions();
-  mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());  
-  mNbOfComponents = header->GetNumberOfComponents();
-  
-  // Switch by dimension
-  if (mDim == 2) { Update_WithDim<2>(); return; }
-  if (mDim == 3) { Update_WithDim<3>(); return; }
-  // if (mDim == 4) { Update_WithDim<4>(); return; }
-
-  std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl;
-  exit(0);
-}
-//--------------------------------------------------------------------
-
 #endif //define CLITKIMAGEFILLREGIONGENERICFILTER_CXX
index ea128b9a214350a0809b3b8617a31444af53494a..22e5fec3167145a7aaf44e72586cc7cfdf5caec2 100644 (file)
@@ -35,7 +35,8 @@
 namespace clitk {
   
   //--------------------------------------------------------------------
-  class ImageFillRegionGenericFilter : public clitk::ImageToImageGenericFilter {
+  class ImageFillRegionGenericFilter: 
+    public clitk::ImageToImageGenericFilter<ImageFillRegionGenericFilter> {
   
   public:
        
@@ -45,7 +46,6 @@ namespace clitk {
 
     // Types
     typedef ImageFillRegionGenericFilter  Self;
-    typedef ImageToImageGenericFilter     Superclass;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
@@ -58,10 +58,13 @@ namespace clitk {
     void SetSphericRegion(std::vector<double> & radius, std::vector<double> & center);
     void SetSphericRegion(std::vector<double> & radius);
 
-    // Update
-    void Update ();
+    //--------------------------------------------------------------------
+    // Main function called each time the filter is updated
+    template<class InputImageType>  
+    void UpdateWithInputImageType();
 
   protected:  
+    template<unsigned int Dim> void InitializeImageType();
     double mPixelValue;
     int * mSize;
     int * mStart;
@@ -70,12 +73,7 @@ namespace clitk {
     bool mSphericRegion;
     bool m_IsCentered;
 
-
-    //--------------------------------------------------------------------
-    template<unsigned int Dim> void Update_WithDim();
-    template<unsigned int Dim, class PixelType> void Update_WithDimAndPixelType();
     template<unsigned int Dim, class PixelType> void Update_WithDimAndPixelType_SphericRegion();
-    //--------------------------------------------------------------------
 
   }; // end class ImageFillRegionGenericFilter
 //--------------------------------------------------------------------
index 4d81f0e8b947408b220b48c886dcef5284103951..79defadc71b4687f34377af9e8fe46d1741df7ba 100644 (file)
  * 
  -------------------------------------------------*/
 
-//--------------------------------------------------------------------
-template<unsigned int Dim>
-void ImageFillRegionGenericFilter::Update_WithDim() { 
-#define TRY_TYPE(TYPE)                                                 \
-  if (IsSameType<TYPE>(mPixelTypeName)) { Update_WithDimAndPixelType<Dim, TYPE>(); return; } 
-  // TRY_TYPE(signed char);
-  // TRY_TYPE(uchar);
-  TRY_TYPE(short);
-  //TRY_TYPE(ushort);
-  // TRY_TYPE(int);
-  //   TRY_TYPE(unsigned int); 
-  TRY_TYPE(float);
-  // TRY_TYPE(double);
-#undef TRY_TYPE
-
-  std::string list = CreateListOfTypes<uchar, short, ushort, int, uint, float, double>();
-  std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '"
-           << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl;
-  exit(0);
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<unsigned int Dim, class PixelType>
-void ImageFillRegionGenericFilter::Update_WithDimAndPixelType() {
-
-  // Spheric region
-  if (mSphericRegion) return Update_WithDimAndPixelType_SphericRegion<Dim,PixelType>();
-
-  // Read input
-  typedef itk::Image<PixelType,Dim> ImageType;
-  typename ImageType::Pointer input = GetInput<ImageType>(0);
-
-  // Get pixel value in correct type
-  PixelType value = PixelTypeDownCast<double, PixelType>(mPixelValue); 
-
-  // Get region
-  typedef typename ImageType::RegionType RegionType;
-  typedef typename ImageType::SizeType SizeType;
-  typedef typename ImageType::IndexType IndexType;
-  RegionType region;
-  SizeType size;
-  IndexType start;
-  for(unsigned int i=0; i<Dim; i++) {
-    size[i] = mSize[i];
-    start[i] = mStart[i];
-  }
-  region.SetSize(size);
-  region.SetIndex(start);
-
-  // Build iterator
-  typedef itk::ImageRegionIterator<ImageType> IteratorType;
-  IteratorType it(input, region);
-  it.GoToBegin();
-  while (!it.IsAtEnd()) {
-    it.Set(value);
-    ++it;
-  }
-
-  // Write results
-  SetNextOutput<ImageType>(input);
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<unsigned int Dim, class PixelType>
-void ImageFillRegionGenericFilter::Update_WithDimAndPixelType_SphericRegion() {
-
-  // Read input
-  typedef itk::Image<PixelType,Dim> ImageType;
-  //typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames[0], mIOVerbose);
-  typename ImageType::Pointer input = GetInput<ImageType>(0);
-
-  // Get pixel value in correct type
-  PixelType value = PixelTypeDownCast<double, PixelType>(mPixelValue); 
-
-  // Centered?
-  if(m_IsCentered)
-    {
-      typename ImageType::SizeType size= input->GetLargestPossibleRegion().GetSize();
-      typename ImageType::SpacingType spacing= input->GetSpacing();
-      typename ImageType::PointType origin= input->GetOrigin();
-      mCenter.resize(Dim);
-      for (unsigned int i=0; i<Dim; i++)
-       mCenter[i]=origin[i]+(double)size[i]/2*spacing[i];
-    }
-
-  // Build iterator
-  typedef itk::ImageRegionIteratorWithIndex<ImageType> IteratorType;
-  IteratorType it(input, input->GetLargestPossibleRegion());
-  it.GoToBegin();
-
-  typename ImageType::PointType point; 
-  //typename itk::Vector<double, Dim> distance; 
-  typename ImageType::IndexType index;
-  //bool inside;
-  double distance;
-  
-  while (!it.IsAtEnd())
-    {    
-      //      inside=true;
-      index=it.GetIndex();
-      input->TransformIndexToPhysicalPoint(index, point);
-      distance=0.0;      
-      for(unsigned int i=0; i<Dim; i++)
-       distance+=powf( ( (mCenter[i]-point[i])/mRadius[i] ), 2);
-       
-      //  inside= ( (fabs(distance[i])<fabs(mRadius[i])) && inside );
-      //         distance[i]=mCenter[i]-point[i];
-      //         inside= ( (fabs(distance[i])<fabs(mRadius[i])) && inside );
-      //       }
-      
-      if (distance<1)
-       it.Set(value);
-      ++it;
-    }
-
-  // Write results
-  SetNextOutput<ImageType>(input);
-}
-
-//--------------------------------------------------------------------
-
 #endif  //#define CLITKIMAGEFILLREGIONGENERICFILTER_TXX
index 0187e493f9c76a2a83912a332a780e4d30994057..da510c6d1e50b712a3480fba1be7e92b668770c8 100644 (file)
 #include "clitkImageResampleGenericFilter.h"
 
 //--------------------------------------------------------------------
-clitk::ImageResampleGenericFilter::ImageResampleGenericFilter() {
+clitk::ImageResampleGenericFilter::ImageResampleGenericFilter():
+  ImageToImageGenericFilter<Self>("ImageResample") {
   mApplyGaussianFilterBefore = false;
   mDefaultPixelValue = 0.0;
   mInterpolatorName = "NN";
   mBSplineOrder=3;
+  InitializeImageTypeWithDim<2>();
+  InitializeImageTypeWithDim<3>();
+  InitializeImageTypeWithDim<4>();
 }
 //--------------------------------------------------------------------
 
+
+//--------------------------------------------------------------------
+template<unsigned int Dim>
+void clitk::ImageResampleGenericFilter::InitializeImageTypeWithDim() {      
+  ADD_IMAGE_TYPE(Dim, char);
+  ADD_IMAGE_TYPE(Dim, short);
+  ADD_IMAGE_TYPE(Dim, int);
+  ADD_IMAGE_TYPE(Dim, float);
+}
 //--------------------------------------------------------------------
-void clitk::ImageResampleGenericFilter::Update() {
 
-  // Determine dim, pixel type, number of components
-  this->GetInputImageDimensionAndPixelType(mDim,mPixelTypeName,mNbOfComponents);
 
-  // Switch by dimension
-  if (mDim == 2) { Update_WithDim<2>(); return; }
-  if (mDim == 3) { Update_WithDim<3>(); return; }
-  if (mDim == 4) { Update_WithDim<4>(); return; }
+//--------------------------------------------------------------------
+template<class InputImageType>
+void clitk::ImageResampleGenericFilter::UpdateWithInputImageType() {
+
+  // Some typedefs
+  typedef typename InputImageType::SizeType    SizeType;
+  typedef typename InputImageType::SpacingType SpacingType;
+  typedef typename InputImageType::PointType   PointType;
+  typedef typename InputImageType::PixelType   PixelType;
+  static unsigned int dim = InputImageType::ImageDimension;
+
+  // Reading input
+  typename InputImageType::Pointer input = this->GetInput<InputImageType>(0);
+
+  // Warning
+  if (!std::numeric_limits<PixelType>::is_signed) {
+    if ((mInterpolatorName == "bspline") || (mInterpolatorName == "blut")) {
+      std::cerr << "Warning : input pixel type is not signed, use bspline interpolation at your own risk ..." << std::endl;
+    }
+  }
+
+  // Check options
+  if (mOutputSize.size() != dim) {
+    std::cerr << "Please set size with " << dim << " dimensions." << std::endl;
+    return;
+  }
+  if (mOutputSpacing.size() != dim) {
+    std::cerr << "Please set spacing with " << dim << " dimensions." << std::endl;
+    return;
+  }
+  mOutputOrigin.resize(dim);
+
+  if (mApplyGaussianFilterBefore && mSigma.size() != dim) {
+    std::cerr << "Please set sigma with " << dim << " dimensions." << std::endl;
+    return;
+  }
+
+  // Create Image Filter
+  typedef itk::ResampleImageFilter<InputImageType,InputImageType> FilterType;
+  typename FilterType::Pointer filter = FilterType::New();
+    
+  // Instance of the transform object to be passed to the resample
+  // filter. By default, identity transform is applied
+  typedef itk::AffineTransform<double, InputImageType::ImageDimension> TransformType;
+  typename TransformType::Pointer transform =  TransformType::New();
+  filter->SetTransform(transform);
+
+  // Set filter's parameters
+  SizeType outputSize;
+  SpacingType outputSpacing;
+  PointType outputOrigin;
+  for(unsigned int i=0; i<InputImageType::ImageDimension; i++) {
+    outputSize[i] = mOutputSize[i];
+    outputSpacing[i] = mOutputSpacing[i];
+    outputOrigin[i] = input->GetOrigin()[i];
+  }
+
+  filter->SetSize(outputSize);
+  filter->SetOutputSpacing(outputSpacing);
+  filter->SetOutputOrigin(outputOrigin);
+  filter->SetDefaultPixelValue(static_cast<PixelType>(mDefaultPixelValue));//DS TODO//JV comme ça?
+
+  // Select interpolator
+  if (mInterpolatorName == "nn") {
+    typedef itk::NearestNeighborInterpolateImageFunction<InputImageType, double> InterpolatorType;     
+    typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+    filter->SetInterpolator(interpolator);
+  }
+  else { 
+    if (mInterpolatorName == "linear") {
+      typedef itk::LinearInterpolateImageFunction<InputImageType, double> InterpolatorType;     
+      typename InterpolatorType::Pointer interpolator =  InterpolatorType::New();
+      filter->SetInterpolator(interpolator);
+    }
+    else {
+      if (mInterpolatorName == "bspline") {
+       typedef itk::BSplineInterpolateImageFunction<InputImageType, double> InterpolatorType; 
+       typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+       interpolator->SetSplineOrder(mBSplineOrder);
+       filter->SetInterpolator(interpolator);
+      }
+      else {
+       if (mInterpolatorName == "blut") {
+         typedef itk::BSplineInterpolateImageFunctionWithLUT<InputImageType, double> InterpolatorType; 
+         typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+         interpolator->SetSplineOrder(mBSplineOrder);
+         interpolator->SetLUTSamplingFactor(mSamplingFactors[0]);
+         filter->SetInterpolator(interpolator);
+       }
+       else {
+         std::cerr << "Sorry, I do not know the interpolator '" << mInterpolatorName 
+                   << "'. Known interpolators are :  nn, linear, bspline, blut" << std::endl;
+         exit(0);
+       }
+      }
+    }
+  }
+
+  // Build initial Gaussian bluring (if needed)
+  typedef itk::RecursiveGaussianImageFilter<InputImageType, InputImageType> GaussianFilterType;
+  std::vector<typename GaussianFilterType::Pointer> gaussianFilters;
+  if (mApplyGaussianFilterBefore) {
+    for(unsigned int i=0; i<InputImageType::ImageDimension; i++) {
+      // Create filter
+      gaussianFilters.push_back(GaussianFilterType::New());
+      // Set options
+      gaussianFilters[i]->SetDirection(i);
+      gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder);
+      gaussianFilters[i]->SetNormalizeAcrossScale(false);
+      gaussianFilters[i]->SetSigma(mSigma[i]); // in millimeter !
+      // Set input
+      if (i==0) gaussianFilters[i]->SetInput(input);
+      else gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput());
+    }
+    filter->SetInput(gaussianFilters[InputImageType::ImageDimension-1]->GetOutput());
+  }
+  else {
+    filter->SetInput(input);
+  }
+
+  // Go !
+  try { 
+    filter->Update();
+  }
+  catch( itk::ExceptionObject & err ) {
+    std::cerr << "Error while filtering " << mInputFilenames[0].c_str() 
+             << " " << err << std::endl;
+    exit(0);
+  }
+
+  // Get result
+   typename InputImageType::Pointer outputImage = filter->GetOutput();
+
+  // Write/save results
+  this->SetNextOutput<InputImageType>(outputImage);
 
-  std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl;
-  exit(0);
 }
 //--------------------------------------------------------------------
 
+
 //--------------------------------------------------------------------
 void clitk::ImageResampleGenericFilter::SetOutputSize(const std::vector<int> & size) {
   mOutputSize.resize(size.size());
index d4ccc1f776df71d4d6b7d6ed39d3a1bf52b7e3e2..5bd8972ab23da3900b295a94555887c1a486d8fd 100644 (file)
@@ -32,7 +32,8 @@
 namespace clitk {
   
   //--------------------------------------------------------------------
-  class ImageResampleGenericFilter: public clitk::ImageToImageGenericFilter {
+  class ImageResampleGenericFilter: 
+    public ImageToImageGenericFilter<ImageResampleGenericFilter> {
     
   public: 
     // constructor
@@ -40,7 +41,6 @@ namespace clitk {
 
     // Types
     typedef ImageResampleGenericFilter    Self;
-    typedef ImageToImageGenericFilter     Superclass;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
@@ -55,7 +55,8 @@ namespace clitk {
     void SetBSplineOrder(int o) { mBSplineOrder = o; }
     void SetBLUTSampling(int b) { mSamplingFactors.resize(1); mSamplingFactors[0] = b; }
 
-    void Update();    
+    //--------------------------------------------------------------------
+    template<class InputImageType> void UpdateWithInputImageType();
 
   protected:
     //--------------------------------------------------------------------
@@ -70,13 +71,8 @@ namespace clitk {
     std::vector<int> mSamplingFactors;
 
     //--------------------------------------------------------------------
-    template<unsigned int Dim> void Update_WithDim();
-    template<unsigned int Dim, class PixelType> void Update_WithDimAndPixelType();
-
-    //--------------------------------------------------------------------
-    template<class ImageType>
-    typename ImageType::Pointer ComputeImage(typename ImageType::Pointer inputImage);
-    
+    template<unsigned int Dim> void InitializeImageTypeWithDim();
+     
   }; // end class ImageResampleGenericFilter
   //--------------------------------------------------------------------
     
index bdc33c0f20ef21951748d82179716555a446237f..1a345682058c6d6bcdbe1d42ccd99e6b0c7cbd4f 100644 (file)
    * 
    ------------------------------------------------=*/
 
-//--------------------------------------------------------------------
-template<unsigned int Dim>
-void ImageResampleGenericFilter::Update_WithDim() { 
-
-#define TRY_TYPE(TYPE)                                                 \
-  if (IsSameType<TYPE>(mPixelTypeName)) { Update_WithDimAndPixelType<Dim, TYPE>(); return; } 
-  TRY_TYPE(signed char);
-  TRY_TYPE(uchar);
-  TRY_TYPE(short);
-  TRY_TYPE(ushort);
-  TRY_TYPE(int);
-  TRY_TYPE(unsigned int); 
-  TRY_TYPE(float);
-  TRY_TYPE(double);
-#undef TRY_TYPE
-
-  std::string list = CreateListOfTypes<char, uchar, short, ushort, int, float, double>();
-  std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '"
-           << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl;
-  exit(0);
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<unsigned int Dim, class PixelType>
-void ImageResampleGenericFilter::Update_WithDimAndPixelType() {
-  // Reading input
-  typedef itk::Image<PixelType,Dim> ImageType;
-  //typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames, mIOVerbose);
-  typename ImageType::Pointer input = this->GetInput<ImageType>(0);
-
-  // Main filter
-  typename ImageType::Pointer outputImage = ComputeImage<ImageType>(input);
-
-  // Write results
-  this->SetNextOutput<ImageType>(outputImage);
-  //clitk::writeImage<ImageType>(outputImage, mOutputFilename, mIOVerbose);
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<class ImageType>
-typename ImageType::Pointer 
-ImageResampleGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) {
-
-  // Warning
-  if (!std::numeric_limits<typename ImageType::PixelType>::is_signed) {
-    if ((mInterpolatorName == "bspline") || (mInterpolatorName == "blut")) {
-      std::cerr << "Warning : input pixel type is not signed, use bspline interpolation at your own risk ..." << std::endl;
-    }
-  }
-
-  // Check options
-  static unsigned int dim = ImageType::ImageDimension;
-  if (mOutputSize.size() != dim) {
-    std::cerr << "Please set size with " << dim << " dimensions." << std::endl;
-    return NULL;
-  }
-  if (mOutputSpacing.size() != dim) {
-    std::cerr << "Please set spacing with " << dim << " dimensions." << std::endl;
-    return NULL;
-  }
-  mOutputOrigin.resize(dim);
-
-  if (mApplyGaussianFilterBefore && mSigma.size() != dim) {
-    std::cerr << "Please set sigma with " << dim << " dimensions." << std::endl;
-    return NULL;
-  }
-
-  // Some typedefs
-  typedef typename ImageType::SizeType SizeType;
-  typedef typename ImageType::SpacingType SpacingType;
-  typedef typename ImageType::PointType PointType;
-
-
-  // Create Image Filter
-  typedef itk::ResampleImageFilter<ImageType,ImageType> FilterType;
-  typename FilterType::Pointer filter = FilterType::New();
-    
-  // Instance of the transform object to be passed to the resample
-  // filter. By default, identity transform is applied
-  typedef itk::AffineTransform<double, ImageType::ImageDimension> TransformType;
-  typename TransformType::Pointer transform =  TransformType::New();
-  filter->SetTransform(transform);
-
-  // Set filter's parameters
-  SizeType outputSize;
-  SpacingType outputSpacing;
-  PointType outputOrigin;
-  for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
-    outputSize[i] = mOutputSize[i];
-    outputSpacing[i] = mOutputSpacing[i];
-    outputOrigin[i] = inputImage->GetOrigin()[i];
-  }
-
-  filter->SetSize(outputSize);
-  filter->SetOutputSpacing(outputSpacing);
-  filter->SetOutputOrigin(outputOrigin);
-  filter->SetDefaultPixelValue(static_cast<typename ImageType::PixelType>(mDefaultPixelValue));//DS TODO//JV comme ça?
-
-  // Select interpolator
-  if (mInterpolatorName == "nn") {
-    typedef itk::NearestNeighborInterpolateImageFunction<ImageType, double> InterpolatorType;     
-    typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
-    filter->SetInterpolator(interpolator);
-  }
-  else { 
-    if (mInterpolatorName == "linear") {
-      typedef itk::LinearInterpolateImageFunction<ImageType, double> InterpolatorType;     
-      typename InterpolatorType::Pointer interpolator =  InterpolatorType::New();
-      filter->SetInterpolator(interpolator);
-    }
-    else {
-      if (mInterpolatorName == "bspline") {
-       typedef itk::BSplineInterpolateImageFunction<ImageType, double> InterpolatorType; 
-       typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
-       interpolator->SetSplineOrder(mBSplineOrder);
-       filter->SetInterpolator(interpolator);
-      }
-      else {
-       if (mInterpolatorName == "blut") {
-         typedef itk::BSplineInterpolateImageFunctionWithLUT<ImageType, double> InterpolatorType; 
-         typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
-         interpolator->SetSplineOrder(mBSplineOrder);
-         interpolator->SetLUTSamplingFactor(mSamplingFactors[0]);
-         filter->SetInterpolator(interpolator);
-       }
-       else {
-         std::cerr << "Sorry, I do not know the interpolator '" << mInterpolatorName 
-                   << "'. Known interpolators are :  nn, linear, bspline, blut" << std::endl;
-         exit(0);
-       }
-      }
-    }
-  }
-
-  // Build initial Gaussian bluring (if needed)
-  typedef itk::RecursiveGaussianImageFilter<ImageType, ImageType> GaussianFilterType;
-  std::vector<typename GaussianFilterType::Pointer> gaussianFilters;
-  if (mApplyGaussianFilterBefore) {
-    for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
-      // Create filter
-      gaussianFilters.push_back(GaussianFilterType::New());
-      // Set options
-      gaussianFilters[i]->SetDirection(i);
-      gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder);
-      gaussianFilters[i]->SetNormalizeAcrossScale(false);
-      gaussianFilters[i]->SetSigma(mSigma[i]); // in millimeter !
-      // Set input
-      if (i==0) gaussianFilters[i]->SetInput(inputImage);
-      else gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput());
-    }
-    filter->SetInput(gaussianFilters[ImageType::ImageDimension-1]->GetOutput());
-  }
-  else {
-    filter->SetInput(inputImage);
-  }
-
-  // Go !
-  try { 
-    filter->Update();
-  }
-  catch( itk::ExceptionObject & err ) {
-    std::cerr << "Error while filtering " << mInputFilenames[0].c_str() 
-             << " " << err << std::endl;
-    exit(0);
-  }
-
-  // Return result
-  return filter->GetOutput();
-
-}
-//--------------------------------------------------------------------
-
-
 
 #endif /* end #define CLITKIMAGERESAMPLEGENERICFILTER_TXX */
 
index bb46dd971206a7324235a524e6126eddffa1ba9f..c74f0e4cb45317dcff98e29d01d98c80d6ebfd7e 100644 (file)
 
 #include "clitkSplitImageGenericFilter.txx"
 //--------------------------------------------------------------------
-clitk::SplitImageGenericFilter::SplitImageGenericFilter() {
+clitk::SplitImageGenericFilter::SplitImageGenericFilter():
+  clitk::ImageToImageGenericFilter<Self>("SplitImage") {
   mSplitDimension = 0;
+  InitializeImageType<3>();
+  InitializeImageType<4>();
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<unsigned int Dim>
+void clitk::SplitImageGenericFilter::InitializeImageType() {      
+  ADD_IMAGE_TYPE(Dim, char);
+  ADD_IMAGE_TYPE(Dim, short);
+  ADD_IMAGE_TYPE(Dim, int);
+  ADD_IMAGE_TYPE(Dim, float);
+  typedef itk::Vector<float, Dim> DVF;
+  ADD_IMAGE_TYPE(Dim, DVF);
 }
 //--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
-void clitk::SplitImageGenericFilter::Update () {
-  
-    // Read the Dimension and PixelType
-    int Dimension, Components;
-    std::string PixelType;
-    ReadImageDimensionAndPixelType(this->mInputFilenames[0], Dimension, PixelType, Components);
-
-    
-    // Call UpdateWithDim
-    if(Dimension==3) UpdateWithDim<3>(PixelType, Components);
-    else if (Dimension==4)UpdateWithDim<4>(PixelType, Components); 
-    else 
-      {
-       std::cout<<"Error, Only for 3 or 4  Dimensions!!!"<<std::endl ;
-       return;
-      }
+template<class ImageType>
+void clitk::SplitImageGenericFilter::UpdateWithInputImageType() {
+
+  // Read input
+  typedef typename ImageType::PixelType PixelType;
+  typedef itk::Image<PixelType,ImageType::ImageDimension-1> OutputImageType;
+  typename ImageType::Pointer input = this->GetInput<ImageType>(0);
+  typedef itk::ExtractImageFilter<ImageType,OutputImageType> FilterType;
+  typename FilterType::Pointer filter= FilterType::New();
+
+  filter->SetInput(input);
+  typename ImageType::SizeType size=input->GetLargestPossibleRegion().GetSize();
+  size[mSplitDimension]=0;
+  typename ImageType::RegionType extracted_region;
+  extracted_region.SetSize(size);
+  filter->SetExtractionRegion(extracted_region);
+  filter->Update();
+
+  typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex();
+  std::string base_filename=GetOutputFilename();
+  unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension];
+  for (unsigned int i=0;i<number_of_output_images;i++)
+  {
+      std::ostringstream ss;
+      ss << i;
+      index[mSplitDimension]=i;
+      extracted_region.SetIndex(index);
+      filter->SetExtractionRegion(extracted_region);
+      filter->Update();
+      SetOutputFilename(base_filename+"_"+ss.str()+".mhd");
+      typename OutputImageType::Pointer output=filter->GetOutput();
+      SetNextOutput<OutputImageType>(output);
+  }
 }
 //--------------------------------------------------------------------
index 8df8a28687f077587183f66f102f97d58ce801ac..359464cb31cabf33651c01c6bc7b46949d1850b3 100644 (file)
@@ -34,7 +34,8 @@
 namespace clitk {
   
   //--------------------------------------------------------------------
-  class SplitImageGenericFilter : public clitk::ImageToImageGenericFilter {
+  class SplitImageGenericFilter: 
+    public clitk::ImageToImageGenericFilter<SplitImageGenericFilter> {
   
   public:
        
@@ -42,8 +43,7 @@ namespace clitk {
     SplitImageGenericFilter ();
 
     // Types
-    typedef SplitImageGenericFilter  Self;
-    typedef ImageToImageGenericFilter     Superclass;
+    typedef SplitImageGenericFilter       Self;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
@@ -54,16 +54,15 @@ namespace clitk {
     void SetSplitDimension (int dim) { mSplitDimension = dim; }
     void SetVerbose (const bool v) { m_Verbose = v; }
 
-    // Update
-    void Update ();
+   //--------------------------------------------------------------------
+    // Main function called each time the filter is updated
+    template<class InputImageType>  
+    void UpdateWithInputImageType();
 
   protected:  
+    template<unsigned int Dim> void InitializeImageType();
     int  mSplitDimension;
     bool m_Verbose;
-    //--------------------------------------------------------------------
-    template<unsigned int Dim> void UpdateWithDim(std::string PixelType, int Components);
-    template<unsigned int Dim, class PixelType> void UpdateWithDimAndPixelType();
-    //--------------------------------------------------------------------
 
   }; // end class SplitImageGenericFilter
 //--------------------------------------------------------------------
index ff7a92eacc35ca2e8dd2fe801afbfd7ef75c9fb8..4b50a91656e76adf3a4e2d1c42d8872d45832479 100644 (file)
 #include <itkExtractImageFilter.h>
 
 
-//--------------------------------------------------------------------
-template<unsigned int Dimension>
-void clitk::SplitImageGenericFilter::UpdateWithDim(std::string PixelType, int Components) { 
-
-  if (m_Verbose) std::cout << "Image was detected to be "<<Dimension<<"D and "<<Components<<" component(s) of "<<  PixelType<<"..."<<std::endl;
-
-    if (Components==1)
-      {
-       if(PixelType == "short"){  
-         if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed short..." << std::endl;
-         UpdateWithDimAndPixelType<Dimension, signed short>(); 
-       }
-           else if(PixelType == "unsigned_short"){  
-              if (m_Verbose) std::cout  << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl;
-              UpdateWithDimAndPixelType<Dimension, unsigned short>(); 
-            }
-       
-       else if (PixelType == "unsigned_char"){ 
-         if (m_Verbose) std::cout  << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl;
-         UpdateWithDimAndPixelType<Dimension, unsigned char>();
-       }
-       
-            else if (PixelType == "char"){ 
-              if (m_Verbose) std::cout  << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl;
-              UpdateWithDimAndPixelType<Dimension, signed char>();
-            }
-       else {
-         if (m_Verbose) std::cout  << "Launching filter in "<< Dimension <<"D and float..." << std::endl;
-         UpdateWithDimAndPixelType<Dimension, float>();
-       }
-      }
-
-    else if (Components==3)
-      {
-       if (m_Verbose) std::cout  << "Launching filter in "<< Dimension <<"D and 3D float (DVF)" << std::endl;
-       UpdateWithDimAndPixelType<Dimension, itk::Vector<float, Dimension> >();
-      }
-    else std::cerr<<"Number of components is "<<Components<<", not supported!"<<std::endl;
-
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<unsigned int Dimension, class PixelType>
-void clitk::SplitImageGenericFilter::UpdateWithDimAndPixelType() {
-
-  // Read input
-  typedef itk::Image<PixelType,Dimension> ImageType;
-  typedef itk::Image<PixelType,Dimension-1> OutputImageType;
-  typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames[0], mIOVerbose);
-  typedef itk::ExtractImageFilter<ImageType,OutputImageType> FilterType;
-  typename FilterType::Pointer filter= FilterType::New();
-
-  filter->SetInput(input);
-  typename ImageType::SizeType size=input->GetLargestPossibleRegion().GetSize();
-  size[mSplitDimension]=0;
-  typename ImageType::RegionType extracted_region;
-  extracted_region.SetSize(size);
-  filter->SetExtractionRegion(extracted_region);
-  filter->Update();
-
-  typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex();
-  std::string base_filename=GetOutputFilename();
-  unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension];
-  for (unsigned int i=0;i<number_of_output_images;i++)
-  {
-      std::ostringstream ss;
-      ss << i;
-      index[mSplitDimension]=i;
-      extracted_region.SetIndex(index);
-      filter->SetExtractionRegion(extracted_region);
-      filter->Update();
-      SetOutputFilename(base_filename+"_"+ss.str()+".mhd");
-      typename OutputImageType::Pointer output=filter->GetOutput();
-      SetNextOutput<OutputImageType>(output);
-  }
-}
-//--------------------------------------------------------------------
-
 #endif  //#define clitkSplitImageGenericFilter_TXX
index 9eb995b836254593acf1457eaa0ea38b1f5d06ce..f335415a2d88ccc8913dcb0d059e157cfb966785 100644 (file)
 #include "clitkVFResampleGenericFilter.h"
 
 //--------------------------------------------------------------------
-clitk::VFResampleGenericFilter::VFResampleGenericFilter() {
+clitk::VFResampleGenericFilter::VFResampleGenericFilter():
+  clitk::ImageToImageGenericFilter<Self>("VFResample") {
+  InitializeImageType<2>();
+  InitializeImageType<3>();
+  InitializeImageType<4>();
   mApplyGaussianFilterBefore = false;
   mDefaultPixelValue = 0.0;
   mInterpolatorName = "NN";
@@ -22,26 +26,158 @@ clitk::VFResampleGenericFilter::VFResampleGenericFilter() {
 }
 //--------------------------------------------------------------------
 
+
+//--------------------------------------------------------------------
+template<unsigned int Dim>
+void clitk::VFResampleGenericFilter::InitializeImageType() {
+  ADD_IMAGE_TYPE(Dim, float);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class ImageType>
+void clitk::VFResampleGenericFilter::UpdateWithInputImageType() {
+
+  if (mNbOfComponents == 1) { 
+    std::cerr << "Error, only one components ? Use clitkImageResample instead." << std::endl;
+    exit(0);
+  }
+  typedef typename ImageType::PixelType PixelType;
+  if (mNbOfComponents == 2) Update_WithDimAndPixelTypeAndComponent<ImageType::ImageDimension,PixelType,2>();
+  if (mNbOfComponents == 3) Update_WithDimAndPixelTypeAndComponent<ImageType::ImageDimension,PixelType,3>();  
+  if (mNbOfComponents == 4) Update_WithDimAndPixelTypeAndComponent<ImageType::ImageDimension,PixelType,4>();  
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<unsigned int Dim, class PixelType, unsigned int DimCompo>
+void clitk::VFResampleGenericFilter::Update_WithDimAndPixelTypeAndComponent() {
+  // Reading input
+  typedef itk::Vector<PixelType, DimCompo> DisplacementType;
+  typedef itk::Image< DisplacementType, Dim > ImageType;
+
+  typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames, mIOVerbose);
+
+  // Main filter
+  typename ImageType::Pointer outputImage = ComputeImage<ImageType>(input);
+
+  // Write results
+  SetNextOutput<ImageType>(outputImage);
+}
+//--------------------------------------------------------------------
+
 //--------------------------------------------------------------------
-void clitk::VFResampleGenericFilter::Update() {
-  // Load image header
-  itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]);
+template<class ImageType>
+typename ImageType::Pointer 
+clitk::VFResampleGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) {
+
+  // Check options
+  static unsigned int dim = ImageType::ImageDimension;
+  if (mOutputSize.size() != dim) {
+    std::cerr << "Please set size with " << dim << " dimensions." << std::endl;
+    return NULL;
+  }
+  if (mOutputSpacing.size() != dim) {
+    std::cerr << "Please set spacing with " << dim << " dimensions." << std::endl;
+    return NULL;
+  }
+  mOutputOrigin.resize(dim);
+
+  if (mApplyGaussianFilterBefore && mSigma.size() != dim) {
+    std::cerr << "Please set sigma with " << dim << " dimensions." << std::endl;
+    return NULL;
+  }
+
+  // Some typedefs
+  typedef typename ImageType::SizeType SizeType;
+  typedef typename ImageType::SpacingType SpacingType;
+  typedef typename ImageType::PointType PointType;
+
+  // Create Image Filter
+  typedef itk::VectorResampleImageFilter<ImageType,ImageType> FilterType;
+  typename FilterType::Pointer filter = FilterType::New();
+    
+  // Instance of the transform object to be passed to the resample
+  // filter. By default, identity transform is applied
+  typedef itk::AffineTransform<double, ImageType::ImageDimension> TransformType;
+  typename TransformType::Pointer transform =  TransformType::New();
+  filter->SetTransform(transform);
+
+  // Set filter's parameters
+  SizeType outputSize;
+  SpacingType outputSpacing;
+  PointType outputOrigin;
+  for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
+    outputSize[i] = mOutputSize[i];
+    outputSpacing[i] = mOutputSpacing[i];
+    outputOrigin[i] = inputImage->GetOrigin()[i];
+  }
+
+  filter->SetSize(outputSize);
+  filter->SetOutputSpacing(outputSpacing);
+  filter->SetOutputOrigin(outputOrigin);
+  filter->SetDefaultPixelValue(static_cast<typename ImageType::PixelType>(mDefaultPixelValue));
+
+  // Select interpolator
+  if (mInterpolatorName == "nn") {
+    typedef itk::VectorNearestNeighborInterpolateImageFunction<ImageType, double> InterpolatorType;     
+    typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+    filter->SetInterpolator(interpolator);
+  }
+  else { 
+    if (mInterpolatorName == "linear") {
+      typedef itk::VectorLinearInterpolateImageFunction<ImageType, double> InterpolatorType;     
+      typename InterpolatorType::Pointer interpolator =  InterpolatorType::New();
+      filter->SetInterpolator(interpolator);
+    }
+    else {
+      std::cerr << "Sorry, I do not know the interpolator (for vector field) '" << mInterpolatorName 
+                << "'. Known interpolators are :  nn, linear" << std::endl;
+      exit(0);
+    }
+  }
+
+  // Build initial Gaussian bluring (if needed)
+  typedef itk::RecursiveGaussianImageFilter<ImageType, ImageType> GaussianFilterType;
+  std::vector<typename GaussianFilterType::Pointer> gaussianFilters;
+  if (mApplyGaussianFilterBefore) {
+    for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
+      // Create filter
+      gaussianFilters.push_back(GaussianFilterType::New());
+      // Set options
+      gaussianFilters[i]->SetDirection(i);
+      gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder);
+      gaussianFilters[i]->SetNormalizeAcrossScale(false);
+      gaussianFilters[i]->SetSigma(mSigma[i]); // in millimeter !
+      // Set input
+      if (i==0) gaussianFilters[i]->SetInput(inputImage);
+      else gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput());
+    }
+    filter->SetInput(gaussianFilters[ImageType::ImageDimension-1]->GetOutput());
+  }
+  else {
+    filter->SetInput(inputImage);
+  }
+
+  // Go !
+  try { 
+    filter->Update();
+  }
+  catch( itk::ExceptionObject & err ) {
+    std::cerr << "Error while filtering " << mInputFilenames[0].c_str() 
+             << " " << err << std::endl;
+    exit(0);
+  }
+
+  // Return result
+  return filter->GetOutput();
   
-  // Determine dim, pixel type, number of components
-  mDim = header->GetNumberOfDimensions();
-  mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());  
-  mNbOfComponents = header->GetNumberOfComponents();
-
-  // Switch by dimension
-  if (mDim == 2) { Update_WithDim<2>(); return; }
-  if (mDim == 3) { Update_WithDim<3>(); return; }
-  if (mDim == 4) { Update_WithDim<4>(); return; }
-
-  std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl;
-  exit(0);
 }
 //--------------------------------------------------------------------
 
+
 //--------------------------------------------------------------------
 void clitk::VFResampleGenericFilter::SetOutputSize(const std::vector<int> & size) {
   mOutputSize.resize(size.size());
index b1c4568dd133d1caebd1a65bf1833cdc31f94ea1..9eac9f1f1abcca00c06a09e34d894cf251c5ef06 100644 (file)
 namespace clitk {
   
   //--------------------------------------------------------------------
-  class VFResampleGenericFilter: public clitk::ImageToImageGenericFilter {
+  class VFResampleGenericFilter: 
+    public clitk::ImageToImageGenericFilter<VFResampleGenericFilter> {
     
   public: 
     // constructor
     VFResampleGenericFilter();
 
     // Types
-    typedef VFResampleGenericFilter    Self;
-    typedef ImageToImageGenericFilter     Superclass;
+    typedef VFResampleGenericFilter       Self;
     typedef itk::SmartPointer<Self>       Pointer;
     typedef itk::SmartPointer<const Self> ConstPointer;
 
@@ -57,9 +57,13 @@ namespace clitk {
     void SetBSplineOrder(int o) { mBSplineOrder = o; }
     void SetBLUTSampling(int b) { mSamplingFactors.resize(1); mSamplingFactors[0] = b; }
 
-    void Update();    
+   //--------------------------------------------------------------------
+    // Main function called each time the filter is updated
+    template<class InputImageType>  
+    void UpdateWithInputImageType();
 
   protected:
+    template<unsigned int Dim> void InitializeImageType();
     //--------------------------------------------------------------------
     std::string mInterpolatorName;
     std::vector<int> mOutputSize;
@@ -72,12 +76,8 @@ namespace clitk {
     std::vector<int> mSamplingFactors;
 
     //--------------------------------------------------------------------
-    template<unsigned int Dim> void Update_WithDim();
-    template<unsigned int Dim, class PixelType> void Update_WithDimAndPixelType();
     template<unsigned int Dim, class PixelType, unsigned int DimCompo> 
     void Update_WithDimAndPixelTypeAndComponent();
-
-    //--------------------------------------------------------------------
     template<class ImageType>
     typename ImageType::Pointer ComputeImage(typename ImageType::Pointer inputImage);
     
index 98f3c0640c62a879d228071dda515cdf7fb2936d..20f330e153ceda0e7acdbc92dfa384767dd56adf 100644 (file)
    ------------------------------------------------=*/
 
 //--------------------------------------------------------------------
-template<unsigned int Dim>
-void VFResampleGenericFilter::Update_WithDim() { 
-#define TRY_TYPE(TYPE)                                                 \
-  if (IsSameType<TYPE>(mPixelTypeName)) { Update_WithDimAndPixelType<Dim, TYPE>(); return; }   
-  TRY_TYPE(float);
-#undef TRY_TYPE
-  std::string list = CreateListOfTypes<float, double>();
-  std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '"
-           << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl;
-  exit(0);
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<unsigned int Dim, class PixelType>
-void VFResampleGenericFilter::Update_WithDimAndPixelType() {
-
-  if (mNbOfComponents == 1) { 
-    std::cerr << "Error, only one components ? Use clitkImageResample instead." << std::endl;
-    exit(0);
-  }
-  if (mNbOfComponents == 2) Update_WithDimAndPixelTypeAndComponent<Dim,PixelType,2>();
-  if (mNbOfComponents == 3) Update_WithDimAndPixelTypeAndComponent<Dim,PixelType,3>();  
-  if (mNbOfComponents == 4) Update_WithDimAndPixelTypeAndComponent<Dim,PixelType,4>();  
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<unsigned int Dim, class PixelType, unsigned int DimCompo>
-void VFResampleGenericFilter::Update_WithDimAndPixelTypeAndComponent() {
-  // Reading input
-  typedef itk::Vector<PixelType, DimCompo> DisplacementType;
-  typedef itk::Image< DisplacementType, Dim > ImageType;
-
-  typename ImageType::Pointer input = clitk::readImage<ImageType>(mInputFilenames, mIOVerbose);
-
-  // Main filter
-  typename ImageType::Pointer outputImage = ComputeImage<ImageType>(input);
-
-  // Write results
-  SetNextOutput<ImageType>(outputImage);
-}
-//--------------------------------------------------------------------
-
-//--------------------------------------------------------------------
-template<class ImageType>
-typename ImageType::Pointer 
-VFResampleGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) {
-
-  // Check options
-  static unsigned int dim = ImageType::ImageDimension;
-  if (mOutputSize.size() != dim) {
-    std::cerr << "Please set size with " << dim << " dimensions." << std::endl;
-    return NULL;
-  }
-  if (mOutputSpacing.size() != dim) {
-    std::cerr << "Please set spacing with " << dim << " dimensions." << std::endl;
-    return NULL;
-  }
-  mOutputOrigin.resize(dim);
-
-  if (mApplyGaussianFilterBefore && mSigma.size() != dim) {
-    std::cerr << "Please set sigma with " << dim << " dimensions." << std::endl;
-    return NULL;
-  }
-
-  // Some typedefs
-  typedef typename ImageType::SizeType SizeType;
-  typedef typename ImageType::SpacingType SpacingType;
-  typedef typename ImageType::PointType PointType;
-
-  // Create Image Filter
-  typedef itk::VectorResampleImageFilter<ImageType,ImageType> FilterType;
-  typename FilterType::Pointer filter = FilterType::New();
-    
-  // Instance of the transform object to be passed to the resample
-  // filter. By default, identity transform is applied
-  typedef itk::AffineTransform<double, ImageType::ImageDimension> TransformType;
-  typename TransformType::Pointer transform =  TransformType::New();
-  filter->SetTransform(transform);
-
-  // Set filter's parameters
-  SizeType outputSize;
-  SpacingType outputSpacing;
-  PointType outputOrigin;
-  for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
-    outputSize[i] = mOutputSize[i];
-    outputSpacing[i] = mOutputSpacing[i];
-    outputOrigin[i] = inputImage->GetOrigin()[i];
-  }
-
-  filter->SetSize(outputSize);
-  filter->SetOutputSpacing(outputSpacing);
-  filter->SetOutputOrigin(outputOrigin);
-  filter->SetDefaultPixelValue(static_cast<typename ImageType::PixelType>(mDefaultPixelValue));
-
-  // Select interpolator
-  if (mInterpolatorName == "nn") {
-    typedef itk::VectorNearestNeighborInterpolateImageFunction<ImageType, double> InterpolatorType;     
-    typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
-    filter->SetInterpolator(interpolator);
-  }
-  else { 
-    if (mInterpolatorName == "linear") {
-      typedef itk::VectorLinearInterpolateImageFunction<ImageType, double> InterpolatorType;     
-      typename InterpolatorType::Pointer interpolator =  InterpolatorType::New();
-      filter->SetInterpolator(interpolator);
-    }
-    else {
-      std::cerr << "Sorry, I do not know the interpolator (for vector field) '" << mInterpolatorName 
-                << "'. Known interpolators are :  nn, linear" << std::endl;
-      exit(0);
-    }
-  }
-
-  // Build initial Gaussian bluring (if needed)
-  typedef itk::RecursiveGaussianImageFilter<ImageType, ImageType> GaussianFilterType;
-  std::vector<typename GaussianFilterType::Pointer> gaussianFilters;
-  if (mApplyGaussianFilterBefore) {
-    for(unsigned int i=0; i<ImageType::ImageDimension; i++) {
-      // Create filter
-      gaussianFilters.push_back(GaussianFilterType::New());
-      // Set options
-      gaussianFilters[i]->SetDirection(i);
-      gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder);
-      gaussianFilters[i]->SetNormalizeAcrossScale(false);
-      gaussianFilters[i]->SetSigma(mSigma[i]); // in millimeter !
-      // Set input
-      if (i==0) gaussianFilters[i]->SetInput(inputImage);
-      else gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput());
-    }
-    filter->SetInput(gaussianFilters[ImageType::ImageDimension-1]->GetOutput());
-  }
-  else {
-    filter->SetInput(inputImage);
-  }
-
-  // Go !
-  try { 
-    filter->Update();
-  }
-  catch( itk::ExceptionObject & err ) {
-    std::cerr << "Error while filtering " << mInputFilenames[0].c_str() 
-             << " " << err << std::endl;
-    exit(0);
-  }
-
-  // Return result
-  return filter->GetOutput();
-  
-}
-//--------------------------------------------------------------------
-
-
 
 #endif /* end #define CLITKVFRESAMPLEGENERICFILTER_TXX */
 
index a1a6f92b1d4fc289be839804e7c25cd5a8da215c..ef6e50da8e5eb6ed75a7e9d7aa447f64d1ba16ab 100644 (file)
@@ -3,6 +3,13 @@
 INCLUDE(${PROJECT_SOURCE_DIR}/cmake/common.cmake)
 #=========================================================
 
+SET(clitkGGO_SRC
+  clitkImageResample_ggo.c
+  clitkBinarizeImage_ggo.c
+  )  
+
+ADD_LIBRARY(clitkGGO STATIC ${clitkGGO_SRC})
+
 ADD_EXECUTABLE(clitkDicomInfo clitkDicomInfo.cxx clitkDicomInfo_ggo.c)
 TARGET_LINK_LIBRARIES(clitkDicomInfo ITKIO clitkCommon) 
 
@@ -76,3 +83,6 @@ ADD_EXECUTABLE(clitkGuerreroVentilation clitkGuerreroVentilation.cxx
 )
 TARGET_LINK_LIBRARIES(clitkGuerreroVentilation clitkCommon ITKIO ITKBasicFilters
 clitkFilters)
+
+ADD_EXECUTABLE(clitkBinarizeImage clitkBinarizeImage.cxx clitkBinarizeImage_ggo.c)
+TARGET_LINK_LIBRARIES(clitkBinarizeImage ITKIO clitkCommon) 
index 3717b6bf462ebf1fe46b57848bdefdc5d76ff665..0ca81d417319a6330197341c7385db2b9f5d045b 100644 (file)
@@ -33,7 +33,7 @@ int main(int argc, char * argv[]) {
   CLITK_INIT;
 
   // Filter
-  typedef clitk::AffineTransformGenericFilter<gengetopt_args_info_clitkAffineTransform> FilterType;
+  typedef clitk::AffineTransformGenericFilter<args_info_clitkAffineTransform> FilterType;
   FilterType::Pointer genericFilter = FilterType::New();
   
   genericFilter->SetArgsInfo(args_info);
index fb50ce3629d2b20960e0e44a75a4e834fbe3149b..14f2d0849d5d94f911121a9c5cb4f7ecf3c19805 100644 (file)
@@ -34,7 +34,7 @@ int main(int argc, char * argv[]) {
   CLITK_INIT;
 
   // Filter
-  typedef clitk::AverageTemporalDimensionGenericFilter<gengetopt_args_info_clitkAverageTemporalDimension> FilterType;
+  typedef clitk::AverageTemporalDimensionGenericFilter<args_info_clitkAverageTemporalDimension> FilterType;
   FilterType::Pointer genericFilter = FilterType::New();
   
   genericFilter->SetArgsInfo(args_info);
index 2360adf9363e82e172c9014916f6ab1b7ef47b28..1f138672cd879322b92f9566e6124f87713ea07b 100644 (file)
@@ -34,7 +34,7 @@ int main(int argc, char * argv[]) {
   CLITK_INIT;
 
   // Filter
-  typedef clitk::InvertVFGenericFilter<gengetopt_args_info_clitkInvertVF> FilterType;
+  typedef clitk::InvertVFGenericFilter<args_info_clitkInvertVF> FilterType;
   FilterType::Pointer genericFilter = FilterType::New();
   
   genericFilter->SetArgsInfo(args_info);
index 266fcf2763e988d1dc949410dbf2f898e3ca094b..50afb619c82f1194bfc23d5af9ae48dbf3835a31 100644 (file)
@@ -50,7 +50,7 @@ namespace clitk
     //----------------------------------------
     // Set & Get
     //----------------------------------------    
-    void SetArgsInfo(const gengetopt_args_info_clitkSetBackground & a)
+    void SetArgsInfo(const args_info_clitkSetBackground & a)
     {
       m_ArgsInfo=a;
       m_Verbose=m_ArgsInfo.verbose_flag;
@@ -82,7 +82,7 @@ namespace clitk
     //----------------------------------------  
     // Data members
     //----------------------------------------
-    gengetopt_args_info_clitkSetBackground m_ArgsInfo;
+    args_info_clitkSetBackground m_ArgsInfo;
     bool m_Verbose;
     std::string m_InputFileName;
 
index f4ec04cbc559ea46f2a68b3a7453b7cf18838c68..912d9ee63e052f50de8c1c76c6411800b082581b 100644 (file)
@@ -16,7 +16,7 @@
 #include "clitkSignalMeanPositionFilter.h"
 
 //---------------------------------------------------------------------
-void clitk::SignalMeanPositionFilter::SetParameters(gengetopt_args_info_clitkSignalMeanPositionTracking & args) {
+void clitk::SignalMeanPositionFilter::SetParameters(args_info_clitkSignalMeanPositionTracking & args) {
   args_info = args;
   mEtaIsSet = false;
   mOutputFilenameIsSet = false;
index 1f7f5d6d678c60695e017f12c68178172a850325..4cbc4f0cf5c36d222b1965b6596f54bf36d8ddbc 100644 (file)
@@ -28,11 +28,11 @@ namespace clitk {
   public:
     typedef itk::Vector<double,2> Vector2d;
 
-    void SetParameters(gengetopt_args_info_clitkSignalMeanPositionTracking & args_info);
+    void SetParameters(args_info_clitkSignalMeanPositionTracking & args_info);
     void Update();
     
   protected:    
-    gengetopt_args_info_clitkSignalMeanPositionTracking args_info;
+    args_info_clitkSignalMeanPositionTracking args_info;
     clitk::Signal mInput;
     clitk::Signal mAugmentedInputX;
     clitk::Signal mAugmentedInputY;
index 90a3665945a20d4dc1ef27a9d510bb97d144a1e8..c6a30dc648500a96066ffc46f4eeabdded7311c7 100644 (file)
@@ -54,7 +54,7 @@ namespace clitk
     //----------------------------------------
     // Set & Get
     //----------------------------------------    
-    void SetArgsInfo(const gengetopt_args_info_clitkWarpImage & a)
+    void SetArgsInfo(const args_info_clitkWarpImage & a)
     {
       m_ArgsInfo=a;
       m_Verbose=m_ArgsInfo.verbose_flag;
@@ -86,7 +86,7 @@ namespace clitk
     //----------------------------------------  
     // Data members
     //----------------------------------------
-    gengetopt_args_info_clitkWarpImage m_ArgsInfo;
+    args_info_clitkWarpImage m_ArgsInfo;
     bool m_Verbose;
     std::string m_InputFileName;
 
index 6b33824a9f209c1b94c3b2e43ec9657d7bd6d200..425368d65745ef97b234d33b7b2c117e3569b6f2 100644 (file)
@@ -78,7 +78,7 @@ namespace clitk
     typename DeformationFieldType::Pointer deformationField =deformationFieldReader->GetOutput();
 
     // Intensity interpolator
-    typedef clitk::GenericVectorInterpolator<gengetopt_args_info_clitkWarpImage, DeformationFieldType, double> GenericInterpolatorType;
+    typedef clitk::GenericVectorInterpolator<args_info_clitkWarpImage, DeformationFieldType, double> GenericInterpolatorType;
     typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New();
     genericInterpolator->SetArgsInfo(m_ArgsInfo);
     
@@ -94,7 +94,7 @@ namespace clitk
          newSize[i]=(unsigned int) (input->GetLargestPossibleRegion().GetSize()[i]*input->GetSpacing()[i]/deformationField->GetSpacing()[i]);
        
        // Get the interpolator
-       typedef clitk::GenericVectorInterpolator<gengetopt_args_info_clitkWarpImage, DeformationFieldType, double> GenericInterpolatorType;
+       typedef clitk::GenericVectorInterpolator<args_info_clitkWarpImage, DeformationFieldType, double> GenericInterpolatorType;
        typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New();
        genericInterpolator->SetArgsInfo(m_ArgsInfo);
        
@@ -174,7 +174,7 @@ namespace clitk
     else
       {
        // Get the interpolator
-       typedef clitk::GenericInterpolator<gengetopt_args_info_clitkWarpImage, InputImageType, double> GenericInterpolatorType;
+       typedef clitk::GenericInterpolator<args_info_clitkWarpImage, InputImageType, double> GenericInterpolatorType;
        typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New();
        genericInterpolator->SetArgsInfo(m_ArgsInfo);
 
index 840c74e0686679fd2be90ab86d54f8dff8e7865f..0b74591652ec26edb923c2557089dc95bd2c1700 100644 (file)
@@ -34,7 +34,7 @@ int main(int argc, char * argv[]) {
   CLITK_INIT;
 
   // Filter
-  typedef clitk::WriteDicomSeriesGenericFilter<gengetopt_args_info_clitkWriteDicomSeries> FilterType;
+  typedef clitk::WriteDicomSeriesGenericFilter<args_info_clitkWriteDicomSeries> FilterType;
   FilterType::Pointer genericFilter = FilterType::New();
   
   genericFilter->SetArgsInfo(args_info);