Extract Channel of Image With Multiple Components#
Synopsis#
Extract a component/channel of an itkImage with pixels with multiple components.
Results#
Output:
[1, 2, 3]
1
Code#
C++#
#include "itkImageAdaptor.h"
#include "itkImageRegionIterator.h"
#include "itkNthElementImageAdaptor.h"
using VectorImageType = itk::Image<itk::CovariantVector<float, 3>, 2>;
static void
CreateImage(VectorImageType::Pointer image);
int
main()
{
auto image = VectorImageType::New();
CreateImage(image);
itk::Index<2> index;
index.Fill(0);
std::cout << image->GetPixel(index) << std::endl;
using ImageAdaptorType = itk::NthElementImageAdaptor<VectorImageType, float>;
auto adaptor = ImageAdaptorType::New();
adaptor->SelectNthElement(0);
adaptor->SetImage(image);
std::cout << adaptor->GetPixel(index) << std::endl;
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();
// Create a pixel and fill it with (1,2,3), and set every pixel of the image to this pixel.
itk::ImageRegionIterator<VectorImageType> imageIterator(image, image->GetLargestPossibleRegion());
itk::CovariantVector<float, 3> vectorPixel;
vectorPixel[0] = 1;
vectorPixel[1] = 2;
vectorPixel[2] = 3;
image->FillBuffer(vectorPixel);
}
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.