--- /dev/null
+//----------------------------------------------------------------------------
+// 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;
+}
+
--- /dev/null
+#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