X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FCheckBoard.cpp;h=34a6749d7d08d01103c9f64ad17feeeea2cd3eba;hb=6ab99c126654ed05ed2bea23b70ef9d73e90d784;hp=d4f52540b7e182fcbcada8bcee1d7575acfdc753;hpb=74a3edf7daa058147c5308ff230a2c3d7658d9ef;p=creaRigidRegistration.git diff --git a/lib/CheckBoard.cpp b/lib/CheckBoard.cpp index d4f5254..34a6749 100644 --- a/lib/CheckBoard.cpp +++ b/lib/CheckBoard.cpp @@ -1,18 +1,30 @@ #include "CheckBoard.h" - /* * Constructor */ //------------------------------------------------------------ -CheckBoard::CheckBoard() +CheckBoard::CheckBoard() : + image1(NULL), + image2(NULL), + squaresX(0), + squaresY(0), + newImage(NULL), + processed(false), + resample(NULL), + result(NULL) { +/* image1=NULL; image2=NULL; squaresX=0; squaresY=0; newImage = NULL; processed=false; + newImage = NULL; + resample = NULL; + result = NULL; +*/ } /* @@ -24,6 +36,7 @@ CheckBoard::~CheckBoard() //if (image1 != NULL ) { image1->Delete(); } //if (image2 != NULL ) { image2->Delete(); } if (newImage != NULL ) { newImage->Delete(); } + if (result != NULL ) { result->Delete(); } } //------------------------------------------------------------ @@ -32,7 +45,6 @@ void CheckBoard::calculateImage() if(image1!=NULL && image2!=NULL) { - // IMAGE 1 // Information from image1 @@ -40,7 +52,7 @@ void CheckBoard::calculateImage() image1->GetExtent(extImg1); type = image1->GetScalarType(); - + // The Z dimension is 1 for a 2D image dimImg1[0] = extImg1[1] - extImg1[0]+1; dimImg1[1] = extImg1[3] - extImg1[2]+1; @@ -59,11 +71,11 @@ void CheckBoard::calculateImage() long numPixelsImg1 = dimImg1[0]*dimImg1[1]; long numPixelsImg2 = dimImg2[0]*dimImg2[1]; - + double factorX = 1; double factorY = 1; - vtkImageResample *resample = vtkImageResample::New(); - vtkImageData *result; + resample = vtkImageResample::New(); + result = vtkImageData::New(); if(numPixelsImg1SetInput(image1); @@ -77,7 +89,6 @@ void CheckBoard::calculateImage() result = resample->GetOutput(); result->Update(); createImage(result,image2,dimImg2[0],dimImg2[1]); - } //if else if (numPixelsImg1>numPixelsImg2) { @@ -90,7 +101,7 @@ void CheckBoard::calculateImage() initialize(dimImg1, spcImg1); result = resample->GetOutput(); - + result->Update(); createImage(image1,result,dimImg1[0],dimImg1[1]); @@ -110,11 +121,11 @@ void CheckBoard::calculateImage() result = resample->GetOutput(); result->Update(); - + createImage(image1,result,dimImg1[0],dimImg1[1]); } //else - + resample->Delete(); processed=true; } @@ -124,13 +135,15 @@ void CheckBoard::calculateImage() void CheckBoard::initialize(int dimensions[], double spacing[]) { // Setting the new image + if(newImage != NULL){ + newImage->Delete(); + } newImage = vtkImageData::New(); newImage->SetScalarType(type); newImage->SetSpacing(spacing); newImage->SetDimensions(dimensions); newImage->AllocateScalars(); newImage->Update(); - } //------------------------------------------------------------ @@ -144,55 +157,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, char* dataImagePointer1 = NULL; char* dataImagePointer2 = NULL; char* dataImageResultPointer = NULL; - - dataImagePointer1 = (char*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (char*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (char*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (char*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (char*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (char*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (char) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (char) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_SIGNED_CHAR) { @@ -200,54 +166,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, signed char* dataImagePointer1 = NULL; signed char* dataImagePointer2 = NULL; signed char* dataImageResultPointer = NULL; - - dataImagePointer1 = (signed char*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (signed char*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (signed char*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (signed char*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (signed char*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (signed char*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (signed char) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (signed char) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_UNSIGNED_CHAR) { @@ -255,54 +175,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, unsigned char* dataImagePointer1 = NULL; unsigned char* dataImagePointer2 = NULL; unsigned char* dataImageResultPointer = NULL; - - dataImagePointer1 = (unsigned char*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (unsigned char*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (unsigned char*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (unsigned char*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (unsigned char*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (unsigned char*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned char) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned char) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_SHORT) { @@ -310,54 +184,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, short* dataImagePointer1 = NULL; short* dataImagePointer2 = NULL; short* dataImageResultPointer = NULL; - - dataImagePointer1 = (short*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (short*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (short*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (short*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (short*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (short*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (short) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (short) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_UNSIGNED_SHORT) { @@ -365,54 +193,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, unsigned short* dataImagePointer1 = NULL; unsigned short* dataImagePointer2 = NULL; unsigned short* dataImageResultPointer = NULL; - - dataImagePointer1 = (unsigned short*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (unsigned short*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (unsigned short*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (unsigned short*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (unsigned short*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (unsigned short*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned short) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned short) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_INT) @@ -421,54 +203,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, int* dataImagePointer1 = NULL; int* dataImagePointer2 = NULL; int* dataImageResultPointer = NULL; - - dataImagePointer1 = (int*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (int*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (int*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (int*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (int*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (int*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (int) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (int) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_UNSIGNED_INT) { @@ -476,54 +212,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, unsigned int* dataImagePointer1 = NULL; unsigned int* dataImagePointer2 = NULL; unsigned int* dataImageResultPointer = NULL; - - dataImagePointer1 = (unsigned int*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (unsigned int*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (unsigned int*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (unsigned int*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (unsigned int*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (unsigned int*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned int) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned int) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_LONG) { @@ -531,54 +221,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, long* dataImagePointer1 = NULL; long* dataImagePointer2 = NULL; long* dataImageResultPointer = NULL; - - dataImagePointer1 = (long*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (long*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (long*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (long*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (long*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (long*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (long) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (long) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_UNSIGNED_LONG) { @@ -586,53 +230,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, unsigned long* dataImagePointer1 = NULL; unsigned long* dataImagePointer2 = NULL; unsigned long* dataImageResultPointer = NULL; - - dataImagePointer1 = (unsigned long*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (unsigned long*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (unsigned long*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (unsigned long*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (unsigned long*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (unsigned long*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned long) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (unsigned long) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_FLOAT) { @@ -640,54 +239,8 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, float* dataImagePointer1 = NULL; float* dataImagePointer2 = NULL; float* dataImageResultPointer = NULL; - - dataImagePointer1 = (float*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (float*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (float*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (float*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (float*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (float*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (float) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (float) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } else if(imageType == VTK_DOUBLE) { @@ -695,60 +248,66 @@ void CheckBoard::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, double* dataImagePointer1 = NULL; double* dataImagePointer2 = NULL; double* dataImageResultPointer = NULL; - - dataImagePointer1 = (double*) img1->GetScalarPointer(0,0,0); - dataImagePointer2 = (double*) img2->GetScalarPointer(0,0,0); - dataImageResultPointer = (double*) newImage->GetScalarPointer(0,0,0); - - if(squaresX == 0) - { - squaresX = 1; - } - if(squaresY == 0) - { - squaresY = 1; - } - int divX = sizeX/squaresX; - int divY = sizeY/squaresY; - int i, j, counterX, counterY; - for(i = 0; i < sizeX; i++) - { - counterY = 0; - for(j = 0; j < sizeY; j++) - { - dataImagePointer1 = (double*)img1->GetScalarPointer(i,j,0); - dataImagePointer2 = (double*)img2->GetScalarPointer(i,j,0); - dataImageResultPointer = (double*)newImage->GetScalarPointer(i,j,0); - - if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (double) *dataImagePointer1; - } - else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) - { - *dataImageResultPointer = (double) *dataImagePointer2; - } - - if(counterX >= 2*divX) - { - counterX = 0; - } - else if(counterY >= 2*divY) - { - counterY = 0; - } - counterY++; - } - counterX++; - } + createImageByType(dataImagePointer1,dataImagePointer2,dataImageResultPointer,img1,img2,sizeX,sizeY); } - //std::cout << "The image has been checkboardized!" << std::endl; newImage->Update(); // newImage->Modified(); } +/**Template used for the different image types +*/ +template +void CheckBoard::createImageByType(T* dataImagePointer1, T* dataImagePointer2, T* dataImageResultPointer, vtkImageData *img1, vtkImageData *img2, int sizeX, int sizeY) +{ + dataImagePointer1 = (T*) img1->GetScalarPointer(0,0,0); + dataImagePointer2 = (T*) img2->GetScalarPointer(0,0,0); + dataImageResultPointer = (T*) newImage->GetScalarPointer(0,0,0); + + if(squaresX == 0) + { + squaresX = 1; + } + if(squaresY == 0) + { + squaresY = 1; + } + + int divX = sizeX/squaresX; + int divY = sizeY/squaresY; + int i, j; + int counterX=0, counterY; // JPR : uninitialized + for(i = 0; i < sizeX; i++) + { + counterY = 0; + for(j = 0; j < sizeY; j++) + { + dataImagePointer1 = (T*)img1->GetScalarPointer(i,j,0); + dataImagePointer2 = (T*)img2->GetScalarPointer(i,j,0); + dataImageResultPointer = (T*)newImage->GetScalarPointer(i,j,0); + if( (counterX <= divX && counterY <= divY) || ((counterX >= divX && counterX <= 2*divX) && (counterY >= divY && counterY <= 2*divY)) ) + { + *dataImageResultPointer = (T) *dataImagePointer1; + } + else //if( ((counterX >= divX && counterX <= 2*divX) && counterY <= divY) || (counterX <= divX && (counterY >= divY && counterY <= 2*divY)) ) + { + *dataImageResultPointer = (T) *dataImagePointer2; + } + + if(counterX >= 2*divX) + { + counterX = 0; + } + else if(counterY >= 2*divY) + { + counterY = 0; + } + counterY++; + } + counterX++; + } +} /* * Get new image @@ -787,4 +346,3 @@ void CheckBoard::setRows(int rows) { squaresY=rows; } -