20 #include <itkImageFileReader.h> 21 #include <itksys/Directory.hxx> 22 #include <itksys/SystemTools.hxx> 24 #include <itkImageFileReader.h> 25 #include <itkImageIOFactory.h> 26 #include <itkImageIORegion.h> 27 #include <itkMetaDataObject.h> 40 const unsigned int MINDIM = 2;
41 const unsigned int MAXDIM = 4;
43 MITK_INFO(
"mitkItkImageFileReader") <<
"loading " <<
m_FileName <<
" via itk::ImageIOFactory... " << std::endl;
48 mitkThrow() <<
"Empty filename in mitk::ItkImageFileReader ";
52 itk::ImageIOBase::Pointer imageIO =
53 itk::ImageIOFactory::CreateImageIO(
m_FileName.c_str(), itk::ImageIOFactory::ReadMode);
64 imageIO->ReadImageInformation();
66 unsigned int ndim = imageIO->GetNumberOfDimensions();
67 if (ndim < MINDIM || ndim > MAXDIM)
69 itkWarningMacro(<<
"Sorry, only dimensions 2, 3 and 4 are supported. The given file has " << ndim
70 <<
" dimensions! Reading as 4D.");
74 itk::ImageIORegion ioRegion(ndim);
75 itk::ImageIORegion::SizeType ioSize = ioRegion.GetSize();
76 itk::ImageIORegion::IndexType ioStart = ioRegion.GetIndex();
78 unsigned int dimensions[MAXDIM];
94 for (i = 0; i < ndim; ++i)
97 ioSize[i] = imageIO->GetDimensions(i);
100 dimensions[i] = imageIO->GetDimensions(i);
101 spacing[i] = imageIO->GetSpacing(i);
107 origin[i] = imageIO->GetOrigin(i);
111 ioRegion.SetSize(ioSize);
112 ioRegion.SetIndex(ioStart);
114 MITK_INFO(
"mitkItkImageFileReader") <<
"ioRegion: " << ioRegion << std::endl;
115 imageIO->SetIORegion(ioRegion);
116 void *buffer =
new unsigned char[imageIO->GetImageSizeInBytes()];
117 imageIO->Read(buffer);
124 matrix.SetIdentity();
125 unsigned int j, itkDimMax3 = (ndim >= 3 ? 3 : ndim);
126 for (i = 0; i < itkDimMax3; ++i)
127 for (j = 0; j < itkDimMax3; ++j)
128 matrix[i][j] = imageIO->GetDirection(j)[i];
145 timeGeometry->Initialize(slicedGeometry, image->GetDimension(3));
146 image->SetTimeGeometry(timeGeometry);
149 MITK_INFO(
"mitkItkImageFileReader") <<
"number of image components: " << image->GetPixelType().GetNumberOfComponents()
159 MITK_INFO(
"mitkItkImageFileReader") <<
"...finished!" << std::endl;
163 const std::string filePrefix,
164 const std::string filePattern)
171 if (filePattern !=
"" && filePrefix !=
"")
174 itk::ImageIOBase::Pointer imageIO =
175 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
176 if (imageIO.IsNull())
181 imageIO->SetFileName(filename.c_str());
182 imageIO->ReadImageInformation();
183 itk::MetaDataDictionary imgMetaDictionary = imageIO->GetMetaDataDictionary();
184 std::vector<std::string> imgMetaKeys = imgMetaDictionary.GetKeys();
185 std::vector<std::string>::const_iterator itKey = imgMetaKeys.begin();
186 std::string metaString;
188 for (; itKey != imgMetaKeys.end(); itKey++)
190 itk::ExposeMetaData<std::string>(imgMetaDictionary, *itKey, metaString);
191 if (itKey->find(
"modality") != std::string::npos)
193 if (metaString.find(
"DWMRI") != std::string::npos)
202 MITK_INFO(
"mitkItkImageFileReader") <<
"Could not read ImageInformation ";
void SetSpacing(const mitk::Vector3D &aSpacing, bool enforceSetSpacing=false)
Set the spacing (m_Spacing).
Point3D GetCornerPoint(int id) const
Get the position of the corner number id (in world coordinates)
virtual void InitializeEvenlySpaced(mitk::PlaneGeometry *geometry2D, unsigned int slices)
Completely initialize this instance as evenly-spaced with slices parallel to the provided PlaneGeomet...
MITKCORE_EXPORT mitk::PixelType MakePixelType(vtkImageData *vtkimagedata)
deduct the PixelType for a given vtk image
Convenience class to temporarily change the current locale.
void SetOrigin(const Point3D &origin)
Set the origin, i.e. the upper-left corner of the plane.
mitk::Image::Pointer image
~ItkImageFileReader() override
Describes the geometry of a data object consisting of slices.
std::string m_FilePattern
OutputType * GetOutput()
Get the output data of this image source object.
Describes a two-dimensional, rectangular plane.
void GenerateData() override
static bool CanReadFile(const std::string filename, const std::string filePrefix, const std::string filePattern)
mitk::AffineTransform3D * GetIndexToWorldTransform()
Get the transformation used to convert from index to world coordinates.