Process Nth Component of Vector Image#
Synopsis#
Process the nth component/element/channel of a vector image.
Results#
Code#
C++#
#include "itkImageAdaptor.h"
#include "itkImageRegionIterator.h"
#include "itkNthElementImageAdaptor.h"
#include "itkBinomialBlurImageFilter.h"
using VectorImageType = itk::Image<itk::CovariantVector<float, 3>, 2>;
static void
CreateImage(VectorImageType::Pointer image);
int
main()
{
auto image = VectorImageType::New();
CreateImage(image);
using ImageAdaptorType = itk::NthElementImageAdaptor<VectorImageType, float>;
auto adaptor = ImageAdaptorType::New();
adaptor->SelectNthElement(0);
adaptor->SetImage(image);
using BlurFilterType = itk::BinomialBlurImageFilter<ImageAdaptorType, itk::Image<float, 2>>;
auto blurFilter = BlurFilterType::New();
blurFilter->SetInput(adaptor);
blurFilter->Update();
return EXIT_SUCCESS;
}
void
CreateImage(VectorImageType::Pointer image)
{
VectorImageType::IndexType start;
start.Fill(0);
VectorImageType::SizeType size;
size.Fill(2);
VectorImageType::RegionType region;
region.SetSize(size);
region.SetIndex(start);
image->SetRegions(region);
image->Allocate();
itk::ImageRegionIterator<VectorImageType> imageIterator(image, image->GetLargestPossibleRegion());
itk::CovariantVector<float, 3> vec;
vec[0] = 1;
vec[1] = 2;
vec[2] = 3;
while (!imageIterator.IsAtEnd())
{
imageIterator.Set(vec);
++imageIterator;
}
}
Classes demonstrated#
-
template<typename TImage, typename TOutputPixelType>
class NthElementImageAdaptor : public itk::ImageAdaptor<TImage, PixelAccessor> Presents an image as being composed of the N-th element of its pixels.
It assumes that the pixels are of container type and have in their API an operator[]( unsigned int ) defined.
Additional casting is performed according to the input and output image types following C++ default casting rules.