From: Alfredo Morales Date: Mon, 12 Mar 2012 08:48:30 +0000 (+0000) Subject: Class that generates a grid over an image in order to visualize the deformation field... X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=f190ebd246ec5183a78ee55539bfda84318f2bc4;p=creaRigidRegistration.git Class that generates a grid over an image in order to visualize the deformation field after a transformation. --- diff --git a/lib/MyGridOnImageGenerator.cpp b/lib/MyGridOnImageGenerator.cpp new file mode 100755 index 0000000..8b7f566 --- /dev/null +++ b/lib/MyGridOnImageGenerator.cpp @@ -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 <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 index 0000000..1ef6e2e --- /dev/null +++ b/lib/MyGridOnImageGenerator.h @@ -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