]> Creatis software - clitk.git/blobdiff - tools/clitkImageArithmGenericFilter.txx
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
[clitk.git] / tools / clitkImageArithmGenericFilter.txx
index 38f7c505ba3cd3cf3bad54011e1269794c86cc08..37fa000d3c3e402a1dac421696e070ed8f4f4e90 100644 (file)
@@ -65,7 +65,7 @@ void ImageArithmGenericFilter<args_info_type>::SetArgsInfo(const args_info_type
   mArgsInfo=a;
 
   // Set value
-  SetIOVerbose(mArgsInfo.verbose_flag);
+  this->SetIOVerbose(mArgsInfo.verbose_flag);
   mTypeOfOperation = mArgsInfo.operation_arg;
   mDefaultPixelValue = mArgsInfo.pixelValue_arg;
   mScalar = mArgsInfo.scalar_arg;
@@ -73,13 +73,13 @@ void ImageArithmGenericFilter<args_info_type>::SetArgsInfo(const args_info_type
 
   if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
 
-  if (mArgsInfo.input1_given) AddInputFilename(mArgsInfo.input1_arg);
+  if (mArgsInfo.input1_given) this->AddInputFilename(mArgsInfo.input1_arg);
   if (mArgsInfo.input2_given) {
     mIsOperationUseASecondImage = true;
-    AddInputFilename(mArgsInfo.input2_arg);
+    this->AddInputFilename(mArgsInfo.input2_arg);
   }
 
-  if (mArgsInfo.output_given) SetOutputFilename(mArgsInfo.output_arg);
+  if (mArgsInfo.output_given) this->SetOutputFilename(mArgsInfo.output_arg);
 
   // Check type of operation (with scalar or with other image)
   if ((mArgsInfo.input2_given) && (mArgsInfo.scalar_given)) {
@@ -128,9 +128,12 @@ void ImageArithmGenericFilter<args_info_type>::UpdateWithInputImageType()
       // Set input image iterator
       it2 = IteratorType(input2, input2->GetLargestPossibleRegion());
       // Check dimension
-      if (!clitk::HaveSameSizeAndSpacing<ImageType, ImageType>(input1, input2)) {
-          std::cerr << "* ERROR * the images (input and input2) must have the same size & spacing";
-          return;
+      if (!clitk::HaveSameSize<ImageType, ImageType>(input1, input2)) {
+        itkExceptionMacro(<< "The images (input and input2) must have the same size");
+      }
+      if(!clitk::HaveSameSpacing<ImageType, ImageType>(input1, input2)) {
+        itkWarningMacro(<< "The images (input and input2) do not have the same spacing. "
+                        << "Using first input's information.");
       }
   }
 
@@ -388,6 +391,18 @@ void clitk::ImageArithmGenericFilter<args_info_type>::ComputeImage(Iter1 it, Ite
       ++ito;
     }
     break;
+  case 13: // -ln I/I0
+    while (!it.IsAtEnd()) {
+      if (it.Get() == 0) { // special case for fluence image with 0 value in a pixel -> consider 0.5
+        ito.Set(-log(0.5 / mScalar) );
+      }
+      else {
+        ito.Set(PixelTypeDownCast<double, PixelType>(-log((double)it.Get() / mScalar)) );
+      }
+      ++it;
+      ++ito;
+    }
+    break;
   default: // error ?
     std::cerr << "ERROR : the operation number (" << mTypeOfOperation << ") is not known." << std::endl;
     exit(-1);
@@ -395,6 +410,8 @@ void clitk::ImageArithmGenericFilter<args_info_type>::ComputeImage(Iter1 it, Ite
 }
 //--------------------------------------------------------------------
 
+
+
 } // end namespace
 
 #endif  //#define CLITKIMAGEARITHMGENERICFILTER_TXX