在医学图像处理中,有时仅希望处理图像中的感兴趣区域(ROI)。ITK有三种区域:(1) LargestPossibleRegion:指的是图像最大可能区域,通常是图像整体;(2) BufferedRegion:指的是实际存在于内存中的图像区域;(3) RequestedRegion:要求被处理的图像区域。三种区域可分别通过Set方法进行设置。
按照ITK用户手册[1]中的描述,通过设置RequestedRegion,就可以实现图像指定区域处理。ITK网站提供的示例代码[2]如下:
#include "itkImage.h"
#include "itkRandomImageSource.h"
#include "itkDerivativeImageFilter.h"
int main(int, char *[])
{
typedef itk::Image<float, 2> ImageType;
itk::Size<2> smallSize;
smallSize.Fill(10);
itk::Index<2> index;
index.Fill(0);
itk::ImageRegion<2> region(index, smallSize);
itk::Size<2> bigSize;
bigSize.Fill(10000);
itk::RandomImageSource<ImageType>::Pointer randomImageSource = itk::RandomImageSource<ImageType>::New();
randomImageSource->SetNumberOfThreads(1); // to produce non-random results
randomImageSource->SetSize(bigSize);
randomImageSource->GetOutput()->SetRequestedRegion(smallSize);
randomImageSource->Update();
std::cout << "Created random image." << std::endl;
typedef itk::DerivativeImageFilter<ImageType, ImageType > DerivativeImageFilterType;
DerivativeImageFilterType::Pointer derivativeFilter = DerivativeImageFilterType::New();
derivativeFilter->SetInput( randomImageSource->GetOutput() );
derivativeFilter->SetDirection(0); // "x" axis
derivativeFilter->GetOutput()->SetRequestedRegion(smallSize);
derivativeFilter->Update();
std::cout << "Comp