ITK/Examples/ImageProcessing/CropImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Now uses QuickView. Also takes an optional input filename.)
(Deprecated content that is moved to sphinx)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
<div class="floatcenter">[[File:ITK_Examples_Baseline_ImageProcessing_TestCropImageFilter.png]]</div>
{{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 releasesIn many cases, the examples on this page no longer conform to the best practices for modern ITK versions.
==Description==
}}
This example demonstrates how to crop an image. The SetBoundaryCropSize( cropSize ) method specifies the size of the boundary to be cropped at both the uppper & lower ends of the image - e.g. cropSize/2 pixels will be removed at both upper & lower extents.
 
==Classes Demonstrated==
{{ITKDoxygenURL|CropImageFilter}}
 
==Output==
The original image is displayed on the left. The cropped image is displayed on the right.
 
==CropImageFilter.cxx==
<source lang="cpp">
#include "itkImage.h"
#include "itkImageFileWriter.h"
#include "itkImageFileReader.h"
#include "itkCropImageFilter.h"
 
#include "itksys/SystemTools.hxx"
 
#include "QuickView.h"
 
typedef itk::RGBPixel<unsigned char> PixelType;
typedef itk::Image<PixelType, 2>    ImageType;
 
static void CreateImage(ImageType::Pointer image);
 
int main(int argc, char *argv[])
{
  ImageType::Pointer image = ImageType::New();
  ImageType::SizeType cropSize;
  std::stringstream desc;
 
  if (argc > 1)
    {
    typedef itk::ImageFileReader<ImageType> ReaderType;
    ReaderType::Pointer reader = ReaderType::New();
    reader->SetFileName( argv[1] );
    if (argc > 2)
      {
      cropSize[0] = atoi(argv[2]);
      cropSize[1] = atoi(argv[3]);
      }
    reader->Update();
    image = reader->GetOutput();
    desc << itksys::SystemTools::GetFilenameName(argv[1]);
    }
  else
    {
    CreateImage(image);
    cropSize[0] = 10;
    cropSize[1] = 14;
    desc << "Synthetic image";
    }
 
  typedef itk::CropImageFilter <ImageType, ImageType>
    CropImageFilterType;
 
  CropImageFilterType::Pointer cropFilter
    = CropImageFilterType::New();
  cropFilter->SetInput(image);
  // The SetBoundaryCropSize( cropSize ) method specifies the size of
  // the boundary to be cropped at both the uppper & lower ends of the
  // image eg. cropSize/2 pixels will be removed at both upper & lower
  // extents
 
  cropFilter->SetBoundaryCropSize(cropSize);
 
  // The below three lines are equivalent to the above two lines:
  //ImageType::SizeType halfCropSize = {5,7};
  //cropFilter->SetUpperBoundaryCropSize(halfCropSize);
  //cropFilter->SetLowerBoundaryCropSize(halfCropSize);
 
  QuickView viewer;
  viewer.AddRGBImage(
    image.GetPointer(),
    true,
    desc.str()); 
 
  std::stringstream desc2;
  desc2 << "CropImageFilter, crop size = {"
        << cropSize[0] << ", " << cropSize[1] << "}";
  viewer.AddRGBImage(
    cropFilter->GetOutput(),
    true,
    desc2.str());  
 
  viewer.Visualize();
 
  return EXIT_SUCCESS;
}
 
void CreateImage(ImageType::Pointer image)
{
  // Create an image with 2 connected components
  ImageType::RegionType region;
  ImageType::IndexType start;
  start[0] = 0;
  start[1] = 0;
 
  ImageType::SizeType size;
  unsigned int NumRows = 200;
  unsigned int NumCols = 300;
  size[0] = NumRows;
  size[1] = NumCols;
 
  region.SetSize(size);
  region.SetIndex(start);
 
  image->SetRegions(region);
  image->Allocate();
  image->FillBuffer( itk::NumericTraits<ImageType::PixelType>::Zero);
 
   // Make a rectangle, centered at (100,150) with sides 160 & 240
  // This provides a 20 x 30 border around the square for the crop filter to remove
  for(unsigned int r = 20; r < 180; r++)
    {
    for(unsigned int c = 30; c < 270; c++)
      {
      ImageType::IndexType pixelIndex;
      pixelIndex[0] = r;
      pixelIndex[1] = c;
     
      image->SetPixel(pixelIndex, 200);
      }
    }
}
</source>
 
{{ITKVTKCMakeLists|CropImageFilter|}}

Latest revision as of 19:25, 5 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.