ITK/Examples/ImageProcessing/ScaleTransform: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
No edit summary
(Deprecated content that is moved to sphinx)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
In this example, we demonstrate the itkScaleTransform. By specifying the scale as 1.5, what we are actually doing is making the new image bigger than the old image in the physical space. When the image is resampled, the outer regions of the image are not overlapping the old image. Therefore, the resulting image appears to have shrunk, even though the scale factor was > 1.
{{warning|1=The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/*  pages likely require ITK version 4.13 or earlier releases.   In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.
}}


==ScaleTransform.cxx==
[https://itk.org/ITKExamples[ITK Sphinx Examples]]
<source lang="cpp">
#include "itkImage.h"
#include "itkScaleTransform.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkResampleImageFilter.h"
 
typedef itk::Image<unsigned char, 2>  ImageType;
 
static void CreateImage(ImageType::Pointer image);
 
int main(int argc, char *argv[])
{
  ImageType::Pointer image = ImageType::New();
  CreateImage(image);
 
  typedef  itk::ImageFileWriter<ImageType> WriterType;
  WriterType::Pointer inputWriter = WriterType::New();
  inputWriter->SetFileName("input.png");
  inputWriter->SetInput(image);
  inputWriter->Update();
 
  // typedef itk::ScaleTransform<float, 2> TransformType; // If you want to use float here, you must use:
  // typedef itk::ResampleImageFilter<ImageType, ImageType, float> ResampleImageFilterType; later.
  typedef itk::ScaleTransform<double, 2> TransformType;
  TransformType::Pointer scaleTransform = TransformType::New();
  itk::FixedArray<float, 2> scale;
  scale[0] = 1.5; // newWidth/oldWidth
  scale[1] = 1.5;
  scaleTransform->SetScale(scale);
 
  itk::Point<float,2> center;
  center[0] = image->GetLargestPossibleRegion().GetSize()[0]/2;
  center[1] = image->GetLargestPossibleRegion().GetSize()[1]/2;
 
  scaleTransform->SetCenter(center);
  typedef itk::ResampleImageFilter<ImageType, ImageType> ResampleImageFilterType;
  ResampleImageFilterType::Pointer resampleFilter = ResampleImageFilterType::New();
  resampleFilter->SetTransform(scaleTransform);
  resampleFilter->SetInput(image);
  resampleFilter->SetSize(image->GetLargestPossibleRegion().GetSize());
  resampleFilter->Update();
 
  WriterType::Pointer outputWriter = WriterType::New();
  outputWriter->SetFileName("output.png");
  outputWriter->SetInput(resampleFilter->GetOutput());
  outputWriter->Update();
 
  return EXIT_SUCCESS;
}
 
void CreateImage(ImageType::Pointer image)
{
  itk::Index<2> start;
  start.Fill(0);
 
  itk::Size<2> size;
  size.Fill(101);
 
  ImageType::RegionType region(start, size);
  image->SetRegions(region);
  image->Allocate();
  image->FillBuffer(0);
 
  // Make a white square
  for(unsigned int r = 40; r < 60; r++)
    {
    for(unsigned int c = 40; c < 60; c++)
      {
      ImageType::IndexType pixelIndex;
      pixelIndex[0] = r;
      pixelIndex[1] = c;
 
      image->SetPixel(pixelIndex, 255);
      }
    }
 
  itk::ImageRegionIterator<ImageType> imageIterator(image, image->GetLargestPossibleRegion());
 
  // Draw a white border
  while(!imageIterator.IsAtEnd())
    {
    if(imageIterator.GetIndex()[0] == 0 || imageIterator.GetIndex()[0] == static_cast<int>(image->GetLargestPossibleRegion().GetSize()[0]) - 1 ||
      imageIterator.GetIndex()[1] == 0 || imageIterator.GetIndex()[1] == static_cast<int>(image->GetLargestPossibleRegion().GetSize()[1]) - 1)
      {
      imageIterator.Set(255);
      }
    ++imageIterator;
    }
}
 
</source>
 
{{ITKCMakeLists|ScaleTransform}}

Latest revision as of 22:20, 3 June 2019

Warning: The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/* pages likely require ITK version 4.13 or earlier releases. In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.

[ITK Sphinx Examples]