ITK/Examples/ImageProcessing/CropImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
Line 20: Line 20:
typedef itk::Image<unsigned char, 2>  ImageType;
typedef itk::Image<unsigned char, 2>  ImageType;


void CreateImage(ImageType::Pointer image);
static void CreateImage(ImageType::Pointer image);


int main(int, char *[])
int main(int, char *[])
Line 130: Line 130:
   // This provides a 20 x 30 border around the square for the crop filter to remove
   // 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 r = 20; r < 180; r++)
  {
    {
     for(unsigned int c = 30; c < 270; c++)
     for(unsigned int c = 30; c < 270; c++)
    {
      {
       ImageType::IndexType pixelIndex;
       ImageType::IndexType pixelIndex;
       pixelIndex[0] = r;
       pixelIndex[0] = r;
Line 138: Line 138:
        
        
       image->SetPixel(pixelIndex, 200);
       image->SetPixel(pixelIndex, 200);
      }
     }
     }
  }
}
}
</source>
</source>

Revision as of 05:21, 16 November 2010

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

CropImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkRescaleIntensityImageFilter.h"
  4. include "itkCropImageFilter.h"
  1. include "itkImageToVTKImageFilter.h"
  1. include "vtkImageViewer.h"
  2. include "vtkRenderWindowInteractor.h"
  3. include "vtkSmartPointer.h"
  4. include "vtkImageActor.h"
  5. include "vtkInteractorStyleImage.h"
  6. include "vtkRenderer.h"

typedef itk::Image<unsigned char, 2> ImageType;

static void CreateImage(ImageType::Pointer image);

int main(int, char *[]) {

 ImageType::Pointer image = ImageType::New();
 CreateImage(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
 ImageType::SizeType cropSize = {10,15};
 cropFilter->SetBoundaryCropSize(cropSize);
 // Doxygen shows these as protected attributes. Should they be available to a user
 // The Test for CropImageFilter shows the below usage. Is it correct ?
 //cropFilter->SetUpperBoundaryCropSize(cropSize);
 //cropFilter->SetLowerBoundaryCropSize(cropSize);
 cropFilter->Update();
 // Visualize first image
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer originalConnector = ConnectorType::New();
 originalConnector->SetInput(image);
 vtkSmartPointer<vtkImageActor> originalActor =
   vtkSmartPointer<vtkImageActor>::New();
 originalActor->SetInput(originalConnector->GetOutput());
 // Visualize permuted image
 ConnectorType::Pointer croppedConnector = ConnectorType::New();
 croppedConnector->SetInput(cropFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> croppedActor =
   vtkSmartPointer<vtkImageActor>::New();
 croppedActor->SetInput(croppedConnector->GetOutput());
 // There will be one render window
 vtkSmartPointer<vtkRenderWindow> renderWindow =
   vtkSmartPointer<vtkRenderWindow>::New();
 renderWindow->SetSize(600, 300);
 vtkSmartPointer<vtkRenderWindowInteractor> interactor =
   vtkSmartPointer<vtkRenderWindowInteractor>::New();
 interactor->SetRenderWindow(renderWindow);
 // Define viewport ranges
 // (xmin, ymin, xmax, ymax)
 double leftViewport[4] = {0.0, 0.0, 0.5, 1.0};
 double rightViewport[4] = {0.5, 0.0, 1.0, 1.0};
 // Setup both renderers
 vtkSmartPointer<vtkRenderer> leftRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(leftRenderer);
 leftRenderer->SetViewport(leftViewport);
 leftRenderer->SetBackground(.6, .5, .4);
 vtkSmartPointer<vtkRenderer> rightRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(rightRenderer);
 rightRenderer->SetViewport(rightViewport);
 rightRenderer->SetBackground(.4, .5, .6);
 // Add the sphere to the left and the cube to the right
 leftRenderer->AddActor(originalActor);
 rightRenderer->AddActor(croppedActor);
 leftRenderer->ResetCamera();
 rightRenderer->ResetCamera();
 renderWindow->Render();
 vtkSmartPointer<vtkInteractorStyleImage> style =
   vtkSmartPointer<vtkInteractorStyleImage>::New();
 interactor->SetInteractorStyle(style);
 interactor->Start();
 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( 0 );
 // 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>

CMakeLists.txt

<source lang="cmake"> cmake_minimum_required(VERSION 2.6)

PROJECT(CropImageFilter)

include_directories(/home/doriad/src/ITK/Wrapping/WrapITK/ExternalProjects/ItkVtkGlue/src/)

FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE})

FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})

ADD_EXECUTABLE(CropImageFilter CropImageFilter.cxx) TARGET_LINK_LIBRARIES(CropImageFilter vtkHybrid ITKBasicFilters ITKCommon ITKIO)

</source>