From 37e776c542cdf3a57ca89528eff3e3d2f7b484c1 Mon Sep 17 00:00:00 2001 From: dsarrut Date: Fri, 23 Jul 2010 15:17:17 +0000 Subject: [PATCH] add --- filters/clitkBinarizeImage.ggo | 18 +++ filters/clitkBinarizeImageGenericFilter.cxx | 32 ++++ filters/clitkBinarizeImageGenericFilter.h | 74 +++++++++ filters/clitkBinarizeImageGenericFilter.txx | 168 ++++++++++++++++++++ 4 files changed, 292 insertions(+) create mode 100644 filters/clitkBinarizeImage.ggo create mode 100644 filters/clitkBinarizeImageGenericFilter.cxx create mode 100644 filters/clitkBinarizeImageGenericFilter.h create mode 100644 filters/clitkBinarizeImageGenericFilter.txx diff --git a/filters/clitkBinarizeImage.ggo b/filters/clitkBinarizeImage.ggo new file mode 100644 index 0000000..6f99548 --- /dev/null +++ b/filters/clitkBinarizeImage.ggo @@ -0,0 +1,18 @@ +#File clitkBinarizeImage.ggo +package "clitkBinarizeImage" +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" required + diff --git a/filters/clitkBinarizeImageGenericFilter.cxx b/filters/clitkBinarizeImageGenericFilter.cxx new file mode 100644 index 0000000..6e5a5f4 --- /dev/null +++ b/filters/clitkBinarizeImageGenericFilter.cxx @@ -0,0 +1,32 @@ +/*========================================================================= + 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 clitkBinarizeImageGenericFilter_cxx +#define clitkBinarizeImageGenericFilter_cxx + +/* ================================================= + * @file clitkBinarizeImageGenericFilter.cxx + * @author Jef Vandemeulebroucke + * @date 29 june 2009 + * + * @brief + * + ===================================================*/ + +#include "clitkBinarizeImageGenericFilter.h" + +#endif //#define clitkBinarizeImageGenericFilter_cxx diff --git a/filters/clitkBinarizeImageGenericFilter.h b/filters/clitkBinarizeImageGenericFilter.h new file mode 100644 index 0000000..7f6ba4c --- /dev/null +++ b/filters/clitkBinarizeImageGenericFilter.h @@ -0,0 +1,74 @@ +/*========================================================================= + 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 CLITKBINARIZEIMAGEGENERICFILTER_H +#define CLITKBINARIZEIMAGEGENERICFILTER_H + +#include "clitkIO.h" +#include "clitkImageToImageGenericFilter.h" + +//-------------------------------------------------------------------- +namespace clitk +{ + + template + class ITK_EXPORT BinarizeImageGenericFilter: + public ImageToImageGenericFilter > + { + + public: + + //-------------------------------------------------------------------- + BinarizeImageGenericFilter(); + + //-------------------------------------------------------------------- + typedef BinarizeImageGenericFilter 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(BinarizeImageGenericFilter, 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 "clitkBinarizeImageGenericFilter.txx" +#endif +//-------------------------------------------------------------------- + +#endif // #define clitkBinarizeImageGenericFilter_h diff --git a/filters/clitkBinarizeImageGenericFilter.txx b/filters/clitkBinarizeImageGenericFilter.txx new file mode 100644 index 0000000..61a4277 --- /dev/null +++ b/filters/clitkBinarizeImageGenericFilter.txx @@ -0,0 +1,168 @@ +/*========================================================================= + 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 CLITKBINARIZEIMAGEGENERICFILTER_TXX +#define CLITKBINARIZEIMAGEGENERICFILTER_TXX + +// itk include +#include "itkBinaryThresholdImageFilter.h" +#include "itkMaskImageFilter.h" +#include "itkMaskNegatedImageFilter.h" + +#include +// #include + +namespace clitk +{ + +//-------------------------------------------------------------------- +template +BinarizeImageGenericFilter::BinarizeImageGenericFilter(): + ImageToImageGenericFilter("Binarize") +{ + InitializeImageType<2>(); + InitializeImageType<3>(); + InitializeImageType<4>(); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +template +void BinarizeImageGenericFilter::InitializeImageType() +{ + ADD_DEFAULT_IMAGE_TYPES(Dim); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void BinarizeImageGenericFilter::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 +BinarizeImageGenericFilter::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)); + + // DD(mArgsInfo.lower_given); + // DD(mArgsInfo.upper_given); + // DD(mArgsInfo.lower_arg); + // DD(mArgsInfo.upper_arg); + // DD(mArgsInfo.fg_arg); + // DD(mArgsInfo.bg_arg); + // DD(mArgsInfo.fg_given); + // DD(mArgsInfo.bg_given); + // DD(mArgsInfo.mode_arg); + +// DD(mArgsInfo.useFG_flag); +// DD(mArgsInfo.useBG_flag); + +// thresholdFilter->SetInsideValue(mArgsInfo.fg_arg); + +// // Keep BG value to 0 if maskFilterType is used after +// if (mArgsInfo.useBG_flag && mArgsInfo.useFG_flag) { +// thresholdFilter->SetOutsideValue(mArgsInfo.bg_arg); +// } +// else { +// DD("0"); +// thresholdFilter->SetOutsideValue(0); +// } + +// // thresholdFilter->Update(); + +// // If no BG or no FG : new image, copy input with MaskImageFilter +// // If setFG -> FG BG have been changed +// if (mArgsInfo.useBG_flag && mArgsInfo.useFG_flag) { +// ======= + /* Three modes : + - FG -> only use FG value for pixel in the Foreground (or Inside), keep input values for outside + - BG -> only use BG value for pixel in the Background (or Outside), keep input values for inside + - both -> use FG and BG (real binary image) + */ + if (mArgsInfo.mode_arg == std::string("both")) { + thresholdFilter->SetOutsideValue(mArgsInfo.bg_arg); + thresholdFilter->Update(); + //>>>>>>> 1.5 + 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 clitkBinarizeImageGenericFilter_txx -- 2.47.1