1 #include "bbPackRecalageImageSubstraction.h"
2 #include "bbPackRecalagePackage.h"
3 namespace bbPackRecalage
6 MyImageSubstraction::MyImageSubstraction(vtkImageData* imageData1,vtkImageData* imageData2, int uZLevel,int lZLevel, std::vector<double> uColor, std::vector<double> lColor, std::vector<double> mColor)
8 imageResult= vtkImageData::New();
12 if(uColor.size() != NULL)
14 upperColor[0] = uColor[0];
15 upperColor[1] = uColor[1];
16 upperColor[2] = uColor[2];
24 if(mColor.size() != NULL)
26 mediumColor[0] = mColor[0];
27 mediumColor[1] = mColor[1];
28 mediumColor[2] = mColor[2];
36 if(lColor.size() != NULL)
38 lowerColor[0] = lColor[0];
39 lowerColor[1] = lColor[1];
40 lowerColor[2] = lColor[2];
49 //Original image type this case is an unsigned char (3)
50 int t=imageData1->GetScalarType();
51 //substracting the image
52 substractImage(imageData1, imageData2);
55 MyImageSubstraction::~MyImageSubstraction()
57 if(imageResult!=NULL)imageResult->Delete();
60 //----------------------------------------------------------------------------
62 //----------------------------------------------------------------------------
66 Calculate the new image and save it in the attribute imageResult
67 it is used if the user had given the imageData
69 void MyImageSubstraction::substractImage(vtkImageData* imageData1, vtkImageData* imageData2)
71 //dimensions of the image (extent)
73 //setting the dimensionality (1d or 2d or 3d )
78 //getting the information from the original image
79 imageData1->GetSpacing(spc);
80 imageData1->GetExtent(ext);
83 newDim[0]=ext[1]-ext[0]+1;
84 newDim[1]=ext[3]-ext[2]+1;
85 newDim[2]=1;// in general it is ext[5]-ext[4]+1
88 //initializing the image that represents the substracted image
89 initialize(newDim,spc);
91 substract(imageData1, imageData2);
95 getting ready the imageResult
97 void MyImageSubstraction::initialize(int dimensions[], double spacing[])
99 //setting image data of the imageResult
100 imageResult->SetScalarTypeToUnsignedChar();
101 imageResult->SetSpacing(spacing);
102 imageResult->SetDimensions(dimensions);
103 imageResult->AllocateScalars();
104 imageResult->Update();
108 Setting the values for the
110 void MyImageSubstraction::substract(vtkImageData* imageData1, vtkImageData* imageData2)
115 //the new image type is unsigned short (5)
116 int t=imageData1->GetScalarType();
118 // pointers to get into the image
119 unsigned char* dataImagePointer1=NULL;
120 unsigned char* dataImagePointer2=NULL;
121 unsigned char* dataImageResultPointer=NULL;
122 // we start where the image starts
123 dataImagePointer1=(unsigned char*)imageData1->GetScalarPointer(0,0,0);
124 dataImagePointer2=(unsigned char*)imageData2->GetScalarPointer(0,0,0);
125 dataImageResultPointer=(unsigned char*)imageResult->GetScalarPointer(0,0,0);
131 imageData1->GetExtent(ext);
142 //walking in the image
143 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
144 double sum1=0,sum2=0;
152 // this is for getting just the grey level in that position
153 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
155 // we get the pointer to the position (i,j,k)y that way we can get the
156 //grey level and we can change it
157 dataImagePointer1=(unsigned char*)imageData1->GetScalarPointer(i,j,k);
158 dataImagePointer2=(unsigned char*)imageData2->GetScalarPointer(i,j,k);
159 dataImageResultPointer=(unsigned char*)imageResult->GetScalarPointer(i,j,k);
161 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
163 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
165 if((sum1 - sum2) < lZeroLevel)
167 dataImageResultPointer[0] =(unsigned char) lowerColor[0];
168 dataImageResultPointer[1] =(unsigned char) lowerColor[1];
169 dataImageResultPointer[2] =(unsigned char) lowerColor[2];
172 else if((sum1 - sum2) > uZeroLevel)
174 dataImageResultPointer[0] =(unsigned char) upperColor[0];
175 dataImageResultPointer[1] =(unsigned char) upperColor[1];
176 dataImageResultPointer[2] =(unsigned char) upperColor[2];
181 dataImageResultPointer[0] =(unsigned char) mediumColor[0];
182 dataImageResultPointer[1] =(unsigned char) mediumColor[1];
183 dataImageResultPointer[2] =(unsigned char) mediumColor[2];
192 Returns the filtered image
194 vtkImageData* MyImageSubstraction::getSubstractedImage()
202 int MyImageSubstraction::getImageSize()
207 BBTK_ADD_BLACK_BOX_TO_PACKAGE(PackRecalage,ImageSubstraction)
208 BBTK_BLACK_BOX_IMPLEMENTATION(ImageSubstraction,bbtk::AtomicBlackBox);
209 void ImageSubstraction::Process()
211 MyImageSubstraction* subImage = new MyImageSubstraction(bbGetInputIn1(),bbGetInputIn2(),bbGetInputIn3(),bbGetInputIn4(),bbGetInputInU(),bbGetInputInL(),bbGetInputInM());
213 bbSetOutputOut(subImage->getSubstractedImage());
215 void ImageSubstraction::bbUserSetDefaultValues()
221 std::vector<double> vector;
222 bbSetInputInU(vector);
223 bbSetInputInM(vector);
224 bbSetInputInL(vector);
227 void ImageSubstraction::bbUserInitializeProcessing()
230 // THE INITIALIZATION METHOD BODY :
232 // but this is where you should allocate the internal/output pointers
237 void ImageSubstraction::bbUserFinalizeProcessing()
240 // THE FINALIZATION METHOD BODY :
242 // but this is where you should desallocate the internal/output pointers
247 // EO namespace bbCreaRecalage