From: schaerer Date: Fri, 9 Apr 2010 13:32:20 +0000 (+0000) Subject: script to easily create new clitk tools. Does not do vv tools yet X-Git-Tag: v1.2.0~726 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=2dad4a649b5e61f450b47047f379fcc351b50215;p=clitk.git script to easily create new clitk tools. Does not do vv tools yet --- diff --git a/CMakeLists.txt b/CMakeLists.txt index e34db9b..9baa7e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/filters/CMakeLists.txt b/filters/CMakeLists.txt index 0a372c1..97debe2 100644 --- a/filters/CMakeLists.txt +++ b/filters/CMakeLists.txt @@ -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}) diff --git a/filters/clitkBinarizeImage.ggo b/filters/clitkBinarizeImage.ggo index 9f655b6..ab7706f 100644 --- a/filters/clitkBinarizeImage.ggo +++ b/filters/clitkBinarizeImage.ggo @@ -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 index 0000000..01167b1 --- /dev/null +++ b/filters/clitkFooImage.ggo @@ -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 index 0000000..7f2078d --- /dev/null +++ b/filters/clitkFooImageGenericFilter.h @@ -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 ITK_EXPORT FooImageGenericFilter: + public ImageToImageGenericFilter > +{ + +public: + + //-------------------------------------------------------------------- + FooImageGenericFilter(); + + //-------------------------------------------------------------------- + typedef FooImageGenericFilter Self; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer 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 + void UpdateWithInputImageType(); + +protected: + template 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 index 0000000..1190531 --- /dev/null +++ b/filters/clitkFooImageGenericFilter.txx @@ -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 + * @date 29 june 2009 + * + * @brief + * + ===================================================*/ + +// itk include +#include "itkBinaryThresholdImageFilter.h" +#include "itkMaskImageFilter.h" +#include "itkMaskNegatedImageFilter.h" +#include +#include + +namespace clitk +{ + +//-------------------------------------------------------------------- +template +FooImageGenericFilter::FooImageGenericFilter(): + ImageToImageGenericFilter("FooImage") { + InitializeImageType<2>(); + InitializeImageType<3>(); + InitializeImageType<4>(); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +template +void FooImageGenericFilter::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 +void FooImageGenericFilter::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 +template +void +FooImageGenericFilter::UpdateWithInputImageType() +{ + + // Reading input + typename InputImageType::Pointer input = this->template GetInput(0); + + // Main filter + typedef typename InputImageType::PixelType PixelType; + typedef itk::Image OutputImageType; + + // Filter + typedef itk::BinaryThresholdImageFilter BinaryThresholdImageFilterType; + typename BinaryThresholdImageFilterType::Pointer thresholdFilter=BinaryThresholdImageFilterType::New(); + thresholdFilter->SetInput(input); + thresholdFilter->SetInsideValue(mArgsInfo.fg_arg); + + if (mArgsInfo.lower_given) thresholdFilter->SetLowerThreshold(static_cast(mArgsInfo.lower_arg)); + if (mArgsInfo.upper_given) thresholdFilter->SetUpperThreshold(static_cast(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(outputImage); + } + else { + typename InputImageType::Pointer outputImage; + thresholdFilter->SetOutsideValue(0); + if (mArgsInfo.mode_arg == std::string("BG")) { + typedef itk::MaskImageFilter 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 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(outputImage); + } +} +//-------------------------------------------------------------------- + + +}//end clitk + +#endif //#define clitkFooImageGenericFilter_txx diff --git a/make_new_tool.sh b/make_new_tool.sh new file mode 100755 index 0000000..950df79 --- /dev/null +++ b/make_new_tool.sh @@ -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 index 0000000..9cca95b --- /dev/null +++ b/tools/clitkFooImage.cxx @@ -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 + * @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 FilterType; + FilterType::Pointer filter = FilterType::New(); + + filter->SetArgsInfo(args_info); + filter->Update(); + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/vv/CMakeLists.txt b/vv/CMakeLists.txt index d74b2bb..723c003 100644 --- a/vv/CMakeLists.txt +++ b/vv/CMakeLists.txt @@ -43,7 +43,6 @@ LINK_LIBRARIES ( #ITKIO clitkCommon clitkDicomRTStruct - #clitkGGO clitkFilters ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}