1 #include "Substraction.h"
3 Substraction::Substraction(vtkImageData* imageData1,vtkImageData* imageData2, int uZLevel,int lZLevel, std::vector<double> uColor, std::vector<double> lColor, std::vector<double> mColor)
5 imageResult= vtkImageData::New();
9 if(uColor.size() != NULL)
11 upperColor[0] = uColor[0];
12 upperColor[1] = uColor[1];
13 upperColor[2] = uColor[2];
21 if(mColor.size() != NULL)
23 mediumColor[0] = mColor[0];
24 mediumColor[1] = mColor[1];
25 mediumColor[2] = mColor[2];
33 if(lColor.size() != NULL)
35 lowerColor[0] = lColor[0];
36 lowerColor[1] = lColor[1];
37 lowerColor[2] = lColor[2];
46 //Original image type this case is an unsigned char (3)
47 int t=imageData1->GetScalarType();
48 //substracting the image
49 substractImage(imageData1, imageData2);
52 Substraction::~Substraction()
54 if(imageResult!=NULL)imageResult->Delete();
57 //----------------------------------------------------------------------------
59 //----------------------------------------------------------------------------
63 Calculate the new image and save it in the attribute imageResult
64 it is used if the user had given the imageData
66 void Substraction::substractImage(vtkImageData* imageData1, vtkImageData* imageData2)
68 //dimensions of the image (extent)
70 //setting the dimensionality (1d or 2d or 3d )
75 //getting the information from the original image
76 imageData1->GetSpacing(spc);
77 imageData1->GetExtent(ext);
80 newDim[0]=ext[1]-ext[0]+1;
81 newDim[1]=ext[3]-ext[2]+1;
82 newDim[2]=1;// in general it is ext[5]-ext[4]+1
85 imageType = imageData1->GetScalarType();
86 //initializing the image that represents the substracted image
87 initialize(newDim,spc);
89 substract(imageData1, imageData2);
93 getting ready the imageResult
95 void Substraction::initialize(int dimensions[], double spacing[])
97 //setting image data of the imageResult
98 imageResult->SetScalarType(imageType);
99 imageResult->SetSpacing(spacing);
100 imageResult->SetDimensions(dimensions);
101 imageResult->AllocateScalars();
102 imageResult->Update();
106 Setting the values for the
108 void Substraction::substract(vtkImageData* imageData1, vtkImageData* imageData2)
110 if(imageType == VTK_CHAR)
115 // pointers to get into the image
116 char* dataImagePointer1=NULL;
117 char* dataImagePointer2=NULL;
118 char* dataImageResultPointer=NULL;
119 // we start where the image starts
120 dataImagePointer1=(char*)imageData1->GetScalarPointer(0,0,0);
121 dataImagePointer2=(char*)imageData2->GetScalarPointer(0,0,0);
122 dataImageResultPointer=(char*)imageResult->GetScalarPointer(0,0,0);
128 imageData1->GetExtent(ext);
139 //walking in the image
140 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
141 double sum1=0,sum2=0;
149 // this is for getting just the grey level in that position
150 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
152 // we get the pointer to the position (i,j,k)y that way we can get the
153 //grey level and we can change it
154 dataImagePointer1=(char*)imageData1->GetScalarPointer(i,j,k);
155 dataImagePointer2=(char*)imageData2->GetScalarPointer(i,j,k);
156 dataImageResultPointer=(char*)imageResult->GetScalarPointer(i,j,k);
158 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
160 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
162 if((sum1 - sum2) < lZeroLevel)
164 dataImageResultPointer[0] =(char) lowerColor[0];
165 dataImageResultPointer[1] =(char) lowerColor[1];
166 dataImageResultPointer[2] =(char) lowerColor[2];
169 else if((sum1 - sum2) > uZeroLevel)
171 dataImageResultPointer[0] =(char) upperColor[0];
172 dataImageResultPointer[1] =(char) upperColor[1];
173 dataImageResultPointer[2] =(char) upperColor[2];
178 dataImageResultPointer[0] =(char) mediumColor[0];
179 dataImageResultPointer[1] =(char) mediumColor[1];
180 dataImageResultPointer[2] =(char) mediumColor[2];
188 else if(imageType == VTK_UNSIGNED_CHAR)
193 // pointers to get into the image
194 unsigned char* dataImagePointer1=NULL;
195 unsigned char* dataImagePointer2=NULL;
196 unsigned char* dataImageResultPointer=NULL;
197 // we start where the image starts
198 dataImagePointer1=(unsigned char*)imageData1->GetScalarPointer(0,0,0);
199 dataImagePointer2=(unsigned char*)imageData2->GetScalarPointer(0,0,0);
200 dataImageResultPointer=(unsigned char*)imageResult->GetScalarPointer(0,0,0);
206 imageData1->GetExtent(ext);
217 //walking in the image
218 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
219 double sum1=0,sum2=0;
227 // this is for getting just the grey level in that position
228 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
230 // we get the pointer to the position (i,j,k)y that way we can get the
231 //grey level and we can change it
232 dataImagePointer1=(unsigned char*)imageData1->GetScalarPointer(i,j,k);
233 dataImagePointer2=(unsigned char*)imageData2->GetScalarPointer(i,j,k);
234 dataImageResultPointer=(unsigned char*)imageResult->GetScalarPointer(i,j,k);
236 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
238 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
240 if((sum1 - sum2) < lZeroLevel)
242 dataImageResultPointer[0] =(unsigned char) lowerColor[0];
243 dataImageResultPointer[1] =(unsigned char) lowerColor[1];
244 dataImageResultPointer[2] =(unsigned char) lowerColor[2];
247 else if((sum1 - sum2) > uZeroLevel)
249 dataImageResultPointer[0] =(unsigned char) upperColor[0];
250 dataImageResultPointer[1] =(unsigned char) upperColor[1];
251 dataImageResultPointer[2] =(unsigned char) upperColor[2];
256 dataImageResultPointer[0] =(unsigned char) mediumColor[0];
257 dataImageResultPointer[1] =(unsigned char) mediumColor[1];
258 dataImageResultPointer[2] =(unsigned char) mediumColor[2];
266 else if(imageType == VTK_SIGNED_CHAR)
271 // pointers to get into the image
272 signed char* dataImagePointer1=NULL;
273 signed char* dataImagePointer2=NULL;
274 signed char* dataImageResultPointer=NULL;
275 // we start where the image starts
276 dataImagePointer1=(signed char*)imageData1->GetScalarPointer(0,0,0);
277 dataImagePointer2=(signed char*)imageData2->GetScalarPointer(0,0,0);
278 dataImageResultPointer=(signed char*)imageResult->GetScalarPointer(0,0,0);
284 imageData1->GetExtent(ext);
295 //walking in the image
296 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
297 double sum1=0,sum2=0;
305 // this is for getting just the grey level in that position
306 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
308 // we get the pointer to the position (i,j,k)y that way we can get the
309 //grey level and we can change it
310 dataImagePointer1=(signed char*)imageData1->GetScalarPointer(i,j,k);
311 dataImagePointer2=(signed char*)imageData2->GetScalarPointer(i,j,k);
312 dataImageResultPointer=(signed char*)imageResult->GetScalarPointer(i,j,k);
314 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
316 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
318 if((sum1 - sum2) < lZeroLevel)
320 dataImageResultPointer[0] =(signed char) lowerColor[0];
321 dataImageResultPointer[1] =(signed char) lowerColor[1];
322 dataImageResultPointer[2] =(signed char) lowerColor[2];
325 else if((sum1 - sum2) > uZeroLevel)
327 dataImageResultPointer[0] =(signed char) upperColor[0];
328 dataImageResultPointer[1] =(signed char) upperColor[1];
329 dataImageResultPointer[2] =(signed char) upperColor[2];
334 dataImageResultPointer[0] =(signed char) mediumColor[0];
335 dataImageResultPointer[1] =(signed char) mediumColor[1];
336 dataImageResultPointer[2] =(signed char) mediumColor[2];
344 else if(imageType == VTK_SHORT)
349 // pointers to get into the image
350 short* dataImagePointer1=NULL;
351 short* dataImagePointer2=NULL;
352 short* dataImageResultPointer=NULL;
353 // we start where the image starts
354 dataImagePointer1=(short*)imageData1->GetScalarPointer(0,0,0);
355 dataImagePointer2=(short*)imageData2->GetScalarPointer(0,0,0);
356 dataImageResultPointer=(short*)imageResult->GetScalarPointer(0,0,0);
362 imageData1->GetExtent(ext);
373 //walking in the image
374 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
375 double sum1=0,sum2=0;
383 // this is for getting just the grey level in that position
384 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
386 // we get the pointer to the position (i,j,k)y that way we can get the
387 //grey level and we can change it
388 dataImagePointer1=(short*)imageData1->GetScalarPointer(i,j,k);
389 dataImagePointer2=(short*)imageData2->GetScalarPointer(i,j,k);
390 dataImageResultPointer=(short*)imageResult->GetScalarPointer(i,j,k);
392 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
394 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
396 if((sum1 - sum2) < lZeroLevel)
398 dataImageResultPointer[0] =(short) lowerColor[0];
399 dataImageResultPointer[1] =(short) lowerColor[1];
400 dataImageResultPointer[2] =(short) lowerColor[2];
403 else if((sum1 - sum2) > uZeroLevel)
405 dataImageResultPointer[0] =(short) upperColor[0];
406 dataImageResultPointer[1] =(short) upperColor[1];
407 dataImageResultPointer[2] =(short) upperColor[2];
412 dataImageResultPointer[0] =(short) mediumColor[0];
413 dataImageResultPointer[1] =(short) mediumColor[1];
414 dataImageResultPointer[2] =(short) mediumColor[2];
422 else if(imageType == VTK_UNSIGNED_SHORT)
427 // pointers to get into the image
428 unsigned short* dataImagePointer1=NULL;
429 unsigned short* dataImagePointer2=NULL;
430 unsigned short* dataImageResultPointer=NULL;
431 // we start where the image starts
432 dataImagePointer1=(unsigned short*)imageData1->GetScalarPointer(0,0,0);
433 dataImagePointer2=(unsigned short*)imageData2->GetScalarPointer(0,0,0);
434 dataImageResultPointer=(unsigned short*)imageResult->GetScalarPointer(0,0,0);
440 imageData1->GetExtent(ext);
451 //walking in the image
452 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
453 double sum1=0,sum2=0;
461 // this is for getting just the grey level in that position
462 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
464 // we get the pointer to the position (i,j,k)y that way we can get the
465 //grey level and we can change it
466 dataImagePointer1=(unsigned short*)imageData1->GetScalarPointer(i,j,k);
467 dataImagePointer2=(unsigned short*)imageData2->GetScalarPointer(i,j,k);
468 dataImageResultPointer=(unsigned short*)imageResult->GetScalarPointer(i,j,k);
470 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
472 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
474 if((sum1 - sum2) < lZeroLevel)
476 dataImageResultPointer[0] =(unsigned short) lowerColor[0];
477 dataImageResultPointer[1] =(unsigned short) lowerColor[1];
478 dataImageResultPointer[2] =(unsigned short) lowerColor[2];
481 else if((sum1 - sum2) > uZeroLevel)
483 dataImageResultPointer[0] =(unsigned short) upperColor[0];
484 dataImageResultPointer[1] =(unsigned short) upperColor[1];
485 dataImageResultPointer[2] =(unsigned short) upperColor[2];
490 dataImageResultPointer[0] =(unsigned short) mediumColor[0];
491 dataImageResultPointer[1] =(unsigned short) mediumColor[1];
492 dataImageResultPointer[2] =(unsigned short) mediumColor[2];
500 else if(imageType == VTK_INT)
505 // pointers to get into the image
506 int* dataImagePointer1=NULL;
507 int* dataImagePointer2=NULL;
508 int* dataImageResultPointer=NULL;
509 // we start where the image starts
510 dataImagePointer1=(int*)imageData1->GetScalarPointer(0,0,0);
511 dataImagePointer2=(int*)imageData2->GetScalarPointer(0,0,0);
512 dataImageResultPointer=(int*)imageResult->GetScalarPointer(0,0,0);
518 imageData1->GetExtent(ext);
529 //walking in the image
530 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
531 double sum1=0,sum2=0;
539 // this is for getting just the grey level in that position
540 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
542 // we get the pointer to the position (i,j,k)y that way we can get the
543 //grey level and we can change it
544 dataImagePointer1=(int*)imageData1->GetScalarPointer(i,j,k);
545 dataImagePointer2=(int*)imageData2->GetScalarPointer(i,j,k);
546 dataImageResultPointer=(int*)imageResult->GetScalarPointer(i,j,k);
548 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
550 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
552 if((sum1 - sum2) < lZeroLevel)
554 dataImageResultPointer[0] =(int) lowerColor[0];
555 dataImageResultPointer[1] =(int) lowerColor[1];
556 dataImageResultPointer[2] =(int) lowerColor[2];
559 else if((sum1 - sum2) > uZeroLevel)
561 dataImageResultPointer[0] =(int) upperColor[0];
562 dataImageResultPointer[1] =(int) upperColor[1];
563 dataImageResultPointer[2] =(int) upperColor[2];
568 dataImageResultPointer[0] =(int) mediumColor[0];
569 dataImageResultPointer[1] =(int) mediumColor[1];
570 dataImageResultPointer[2] =(int) mediumColor[2];
578 else if(imageType == VTK_UNSIGNED_INT)
583 // pointers to get into the image
584 unsigned int* dataImagePointer1=NULL;
585 unsigned int* dataImagePointer2=NULL;
586 unsigned int* dataImageResultPointer=NULL;
587 // we start where the image starts
588 dataImagePointer1=(unsigned int*)imageData1->GetScalarPointer(0,0,0);
589 dataImagePointer2=(unsigned int*)imageData2->GetScalarPointer(0,0,0);
590 dataImageResultPointer=(unsigned int*)imageResult->GetScalarPointer(0,0,0);
596 imageData1->GetExtent(ext);
607 //walking in the image
608 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
609 double sum1=0,sum2=0;
617 // this is for getting just the grey level in that position
618 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
620 // we get the pointer to the position (i,j,k)y that way we can get the
621 //grey level and we can change it
622 dataImagePointer1=(unsigned int*)imageData1->GetScalarPointer(i,j,k);
623 dataImagePointer2=(unsigned int*)imageData2->GetScalarPointer(i,j,k);
624 dataImageResultPointer=(unsigned int*)imageResult->GetScalarPointer(i,j,k);
626 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
628 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
630 if((sum1 - sum2) < lZeroLevel)
632 dataImageResultPointer[0] =(unsigned int) lowerColor[0];
633 dataImageResultPointer[1] =(unsigned int) lowerColor[1];
634 dataImageResultPointer[2] =(unsigned int) lowerColor[2];
637 else if((sum1 - sum2) > uZeroLevel)
639 dataImageResultPointer[0] =(unsigned int) upperColor[0];
640 dataImageResultPointer[1] =(unsigned int) upperColor[1];
641 dataImageResultPointer[2] =(unsigned int) upperColor[2];
646 dataImageResultPointer[0] =(unsigned int) mediumColor[0];
647 dataImageResultPointer[1] =(unsigned int) mediumColor[1];
648 dataImageResultPointer[2] =(unsigned int) mediumColor[2];
656 else if(imageType == VTK_LONG)
661 // pointers to get into the image
662 long* dataImagePointer1=NULL;
663 long* dataImagePointer2=NULL;
664 long* dataImageResultPointer=NULL;
665 // we start where the image starts
666 dataImagePointer1=(long*)imageData1->GetScalarPointer(0,0,0);
667 dataImagePointer2=(long*)imageData2->GetScalarPointer(0,0,0);
668 dataImageResultPointer=(long*)imageResult->GetScalarPointer(0,0,0);
674 imageData1->GetExtent(ext);
685 //walking in the image
686 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
687 double sum1=0,sum2=0;
695 // this is for getting just the grey level in that position
696 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
698 // we get the pointer to the position (i,j,k)y that way we can get the
699 //grey level and we can change it
700 dataImagePointer1=(long*)imageData1->GetScalarPointer(i,j,k);
701 dataImagePointer2=(long*)imageData2->GetScalarPointer(i,j,k);
702 dataImageResultPointer=(long*)imageResult->GetScalarPointer(i,j,k);
704 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
706 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
708 if((sum1 - sum2) < lZeroLevel)
710 dataImageResultPointer[0] =(long) lowerColor[0];
711 dataImageResultPointer[1] =(long) lowerColor[1];
712 dataImageResultPointer[2] =(long) lowerColor[2];
715 else if((sum1 - sum2) > uZeroLevel)
717 dataImageResultPointer[0] =(long) upperColor[0];
718 dataImageResultPointer[1] =(long) upperColor[1];
719 dataImageResultPointer[2] =(long) upperColor[2];
724 dataImageResultPointer[0] =(long) mediumColor[0];
725 dataImageResultPointer[1] =(long) mediumColor[1];
726 dataImageResultPointer[2] =(long) mediumColor[2];
734 else if(imageType == VTK_UNSIGNED_LONG)
739 // pointers to get into the image
740 unsigned long* dataImagePointer1=NULL;
741 unsigned long* dataImagePointer2=NULL;
742 unsigned long* dataImageResultPointer=NULL;
743 // we start where the image starts
744 dataImagePointer1=(unsigned long*)imageData1->GetScalarPointer(0,0,0);
745 dataImagePointer2=(unsigned long*)imageData2->GetScalarPointer(0,0,0);
746 dataImageResultPointer=(unsigned long*)imageResult->GetScalarPointer(0,0,0);
752 imageData1->GetExtent(ext);
763 //walking in the image
764 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
765 double sum1=0,sum2=0;
773 // this is for getting just the grey level in that position
774 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
776 // we get the pointer to the position (i,j,k)y that way we can get the
777 //grey level and we can change it
778 dataImagePointer1=(unsigned long*)imageData1->GetScalarPointer(i,j,k);
779 dataImagePointer2=(unsigned long*)imageData2->GetScalarPointer(i,j,k);
780 dataImageResultPointer=(unsigned long*)imageResult->GetScalarPointer(i,j,k);
782 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
784 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
786 if((sum1 - sum2) < lZeroLevel)
788 dataImageResultPointer[0] =(unsigned long) lowerColor[0];
789 dataImageResultPointer[1] =(unsigned long) lowerColor[1];
790 dataImageResultPointer[2] =(unsigned long) lowerColor[2];
793 else if((sum1 - sum2) > uZeroLevel)
795 dataImageResultPointer[0] =(unsigned long) upperColor[0];
796 dataImageResultPointer[1] =(unsigned long) upperColor[1];
797 dataImageResultPointer[2] =(unsigned long) upperColor[2];
802 dataImageResultPointer[0] =(unsigned long) mediumColor[0];
803 dataImageResultPointer[1] =(unsigned long) mediumColor[1];
804 dataImageResultPointer[2] =(unsigned long) mediumColor[2];
812 else if(imageType == VTK_FLOAT)
817 // pointers to get into the image
818 float* dataImagePointer1=NULL;
819 float* dataImagePointer2=NULL;
820 float* dataImageResultPointer=NULL;
821 // we start where the image starts
822 dataImagePointer1=(float*)imageData1->GetScalarPointer(0,0,0);
823 dataImagePointer2=(float*)imageData2->GetScalarPointer(0,0,0);
824 dataImageResultPointer=(float*)imageResult->GetScalarPointer(0,0,0);
830 imageData1->GetExtent(ext);
841 //walking in the image
842 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
843 double sum1=0,sum2=0;
851 // this is for getting just the grey level in that position
852 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
854 // we get the pointer to the position (i,j,k)y that way we can get the
855 //grey level and we can change it
856 dataImagePointer1=(float*)imageData1->GetScalarPointer(i,j,k);
857 dataImagePointer2=(float*)imageData2->GetScalarPointer(i,j,k);
858 dataImageResultPointer=(float*)imageResult->GetScalarPointer(i,j,k);
860 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
862 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
864 if((sum1 - sum2) < lZeroLevel)
866 dataImageResultPointer[0] =(float) lowerColor[0];
867 dataImageResultPointer[1] =(float) lowerColor[1];
868 dataImageResultPointer[2] =(float) lowerColor[2];
871 else if((sum1 - sum2) > uZeroLevel)
873 dataImageResultPointer[0] =(float) upperColor[0];
874 dataImageResultPointer[1] =(float) upperColor[1];
875 dataImageResultPointer[2] =(float) upperColor[2];
880 dataImageResultPointer[0] =(float) mediumColor[0];
881 dataImageResultPointer[1] =(float) mediumColor[1];
882 dataImageResultPointer[2] =(float) mediumColor[2];
890 else if(imageType == VTK_DOUBLE)
895 // pointers to get into the image
896 double* dataImagePointer1=NULL;
897 double* dataImagePointer2=NULL;
898 double* dataImageResultPointer=NULL;
899 // we start where the image starts
900 dataImagePointer1=(double*)imageData1->GetScalarPointer(0,0,0);
901 dataImagePointer2=(double*)imageData2->GetScalarPointer(0,0,0);
902 dataImageResultPointer=(double*)imageResult->GetScalarPointer(0,0,0);
908 imageData1->GetExtent(ext);
919 //walking in the image
920 int i=0,j=0,k=0,counter=0,nU=0,nL=0,nZ=0;
921 double sum1=0,sum2=0;
929 // this is for getting just the grey level in that position
930 //originalValue=(short)imageData->GetScalarComponentAsFloat(i,j,k,0);
932 // we get the pointer to the position (i,j,k)y that way we can get the
933 //grey level and we can change it
934 dataImagePointer1=(double*)imageData1->GetScalarPointer(i,j,k);
935 dataImagePointer2=(double*)imageData2->GetScalarPointer(i,j,k);
936 dataImageResultPointer=(double*)imageResult->GetScalarPointer(i,j,k);
938 sum1=(int)(dataImagePointer1[0]) + (int)(dataImagePointer1[1]) + (int)(dataImagePointer1[2]);
940 sum2=(int)(dataImagePointer2[0]) + (int)(dataImagePointer2[1]) + (int)(dataImagePointer2[2]);
942 if((sum1 - sum2) < lZeroLevel)
944 dataImageResultPointer[0] =(double) lowerColor[0];
945 dataImageResultPointer[1] =(double) lowerColor[1];
946 dataImageResultPointer[2] =(double) lowerColor[2];
949 else if((sum1 - sum2) > uZeroLevel)
951 dataImageResultPointer[0] =(double) upperColor[0];
952 dataImageResultPointer[1] =(double) upperColor[1];
953 dataImageResultPointer[2] =(double) upperColor[2];
958 dataImageResultPointer[0] =(double) mediumColor[0];
959 dataImageResultPointer[1] =(double) mediumColor[1];
960 dataImageResultPointer[2] =(double) mediumColor[2];
970 Returns the filtered image
972 vtkImageData* Substraction::getSubstractedImage()
980 int Substraction::getImageSize()