[ITK-users] Convert 2D itkImage to vnl_matrix
Marco Ulgelmo
marco.ulge at gmail.com
Wed Apr 29 08:46:34 EDT 2015
Hello,
I was trying to get a matrix out of a 2D image as i need to perform
particular calculations. At first i open a 3D image and using
ExtractImageFilter i extract the 2D image collapsing the 3rd dimension.
There must be something wrong in the code as every time i try to perform
any kind of operation on the newly created matrix i get a segfault. It
might be really stupid but i haven't been able to spot it.
Code:
typedef float OutputPixelType;
typedef itk::Image< OutputPixelType, 4 > InputImageType;
typedef itk::Image< OutputPixelType, 3 > OutputImageType;
typedef itk::Image< OutputPixelType, 2 > BidimensionalImageType;
typedef itk::ImageFileReader< InputImageType > ReaderType;
typedef itk::ImageFileReader< OutputImageType > OutputReaderType;
typedef itk::ImageFileWriter< OutputImageType > WriterType;
//mediaFilePath is the path to a 3D image (mha extension)
char* MediaFileName = (char*)mediaFilePath.c_str();
OutputReaderType::Pointer reader = OutputReaderType::New();
reader->SetFileName(MediaFileName);
reader->Update();
typedef itk::ExtractImageFilter< OutputImageType,
BidimensionalImageType > BidimensionalExtractorType;
BidimensionalExtractorType::Pointer extractor =
BidimensionalExtractorType::New();
extractor->InPlaceOn();
extractor->SetDirectionCollapseToSubmatrix();
try{
reader->UpdateOutputInformation();
}
catch ( itk::ExceptionObject & exp ){
return 0;// "Couldn't read selected Subject, format not
supported.";
}
OutputImageType::RegionType inputRegion3 =
reader->GetOutput()->GetLargestPossibleRegion();
OutputImageType::SizeType size3 = inputRegion3.GetSize();
size3[2] = 0;
OutputImageType::IndexType start3 = inputRegion3.GetIndex();
start3[2] = 0;
OutputImageType::RegionType desiredRegion3;
desiredRegion3.SetSize( size3 );
desiredRegion3.SetIndex( start3 );
extractor->SetExtractionRegion( desiredRegion3 );
extractor->SetInput( reader->GetOutput() );
//writer->SetInput( extractor->GetOutput() );
int width =
reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0];
int height =
reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1];
const unsigned int rows = height;
const unsigned int cols = width;
typedef vnl_matrix_ref< OutputPixelType > MatrixType;
BidimensionalImageType::Pointer image = extractor->GetOutput();
MatrixType matrix( rows, cols, image->GetBufferPointer());
matrix.data_array();
std::cout << matrix[1][1] << std::endl;
Thanks,
Marco
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20150429/718b131b/attachment.html>
More information about the Insight-users
mailing list