X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FSubstraction.cxx;h=96f01a402ecb28569f88fd9c2b41cc9fa064781b;hb=4fbe6f0c127ceafc78b91fd8ff6182acbc44f1ae;hp=ee25e7039499e38a54ce08ff897c2532b04e3d9c;hpb=d3c1c3cce0f1b77940d1d89939df763500113585;p=creaRigidRegistration.git diff --git a/lib/Substraction.cxx b/lib/Substraction.cxx index ee25e70..96f01a4 100644 --- a/lib/Substraction.cxx +++ b/lib/Substraction.cxx @@ -6,7 +6,7 @@ Substraction::Substraction(vtkImageData* imageData1,vtkImageData* imageData2, in sizeImage=0; uZeroLevel=uZLevel; lZeroLevel=lZLevel; - if(uColor.size() != NULL) + if(uColor.size() != 0) { upperColor[0] = uColor[0]; upperColor[1] = uColor[1]; @@ -18,7 +18,7 @@ Substraction::Substraction(vtkImageData* imageData1,vtkImageData* imageData2, in upperColor[1] = 255; upperColor[2] = 255; } - if(mColor.size() != NULL) + if(mColor.size() != 0) { mediumColor[0] = mColor[0]; mediumColor[1] = mColor[1]; @@ -30,7 +30,7 @@ Substraction::Substraction(vtkImageData* imageData1,vtkImageData* imageData2, in mediumColor[1] = 125; mediumColor[2] = 125; } - if(lColor.size() != NULL) + if(lColor.size() != 0) { lowerColor[0] = lColor[0]; lowerColor[1] = lColor[1]; @@ -44,7 +44,7 @@ Substraction::Substraction(vtkImageData* imageData1,vtkImageData* imageData2, in } //Original image type this case is an unsigned char (3) - int t=imageData1->GetScalarType(); + //int t=imageData1->GetScalarType(); // JPR : unused //substracting the image substractImage(imageData1, imageData2); } @@ -58,7 +58,6 @@ Substraction::~Substraction() // Methods //---------------------------------------------------------------------------- - /* Calculate the new image and save it in the attribute imageResult it is used if the user had given the imageData @@ -66,27 +65,27 @@ it is used if the user had given the imageData void Substraction::substractImage(vtkImageData* imageData1, vtkImageData* imageData2) { //dimensions of the image (extent) - int ext[6]; + int ext[6]; //setting the dimensionality (1d or 2d or 3d ) int newDim[3]; //image spacing double spc[3]; //getting the information from the original image - imageData1->GetSpacing(spc); - imageData1->GetExtent(ext); + imageData1->GetSpacing(spc); + imageData1->GetExtent(ext); //this a 2d image - newDim[0]=ext[1]-ext[0]+1; + newDim[0]=ext[1]-ext[0]+1; newDim[1]=ext[3]-ext[2]+1; newDim[2]=1;// in general it is ext[5]-ext[4]+1 - imageType = imageData1->GetScalarType(); + imageType = imageData1->GetScalarType(); //initializing the image that represents the substracted image - initialize(newDim,spc); + initialize(newDim,spc); //Time to substract - substract(imageData1, imageData2); + substract(imageData1, imageData2); } /* @@ -116,74 +115,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) char* dataImagePointer1=NULL; char* dataImagePointer2=NULL; char* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(char*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(char*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(char*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(char*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(char*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(char*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(char) lowerColor[0]; - dataImageResultPointer[1] =(char) lowerColor[1]; - dataImageResultPointer[2] =(char) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(char) upperColor[0]; - dataImageResultPointer[1] =(char) upperColor[1]; - dataImageResultPointer[2] =(char) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(char) mediumColor[0]; - dataImageResultPointer[1] =(char) mediumColor[1]; - dataImageResultPointer[2] =(char) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_UNSIGNED_CHAR) { @@ -194,74 +127,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) unsigned char* dataImagePointer1=NULL; unsigned char* dataImagePointer2=NULL; unsigned char* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(unsigned char*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(unsigned char*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(unsigned char*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(unsigned char*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(unsigned char*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(unsigned char*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(unsigned char) lowerColor[0]; - dataImageResultPointer[1] =(unsigned char) lowerColor[1]; - dataImageResultPointer[2] =(unsigned char) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(unsigned char) upperColor[0]; - dataImageResultPointer[1] =(unsigned char) upperColor[1]; - dataImageResultPointer[2] =(unsigned char) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(unsigned char) mediumColor[0]; - dataImageResultPointer[1] =(unsigned char) mediumColor[1]; - dataImageResultPointer[2] =(unsigned char) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_SIGNED_CHAR) { @@ -272,74 +139,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) signed char* dataImagePointer1=NULL; signed char* dataImagePointer2=NULL; signed char* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(signed char*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(signed char*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(signed char*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(signed char*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(signed char*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(signed char*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(signed char) lowerColor[0]; - dataImageResultPointer[1] =(signed char) lowerColor[1]; - dataImageResultPointer[2] =(signed char) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(signed char) upperColor[0]; - dataImageResultPointer[1] =(signed char) upperColor[1]; - dataImageResultPointer[2] =(signed char) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(signed char) mediumColor[0]; - dataImageResultPointer[1] =(signed char) mediumColor[1]; - dataImageResultPointer[2] =(signed char) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_SHORT) { @@ -350,74 +151,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) short* dataImagePointer1=NULL; short* dataImagePointer2=NULL; short* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(short*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(short*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(short*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(short*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(short*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(short*)imageResult->GetScalarPointer(i,j,k); - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(short) lowerColor[0]; - dataImageResultPointer[1] =(short) lowerColor[1]; - dataImageResultPointer[2] =(short) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(short) upperColor[0]; - dataImageResultPointer[1] =(short) upperColor[1]; - dataImageResultPointer[2] =(short) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(short) mediumColor[0]; - dataImageResultPointer[1] =(short) mediumColor[1]; - dataImageResultPointer[2] =(short) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_UNSIGNED_SHORT) { @@ -428,74 +163,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) unsigned short* dataImagePointer1=NULL; unsigned short* dataImagePointer2=NULL; unsigned short* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(unsigned short*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(unsigned short*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(unsigned short*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(unsigned short*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(unsigned short*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(unsigned short*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(unsigned short) lowerColor[0]; - dataImageResultPointer[1] =(unsigned short) lowerColor[1]; - dataImageResultPointer[2] =(unsigned short) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(unsigned short) upperColor[0]; - dataImageResultPointer[1] =(unsigned short) upperColor[1]; - dataImageResultPointer[2] =(unsigned short) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(unsigned short) mediumColor[0]; - dataImageResultPointer[1] =(unsigned short) mediumColor[1]; - dataImageResultPointer[2] =(unsigned short) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_INT) { @@ -506,74 +175,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) int* dataImagePointer1=NULL; int* dataImagePointer2=NULL; int* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(int*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(int*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(int*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(int*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(int*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(int*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(int) lowerColor[0]; - dataImageResultPointer[1] =(int) lowerColor[1]; - dataImageResultPointer[2] =(int) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(int) upperColor[0]; - dataImageResultPointer[1] =(int) upperColor[1]; - dataImageResultPointer[2] =(int) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(int) mediumColor[0]; - dataImageResultPointer[1] =(int) mediumColor[1]; - dataImageResultPointer[2] =(int) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_UNSIGNED_INT) { @@ -584,74 +187,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) unsigned int* dataImagePointer1=NULL; unsigned int* dataImagePointer2=NULL; unsigned int* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(unsigned int*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(unsigned int*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(unsigned int*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(unsigned int*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(unsigned int*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(unsigned int*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(unsigned int) lowerColor[0]; - dataImageResultPointer[1] =(unsigned int) lowerColor[1]; - dataImageResultPointer[2] =(unsigned int) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(unsigned int) upperColor[0]; - dataImageResultPointer[1] =(unsigned int) upperColor[1]; - dataImageResultPointer[2] =(unsigned int) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(unsigned int) mediumColor[0]; - dataImageResultPointer[1] =(unsigned int) mediumColor[1]; - dataImageResultPointer[2] =(unsigned int) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_LONG) { @@ -662,74 +199,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) long* dataImagePointer1=NULL; long* dataImagePointer2=NULL; long* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(long*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(long*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(long*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(long*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(long*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(long*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(long) lowerColor[0]; - dataImageResultPointer[1] =(long) lowerColor[1]; - dataImageResultPointer[2] =(long) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(long) upperColor[0]; - dataImageResultPointer[1] =(long) upperColor[1]; - dataImageResultPointer[2] =(long) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(long) mediumColor[0]; - dataImageResultPointer[1] =(long) mediumColor[1]; - dataImageResultPointer[2] =(long) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_UNSIGNED_LONG) { @@ -740,74 +211,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) unsigned long* dataImagePointer1=NULL; unsigned long* dataImagePointer2=NULL; unsigned long* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(unsigned long*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(unsigned long*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(unsigned long*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(unsigned long*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(unsigned long*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(unsigned long*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(unsigned long) lowerColor[0]; - dataImageResultPointer[1] =(unsigned long) lowerColor[1]; - dataImageResultPointer[2] =(unsigned long) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(unsigned long) upperColor[0]; - dataImageResultPointer[1] =(unsigned long) upperColor[1]; - dataImageResultPointer[2] =(unsigned long) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(unsigned long) mediumColor[0]; - dataImageResultPointer[1] =(unsigned long) mediumColor[1]; - dataImageResultPointer[2] =(unsigned long) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_FLOAT) { @@ -818,74 +223,8 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) float* dataImagePointer1=NULL; float* dataImagePointer2=NULL; float* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(float*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(float*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(float*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; - - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(float*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(float*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(float*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(float) lowerColor[0]; - dataImageResultPointer[1] =(float) lowerColor[1]; - dataImageResultPointer[2] =(float) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(float) upperColor[0]; - dataImageResultPointer[1] =(float) upperColor[1]; - dataImageResultPointer[2] =(float) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(float) mediumColor[0]; - dataImageResultPointer[1] =(float) mediumColor[1]; - dataImageResultPointer[2] =(float) mediumColor[2]; - nZ++; - } - counter++; - } - } - } + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); } else if(imageType == VTK_DOUBLE) { @@ -896,76 +235,83 @@ void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2) double* dataImagePointer1=NULL; double* dataImagePointer2=NULL; double* dataImageResultPointer=NULL; - // we start where the image starts - dataImagePointer1=(double*)imageData1->GetScalarPointer(0,0,0); - dataImagePointer2=(double*)imageData2->GetScalarPointer(0,0,0); - dataImageResultPointer=(double*)imageResult->GetScalarPointer(0,0,0); - - /* - Image Size - */ - int ext[6]; - imageData1->GetExtent(ext); - int sx,sy,sz; - sx=ext[1]-ext[0]+1; - sy=ext[3]-ext[2]+1; - sz=ext[5]-ext[4]+1; - - sizeImage=sx*sy*sz; + + substractByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, imageData1, imageData2); + } +} - //----------------- - //A3 - //----------------- - //walking in the image - int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; - double sum1=0,sum2=0; - for(i=0;i +void Substraction::substractByType(T* dataImagePointer1, T* dataImagePointer2, T* dataImageResultPointer, vtkImageData *imageData1, vtkImageData *imageData2) +{ + // we start where the image starts + dataImagePointer1=(T*)imageData1->GetScalarPointer(0,0,0); + dataImagePointer2=(T*)imageData2->GetScalarPointer(0,0,0); + dataImageResultPointer=(T*)imageResult->GetScalarPointer(0,0,0); + /* + Image Size + */ + int ext[6]; + imageData1->GetExtent(ext); + int sx,sy,sz; + sx=ext[1]-ext[0]+1; + sy=ext[3]-ext[2]+1; + sz=ext[5]-ext[4]+1; + + sizeImage=sx*sy*sz; + //----------------- + //A3 + //----------------- + //walking in the image + int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0; + double sum1=0,sum2=0; + for(i=0;iGetScalarComponentAsFloat(i,j,k,0); - - // we get the pointer to the position (i,j,k)y that way we can get the - //grey level and we can change it - dataImagePointer1=(double*)imageData1->GetScalarPointer(i,j,k); - dataImagePointer2=(double*)imageData2->GetScalarPointer(i,j,k); - dataImageResultPointer=(double*)imageResult->GetScalarPointer(i,j,k); - - sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); - sum1=sum1/3; - sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); - sum2=sum2/3; - if((sum1 - sum2) < lZeroLevel) - { - dataImageResultPointer[0] =(double) lowerColor[0]; - dataImageResultPointer[1] =(double) lowerColor[1]; - dataImageResultPointer[2] =(double) lowerColor[2]; - nL++; - } - else if((sum1 - sum2) > uZeroLevel) - { - dataImageResultPointer[0] =(double) upperColor[0]; - dataImageResultPointer[1] =(double) upperColor[1]; - dataImageResultPointer[2] =(double) upperColor[2]; - nU++; - } - else - { - dataImageResultPointer[0] =(double) mediumColor[0]; - dataImageResultPointer[1] =(double) mediumColor[1]; - dataImageResultPointer[2] =(double) mediumColor[2]; - nZ++; - } - counter++; + // this is for getting just the grey level in that position + //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0); + + // we get the pointer to the position (i,j,k)y that way we can get the + //grey level and we can change it + + dataImagePointer1=(T*)imageData1->GetScalarPointer(i,j,k); + dataImagePointer2=(T*)imageData2->GetScalarPointer(i,j,k); + dataImageResultPointer=(T*)imageResult->GetScalarPointer(i,j,k); + + sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]); + sum1=sum1/3; + sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]); + sum2=sum2/3; + if((sum1 - sum2) < lZeroLevel) + { + dataImageResultPointer[0] =(T) lowerColor[0]; + dataImageResultPointer[1] =(T) lowerColor[1]; + dataImageResultPointer[2] =(T) lowerColor[2]; + nL++; } + else if((sum1 - sum2) > uZeroLevel) + { + dataImageResultPointer[0] =(T) upperColor[0]; + dataImageResultPointer[1] =(T) upperColor[1]; + dataImageResultPointer[2] =(T) upperColor[2]; + nU++; + } + else + { + dataImageResultPointer[0] =(T) mediumColor[0]; + dataImageResultPointer[1] =(T) mediumColor[1]; + dataImageResultPointer[2] =(T) mediumColor[2]; + nZ++; + } + counter++; } } } } + /* Returns the filtered image */ @@ -980,4 +326,4 @@ vtkImageData* Substraction::getSubstractedImage() int Substraction::getImageSize() { return sizeImage; -} \ No newline at end of file +}