ITK/Examples/ImageProcessing/MaskImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
No edit summary
m (→‎MaskImageFilter.cxx: easier interface calls)
Line 34: Line 34:
   typedef itk::MaskImageFilter< ImageType, ImageType > MaskFilterType;
   typedef itk::MaskImageFilter< ImageType, ImageType > MaskFilterType;
   MaskFilterType::Pointer maskFilter = MaskFilterType::New();
   MaskFilterType::Pointer maskFilter = MaskFilterType::New();
   maskFilter->SetInput1(reader->GetOutput());
   maskFilter->SetInput(reader->GetOutput());
   maskFilter->SetInput2(mask);
   maskFilter->SetMaskImage(mask);
   mask->Print(std::cout);
   mask->Print(std::cout);
   QuickView viewer;
   QuickView viewer;

Revision as of 17:52, 23 January 2011

ITK Examples Baseline ImageProcessing TestMaskImageFilter.png

This example shows how to mask an image with a binary mask. Pixels in the original image where the mask is non zero will remain the same. Pixels in the original image where the mask is equal to zero will be set to the "outside" value.

The output shows the input image, the mask, and the masked output image.

MaskImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileReader.h"
  3. include "itkMaskImageFilter.h"
  1. include "QuickView.h"

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

void CreateHalfMask(ImageType::Pointer image, ImageType::Pointer &mask);

int main(int argc, char *argv[]) {

 if(argc < 2)
   {
   std::cerr << "Usage: " << argv[0] << " filename" << std::endl;
   return EXIT_FAILURE;
   }
 typedef itk::ImageFileReader<ImageType> ReaderType;
 ReaderType::Pointer reader = ReaderType::New();
 reader->SetFileName(argv[1]);
 reader->Update();
 ImageType::Pointer mask = ImageType::New();
 CreateHalfMask(reader->GetOutput(), mask);
 
 typedef itk::MaskImageFilter< ImageType, ImageType > MaskFilterType;
 MaskFilterType::Pointer maskFilter = MaskFilterType::New();
 maskFilter->SetInput(reader->GetOutput());
 maskFilter->SetMaskImage(mask);
 mask->Print(std::cout);
 QuickView viewer;
 viewer.AddImage(
   reader->GetOutput(),true,
   itksys::SystemTools::GetFilenameName(argv[1]));  
 std::stringstream desc;
 desc << "Mask";
 viewer.AddImage(
   mask.GetPointer(),
   true,
   desc.str());  
 std::stringstream desc2;
 desc2 << "MaskFilter";
 viewer.AddImage(
   maskFilter->GetOutput(),
   true,
   desc2.str());  
 viewer.Visualize();
 return EXIT_SUCCESS;

}


void CreateHalfMask(ImageType::Pointer image, ImageType::Pointer &mask) {

 ImageType::RegionType region = image->GetLargestPossibleRegion();
 
 mask->SetRegions(region);
 mask->Allocate();
 ImageType::SizeType regionSize = region.GetSize();
 itk::ImageRegionIterator<ImageType> imageIterator(mask,region);
 // Make the left half of the mask white and the right half black
 while(!imageIterator.IsAtEnd())
 {
   if(imageIterator.GetIndex()[0] > regionSize[0] / 2)
       {
       imageIterator.Set(0);
       }
     else
       {
       imageIterator.Set(255);
       }
   ++imageIterator;
 }

} </source>

CMakeLists.txt

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

PROJECT(MaskImageFilter)

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(MaskImageFilter MaskImageFilter.cxx) TARGET_LINK_LIBRARIES(MaskImageFilter vtkHybrid ITKIO ITKBasicFilters ITKCommon )


</source>