]> Creatis software - clitk.git/blobdiff - tools/clitkImageArithmGenericFilter.txx
Set the Root Tree maximum size to 1TB instead of 1GB
[clitk.git] / tools / clitkImageArithmGenericFilter.txx
index 1316fc145c7caf0a524a9a77f3cf9255498f2c90..eecbbccda4a9d83c16cec524efb9c0fb4eeb2497 100644 (file)
@@ -45,8 +45,6 @@ template<unsigned int Dim>
 void ImageArithmGenericFilter<args_info_type>::InitializeImageType()
 {
   ADD_DEFAULT_IMAGE_TYPES(Dim);
-  ADD_VEC_IMAGE_TYPE(3u,3u,float);
-  ADD_VEC_IMAGE_TYPE(3u,3u,double);
 }
 //--------------------------------------------------------------------
 
@@ -220,7 +218,7 @@ void  ImageArithmGenericFilter<args_info_type>::ComputeImage(Iter1 it1, Iter2 it
     break;
   case 2: // Divide
     while (!ito.IsAtEnd()) {
-      if (it1.Get() != 0)
+      if (it2.Get() != 0)
         ito.Set(PixelTypeDownCast<double, PixelType>((double)it1.Get() / (double)it2.Get()));
       else ito.Set(mDefaultPixelValue);
       ++it1;
@@ -271,7 +269,7 @@ void  ImageArithmGenericFilter<args_info_type>::ComputeImage(Iter1 it1, Iter2 it
   case 8: // Relative Difference
     while (!ito.IsAtEnd()) {
       if (it1.Get() != 0) ito.Set(PixelTypeDownCast<double, PixelType>(((double)it1.Get()-(double)it2.Get()))/(double)it1.Get());
-      else ito.Set(0.0);
+      else ito.Set(mDefaultPixelValue);
       ++it1;
       ++it2;
       ++ito;
@@ -351,7 +349,7 @@ void clitk::ImageArithmGenericFilter<args_info_type>::ComputeImage(Iter1 it, Ite
       ++ito;
     }
     break;
-  case 7: // Log
+  case 7: // ln
     while (!it.IsAtEnd()) {
       if (it.Get() > 0)
         ito.Set(PixelTypeDownCast<double, PixelType>(log((double)it.Get())));
@@ -393,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);