X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkImageArithmGenericFilter.txx;h=24ebbbdac8d2d472ec6ddca3eebbdcfdd5f33f6f;hb=d24dbd466ba6aac0ed3e85f590ee1b933eb141d4;hp=f3b1d449718abdc68b8c1333d0d9ef85ee56d535;hpb=765020625fbc092d283e221e36c83e60a1844cb7;p=clitk.git diff --git a/tools/clitkImageArithmGenericFilter.txx b/tools/clitkImageArithmGenericFilter.txx old mode 100755 new mode 100644 index f3b1d44..24ebbbd --- a/tools/clitkImageArithmGenericFilter.txx +++ b/tools/clitkImageArithmGenericFilter.txx @@ -20,6 +20,8 @@ #include "clitkImageCommon.h" +#include "itkMinimumMaximumImageCalculator.h" + namespace clitk { @@ -110,6 +112,15 @@ void ImageArithmGenericFilter::UpdateWithInputImageType() typename ImageType::Pointer input2 = NULL; IteratorType it2; + // Special case for normalisation + if (mTypeOfOperation == 12) { + typedef itk::MinimumMaximumImageCalculator MinMaxFilterType; + typename MinMaxFilterType::Pointer ff = MinMaxFilterType::New(); + ff->SetImage(input1); + ff->ComputeMaximum(); + mScalar = ff->GetMaximum(); + mTypeOfOperation = 11; // divide + } if (mIsOperationUseASecondImage) { // Read input2 @@ -117,9 +128,12 @@ void ImageArithmGenericFilter::UpdateWithInputImageType() // Set input image iterator it2 = IteratorType(input2, input2->GetLargestPossibleRegion()); // Check dimension - if (!clitk::HaveSameSizeAndSpacing(input1, input2)) { - std::cerr << "* ERROR * the images (input and input2) must have the same size & spacing"; - return; + if (!clitk::HaveSameSize(input1, input2)) { + itkExceptionMacro(<< "The images (input and input2) must have the same size"); + } + if(!clitk::HaveSameSpacing(input1, input2)) { + itkWarningMacro(<< "The images (input and input2) do not have the same spacing. " + << "Using first input's information."); } } @@ -370,6 +384,13 @@ void clitk::ImageArithmGenericFilter::ComputeImage(Iter1 it, Ite ++ito; } break; + case 11: // divide + while (!it.IsAtEnd()) { + ito.Set(PixelTypeDownCast((double)it.Get() / mScalar) ); + ++it; + ++ito; + } + break; default: // error ? std::cerr << "ERROR : the operation number (" << mTypeOfOperation << ") is not known." << std::endl; exit(-1);