Advertisement
Guest User

image scaling

a guest
Nov 2nd, 2012
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ImageType::Pointer randomscaler(ImageType::Pointer inputimage, ImageType::RegionType iterregion)
  2. {
  3.     typedef itk::MinimumMaximumImageCalculator <ImageType>  ImageCalculatorFilterType;
  4.     ImageCalculatorFilterType::Pointer imageCalculatorFilter = ImageCalculatorFilterType::New ();
  5.    
  6.     imageCalculatorFilter->SetImage( inputimage );
  7.     imageCalculatorFilter->Compute();
  8.  
  9.     PixelType Imin = imageCalculatorFilter->GetMinimum();
  10.     PixelType Imax = imageCalculatorFilter->GetMaximum();
  11.     PixelType Omin = 0;
  12.     PixelType Omax = 1;
  13.  
  14.     typedef itk::ImageRegionIterator< ImageType > IteratorType;
  15.     IteratorType imageIterator(inputimage,iterregion);
  16.  
  17.     imageIterator.GoToBegin();
  18.  
  19.     std::cout << "image iterator at end?" << imageIterator.IsAtEnd() << std::endl; //gives 1 always
  20.  
  21.     while(!imageIterator.IsAtEnd())
  22.     {
  23.         PixelType inputPixel = imageIterator.Get();
  24.         PixelType outputPixel = (inputPixel-Imin)*((Omax-Omin)/(Imax-Imin))+Omin;
  25.         imageIterator.Set(outputPixel);
  26.         ++imageIterator;
  27.     }
  28.  
  29.     ImageType::Pointer outputimage = inputimage;
  30.  
  31.     return outputimage;
  32. }
  33.  
  34. int main(int argc , char *argv[])
  35. {
  36.     if( argc < 3 )
  37.     {
  38.         std::cerr << "Usage: " << std::endl;
  39.         std::cerr << argv[1] << " inputImageFile" << std::endl;
  40.         std::cerr << argv[2] << " outputImageFile" << std::endl;
  41.         return EXIT_FAILURE;
  42.     }
  43.  
  44.     ReaderType::Pointer reader = ReaderType::New();
  45.  
  46.     reader->SetFileName(argv[1]);
  47.     reader->Update();
  48.  
  49.     ImageType::Pointer image = reader->GetOutput();
  50.     ImageType::RegionType region = image->GetLargestPossibleRegion();
  51.     ImageType::SizeType size = region.GetSize();
  52.  
  53.     ImageType::IndexType volumestart;
  54.     volumestart = image->GetLargestPossibleRegion().GetIndex();
  55.  
  56.     int nrofloops = size[ImageDimension-1];
  57.  
  58.     size[ImageDimension-1] = 0;
  59.  
  60.     region.SetSize(size);
  61.  
  62.     ImageType::Pointer scaledImage;
  63.     scaledImage = image;
  64.  
  65.     for(int i=0; i < nrofloops; i++)
  66.     {
  67.         volumestart[ImageDimension-1] = i;
  68.         region.SetIndex(volumestart);
  69.         scaledImage = randomscaler(scaledImage, region);           
  70.     }
  71.  
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement