#include "itkImage.h" #include "itkRescaleIntensityImageFilter.h" #include "itkMirrorPadImageFilter.h" #include "itkRegionOfInterestImageFilter.h" #include "itkImageFileWriter.h" // Setup types typedef itk::Image ImageType; typedef itk::Image CharImageType; void CreateImage(ImageType::Pointer image) { // Create a black image with a white square ImageType::IndexType start; start.Fill(0); ImageType::SizeType size; size.Fill(512); ImageType::RegionType region(start,size); image->SetRegions(region); image->Allocate(); image->FillBuffer(0); // Make line of non-touching diagonal pixels for(unsigned int i = 0; i < 512; i+=2) { itk::Index<2> pixel; pixel[0] = i; pixel[1] = i; image->SetPixel(pixel, 255); } } int main( int argc, char *argv[] ) { ImageType::Pointer image = ImageType::New(); CreateImage(image); typedef itk::MirrorPadImageFilter< ImageType, ImageType > MirrorPadType; MirrorPadType::Pointer mirrorPadFilter = MirrorPadType::New(); mirrorPadFilter->SetInput(image); ImageType::SizeType upperfactors; upperfactors[0] = 20; upperfactors[1] = 30; ImageType::SizeType lowerfactors; lowerfactors[0] = 50; lowerfactors[1] = 40; mirrorPadFilter->SetPadLowerBound(lowerfactors); mirrorPadFilter->SetPadUpperBound(upperfactors); mirrorPadFilter->Update(); typedef itk::RegionOfInterestImageFilter< ImageType,ImageType> RoiCropType; RoiCropType::Pointer roiCropFilter = RoiCropType::New(); roiCropFilter->SetInput(mirrorPadFilter->GetOutput()); ImageType::IndexType index; index[0] = 15; index[1] = 0; ImageType::SizeType size; size[0] = 553; size[1] = 582; ImageType::RegionType roi; roi.SetIndex(index); roi.SetSize(size); roiCropFilter->SetRegionOfInterest(roi); try { roiCropFilter->Update(); } catch (itk::ExceptionObject &ex) { std::cout << ex; return EXIT_FAILURE; } typedef itk::RescaleIntensityImageFilter RescaleType; RescaleType::Pointer rescale = RescaleType::New(); rescale->SetInput(roiCropFilter->GetOutput()); rescale->SetOutputMinimum(0); rescale->SetOutputMaximum(255); typedef itk::ImageFileWriter ImageWriterType; ImageWriterType::Pointer writer = ImageWriterType::New(); writer->SetFileName("out.jpg"); writer->SetInput(rescale->GetOutput()); try { writer->Update(); } catch (itk::ExceptionObject &ex) { std::cout << ex; return EXIT_FAILURE; } return EXIT_SUCCESS; }