X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=filters%2FclitkBinarizeImageGenericFilter.txx;h=206b1431380bf14a54f1c4cbf30e4dba093b6bfe;hb=942f4fcf5d6d3d813e9da546331f599f61dee0ac;hp=a41f33a0b4609a586b6390acad6663f45aa8c41f;hpb=afcbf01318be57b49920decb248779d3f7a740c4;p=clitk.git diff --git a/filters/clitkBinarizeImageGenericFilter.txx b/filters/clitkBinarizeImageGenericFilter.txx index a41f33a..206b143 100644 --- a/filters/clitkBinarizeImageGenericFilter.txx +++ b/filters/clitkBinarizeImageGenericFilter.txx @@ -10,6 +10,11 @@ * ===================================================*/ +// itk include +#include "itkBinaryThresholdImageFilter.h" +#include "itkMaskImageFilter.h" +#include "itkMaskNegatedImageFilter.h" + namespace clitk { @@ -31,7 +36,7 @@ namespace clitk ADD_IMAGE_TYPE(Dim, char); ADD_IMAGE_TYPE(Dim, short); ADD_IMAGE_TYPE(Dim, int); - ADD_IMAGE_TYPE(Dim, float); + //ADD_IMAGE_TYPE(Dim, float); } //-------------------------------------------------------------------- @@ -64,36 +69,87 @@ namespace clitk // Reading input typename InputImageType::Pointer input = this->template GetInput(0); - + // Main filter typedef typename InputImageType::PixelType PixelType; - typedef itk::Image OutputImageType; + typedef itk::Image OutputImageType; // Filter typedef itk::BinaryThresholdImageFilter BinaryThresholdImageFilterType; typename BinaryThresholdImageFilterType::Pointer thresholdFilter=BinaryThresholdImageFilterType::New(); thresholdFilter->SetInput(input); - if(mArgsInfo.lower_given) thresholdFilter->SetLowerThreshold(static_cast(mArgsInfo.lower_arg)); - if(mArgsInfo.upper_given) thresholdFilter->SetUpperThreshold(static_cast(mArgsInfo.upper_arg)); + 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.inside_arg); - DD(mArgsInfo.outside_arg); - DD(mArgsInfo.inside_given); - DD(mArgsInfo.outside_given); - - thresholdFilter->SetInsideValue(mArgsInfo.inside_arg); - thresholdFilter->SetOutsideValue(mArgsInfo.outside_arg); - - thresholdFilter->Update(); - - // Write/Save results - typename OutputImageType::Pointer outputImage = thresholdFilter->GetOutput(); - this->template SetNextOutput(outputImage); + DD(mArgsInfo.fg_arg); + DD(mArgsInfo.bg_arg); + DD(mArgsInfo.fg_given); + DD(mArgsInfo.bg_given); + DD(mArgsInfo.mode_arg); + +// <<<<<<< clitkBinarizeImageGenericFilter.txx +// 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); + } } //--------------------------------------------------------------------