1 #include "DicomIOManager.h" 2 #include "itkImageSeriesReader.h" 3 #include "DicomSeriesReader.h" 4 #include "DicomImageReader.h" 5 #include "gdcmReader.h" 25 bool loadStatus =
false;
27 NamesGeneratorType::Pointer nG = NamesGeneratorType::New();
28 nG->SetDirectory(this->m_dir);
29 std::vector<std::string> files = nG->GetInputFileNames();
42 std::string fname = files[0].c_str();
44 bool isDicom = this->IsDicom(fname);
46 itk::ImageIOBase::Pointer imageIO;
47 itk::ImageIOBase::IOPixelType pixelType;
48 itk::ImageIOBase::IOComponentType componentType;
49 unsigned int dimensions;
50 bool canRead = this->CanReadFile(fname.c_str(),imageIO);
51 if (canRead && isDicom)
53 imageIO->SetFileName(fname);
54 imageIO->ReadImageInformation();
55 pixelType = imageIO->GetPixelType();
56 componentType = imageIO->GetComponentType();
57 dimensions = imageIO->GetNumberOfDimensions();
59 if (pixelType == itk::ImageIOBase::SCALAR)
63 switch (componentType)
65 case itk::ImageIOBase::SHORT:
67 using PixelType = short;
68 using ImageType = itk::Image<PixelType, T::ImageDimension>;
69 typename ImageType::Pointer img = ImageType::New();
70 bool readStatus =
false;
76 m_image3d = ConvertImage3DToFloatImage3D<ImageType>(img);
84 case itk::ImageIOBase::USHORT:
86 using PixelType =
unsigned short;
87 using ImageType = itk::Image<PixelType, T::ImageDimension>;
88 typename ImageType::Pointer img = ImageType::New();
89 bool readStatus =
false;
95 m_image3d = ConvertImage3DToFloatImage3D<ImageType>(img);
103 case itk::ImageIOBase::INT:
106 using ImageType = itk::Image<PType, T::ImageDimension>;
107 typename ImageType::Pointer img = ImageType::New();
108 bool readStatus =
false;
114 m_image3d = ConvertImage3DToFloatImage3D<ImageType>(img);
122 case itk::ImageIOBase::UINT:
123 case itk::ImageIOBase::LONG:
124 case itk::ImageIOBase::LONGLONG:
125 case itk::ImageIOBase::ULONG:
126 case itk::ImageIOBase::ULONGLONG:
133 case itk::ImageIOBase::CHAR:
140 case itk::ImageIOBase::UCHAR:
147 case itk::ImageIOBase::DOUBLE:
154 case itk::ImageIOBase::FLOAT:
166 else if (dimensions == 2)
168 switch (componentType)
170 case itk::ImageIOBase::SHORT:
172 using PixelType = short;
173 using ImageType = itk::Image<PixelType, T::ImageDimension>;
174 typename ImageType::Pointer img = ImageType::New();
175 bool readStatus =
false;
177 imgReader->SetDirectoryPath(this->m_dir);
181 m_image3d = ConvertImage3DToFloatImage3D<ImageType>(img);
189 case itk::ImageIOBase::USHORT:
191 using PixelType =
unsigned short;
192 using ImageType = itk::Image<PixelType, T::ImageDimension>;
193 typename ImageType::Pointer img = ImageType::New();
194 bool readStatus =
false;
196 imgReader->SetDirectoryPath(this->m_dir);
200 m_image3d = ConvertImage3DToFloatImage3D<ImageType>(img);
208 case itk::ImageIOBase::INT:
211 using ImageType = itk::Image<PType, T::ImageDimension>;
212 typename ImageType::Pointer img = ImageType::New();
213 bool readStatus =
false;
215 imgReader->SetDirectoryPath(this->m_dir);
219 m_image3d = ConvertImage3DToFloatImage3D<ImageType>(img);
227 case itk::ImageIOBase::UINT:
228 case itk::ImageIOBase::LONG:
229 case itk::ImageIOBase::LONGLONG:
230 case itk::ImageIOBase::ULONG:
231 case itk::ImageIOBase::ULONGLONG:
238 case itk::ImageIOBase::CHAR:
245 case itk::ImageIOBase::UCHAR:
252 case itk::ImageIOBase::DOUBLE:
259 case itk::ImageIOBase::FLOAT:
286 return cbica::IsDicom(path);
292 imageIO = itk::ImageIOFactory::CreateImageIO(path.c_str(), itk::ImageIOFactory::ReadMode);
293 return imageIO->CanReadFile(path.c_str());
297 template<
class TInputImage>
300 typedef itk::CastImageFilter<TInputImage, T> CastFilterType;
301 auto castFilter = CastFilterType::New();
302 castFilter->SetInput(image);
303 castFilter->Update();
304 return castFilter->GetOutput();
static bool IsDicom(std::string path)
check if file is dicom
Definition: DicomIOManager.hxx:284
void SetDirectoryPath(std::string path)
set the input directory containing dicom series
Definition: DicomIOManager.hxx:18
static bool CanReadFile(std::string path, itk::ImageIOBase::Pointer &imageIO)
check if file can be read or not and return the base imageIO if readable
Definition: DicomIOManager.hxx:290
TInputImage::Pointer ReadDicomSeries(bool &readStatus)
Read dicom series.
Definition: DicomSeriesReader.h:66
Definition: DicomSeriesReader.h:26
Definition: DicomIOManager.h:24
T::Pointer GetITKImage()
get the read dicom data as 3D float ITK image
Definition: DicomIOManager.hxx:308
bool LoadDicom()
load dicom data
Definition: DicomIOManager.hxx:23
T::Pointer ConvertImage3DToFloatImage3D(typename TInputImage::Pointer image)
helper to write itk image
Definition: DicomIOManager.hxx:298
TInputImage::Pointer ReadDicomImage(bool &readStatus)
Read dicom series.
Definition: DicomImageReader.h:66
void SetDirectoryPath(std::string path)
set the input directory containing dicom series
Definition: DicomImageReader.h:26