13 #ifndef mitkDicomSeriesReader_h 14 #define mitkDicomSeriesReader_h 19 #include <itkGDCMImageIO.h> 21 #include <itkCommand.h> 22 #include <itkImageSeriesReader.h> 29 #include <gdcmConfigure.h> 38 #include <gdcmDataSet.h> 39 #include <gdcmScanner.h> 446 void AddFile(
const std::string &file);
447 void AddFiles(
const StringContainer &files);
449 void SetImageBlockUID(
const std::string &uid);
451 void SetSeriesInstanceUID(
const std::string &uid);
453 void SetModality(
const std::string &modality);
455 void SetNumberOfFrames(
const std::string &);
457 void SetSOPClassUID(
const std::string &mediaStorageSOPClassUID);
459 void SetHasGantryTiltCorrected(
bool);
461 void SetPixelSpacingInformation(
const std::string &pixelSpacing,
const std::string &imagerPixelSpacing);
463 void SetHasMultipleTimePoints(
bool);
467 StringContainer m_Filenames;
468 std::string m_ImageBlockUID;
469 std::string m_SeriesInstanceUID;
470 std::string m_Modality;
471 std::string m_SOPClassUID;
472 bool m_HasGantryTiltCorrected;
473 std::string m_PixelSpacing;
474 std::string m_ImagerPixelSpacing;
475 bool m_HasMultipleTimePoints;
476 bool m_IsMultiFrameImage;
492 static bool IsDicom(
const std::string &filename);
499 static FileNamesGrouping
GetSeries(
const std::string &dir,
500 bool groupImagesWithGantryTilt,
511 static StringContainer
GetSeries(
const std::string &dir,
512 const std::string &series_uid,
513 bool groupImagesWithGantryTilt,
540 static FileNamesGrouping
GetSeries(
const StringContainer &files,
542 bool groupImagesWithGantryTilt,
550 static FileNamesGrouping
GetSeries(
const StringContainer &files,
551 bool groupImagesWithGantryTilt,
565 bool correctGantryTilt =
true,
579 bool correctGantryTilt =
true,
603 StringContainer GetBlockFilenames();
608 StringContainer GetUnsortedFilenames();
613 bool ContainsGantryTilt();
618 void AddFileToSortedBlock(
const std::string &filename);
623 void AddFileToUnsortedBlock(
const std::string &filename);
624 void AddFilesToUnsortedBlock(
const StringContainer &filenames);
630 void FlagGantryTilt();
635 void UndoPrematureGrouping();
687 unsigned int numberOfSlicesApart);
694 bool IsSheared()
const;
705 bool IsRegularGantryTilt()
const;
710 double GetMatrixCoefficientForCorrectionInWorldCoordinates()
const;
715 double GetRealZSpacing()
const;
722 double GetTiltCorrectedAdditionalSize()
const;
727 double GetTiltAngleInDegrees()
const;
733 Point3D projectPointOnLine(Point3Dd p, Point3Dd lineOrigin, Vector3Dd lineDirection);
768 const StringContainer &files,
bool groupsOfSimilarImages,
const gdcm::Scanner::MappingType &tagValueMappings_);
800 template <
typename ImageType>
801 static typename ImageType::Pointer
824 static StringContainer
SortSeriesSlices(
const StringContainer &unsortedFilenames);
865 void Execute(
const itk::Object *caller,
const itk::EventObject &)
override 867 (*this->m_Callback)(static_cast<const itk::ProcessObject *>(caller)->GetProgress());
870 void Execute(itk::Object *caller,
const itk::EventObject &)
override 872 (*this->m_Callback)(static_cast<itk::ProcessObject *>(caller)->GetProgress());
889 static void LoadDicom(
const StringContainer &filenames,
902 template <
typename PixelType>
906 DcmIoType::Pointer &io,
913 DcmIoType::Pointer &io,
920 DcmIoType::Pointer &io,
927 DcmIoType::Pointer &io,
931 template <
typename PixelType>
936 DcmIoType::Pointer &io,
944 DcmIoType::Pointer &io,
952 DcmIoType::Pointer &io,
960 DcmIoType::Pointer &io,
979 const gdcm::Scanner::MappingType &tagValueMappings_,
989 static bool GdcmSortFunction(
const gdcm::DataSet &ds1,
const gdcm::DataSet &ds2);
997 const gdcm::Scanner::MappingType &tagValueMappings_,
1002 const gdcm::Scanner::MappingType &tagValueMappings_,
PixelSpacingInterpretation
How the mitk::Image spacing should be interpreted.
distances are mm within a patient
std::map< std::string, std::string > TagToPropertyMapType
Maps DICOM tags to MITK properties.
static itk::SmartPointer< Image > LoadDICOMByITK4D(std::list< StringContainer > &imageBlocks, ImageBlockDescriptor imageBlockDescriptor, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
static itk::SmartPointer< Image > MultiplexLoadDICOMByITK4DScalar(std::list< StringContainer > &imageBlocks, ImageBlockDescriptor imageBlockDescriptor, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
static bool DICOMStringToSpacing(const std::string &s, ScalarType &spacingX, ScalarType &spacingY)
Safely convert a string into pixel spacing x and y.
PixelSpacingInterpretation GetPixelSpacingType() const
How the mitk::Image spacing can meaningfully be interpreted.
Return type of GetSeries, describes a logical group of files.
static Point3D DICOMStringToPoint3D(const std::string &s, bool &successful)
Convert DICOM string describing a point to Point3D.
static void ScanForSliceInformation(const StringContainer &filenames, gdcm::Scanner &scanner)
Scan for slice image information.
bool PixelSpacingRelatesToPatient() const
Whether or not mitk::Image spacing relates to the patient.
distances are mm at detector surface
itk::Image< unsigned char, 3 > ImageType
void Execute(const itk::Object *caller, const itk::EventObject &) override
static void FixSpacingInformation(Image *image, const ImageBlockDescriptor &imageBlockDescriptor)
std::pair< StringContainer, StringContainer > TwoStringContainers
for internal sorting.
static std::string GetConfigurationString()
Provide combination of preprocessor defines that was active during compilation.
std::vector< std::string > StringContainer
Lists of filenames.
static bool ReadPhilips3DDicom(const std::string &filename, itk::SmartPointer< Image > output_image)
Read a Philips3D ultrasound DICOM file and put into an mitk::Image.
static ImageType::Pointer InPlaceFixUpTiltedGeometry(ImageType *input, const GantryTiltInformation &tiltInfo)
static DataNode::Pointer LoadDicomSeries(const StringContainer &filenames, bool sort=true, bool load4D=true, bool correctGantryTilt=true, UpdateCallBackMethod callback=nullptr, itk::SmartPointer< Image > preLoadedImageBlock=nullptr)
DataCollection - Class to facilitate loading/accessing structured data.
UpdateCallBackMethod m_Callback
std::string GetSOPClassUIDAsString() const
SOP Class UID as readable string (Computed Tomography Image Storage, Secondary Capture Image Storage...
static itk::SmartPointer< Image > MultiplexLoadDICOMByITKRGBPixel(const StringContainer &, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
void(* UpdateCallBackMethod)(float)
Interface for the progress callback.
StringContainer GetFilenames() const
List of files in this group.
static std::string CreateSeriesIdentifierPart(gdcm::Scanner::TagToValue &tagValueMap, const gdcm::Tag &tag)
Helper for CreateMoreUniqueSeriesIdentifier.
static std::string ReaderImplementationLevelToString(const ReaderImplementationLevel &enumValue)
static itk::SmartPointer< Image > MultiplexLoadDICOMByITK4DRGBPixel(std::list< StringContainer > &imageBlocks, ImageBlockDescriptor imageBlockDescriptor, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
static std::string ConstCharStarToString(const char *s)
Safely convert const char* to std::string.
loader code is implemented but not accompanied by tests
std::string GetSeriesInstanceUID() const
The Series Instance UID.
static std::string PixelSpacingInterpretationToString(const PixelSpacingInterpretation &enumValue)
bool PixelSpacingIsUnknown() const
Whether or not mitk::Image spacing is of unknown origin.
static std::string IDifyTagValue(const std::string &value)
Helper for CreateMoreUniqueSeriesIdentifier.
StringContainer m_UnsortedFiles
static void LoadDicom(const StringContainer &filenames, DataNode &node, bool sort, bool check_4d, bool correctTilt, UpdateCallBackMethod callback, itk::SmartPointer< Image > preLoadedImageBlock)
Performs actual loading of a series and creates an image having the specified pixel type...
static itk::SmartPointer< Image > LoadDICOMByITK(const StringContainer &, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
Feed files into itk::ImageSeriesReader and retrieve a 3D MITK image.
static std::list< StringContainer > SortIntoBlocksFor3DplusT(const StringContainer &presortedFilenames, const gdcm::Scanner::MappingType &tagValueMappings_, bool sort, bool &canLoadAs4D)
Sort files into time step blocks of a 3D+t image.
void Execute(itk::Object *caller, const itk::EventObject &) override
ReaderImplementationLevel GetReaderImplementationLevel() const
Confidence of the reader that this block can be read successfully.
static FileNamesGrouping GetSeries(const std::string &dir, bool groupImagesWithGantryTilt, const StringContainer &restrictions=StringContainer())
see other GetSeries().
static void DICOMStringToOrientationVectors(const std::string &s, Vector3D &right, Vector3D &up, bool &successful)
Convert DICOM string describing a point two Vector3D.
bool HasMultipleTimePoints() const
3D+t or not
Image class for storing images.
Progress callback for DicomSeriesReader.
StringContainer m_GroupedFiles
std::string GetModality() const
Series Modality (CT, MR, etc.)
mitk::Image::Pointer image
static bool IsPhilips3DDicom(const std::string &filename)
Checks if a specific file is a Philips3D ultrasound DICOM file.
static itk::SmartPointer< Image > MultiplexLoadDICOMByITKScalar(const StringContainer &, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
static bool IsDicom(const std::string &filename)
Checks if a specific file contains DICOM data.
loader code and tests are established
std::string GetSOPClassUID() const
SOP Class UID as DICOM UID.
std::string GetImageBlockUID() const
A unique ID describing this bloc (enhanced Series Instance UID).
Return type of DicomSeriesReader::AnalyzeFileForITKImageSeriesReaderSpacingAssumption.
static void CopyMetaDataToImageProperties(StringContainer filenames, const gdcm::Scanner::MappingType &tagValueMappings_, DcmIoType *io, const ImageBlockDescriptor &blockInfo, Image *image)
Copy information about files and DICOM tags from ITK's MetaDataDictionary and from the list of input ...
static itk::SmartPointer< Image > MultiplexLoadDICOMByITK4D(std::list< StringContainer > &imageBlocks, ImageBlockDescriptor imageBlockDescriptor, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
bool PixelSpacingRelatesToDetector() const
Whether or not mitk::Image spacing relates to the detector surface.
CallbackCommand(UpdateCallBackMethod callback)
static const TagToPropertyMapType & GetDICOMTagsToMITKPropertyMap()
Map between DICOM tags and MITK properties.
std::map< std::string, ImageBlockDescriptor > FileNamesGrouping
bool IsMultiFrameImage() const
Multi-frame image(s) or not.
itk::GDCMImageIO DcmIoType
static std::string CreateMoreUniqueSeriesIdentifier(gdcm::Scanner::TagToValue &tagValueMap)
Construct a UID that takes into account sorting criteria from GetSeries().
static itk::SmartPointer< Image > MultiplexLoadDICOMByITK(const StringContainer &, bool correctTilt, const GantryTiltInformation &tiltInfo, DcmIoType::Pointer &io, CallbackCommand *command, itk::SmartPointer< Image > preLoadedImageBlock)
static StringContainer SortSeriesSlices(const StringContainer &unsortedFilenames)
Sort a set of file names in an order that is meaningful for loading them into an mitk::Image.
ReaderImplementationLevel
Describes how well the reader is tested for a certain file type.
static bool GdcmSortFunction(const gdcm::DataSet &ds1, const gdcm::DataSet &ds2)
Defines spatial sorting for sorting by GDCM 2.
Class for nodes of the DataTree.
bool HasGantryTiltCorrected() const
Whether or not the block contains a gantry tilt which will be "corrected" during loading.
static SliceGroupingAnalysisResult AnalyzeFileForITKImageSeriesReaderSpacingAssumption(const StringContainer &files, bool groupsOfSimilarImages, const gdcm::Scanner::MappingType &tagValueMappings_)
Ensure an equal z-spacing for a group of files.