Reader to read file formats supported by itk. More...
#include <mitkItkImageFileReader.h>
Public Types | |
typedef ItkImageFileReader | Self |
typedef FileReader | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
virtual void | SetFileName (const char *_arg) |
Specify the file to load. | |
virtual const char * | GetFileName () const |
Get the specified the file to load. | |
virtual void | SetFilePrefix (const char *_arg) |
Specify file prefix for the file(s) to load. | |
virtual const char * | GetFilePrefix () const |
Get the specified file prefix for the file(s) to load. | |
virtual void | SetFilePattern (const char *_arg) |
Specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number. | |
virtual const char * | GetFilePattern () const |
Get the specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number. | |
Static Public Member Functions | |
static Pointer | New () |
static bool | CanReadFile (const std::string filename, const std::string filePrefix, const std::string filePattern) |
Protected Member Functions | |
virtual void | GenerateData () |
A version of GenerateData() specific for image processing filters. | |
ItkImageFileReader () | |
~ItkImageFileReader () | |
Protected Attributes | |
std::string | m_FileName |
std::string | m_FilePrefix |
std::string | m_FilePattern |
Reader to read file formats supported by itk.
Definition at line 30 of file mitkItkImageFileReader.h.
typedef itk::SmartPointer<const Self> mitk::ItkImageFileReader::ConstPointer |
Definition at line 33 of file mitkItkImageFileReader.h.
typedef itk::SmartPointer<Self> mitk::ItkImageFileReader::Pointer |
Definition at line 33 of file mitkItkImageFileReader.h.
Definition at line 33 of file mitkItkImageFileReader.h.
Definition at line 33 of file mitkItkImageFileReader.h.
mitk::ItkImageFileReader::ItkImageFileReader | ( | ) | [protected] |
Definition at line 178 of file mitkItkImageFileReader.cpp.
: m_FileName(""), m_FilePrefix(""), m_FilePattern("") { }
mitk::ItkImageFileReader::~ItkImageFileReader | ( | ) | [protected] |
Definition at line 183 of file mitkItkImageFileReader.cpp.
{ }
bool mitk::ItkImageFileReader::CanReadFile | ( | const std::string | filename, |
const std::string | filePrefix, | ||
const std::string | filePattern | ||
) | [static] |
Definition at line 161 of file mitkItkImageFileReader.cpp.
{ // First check the extension if( filename == "" ) return false; // check if image is serie if( filePattern != "" && filePrefix != "" ) return false; itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO( filename.c_str(), itk::ImageIOFactory::ReadMode ); if ( imageIO.IsNull() ) return false; return true; }
void mitk::ItkImageFileReader::GenerateData | ( | ) | [protected, virtual] |
A version of GenerateData() specific for image processing filters.
This implementation will split the processing across multiple threads. The buffer is allocated by this method. Then the BeforeThreadedGenerateData() method is called (if provided). Then, a series of threads are spawned each calling ThreadedGenerateData(). After all the threads have completed processing, the AfterThreadedGenerateData() method is called (if provided). If an image processing filter cannot be threaded, the filter should provide an implementation of GenerateData(). That implementation is responsible for allocating the output buffer. If a filter an be threaded, it should NOT provide a GenerateData() method but should provide a ThreadedGenerateData() instead.
Reimplemented from mitk::ImageSource.
Definition at line 38 of file mitkItkImageFileReader.cpp.
References mitk::Geometry3D::GetIndexToWorldTransform(), mitk::ImageSource::GetOutput(), mitk::PixelType::Initialize(), mitk::SlicedGeometry3D::InitializeEvenlySpaced(), m_FileName, mitk::Image::ManageMemory, matrix(), MITK_INFO, mitk::Geometry3D::SetOrigin(), and mitk::SlicedGeometry3D::SetSpacing().
{ mitk::Image::Pointer image = this->GetOutput(); const unsigned int MINDIM = 2; const unsigned int MAXDIM = 4; MITK_INFO << "loading " << m_FileName << " via itk::ImageIOFactory... " << std::endl; // Check to see if we can read the file given the name or prefix if ( m_FileName == "" ) { itkWarningMacro( << "File Type not supported!" ); return ; } itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO( m_FileName.c_str(), itk::ImageIOFactory::ReadMode ); if ( imageIO.IsNull() ) { itkWarningMacro( << "File Type not supported!" ); return ; } // Got to allocate space for the image. Determine the characteristics of // the image. imageIO->SetFileName( m_FileName.c_str() ); imageIO->ReadImageInformation(); unsigned int ndim = imageIO->GetNumberOfDimensions(); if ( ndim < MINDIM || ndim > MAXDIM ) { itkWarningMacro( << "Sorry, only dimensions 2, 3 and 4 are supported. The given file has " << ndim << " dimensions! Reading as 4D." ); ndim = MAXDIM; } itk::ImageIORegion ioRegion( ndim ); itk::ImageIORegion::SizeType ioSize = ioRegion.GetSize(); itk::ImageIORegion::IndexType ioStart = ioRegion.GetIndex(); unsigned int dimensions[ MAXDIM ]; dimensions[ 0 ] = 0; dimensions[ 1 ] = 0; dimensions[ 2 ] = 0; dimensions[ 3 ] = 0; float spacing[ MAXDIM ]; spacing[ 0 ] = 1.0f; spacing[ 1 ] = 1.0f; spacing[ 2 ] = 1.0f; spacing[ 3 ] = 1.0f; Point3D origin; origin.Fill(0); unsigned int i; for ( i = 0; i < ndim ; ++i ) { ioStart[ i ] = 0; ioSize[ i ] = imageIO->GetDimensions( i ); if(i<MAXDIM) { dimensions[ i ] = imageIO->GetDimensions( i ); spacing[ i ] = imageIO->GetSpacing( i ); if(spacing[ i ] <= 0) spacing[ i ] = 1.0f; } if(i<3) { origin[ i ] = imageIO->GetOrigin( i ); } } ioRegion.SetSize( ioSize ); ioRegion.SetIndex( ioStart ); MITK_INFO << "ioRegion: " << ioRegion << std::endl; imageIO->SetIORegion( ioRegion ); void* buffer = new unsigned char[imageIO->GetImageSizeInBytes()]; imageIO->Read( buffer ); //mitk::Image::Pointer image = mitk::Image::New(); if((ndim==4) && (dimensions[3]<=1)) ndim = 3; if((ndim==3) && (dimensions[2]<=1)) ndim = 2; mitk::PixelType pixelType( imageIO->GetComponentTypeInfo(), imageIO->GetNumberOfComponents(), imageIO->GetPixelType() ); image->Initialize( pixelType, ndim, dimensions ); image->SetImportChannel( buffer, 0, Image::ManageMemory ); // access direction of itk::Image and include spacing mitk::Matrix3D matrix; matrix.SetIdentity(); unsigned int j, itkDimMax3 = (ndim >= 3? 3 : ndim); for ( i=0; i < itkDimMax3; ++i) for( j=0; j < itkDimMax3; ++j ) matrix[i][j] = imageIO->GetDirection(j)[i]; // re-initialize PlaneGeometry with origin and direction PlaneGeometry* planeGeometry = static_cast<PlaneGeometry*>(image->GetSlicedGeometry(0)->GetGeometry2D(0)); planeGeometry->SetOrigin(origin); planeGeometry->GetIndexToWorldTransform()->SetMatrix(matrix); // re-initialize SlicedGeometry3D SlicedGeometry3D* slicedGeometry = image->GetSlicedGeometry(0); slicedGeometry->InitializeEvenlySpaced(planeGeometry, image->GetDimension(2)); slicedGeometry->SetSpacing(spacing); // re-initialize TimeSlicedGeometry image->GetTimeSlicedGeometry()->InitializeEvenlyTimed(slicedGeometry, image->GetDimension(3)); buffer = NULL; MITK_INFO << "number of image components: "<< image->GetPixelType().GetNumberOfComponents() << std::endl; // mitk::DataNode::Pointer node = this->GetOutput(); // node->SetData( image ); // add level-window property //if ( image->GetPixelType().GetNumberOfComponents() == 1 ) //{ // SetDefaultImageProperties( node ); //} MITK_INFO << "...finished!" << std::endl; }
virtual const char* mitk::ItkImageFileReader::GetClassName | ( | ) | const [virtual] |
virtual const char* mitk::ItkImageFileReader::GetFileName | ( | ) | const [virtual] |
Get the specified the file to load.
Either the FileName or FilePrefix plus FilePattern are used to read.
Implements mitk::FileReader.
virtual const char* mitk::ItkImageFileReader::GetFilePattern | ( | ) | const [virtual] |
Get the specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number.
You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.
Implements mitk::FileReader.
virtual const char* mitk::ItkImageFileReader::GetFilePrefix | ( | ) | const [virtual] |
Get the specified file prefix for the file(s) to load.
You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.
Implements mitk::FileReader.
static Pointer mitk::ItkImageFileReader::New | ( | ) | [static] |
Method for creation through the object factory.
Reimplemented from mitk::ImageSource.
virtual void mitk::ItkImageFileReader::SetFileName | ( | const char * | aFileName ) | [virtual] |
Specify the file to load.
Either the FileName or FilePrefix plus FilePattern are used to read.
Implements mitk::FileReader.
virtual void mitk::ItkImageFileReader::SetFilePattern | ( | const char * | aFilePattern ) | [virtual] |
Specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number.
You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.
Implements mitk::FileReader.
virtual void mitk::ItkImageFileReader::SetFilePrefix | ( | const char * | aFilePrefix ) | [virtual] |
Specify file prefix for the file(s) to load.
You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.
Implements mitk::FileReader.
std::string mitk::ItkImageFileReader::m_FileName [protected] |
Definition at line 57 of file mitkItkImageFileReader.h.
Referenced by GenerateData().
std::string mitk::ItkImageFileReader::m_FilePattern [protected] |
Definition at line 61 of file mitkItkImageFileReader.h.
std::string mitk::ItkImageFileReader::m_FilePrefix [protected] |
Definition at line 59 of file mitkItkImageFileReader.h.