From: tbaudier <thomas.baudier@creatis.insa-lyon.fr>
Date: Mon, 12 Jun 2017 13:04:35 +0000 (+0200)
Subject: Separate term to term multiplication and dotproduct with VectorArithm
X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=9ddf481ab9e8ad4371d71d831579165b64bbdc58;p=clitk.git

Separate term to term multiplication and dotproduct with VectorArithm
---

diff --git a/tools/clitkVectorArithm.ggo b/tools/clitkVectorArithm.ggo
index 5c7d65e..3e21fca 100644
--- a/tools/clitkVectorArithm.ggo
+++ b/tools/clitkVectorArithm.ggo
@@ -13,7 +13,7 @@ option "input2"	   j 	"Input second image filename"	  string   no
 option "output"    o 	"Output image filename"	  	  string   yes
 
 option "scalar"	   s 	"Scalar value"		  double   no
-option "operation" t 	"Type of operation : \n With another image : 0=add, 1=multiply (dotproduct), 7=difference, 9=crossproduct\n; For 'scalar' : 0=add, 1=multiply, 5=absval (magnitude), 6=squared magnitude, 11=divide, 12=normalize" 	int default="0" no 
+option "operation" t 	"Type of operation : \n With another image : 0=add, 1=multiply, 2=dotproduct, 7=difference, 9=crossproduct\n; For 'scalar' : 0=add, 1=multiply, 5=absval (magnitude), 6=squared magnitude, 11=divide, 12=normalize" 	int default="0" no
 option "pixelValue" - 	"Default value for NaN/Inf"	double   default="0.0" 	no
 
 option "setFloatOutput" f "Set output to float pixel type" flag off
diff --git a/tools/clitkVectorArithmGenericFilter.txx b/tools/clitkVectorArithmGenericFilter.txx
index 1f4cb72..50e36dd 100644
--- a/tools/clitkVectorArithmGenericFilter.txx
+++ b/tools/clitkVectorArithmGenericFilter.txx
@@ -79,13 +79,16 @@ void VectorArithmGenericFilter<args_info_type>::SetArgsInfo(const args_info_type
   if (mArgsInfo.input2_given) {
     mIsOperationUseASecondImage = true;
     this->AddInputFilename(mArgsInfo.input2_arg);
-    if (mArgsInfo.operation_arg == 1)
+    if (mArgsInfo.operation_arg == 2)
       mIsOutputScalar = true;
   } 
   else if (mArgsInfo.operation_arg == 5 || mArgsInfo.operation_arg == 6)
     mIsOutputScalar = true;
 
-  if (mArgsInfo.output_given) this->SetOutputFilename(mArgsInfo.output_arg);
+  if (mArgsInfo.output_given) {
+    this->SetOutputFilename(mArgsInfo.output_arg);
+    mOverwriteInputImage = false;
+  }
 
   // Check type of operation (with scalar or with other image)
   if ((mArgsInfo.input2_given) && (mArgsInfo.scalar_given)) {
@@ -217,16 +220,18 @@ void  VectorArithmGenericFilter<args_info_type>::ComputeImage(Iter1 it1, Iter2 i
       ++ito;
     }
     break;
-    /*
-  case 1: // Multiply
+
+  case 1: // term to term Multiply
     while (!ito.IsAtEnd()) {
-      ito.Set(it1.Get() * it2.Get()) );
+      typename Iter1::PixelType outputPixel(ito.Get());
+      outputPixel.SetVnlVector(element_product(it1.Get().GetVnlVector(),it2.Get().GetVnlVector()));
+      ito.Set(outputPixel);
       ++it1;
       ++it2;
       ++ito;
     }
     break;
-    */
+
     /*
   case 2: // Divide
     while (!ito.IsAtEnd()) {
@@ -457,7 +462,7 @@ void  VectorArithmGenericFilter<args_info_type>::ComputeScalarImage(Iter1 it1, I
   typedef typename Iter3::PixelType PixelType;
 
   switch (mTypeOfOperation) {
-  case 1: // Multiply
+  case 2: // Multiply
     while (!ito.IsAtEnd()) {
       ito.Set(it1.Get() * it2.Get());
       ++it1;