]> Creatis software - clitk.git/commitdiff
script to easily create new clitk tools. Does not do vv tools yet
authorschaerer <schaerer>
Fri, 9 Apr 2010 13:32:20 +0000 (13:32 +0000)
committerschaerer <schaerer>
Fri, 9 Apr 2010 13:32:20 +0000 (13:32 +0000)
CMakeLists.txt
filters/CMakeLists.txt
filters/clitkBinarizeImage.ggo
filters/clitkFooImage.ggo [new file with mode: 0644]
filters/clitkFooImageGenericFilter.h [new file with mode: 0644]
filters/clitkFooImageGenericFilter.txx [new file with mode: 0644]
make_new_tool.sh [new file with mode: 0755]
tools/clitkFooImage.cxx [new file with mode: 0644]
vv/CMakeLists.txt

index e34db9b690a55e29719a55d79daed0a8ddf7dc72..9baa7e18a5ca6094b411339ba28500211fd1a077 100644 (file)
@@ -24,6 +24,7 @@ ELSE(ITK_FOUND)
   MESSAGE(FATAL_ERROR
           "Cannot build without ITK.  Please set ITK_DIR.")
 ENDIF(ITK_FOUND)
+
 #=========================================================
 IF(CLITK_BUILD_VV)
     FIND_PACKAGE(VTK)
index 0a372c149244316c835ebe8800a1b1f695ee2559..97debe2088fb8d8250e151240c6248605d87c1b4 100644 (file)
@@ -15,7 +15,8 @@ SET(clitkFilters_SRC
   clitkVFResampleGenericFilter.cxx
   clitkBinarizeImageGenericFilter.cxx
   clitkBinarizeImage_ggo.c
- clitkMedianImageGenericFilter.cxx
+  clitkFooImage_ggo.c
+  clitkMedianImageGenericFilter.cxx
   )  
 
 ADD_LIBRARY(clitkFilters STATIC ${clitkFilters_SRC})
index 9f655b660360837b73df2b421b388fe5d7bb9ec8..ab7706fa561546df3f4c4669a076931803b74e71 100644 (file)
@@ -15,5 +15,5 @@ option "upper"        u       "Upper intensity (default=max), fg is lower than this va
 
 option "fg"                    -       "Foreground (FG) or 'inside' value"               double        no      default="1"
 option "bg"                    -       "Background (BG) or 'ouside' value"               double        no      default="0"
-option "mode"          -       "Use FG and/or BG values (if FG, the BG is replaced by the input image values)" values="FG","BG","both"  default="both" no
+option "mode"          -       "Use FG and/or BG values (if FG, the BG is replaced by the input image values)" values="FG","BG","both"  default="both" required
 
diff --git a/filters/clitkFooImage.ggo b/filters/clitkFooImage.ggo
new file mode 100644 (file)
index 0000000..01167b1
--- /dev/null
@@ -0,0 +1,19 @@
+#File clitkFooImage.ggo
+package "clitkFooImage"
+version "1.0"
+purpose ""
+
+option "config"                -       "Config file"                     string        no
+option "verbose"       v       "Verbose"                         flag          off
+
+option "imagetypes"    -       "Display allowed image types"     flag          off
+
+option "input"         i       "Input image filename"            string        yes
+option "output"        o       "Output image filename"           string        yes
+option "lower"         l       "Lower intensity (default=min), fg is greater than this value"    double        no
+option "upper"         u       "Upper intensity (default=max), fg is lower than this value"      double        no
+
+option "fg"                    -       "Foreground (FG) or 'inside' value"               double        no      default="1"
+        option "bg"                    -       "Background (BG) or 'ouside' value"               double        no      default="0"
+                    option "mode"              -       "Use FG and/or BG values (if FG, the BG is replaced by the input image values)" values="FG","BG","both"  default="both" no
+
diff --git a/filters/clitkFooImageGenericFilter.h b/filters/clitkFooImageGenericFilter.h
new file mode 100644 (file)
index 0000000..7f2078d
--- /dev/null
@@ -0,0 +1,69 @@
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
+
+  Authors belong to:
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
+
+  This software is distributed WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+  PURPOSE.  See the copyright notices for more information.
+
+  It is distributed under dual licence
+
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+======================================================================-====*/
+#ifndef CLITKFooIMAGEGENERICFILTER_H
+#define CLITKFooIMAGEGENERICFILTER_H
+#include "clitkIO.h"
+#include "clitkImageToImageGenericFilter.h"
+
+//--------------------------------------------------------------------
+namespace clitk
+{
+
+template<class args_info_type>
+class ITK_EXPORT FooImageGenericFilter:
+        public ImageToImageGenericFilter<FooImageGenericFilter<args_info_type> >
+{
+
+public:
+
+    //--------------------------------------------------------------------
+    FooImageGenericFilter();
+
+    //--------------------------------------------------------------------
+    typedef FooImageGenericFilter         Self;
+    typedef itk::SmartPointer<Self>            Pointer;
+    typedef itk::SmartPointer<const Self>      ConstPointer;
+
+    //--------------------------------------------------------------------
+    // Method for creation through the object factory
+    // and Run-time type information (and related methods)
+    itkNewMacro(Self);
+    itkTypeMacro(FooImageGenericFilter, LightObject);
+
+    //--------------------------------------------------------------------
+    void SetArgsInfo(const args_info_type & a);
+
+    //--------------------------------------------------------------------
+    // Main function called each time the filter is updated
+    template<class InputImageType>
+    void UpdateWithInputImageType();
+
+protected:
+    template<unsigned int Dim> void InitializeImageType();
+    args_info_type mArgsInfo;
+
+}; // end class
+//--------------------------------------------------------------------
+
+} // end namespace clitk
+
+#ifndef ITK_MANUAL_INSTANTIATION
+#include "clitkFooImageGenericFilter.txx"
+#endif
+
+#endif // #define clitkFooImageGenericFilter_h
diff --git a/filters/clitkFooImageGenericFilter.txx b/filters/clitkFooImageGenericFilter.txx
new file mode 100644 (file)
index 0000000..1190531
--- /dev/null
@@ -0,0 +1,145 @@
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
+
+  Authors belong to:
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
+
+  This software is distributed WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+  PURPOSE.  See the copyright notices for more information.
+
+  It is distributed under dual licence
+
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+======================================================================-====*/
+#ifndef clitkFooImageGenericFilter_txx
+#define clitkFooImageGenericFilter_txx
+
+/* =================================================
+ * @file   clitkFooImageGenericFilter.txx
+ * @author Jef Vandemeulebroucke <jef@creatis.insa-lyon.fr>
+ * @date   29 june 2009
+ *
+ * @brief
+ *
+ ===================================================*/
+
+// itk include
+#include "itkBinaryThresholdImageFilter.h"
+#include "itkMaskImageFilter.h"
+#include "itkMaskNegatedImageFilter.h"
+#include <clitkCommon.h>
+#include <tiff.h>
+
+namespace clitk
+{
+
+//--------------------------------------------------------------------
+template<class args_info_type>
+FooImageGenericFilter<args_info_type>::FooImageGenericFilter():
+        ImageToImageGenericFilter<Self>("FooImage") {
+    InitializeImageType<2>();
+    InitializeImageType<3>();
+    InitializeImageType<4>();
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class args_info_type>
+template<unsigned int Dim>
+void FooImageGenericFilter<args_info_type>::InitializeImageType() {
+    ADD_IMAGE_TYPE(Dim, char);
+    ADD_IMAGE_TYPE(Dim, uchar);
+    ADD_IMAGE_TYPE(Dim, short);
+    ADD_IMAGE_TYPE(Dim, ushort);
+    ADD_IMAGE_TYPE(Dim, int);
+    ADD_IMAGE_TYPE(Dim, uint16);
+    ADD_IMAGE_TYPE(Dim, float);
+    ADD_IMAGE_TYPE(Dim, double);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class args_info_type>
+void FooImageGenericFilter<args_info_type>::SetArgsInfo(const args_info_type & a) {
+    mArgsInfo=a;
+    SetIOVerbose(mArgsInfo.verbose_flag);
+    if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
+
+    if (mArgsInfo.input_given) {
+        SetInputFilename(mArgsInfo.input_arg);
+    }
+    if (mArgsInfo.output_given) {
+        SetOutputFilename(mArgsInfo.output_arg);
+    }
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+// Update with the number of dimensions and the pixeltype
+//--------------------------------------------------------------------
+template<class args_info_type>
+template<class InputImageType>
+void
+FooImageGenericFilter<args_info_type>::UpdateWithInputImageType()
+{
+
+    // Reading input
+    typename InputImageType::Pointer input = this->template GetInput<InputImageType>(0);
+
+    // Main filter
+    typedef typename InputImageType::PixelType PixelType;
+    typedef itk::Image<char, InputImageType::ImageDimension> OutputImageType;
+
+    // Filter
+    typedef itk::BinaryThresholdImageFilter<InputImageType, OutputImageType> BinaryThresholdImageFilterType;
+    typename BinaryThresholdImageFilterType::Pointer thresholdFilter=BinaryThresholdImageFilterType::New();
+    thresholdFilter->SetInput(input);
+    thresholdFilter->SetInsideValue(mArgsInfo.fg_arg);
+
+    if (mArgsInfo.lower_given) thresholdFilter->SetLowerThreshold(static_cast<PixelType>(mArgsInfo.lower_arg));
+    if (mArgsInfo.upper_given) thresholdFilter->SetUpperThreshold(static_cast<PixelType>(mArgsInfo.upper_arg));
+
+    if (mArgsInfo.mode_arg == std::string("both")) {
+        thresholdFilter->SetOutsideValue(mArgsInfo.bg_arg);
+        thresholdFilter->Update();
+
+        typename OutputImageType::Pointer outputImage = thresholdFilter->GetOutput();
+        this->template SetNextOutput<OutputImageType>(outputImage);
+    }
+    else {
+        typename InputImageType::Pointer outputImage;
+        thresholdFilter->SetOutsideValue(0);
+        if (mArgsInfo.mode_arg == std::string("BG")) {
+            typedef itk::MaskImageFilter<InputImageType,OutputImageType> maskFilterType;
+            typename maskFilterType::Pointer maskFilter = maskFilterType::New();
+            maskFilter->SetInput1(input);
+            maskFilter->SetInput2(thresholdFilter->GetOutput());
+            maskFilter->SetOutsideValue(mArgsInfo.bg_arg);
+            maskFilter->Update();
+            outputImage = maskFilter->GetOutput();
+        }
+        else {
+            typedef itk::MaskNegatedImageFilter<InputImageType,OutputImageType> maskFilterType;
+            typename maskFilterType::Pointer maskFilter = maskFilterType::New();
+            maskFilter->SetInput1(input);
+            maskFilter->SetInput2(thresholdFilter->GetOutput());
+            maskFilter->SetOutsideValue(mArgsInfo.fg_arg);
+            maskFilter->Update();
+            outputImage = maskFilter->GetOutput();
+        }
+        // Write/Save results
+        this->template SetNextOutput<InputImageType>(outputImage);
+    }
+}
+//--------------------------------------------------------------------
+
+
+}//end clitk
+
+#endif //#define clitkFooImageGenericFilter_txx
diff --git a/make_new_tool.sh b/make_new_tool.sh
new file mode 100755 (executable)
index 0000000..950df79
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+if [ $# -ne 1 ]
+then
+  echo "Usage: `basename $0` ToolName"
+  exit 1
+fi
+
+find filters tools -name "clitkFooImage*" |
+while read i
+do
+    cp $i ${i/FooImage/$1}
+    sed -i "s/FooImage/$1/ig" ${i/FooImage/$1}
+done
+echo "Done!"
+echo "Don't forget to add your new tool to the various CMakeLists.txt files."
diff --git a/tools/clitkFooImage.cxx b/tools/clitkFooImage.cxx
new file mode 100644 (file)
index 0000000..9cca95b
--- /dev/null
@@ -0,0 +1,49 @@
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
+
+  Authors belong to:
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
+
+  This software is distributed WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+  PURPOSE.  See the copyright notices for more information.
+
+  It is distributed under dual licence
+
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+======================================================================-====*/
+
+/* =================================================
+ * @file   clitkFooImageGenericFilter.txx
+ * @author xxx <xxx@creatis.insa-lyon.fr>
+ * @date   29 June 2029
+ *
+ * @brief FooImage an image
+ *
+ ===================================================*/
+
+// clitk
+#include "clitkFooImage_ggo.h"
+#include "clitkFooImageGenericFilter.h"
+
+//--------------------------------------------------------------------
+int main(int argc, char * argv[]) {
+
+    // Init command line
+    GGO(clitkFooImage, args_info);
+    CLITK_INIT;
+
+    // Filter
+    typedef clitk::FooImageGenericFilter<args_info_clitkFooImage> FilterType;
+    FilterType::Pointer filter = FilterType::New();
+
+    filter->SetArgsInfo(args_info);
+    filter->Update();
+
+    return EXIT_SUCCESS;
+}// end main
+
+//--------------------------------------------------------------------
index d74b2bbf44368236c019af964bf3eb6c2b60a475..723c0032a92155d5e7c7feed0fc8f84be916b0f1 100644 (file)
@@ -43,7 +43,6 @@ LINK_LIBRARIES (
   #ITKIO
   clitkCommon
   clitkDicomRTStruct
-  #clitkGGO
   clitkFilters
   ${QT_QTCORE_LIBRARY}
   ${QT_QTGUI_LIBRARY}