]> Creatis software - clitk.git/blobdiff - common/clitkTransformUtilities.h
Comment snoutID
[clitk.git] / common / clitkTransformUtilities.h
index 7c4ebaa66748b5020390c0696e408483837391d8..562ed63a67e11facfdcc07ff960fd5456394613a 100644 (file)
@@ -3,7 +3,7 @@
 
   Authors belong to: 
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,8 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
+
 #ifndef CLITKTRANSFORMUTILITIES_H
 #define CLITKTRANSFORMUTILITIES_H
 #include "itkMatrix.h"
@@ -22,7 +23,9 @@
 #include "itkPoint.h"
 #include "clitkImageCommon.h"
 #include "clitkCommon.h"
+#define VTK_EXCLUDE_STRSTREAM_HEADERS
+#include <vtkMatrix4x4.h>
+#include <vtkSmartPointer.h>
  
 namespace clitk
 {
@@ -30,10 +33,16 @@ namespace clitk
   //Declarations
   //============================================================================
   itk::Matrix<double, 3, 3> GetForwardAffineMatrix2D(itk::Array<double> transformParameters);
-  itk::Matrix<double, 3, 3> GetBackwardAffineMatrix2D(itk::Array<double> transformParameters);
   itk::Matrix<double, 4, 4> GetForwardAffineMatrix3D(itk::Array<double> transformParameters);
+  template <unsigned int Dimension > itk::Matrix<double, Dimension+1, Dimension+1> GetForwardAffineMatrix(itk::Array<double> transformParameters);
+
+  itk::Matrix<double, 3, 3> GetBackwardAffineMatrix2D(itk::Array<double> transformParameters);
   itk::Matrix<double, 4, 4> GetBackwardAffineMatrix3D(itk::Array<double> transformParameters);
+  template <unsigned int Dimension > itk::Matrix<double, Dimension+1, Dimension+1> GetBackwardAffineMatrix(itk::Array<double> transformParameters);
+
   itk::Matrix<double, 3, 3> GetRotationMatrix3D(itk::Array<double> rotationParameters);
+  itk::Matrix<double, 2, 2> GetRotationMatrix2D(itk::Array<double> rotationParameters);
+  template <unsigned int Dimension> itk::Matrix<double, Dimension, Dimension> GetRotationMatrix(itk::Array<double> rotationParameters);
   itk::Point<double, 3> GetRotatedPoint3D(itk::Array<double> rotationParameters, itk::Point<double, 3> input);
   itk::Matrix<double, 4, 4> GetCenteredRotationMatrix3D(itk::Array<double> rotationParameters,itk::Point<double,3> centerOfRotation);
   //   itk::Matrix<double, 4, 4> GetComposedMatrix3D(itk::Matrix<double, 4, 4> firstTransform, itk::Matrix<double, 4, 4> secondTransform);
@@ -77,25 +86,6 @@ namespace clitk
     return matrix;
   }
   
-  inline  itk::Matrix<double, 3, 3> GetBackwardAffineMatrix2D(itk::Array<double> transformParameters)
-  {
-    itk::Matrix<double, 3, 3> matrix;
-    //rotation part
-    matrix[0][0]=cos(transformParameters[0]);
-    matrix[0][1]=sin(transformParameters[0]);
-    matrix[1][0]=-sin(transformParameters[0]);
-    matrix[1][1]=cos(transformParameters[0]);
-    //translation part
-    matrix[0][2]=transformParameters[1];
-    matrix[1][2]=transformParameters[2];
-    //homogenize
-    matrix[2][0]=0.;
-    matrix[2][1]=0.;
-    matrix[2][2]=1.;
-    return matrix;
-  }
   inline  itk::Matrix<double, 4, 4> GetForwardAffineMatrix3D(itk::Array<double> transformParameters)
   {
     itk::Matrix<double, 4, 4> matrix;
@@ -122,6 +112,25 @@ namespace clitk
   }
  
  
+  inline  itk::Matrix<double, 3, 3> GetBackwardAffineMatrix2D(itk::Array<double> transformParameters)
+  {
+    itk::Matrix<double, 3, 3> matrix;
+    //rotation part
+    matrix[0][0]=cos(transformParameters[0]);
+    matrix[0][1]=sin(transformParameters[0]);
+    matrix[1][0]=-sin(transformParameters[0]);
+    matrix[1][1]=cos(transformParameters[0]);
+    //translation part
+    matrix[0][2]=transformParameters[1];
+    matrix[1][2]=transformParameters[2];
+    //homogenize
+    matrix[2][0]=0.;
+    matrix[2][1]=0.;
+    matrix[2][2]=1.;
+    return matrix;
+  }
+
+
   inline  itk::Matrix<double, 4, 4> GetBackwardAffineMatrix3D(itk::Array<double> transformParameters)
   {
     itk::Matrix<double, 4, 4> matrix;
@@ -162,9 +171,17 @@ namespace clitk
     matrix[2][2]= cos(rotationParameters[0])*cos(rotationParameters[1]);
     return matrix;
   }
+
+  inline itk::Matrix<double, 2, 2> GetRotationMatrix2D(itk::Array<double> rotationParameters)
+  {
+    itk::Matrix<double, 2, 2> matrix;
+    matrix[0][0] = cos(rotationParameters[0]);
+    matrix[1][0] = sin(rotationParameters[0]);
+    matrix[0][1] = -matrix[1][0];
+    matrix[1][1] = matrix[0][0];
+    return matrix;
+  }
+
   //========================================================================================
   inline  itk::Point<double, 3> GetRotatedPoint3D(itk::Array<double> rotationParameters, itk::Point<double, 3> input)
   {
@@ -239,8 +256,9 @@ namespace clitk
     return matrix; 
   }
    
-  inline itk::Matrix<double, 4, 4> ReadMatrix3D(std::string fileName)
-  {
+  itk::Matrix<double, 4, 4> ReadMatrix3D(std::string fileName);
+  inline vtkMatrix4x4* ReadVTKMatrix3D(std::string fileName) {
     // read input matrix
     std::ifstream is;
     openFileForReading(is, fileName);
@@ -251,18 +269,18 @@ namespace clitk
     while (!is.eof()) {
       nb.push_back(x);
       skipComment(is);
-      is >> x;  
+      is >> x;
     }
-     
-    //copy it to the matrix
-    itk::Matrix<double, 4, 4> matrix;
+
+    vtkSmartPointer<vtkMatrix4x4> matrix = vtkSmartPointer<vtkMatrix4x4>::New();
     unsigned int index=0;
     for (unsigned int i=0;i<4;i++)
       for (unsigned int j=0;j<4;j++)
-       matrix[i][j]=nb[index++];
-    return matrix; 
+         matrix->SetElement(i,j, nb[index++]);
+
+    return matrix;
   }
+
   inline itk::Matrix<double, 3, 3> ReadMatrix2D(std::string fileName)
   {
     // read input matrix