Random Selection Of Pixels From Region

Synopsis

Randomly select pixels from a region of an image.

Results

Output:

[4, 2]
[1, 1]
[1, 3]
[4, 0]
[3, 0]
[4, 3]
[1, 0]
[1, 1]
[4, 2]
[4, 2]
[1, 2]
[2, 1]
[1, 2]
[2, 3]
[2, 3]
[4, 1]
[4, 2]
[3, 1]
[2, 2]
[2, 2]
[1, 1]
[2, 2]
[1, 1]
[1, 1]
[1, 0]
[3, 1]
[2, 1]
[4, 0]
[2, 2]
[4, 1]
[0, 2]
[2, 1]
[0, 2]
[1, 0]
[1, 0]
[2, 3]
[1, 1]
[1, 3]
[0, 1]
[3, 0]
[4, 2]
[4, 0]
[3, 1]
[0, 1]
[0, 3]
[0, 0]
[1, 2]
[3, 2]
[2, 0]
[2, 2]
[1, 1]
[3, 2]
[1, 1]
[2, 1]
[2, 1]
[4, 2]
[1, 3]
[4, 1]
[0, 3]
[1, 2]
[4, 3]
[0, 0]
[2, 1]
[1, 0]
[4, 3]
[4, 3]
[2, 3]
[2, 3]
[0, 3]
[1, 2]
[1, 3]
[2, 0]
[1, 0]
[2, 3]
[3, 3]
[3, 2]
[0, 0]
[3, 3]
[1, 2]
[1, 0]
[3, 0]
[3, 3]
[4, 0]
[1, 2]
[0, 2]
[1, 3]
[3, 3]
[1, 1]
[0, 3]
[0, 0]
[0, 2]
[0, 2]
[2, 2]
[2, 2]
[4, 1]
[2, 2]
[1, 1]
[1, 0]
[4, 1]
[1, 0]
[3, 1]
[4, 3]
[0, 0]
[3, 2]
[1, 2]
[1, 2]
[2, 3]
[4, 2]
[2, 2]
[3, 0]
[0, 3]
[2, 2]
[1, 1]
[2, 3]
[4, 0]
[0, 3]
[4, 2]
[3, 2]
[3, 3]
[1, 2]
[4, 3]
[0, 0]
[1, 3]
[0, 0]
[4, 2]
[0, 2]
[0, 2]
[0, 3]
[4, 2]
[4, 2]
[4, 2]
[3, 2]
[4, 0]
[0, 0]
[0, 1]
[3, 0]
[0, 0]
[0, 0]
[0, 0]
[0, 0]
[4, 2]
[1, 2]
[0, 3]
[3, 3]
[4, 2]
[2, 2]
[2, 2]
[3, 3]
[1, 2]
[2, 1]
[0, 2]
[1, 2]
[4, 0]
[4, 3]
[3, 3]
[1, 2]
[0, 1]
[3, 2]
[0, 2]
[4, 1]
[1, 2]
[3, 0]
[4, 3]
[1, 2]
[2, 2]
[2, 3]
[0, 0]
[2, 3]
[4, 1]
[4, 2]
[4, 2]
[1, 2]
[3, 3]
[1, 3]
[0, 2]
[3, 2]
[3, 0]
[2, 3]
[4, 2]
[2, 3]
[4, 2]
[4, 0]
[2, 0]
[1, 0]
[1, 2]
[1, 0]
[3, 2]
[0, 0]
[3, 1]
[4, 3]
[0, 3]
[0, 2]
[2, 0]
[4, 2]
[3, 2]
[1, 0]
[1, 0]
[4, 0]
[1, 2]
[0, 2]

Code

C++

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageRandomConstIteratorWithIndex.h"

int
main(int, char *[])
{
  using ImageType = itk::Image<unsigned char, 2>;
  ImageType::Pointer image = ImageType::New();

  ImageType::SizeType regionSize;
  regionSize[0] = 5;
  regionSize[1] = 4;

  ImageType::IndexType regionIndex;
  regionIndex[0] = 0;
  regionIndex[1] = 0;

  ImageType::RegionType region;
  region.SetSize(regionSize);
  region.SetIndex(regionIndex);

  image->SetRegions(region);
  image->Allocate();
  image->FillBuffer(0);

  itk::ImageRandomConstIteratorWithIndex<ImageType> imageIterator(image, image->GetLargestPossibleRegion());
  imageIterator.SetNumberOfSamples(200);
  imageIterator.GoToBegin();

  while (!imageIterator.IsAtEnd())
  {
    std::cout << imageIterator.GetIndex() << std::endl;

    ++imageIterator;
  }

  return EXIT_SUCCESS;
}

Classes demonstrated