[Insight-users] pointsets
Luis Ibanez
luis.ibanez at kitware.com
Sat, 20 Mar 2004 14:01:04 -0500
Hi David,
An example on how to convert an itk::Image to
an itk::PointSet was added to
Insight/Examples/DataRepresentation/Mesh
with the name:
ImageToPointSet.cxx
Note that converting an Image to a PoinSet
is an extremly inefficient way of using the
memory. You probably want to select only a
subset of image pixels to be included in the
PointSet.
Regards,
Luis
Please find the code below:
---------------------------
David Macias Verde wrote:
> Hi:
>
> How can I produce a pointset from an image?
>
> Thanks in advance,
>
------------------------------------------
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkImage.h"
#include "itkPointSet.h"
#include "itkImageRegionConstIterator.h"
int main( int argc, char ** argv )
{
// Verify the number of parameters in the command line
if( argc < 2 )
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " inputImageFile " << std::endl;
return -1;
}
typedef unsigned char PixelType;
const unsigned int Dimension = 2;
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::PointSet< PixelType, Dimension > PointSetType;
typedef itk::ImageFileReader< ImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
const char * inputFilename = argv[1];
reader->SetFileName( inputFilename );
try
{
reader->Update();
}
catch( itk::ExceptionObject & err )
{
std::cout << "ExceptionObject caught !" << std::endl;
std::cout << err << std::endl;
return -1;
}
PointSetType::Pointer pointSet = PointSetType::New();
typedef itk::ImageRegionConstIterator< ImageType > IteratorType;
const ImageType * image = reader->GetOutput();
IteratorType it( image, image->GetBufferedRegion() );
it.GoToBegin();
typedef PointSetType::PointType PointType;
PointType point;
unsigned long pointId = 0;
while( !it.IsAtEnd() )
{
// Convert the pixel position into a Point
image->TransformIndexToPhysicalPoint( it.GetIndex() , point );
pointSet->SetPoint( pointId, point );
// Transfer the pixel data to the value associated with the point.
pointSet->SetPointData( pointId, it.Get() );
++it;
++pointId;
}
std::cout << "Number Of Points = ";
std::cout << pointSet->GetNumberOfPoints() << std::endl;
return 0;
}