]> Creatis software - creaRigidRegistration.git/commitdiff
Class that generates a grid over an image in order to visualize the deformation field...
authorAlfredo Morales <Alfredo.Morales@creatis.insa-lyon.fr>
Mon, 12 Mar 2012 08:48:30 +0000 (08:48 +0000)
committerAlfredo Morales <Alfredo.Morales@creatis.insa-lyon.fr>
Mon, 12 Mar 2012 08:48:30 +0000 (08:48 +0000)
lib/MyGridOnImageGenerator.cpp [new file with mode: 0755]
lib/MyGridOnImageGenerator.h [new file with mode: 0755]

diff --git a/lib/MyGridOnImageGenerator.cpp b/lib/MyGridOnImageGenerator.cpp
new file mode 100755 (executable)
index 0000000..8b7f566
--- /dev/null
@@ -0,0 +1,111 @@
+//----------------------------------------------------------------------------
+// Class definition include
+//----------------------------------------------------------------------------
+
+#include "MyGridOnImageGenerator.h"
+
+//----------------------------------------------------------------------------
+// Class implementation
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// Builder
+//----------------------------------------------------------------------------
+
+MyGridOnImageGenerator::MyGridOnImageGenerator( vtkImageData* nImage, double nScpX, double nScpY, double nScpZ)
+{
+       spcX = nScpX;
+       spcY = nScpY;
+       spcZ = nScpZ;
+       image = nImage;
+}
+
+//----------------------------------------------------------------------------
+// Destructor
+//----------------------------------------------------------------------------
+
+MyGridOnImageGenerator::~MyGridOnImageGenerator( )
+{
+
+}
+//----------------------------------------------------------------------------
+// Methods
+//----------------------------------------------------------------------------
+
+
+void MyGridOnImageGenerator::setScpX(double nScpX)
+{
+       spcX = nScpX;
+}
+
+void MyGridOnImageGenerator::setScpY(double nScpY)
+{
+       spcY = nScpY;
+}
+
+void MyGridOnImageGenerator::setScpZ(double nScpZ)
+{
+       spcZ = nScpZ;
+}
+
+
+void MyGridOnImageGenerator::setImage(vtkImageData* nImage)
+{
+       image = nImage;
+}
+
+vtkImageData* MyGridOnImageGenerator::getGridOnImage( )
+{
+       //Variables
+       double spc[3];
+       int dims[3];
+       int sizeX = 0, sizeY = 0, sizeZ = 0;
+       double minMaxValue[2];
+       double minValue = 0, maxValue = 0;
+       int spcVoxelX = 0, spcVoxelY = 0, spcVoxelZ = 0;
+
+       vtkImageData* gridImage = vtkImageData::New();
+       gridImage->ShallowCopy(image);
+       gridImage->Update();
+
+       //Get image spacing, size and mix and max values
+       gridImage->GetSpacing(spc);
+       gridImage->GetDimensions(dims);
+       sizeX = dims[0];
+       sizeY = dims[1];
+       sizeZ = dims[2];
+       gridImage->GetScalarRange(minMaxValue);
+       minValue = minMaxValue[0];
+       maxValue = minMaxValue[1];
+
+       //Grid spacing in voxels
+       spcVoxelX = spcX / spc[0];
+       spcVoxelY = spcY / spc[1];
+       spcVoxelZ = spcZ / spc[2];
+
+       std::cout << "spcVoxelX:" << spcVoxelX << ", spcVoxelY:" << spcVoxelY << ", spcVoxelZ:" << spcVoxelZ <<std::endl;
+       std::cout << "minValue:" << minValue << ", maxValue:" << maxValue << std::endl;
+       std::cout << "sizeX:" << sizeX << ", sizeY:" << sizeY << ", sizeZ:" << sizeZ <<std::endl;
+
+       for(int px = 0; px < sizeX; px++)
+       {
+               for(int py = 0; py < sizeY; py++)
+               {
+                       for(int pz = 0; pz < sizeZ; pz++)
+                       {
+                               if(px % spcVoxelX == 0 || py % spcVoxelY == 0 || pz % spcVoxelZ == 0)
+                               {
+                                       //std::cout << "In" ;
+                                       unsigned char* pointer = (unsigned char*) gridImage->GetScalarPointer(px, py, pz);
+                                       if( (*pointer - minValue) < (maxValue - *pointer) )
+                                               *pointer = maxValue;
+                                       else
+                                               *pointer = minValue;
+                               }
+                       }
+               }
+       }
+
+
+       return gridImage;
+}
+
diff --git a/lib/MyGridOnImageGenerator.h b/lib/MyGridOnImageGenerator.h
new file mode 100755 (executable)
index 0000000..1ef6e2e
--- /dev/null
@@ -0,0 +1,111 @@
+#ifndef __MyGridOnImageGenerator_h__
+#define __MyGridOnImageGenerator_h__
+
+//-----------------
+// C++
+//-----------------
+
+
+//-----------------
+// VTK
+//-----------------
+
+#include "vtkImageData.h"
+
+//------------------------------------------------------------------------------
+// Creates a grid over an image. It is usually used to visualized the deformation
+// field after a non-rigid registration. The contrast in the final image is based
+// on the maximum and minimum values over the entire image.
+//------------------------------------------------------------------------------
+class MyGridOnImageGenerator
+{
+public:
+
+       //------------------------------------------------------------
+       //Builder
+       //------------------------------------------------------------
+
+       /*
+        * Class builder
+        * @param nImage is the input image
+        * @param nScpX is the spacing in X direction
+        * @param nScpY is the spacing in Y direction
+        * @param nScpZ is the spacing in Z direction
+        */
+       MyGridOnImageGenerator(vtkImageData* nImage, double nScpX, double nScpY, double nScpZ);
+
+       //------------------------------------------------------------
+       //Destructor
+       //------------------------------------------------------------
+
+       ~MyGridOnImageGenerator();
+
+       //------------------------------------------------------------
+       //Public methods
+       //------------------------------------------------------------
+
+       /*
+        * Method that changes the spacing in X
+        * param nScpX the new value for the spacing in X
+        */
+       void setScpX(double nScpX);
+
+       /*
+        * Method that changes the spacing in Y
+        * param nScpY the new value for the spacing in Y
+        */
+       void setScpY(double nScpY);
+
+
+       /*
+        * Method that changes the spacing in Z
+        * param nScpZ the new value for the spacing in Z
+        */
+       void setScpZ(double nScpZ);
+
+       /*
+        * Method that changes the input image
+        * @param nImage is the new image
+        */
+       void setImage(vtkImageData* nImage);
+
+       /**
+        * Method that generates the image with the grid
+        * @return The image with the grid
+        */
+       vtkImageData* getGridOnImage( );
+
+private:
+
+       //------------------------------------------------------------
+       //Private methods
+       //------------------------------------------------------------
+
+
+       //------------------------------------------------------------
+       //Attributes
+       //------------------------------------------------------------
+
+       /*
+        * Spcing in X directioin
+        */
+       double spcX;
+
+       /*
+        * Spcing in Y directioin
+        */
+       double spcY;
+
+       /*
+        * Spcing in Z directioin
+        */
+       double spcZ;
+
+       /**
+        * Input image
+        */
+       vtkImageData* image;
+};
+
+//------------------------------------------------------------------------------
+#endif