[Insight-users] ImageRandomNonRepeatingConstIteratorWithIndex Bug ?
Emma Saunders
emmasaunders123 at gmail.com
Fri Dec 6 11:04:34 EST 2013
Hi all,
I am using the ImageRandomNonRepeatingConstIteratorWithIndex to randomly
sample images without repeat. When using the number of samples as the size
of the image however I don't get the full image back.
I am using the example in examples/data/brainweb1e1a10f20.mha. Below is my
code, attached is my result,
Any ideas?
#include "itkImageFileWriter.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageRandomConstIteratorWithIndex.h"
#include "itkImageRandomNonRepeatingConstIteratorWithIndex.h"
int main(int argc, char*argv[])
{
const unsigned int Dimension = 3;
typedef unsigned char PixelType;
typedef itk::Image<PixelType, Dimension> ImageType;
typedef itk::ImageFileReader< ImageType > ImageReaderType;
typedef itk::ImageFileWriter< ImageType > ImageWriterType;
ImageReaderType::Pointer ImageReader = ImageReaderType::New();
ImageWriterType::Pointer ImageWriter = ImageWriterType::New();
ImageReader->SetFileName( argv[1] );
ImageWriter->SetFileName( argv[2] );
ImageType::Pointer Image = ImageReader->GetOutput();
Image->Update();
ImageType::RegionType region=Image->GetLargestPossibleRegion();
ImageType::SizeType size=region.GetSize();
ImageType::IndexType index=region.GetIndex();
ImageType::IndexType start = index;
ImageType::SpacingType spacing = Image->GetSpacing();
ImageType::DirectionType direction = Image->GetDirection();
ImageType::RegionType newregion;
newregion.SetSize(size);
newregion.SetIndex(start);
std::cout << "The size of the image is " << size <<std::endl;
//Define Output Image
ImageType::Pointer output = ImageType::New();
output->SetRegions(newregion);
output->SetSpacing(spacing);
output->SetDirection(direction);
output->Allocate();
output->FillBuffer(0);
output->Update();
typedef itk::ImageRandomNonRepeatingConstIteratorWithIndex<
ImageType > ConstIteratorType;
ConstIteratorType inputIt( Image, region );
unsigned int number = 7069860;
inputIt.SetNumberOfSamples( number ); //Number of samples total is 3281040
std::cout << "The number of samples is " << number << std::endl;
inputIt.ReinitializeSeed();
inputIt.GoToBegin();
//while(!inputIt.IsAtEnd())
for ( inputIt.GoToBegin(); ! inputIt.IsAtEnd(); ++inputIt)
{
//std::cout <<inputIt.GetIndex()<< " " ;
//std::cout << inputIt.Get() << std::endl;
output->SetPixel(inputIt.GetIndex(), inputIt.Get());
++inputIt;
}
output->Update();
ImageWriter->SetInput( output );
ImageWriter->Update();
return EXIT_SUCCESS;
}
Thanks Emma
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20131206/72976f5a/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SampleExample.png
Type: image/png
Size: 147121 bytes
Desc: not available
URL: <http://www.itk.org/pipermail/insight-users/attachments/20131206/72976f5a/attachment-0001.png>
More information about the Insight-users
mailing list