From 870c69d4433f861755085ce2e398032223768a94 Mon Sep 17 00:00:00 2001 From: schaerer Date: Wed, 28 Jul 2010 14:02:37 +0000 Subject: [PATCH] clean binarize up in order to use it as a template --- tools/CMakeLists.txt | 5 + tools/clitkBinarizeImage.cxx | 2 +- tools/clitkBinarizeImageGenericFilter.cxx | 110 ++++++++++++++ tools/clitkBinarizeImageGenericFilter.h | 11 +- tools/clitkBinarizeImageGenericFilter.txx | 168 ---------------------- vv/CMakeLists.txt | 1 + vv/vvToolBinarize.cxx | 6 +- 7 files changed, 123 insertions(+), 180 deletions(-) delete mode 100644 tools/clitkBinarizeImageGenericFilter.txx diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index c2ecc4a..7d5d5e0 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -14,6 +14,7 @@ ADD_LIBRARY(clitkToolsGgoLib ${GGO_C_FILES}) #with long compilation times that are used by vv ADD_LIBRARY(clitkImageConvertLib clitkImageConvertGenericFilter.cxx) ADD_LIBRARY(clitkImageResampleLib clitkImageResampleGenericFilter.cxx) +ADD_LIBRARY(clitkBinarizeImageLib clitkBinarizeImageGenericFilter.cxx) IF (CLITK_BUILD_TOOLS) WRAP_GGO(clitkDicomInfo_GGO_C clitkDicomInfo.ggo) @@ -27,6 +28,10 @@ IF (CLITK_BUILD_TOOLS) ADD_EXECUTABLE(clitkImageConvert clitkImageConvert.cxx ${clitkImageConvert_GGO_C}) TARGET_LINK_LIBRARIES(clitkImageConvert clitkImageConvertLib clitkCommon ITKIO) + ADD_EXECUTABLE(clitkBinarizeImage clitkBinarizeImage.cxx + ${clitkBinarizeImage_GGO_C}) + TARGET_LINK_LIBRARIES(clitkBinarizeImage clitkBinarizeImageLib clitkCommon ITKIO) + # ADD_EXECUTABLE(clitkImageResample clitkImageResample.cxx # ${clitkImageResample_GGO_C}) # TARGET_LINK_LIBRARIES(clitkImageResample clitkImageResampleLib clitkCommon ITKIO ) diff --git a/tools/clitkBinarizeImage.cxx b/tools/clitkBinarizeImage.cxx index 7019c6c..2f1cdee 100644 --- a/tools/clitkBinarizeImage.cxx +++ b/tools/clitkBinarizeImage.cxx @@ -29,7 +29,7 @@ int main(int argc, char * argv[]) CLITK_INIT; // Filter - typedef clitk::BinarizeImageGenericFilter FilterType; + typedef clitk::BinarizeImageGenericFilter FilterType; FilterType::Pointer filter = FilterType::New(); filter->SetArgsInfo(args_info); diff --git a/tools/clitkBinarizeImageGenericFilter.cxx b/tools/clitkBinarizeImageGenericFilter.cxx index 6e5a5f4..26b08a0 100644 --- a/tools/clitkBinarizeImageGenericFilter.cxx +++ b/tools/clitkBinarizeImageGenericFilter.cxx @@ -29,4 +29,114 @@ #include "clitkBinarizeImageGenericFilter.h" +// itk include +#include "itkBinaryThresholdImageFilter.h" +#include "itkMaskImageFilter.h" +#include "itkMaskNegatedImageFilter.h" + +#include + +namespace clitk +{ + +//-------------------------------------------------------------------- +BinarizeImageGenericFilter::BinarizeImageGenericFilter(): + ImageToImageGenericFilter("Binarize") +{ + InitializeImageType<2>(); + InitializeImageType<3>(); + InitializeImageType<4>(); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void BinarizeImageGenericFilter::InitializeImageType() +{ + ADD_DEFAULT_IMAGE_TYPES(Dim); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +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 +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)); + + /* 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(); + 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_cxx diff --git a/tools/clitkBinarizeImageGenericFilter.h b/tools/clitkBinarizeImageGenericFilter.h index 7f6ba4c..2ed800a 100644 --- a/tools/clitkBinarizeImageGenericFilter.h +++ b/tools/clitkBinarizeImageGenericFilter.h @@ -21,14 +21,14 @@ #include "clitkIO.h" #include "clitkImageToImageGenericFilter.h" +#include "clitkBinarizeImage_ggo.h" //-------------------------------------------------------------------- namespace clitk { - template class ITK_EXPORT BinarizeImageGenericFilter: - public ImageToImageGenericFilter > + public ImageToImageGenericFilter { public: @@ -40,6 +40,7 @@ namespace clitk typedef BinarizeImageGenericFilter Self; typedef itk::SmartPointer Pointer; typedef itk::SmartPointer ConstPointer; + typedef args_info_clitkBinarizeImage args_info_type; //-------------------------------------------------------------------- // Method for creation through the object factory @@ -65,10 +66,4 @@ namespace clitk } // end namespace clitk //-------------------------------------------------------------------- -//-------------------------------------------------------------------- -#ifndef ITK_MANUAL_INSTANTIATION -#include "clitkBinarizeImageGenericFilter.txx" -#endif -//-------------------------------------------------------------------- - #endif // #define clitkBinarizeImageGenericFilter_h diff --git a/tools/clitkBinarizeImageGenericFilter.txx b/tools/clitkBinarizeImageGenericFilter.txx deleted file mode 100644 index 61a4277..0000000 --- a/tools/clitkBinarizeImageGenericFilter.txx +++ /dev/null @@ -1,168 +0,0 @@ -/*========================================================================= - 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 diff --git a/vv/CMakeLists.txt b/vv/CMakeLists.txt index baa4ccc..5404a75 100644 --- a/vv/CMakeLists.txt +++ b/vv/CMakeLists.txt @@ -216,6 +216,7 @@ TARGET_LINK_LIBRARIES(vv clitkDicomRTStruct #Libs for generic filters with long compilation times clitkImageConvertLib clitkImageResampleLib +clitkBinarizeImageLib #Libs for _ggo.c files clitkSegmentationGgoLib clitkToolsGgoLib clitkRegistrationGgoLib diff --git a/vv/vvToolBinarize.cxx b/vv/vvToolBinarize.cxx index abadb44..0e584d1 100644 --- a/vv/vvToolBinarize.cxx +++ b/vv/vvToolBinarize.cxx @@ -73,7 +73,7 @@ vvToolBinarize::vvToolBinarize(vvMainWindowBase * parent, Qt::WindowFlags f) mBGSlider->SetText("Background value"); // Main filter - mFilter = new clitk::BinarizeImageGenericFilter; + mFilter = new clitk::BinarizeImageGenericFilter; // Set how many inputs are needed for this tool AddInputSelector("Select one image", mFilter); @@ -322,8 +322,8 @@ void vvToolBinarize::apply() GetArgsInfoFromGUI(); // Main filter - clitk::BinarizeImageGenericFilter::Pointer filter = - clitk::BinarizeImageGenericFilter::New(); + clitk::BinarizeImageGenericFilter::Pointer filter = + clitk::BinarizeImageGenericFilter::New(); filter->SetInputVVImage(mCurrentImage); filter->SetArgsInfo(mArgsInfo); filter->EnableReadOnDisk(false); -- 2.47.1