X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=filters%2FclitkBinarizeImageGenericFilter.txx;h=a35a7304c802c4e5e63b2e6418af4a74afdbcf5f;hb=32def8dc2a3a571a7e34ac76355800c9e69c4f6a;hp=6d8d4e7b7d0e5622d3fbea866a7bb89730f3f568;hpb=2b7d488baad476881e322f58ceab4669ebe961f9;p=clitk.git diff --git a/filters/clitkBinarizeImageGenericFilter.txx b/filters/clitkBinarizeImageGenericFilter.txx index 6d8d4e7..a35a730 100644 --- a/filters/clitkBinarizeImageGenericFilter.txx +++ b/filters/clitkBinarizeImageGenericFilter.txx @@ -1,19 +1,30 @@ -#ifndef clitkBinarizeImageGenericFilter_txx -#define clitkBinarizeImageGenericFilter_txx - -/* ================================================= - * @file clitkBinarizeImageGenericFilter.txx - * @author Jef Vandemeulebroucke - * @date 29 june 2009 - * - * @brief - * - ===================================================*/ +/*========================================================================= + 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 { @@ -22,9 +33,9 @@ namespace clitk template BinarizeImageGenericFilter::BinarizeImageGenericFilter(): ImageToImageGenericFilter("Binarize") { - // InitializeImageType<2>(); + InitializeImageType<2>(); InitializeImageType<3>(); - //InitializeImageType<4>(); + InitializeImageType<4>(); } //-------------------------------------------------------------------- @@ -33,10 +44,7 @@ namespace clitk template template void BinarizeImageGenericFilter::InitializeImageType() { - //ADD_IMAGE_TYPE(Dim, char); - ADD_IMAGE_TYPE(Dim, short); - //ADD_IMAGE_TYPE(Dim, int); - //ADD_IMAGE_TYPE(Dim, float); + ADD_DEFAULT_IMAGE_TYPES(Dim); } //-------------------------------------------------------------------- @@ -46,7 +54,6 @@ namespace clitk void BinarizeImageGenericFilter::SetArgsInfo(const args_info_type & a) { mArgsInfo=a; SetIOVerbose(mArgsInfo.verbose_flag); - if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes(); if (mArgsInfo.input_given) { @@ -70,75 +77,75 @@ namespace clitk // Reading input typename InputImageType::Pointer input = this->template GetInput(0); - // Check option - if (!mArgsInfo.useFG_flag && !mArgsInfo.useBG_flag) { - // Do nothing !! - std::cerr << "Warning : FG and BG are not used ! Do nothing." << std::endl; - this->template SetNextOutput(input); - return; - } - // 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.useFG_flag && !mArgsInfo.useBG_flag) { - DD("inverse"); - // double fg = mArgsInfo.fg_arg; - //mArgsInfo.fg_arg = mArgsInfo.bg_arg; - // mArgsInfo.bg_arg = fg; - // bool lo = mArgsInfo.lower_given; - //mArgsInfo.lower_given = mArgsInfo.upper_given; - //mArgsInfo.upper_given = lo; - }*/ - + 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.useFG_flag); - DD(mArgsInfo.useBG_flag); - - thresholdFilter->SetInsideValue(mArgsInfo.fg_arg); - thresholdFilter->SetOutsideValue(mArgsInfo.bg_arg); - - 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) { + // 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); + +// <<<<<<< 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(); - // Write/Save results this->template SetNextOutput(outputImage); } else { typename InputImageType::Pointer outputImage; - if (mArgsInfo.useBG_flag) { - DD("use BG"); + 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->Update(); maskFilter->SetOutsideValue(mArgsInfo.bg_arg); + maskFilter->Update(); outputImage = maskFilter->GetOutput(); } else { - DD("use FG"); typedef itk::MaskNegatedImageFilter maskFilterType; typename maskFilterType::Pointer maskFilter = maskFilterType::New(); maskFilter->SetInput1(input);