[ITK-users] Picking 10000 samples from a larger mha image using ImageRandomNonRepeatingConstIteratorWithIndex and finding histogram.
vijayarani
vijayarani.shanmugavadivu at appasamy.com
Tue Sep 23 02:10:56 EDT 2014
Hi,
Thanks for your reply.Here is my code and the output
#include "itkImage.h"
#include "itkImageFileReader.h"
#include <itkScalarImageToHistogramGenerator.h>
#include <itkMetaImageIO.h>
#include <itkTIFFImageIO.h>
#include "itkImageFileWriter.h"
#include "itkImageRandomNonRepeatingConstIteratorWithIndex.h"
int main(int argc, char*argv[])
{
const unsigned int Dimension = 3;
typedef unsigned short 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( "SampleMha.mha" );
ImageWriter->SetFileName( "RandomIterator.mha" );
ImageType::Pointer Image = ImageReader->GetOutput();
Image->Update();
ImageType::RegionType region=Image->GetRequestedRegion();
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 = 10000;
inputIt.SetNumberOfSamples( number );
std::cout << "The number of samples is " << number << std::endl;
inputIt.ReinitializeSeed();
inputIt.GoToBegin();
while(!inputIt.IsAtEnd())
{
output->SetPixel(inputIt.GetIndex(), inputIt.Get());
++inputIt;
}
output->Update();
ImageWriter->SetInput( output );
ImageWriter->Update();
calculatePercentile("RandomIterator.mha");
return EXIT_SUCCESS;
}
void calculatePercentile(QString file)
{
qDebug()<<"Calling: calculatePercentile";
//Define the pixel type and dimension for reader
typedef int InternalPixelType;
const unsigned int Dimension=3;
typedef itk::Image<InternalPixelType, Dimension> InternalImageType;
//Define the reader
typedef itk::ImageFileReader<InternalImageType> ReaderType;
ReaderType::Pointer reader = ReaderType::New();
typedef InternalPixelType HistogramMeasurementType;
typedef itk::Statistics::Histogram< HistogramMeasurementType >
HistogramType;
typedef itk::Statistics::ImageToListSampleAdaptor< InternalImageType >
AdaptorType;
AdaptorType::Pointer adaptor = AdaptorType::New();
typedef
itk::Statistics::SampleToHistogramFilter<AdaptorType,HistogramType>
FilterType;
FilterType::Pointer filter = FilterType::New();
if(QFileInfo(file).suffix()=="mha")
{
typedef itk::MetaImageIO MetaImageIOType;
MetaImageIOType::Pointer metaIO=MetaImageIOType::New();
metaIO->SetFileName(file.toLocal8Bit().data());
reader->SetFileName(file.toLocal8Bit().data());
metaIO->ReadImageInformation();
qDebug()<<"No of dimesnsions "<<metaIO->GetNumberOfDimensions()<<"No of
Comps "<<metaIO->GetNumberOfComponents()<<"Comp size
"<<metaIO->GetComponentSize();
qDebug()<<"Image size in bytes "<<metaIO->GetImageSizeInBytes()<<"Image
size in Comps "<<metaIO->GetImageSizeInComponents()<<"Image size in Pixels
"<<metaIO->GetImageSizeInPixels();
adaptor->SetImage(reader->GetOutput() );
try
{
reader->Update();
}
catch( itk::ExceptionObject & excp )
{
std::cerr << "Problem reading image file" << std::endl;
std::cerr << excp << std::endl;
}
const unsigned int numberOfComponents = metaIO->GetNumberOfComponents();
HistogramType::SizeType size(numberOfComponents);
size.Fill( metaIO->GetImageSizeInPixels() );
filter->SetInput( adaptor );
filter->SetHistogramSize( size );
filter->SetMarginalScale( 10 );
HistogramType::MeasurementVectorType min( numberOfComponents );
HistogramType::MeasurementVectorType max( numberOfComponents );
min.Fill( 0 );
max.Fill( metaIO->GetImageSizeInComponents() );
filter->SetHistogramBinMinimum( min );
filter->SetHistogramBinMaximum( max );
filter->Update();
}
HistogramType::ConstPointer histogram = filter->GetOutput();
qDebug()<<"5th percentile is "<< histogram->Quantile( 0, 0.05 ) <<" 25th
percentile is "<<histogram->Quantile( 0, 0.25 )<<" 50th percentile is
"<<histogram->Quantile( 0, 0.50 )<<" 75th percentile is
"<<histogram->Quantile( 0, 0.75 )<<" 95th percentile is
"<<histogram->Quantile( 0, 0.95 );
}
And the output is:
The size of the image is [650, 450, 300]
The number of samples is 10000
Calling: calculatePercentile
No of dimesnsions 3 No of Comps 1 Comp size 2
Image size in bytes 175500000 Image size in Comps 87750000 Image size in
Pixels 87750000
5th percentile is 0 25th percentile is 0 50th percentile is 0 75th
percentile is 0 95th percentile is 0
I have uploaded the SampleMha.mha file.
Thanks & Regards
Vijaya Rani S
--
View this message in context: http://itk-insight-users.2283740.n2.nabble.com/Picking-10000-samples-from-a-larger-mha-image-using-ImageRandomNonRepeatingConstIteratorWithIndex-an-tp7586255p7586259.html
Sent from the ITK Insight Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list