diff --git a/Modules/DiffusionCore/CMakeLists.txt b/Modules/DiffusionCore/CMakeLists.txt index 55d0676..c73997b 100644 --- a/Modules/DiffusionCore/CMakeLists.txt +++ b/Modules/DiffusionCore/CMakeLists.txt @@ -1,26 +1,25 @@ # With apple gcc 4.2.1 the following waring leads to an build error if boost is enabled if(APPLE) mitkFunctionCheckCAndCXXCompilerFlags("-Wno-error=empty-body" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) endif() MITK_CREATE_MODULE( SUBPROJECTS MITK-Diffusion INCLUDE_DIRS Algorithms Algorithms/Reconstruction Algorithms/Registration Algorithms/Reconstruction/MultishellProcessing Algorithms/Reconstruction/FittingFunctions DicomImport IODataStructures/DiffusionWeightedImages IODataStructures/Properties IODataStructures Rendering ${CMAKE_CURRENT_BINARY_DIR} DEPENDS MitkMapperExt MitkPlanarFigure MitkImageExtraction MitkSceneSerializationBase MitkDICOMReader MitkMatchPointRegistration PACKAGE_DEPENDS PUBLIC ITK|ITKTestKernel+ITKRegistrationCommon+ITKMetricsv4+ITKRegistrationMethodsv4+ITKDistanceMap+ITKLabelVoting+ITKVTK+ITKFFT+ITKDiffusionTensorImage PUBLIC VTK|vtkFiltersProgrammable OpenMP|OpenMP_CXX Vigra HDF5 ) if(MSVC) mitkFunctionCheckCAndCXXCompilerFlags("/wd4005" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) endif() add_subdirectory(Testing) -add_subdirectory(autoload/IO) if(MITK_USE_Python) MITK_INSTALL(FILES PythonRequirements.txt) endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mitkDiffusionImagingConfigure.h.in ${CMAKE_CURRENT_BINARY_DIR}/mitkDiffusionImagingConfigure.h) diff --git a/Modules/DiffusionCore/autoload/IO/CMakeLists.txt b/Modules/DiffusionCore/autoload/IO/CMakeLists.txt deleted file mode 100644 index b400054..0000000 --- a/Modules/DiffusionCore/autoload/IO/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -MITK_CREATE_MODULE( DiffusionCoreIO - INCLUDE_DIRS - PRIVATE src/IO - DEPENDS PUBLIC MitkDiffusionCore MitkSceneSerialization - PACKAGE_DEPENDS - PRIVATE tinyxml - AUTOLOAD_WITH MitkCore - SUBPROJECTS MITK-Diffusion -) \ No newline at end of file diff --git a/Modules/DiffusionCore/autoload/IO/files.cmake b/Modules/DiffusionCore/autoload/IO/files.cmake deleted file mode 100644 index a7f7003..0000000 --- a/Modules/DiffusionCore/autoload/IO/files.cmake +++ /dev/null @@ -1,28 +0,0 @@ -set(CPP_FILES - mitkDiffusionCoreIOActivator.cpp - mitkPeakImageReader.cpp - mitkNrrdTensorImageReader.cpp - mitkNrrdTensorImageWriter.cpp - mitkTensorImageSerializer.cpp - mitkTensorImageSource.cpp - mitkDiffusionCoreObjectFactory.cpp - - mitkDiffusionCoreIOMimeTypes.cpp - - mitkDiffusionImageDicomReaderService.cpp - mitkDiffusionImageNrrdReaderService.cpp - mitkDiffusionImageNrrdWriterService.cpp - mitkDiffusionImageNiftiReaderService.cpp - mitkDiffusionImageNiftiWriterService.cpp - - mitkNrrdOdfImageReader.cpp - mitkNrrdOdfImageWriter.cpp - mitkOdfImageSerializer.cpp - mitkPeakImageSerializer.cpp - mitkShImageReader.cpp - mitkShImageWriter.cpp - mitkShImageSerializer.cpp - - mitkCompositeMapper.cpp -) - diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOActivator.cpp b/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOActivator.cpp deleted file mode 100644 index 3bc4088..0000000 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOActivator.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include - -#include "mitkDiffusionCoreIOMimeTypes.h" - -namespace mitk -{ - /** - \brief Registers services for segmentation module. - */ - class DiffusionCoreIOActivator : public us::ModuleActivator - { - public: - - void Load(us::ModuleContext* context) override - { - m_MimeTypes = mitk::DiffusionCoreIOMimeTypes::Get(); - for (std::vector::const_iterator mimeTypeIter = m_MimeTypes.begin(), - iterEnd = m_MimeTypes.end(); mimeTypeIter != iterEnd; ++mimeTypeIter) - { - us::ServiceProperties props; - mitk::CustomMimeType* mt = *mimeTypeIter; - if (mt->GetName()!=mitk::DiffusionCoreIOMimeTypes::PEAK_MIMETYPE_NAME() && mt->GetName()!=mitk::DiffusionCoreIOMimeTypes::SH_MIMETYPE_NAME()) - props[ us::ServiceConstants::SERVICE_RANKING() ] = 10; - - context->RegisterService(*mimeTypeIter, props); - } - - m_DiffusionImageNrrdReaderService = new DiffusionImageNrrdReaderService(); - m_DiffusionImageNiftiReaderService = new DiffusionImageNiftiReaderService( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE_DESCRIPTION() ); - m_DiffusionImageFslNiftiReaderService = new DiffusionImageNiftiReaderService( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DWI_FSL_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DWI_FSL_MIMETYPE_DESCRIPTION() ); - m_DiffusionImageDicomReaderService = new DiffusionImageDicomReaderService(); - - m_NrrdTensorImageReader = new NrrdTensorImageReader(); - m_NrrdOdfImageReader = new NrrdOdfImageReader(); - m_PeakImageReader = new PeakImageReader(); - m_ShImageReader = new ShImageReader(); - - m_DiffusionImageNrrdWriterService = new DiffusionImageNrrdWriterService(); - m_DiffusionImageNiftiWriterService = new DiffusionImageNiftiWriterService(); - m_NrrdTensorImageWriter = new NrrdTensorImageWriter(); - m_NrrdOdfImageWriter = new NrrdOdfImageWriter(); - m_ShImageWriter = new ShImageWriter(); - - mitk::DiffusionPropertyHelper::SetupProperties(); - } - - void Unload(us::ModuleContext*) override - { - for (unsigned int loop(0); loop < m_MimeTypes.size(); ++loop) - { - delete m_MimeTypes.at(loop); - } - - delete m_DiffusionImageNrrdReaderService; - delete m_DiffusionImageNiftiReaderService; - delete m_DiffusionImageFslNiftiReaderService; - delete m_DiffusionImageDicomReaderService; - delete m_NrrdTensorImageReader; - delete m_NrrdOdfImageReader; - delete m_PeakImageReader; - delete m_ShImageReader; - - delete m_DiffusionImageNrrdWriterService; - delete m_DiffusionImageNiftiWriterService; - delete m_NrrdTensorImageWriter; - delete m_NrrdOdfImageWriter; - delete m_ShImageWriter; - } - - private: - - DiffusionImageNrrdReaderService * m_DiffusionImageNrrdReaderService; - DiffusionImageNiftiReaderService * m_DiffusionImageNiftiReaderService; - DiffusionImageNiftiReaderService * m_DiffusionImageFslNiftiReaderService; - DiffusionImageDicomReaderService * m_DiffusionImageDicomReaderService; - NrrdTensorImageReader * m_NrrdTensorImageReader; - NrrdOdfImageReader * m_NrrdOdfImageReader; - PeakImageReader * m_PeakImageReader; - ShImageReader * m_ShImageReader; - - DiffusionImageNrrdWriterService * m_DiffusionImageNrrdWriterService; - DiffusionImageNiftiWriterService * m_DiffusionImageNiftiWriterService; - NrrdTensorImageWriter * m_NrrdTensorImageWriter; - NrrdOdfImageWriter * m_NrrdOdfImageWriter; - ShImageWriter * m_ShImageWriter; - - std::vector m_MimeTypes; - - }; -} - -US_EXPORT_MODULE_ACTIVATOR(mitk::DiffusionCoreIOActivator) diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOMimeTypes.cpp b/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOMimeTypes.cpp deleted file mode 100644 index e2263b9..0000000 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOMimeTypes.cpp +++ /dev/null @@ -1,646 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - -#include "mitkDiffusionCoreIOMimeTypes.h" -#include "mitkIOMimeTypes.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace mitk -{ - -std::vector DiffusionCoreIOMimeTypes::Get() -{ - std::vector mimeTypes; - - // order matters here (descending rank for mime types) - - mimeTypes.push_back(DWI_NRRD_MIMETYPE().Clone()); - mimeTypes.push_back(DWI_NIFTI_MIMETYPE().Clone()); - mimeTypes.push_back(DWI_FSL_MIMETYPE().Clone()); - mimeTypes.push_back(DWI_DICOM_MIMETYPE().Clone()); - mimeTypes.push_back(DTI_MIMETYPE().Clone()); - mimeTypes.push_back(ODF_MIMETYPE().Clone()); - mimeTypes.push_back(PEAK_MIMETYPE().Clone()); - mimeTypes.push_back(SH_MIMETYPE().Clone()); - - return mimeTypes; -} - -// Mime Types - -DiffusionCoreIOMimeTypes::DiffusionImageNrrdMimeType::DiffusionImageNrrdMimeType() - : CustomMimeType(DWI_NRRD_MIMETYPE_NAME()) -{ - std::string category = "Diffusion Weighted Images"; - this->SetCategory(category); - this->SetComment("Diffusion Weighted Images"); - - this->AddExtension("dwi"); - //this->AddExtension("hdwi"); // saving with detached header does not work out of the box - this->AddExtension("nrrd"); -} - -bool DiffusionCoreIOMimeTypes::DiffusionImageNrrdMimeType::AppliesTo(const std::string &path) const -{ - bool canRead( CustomMimeType::AppliesTo(path) ); - - // fix for bug 18572 - // Currently this function is called for writing as well as reading, in that case - // the image information can of course not be read - // This is a bug, this function should only be called for reading. - if( ! itksys::SystemTools::FileExists( path.c_str() ) ) - { - return canRead; - } - //end fix for bug 18572 - - itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); - // Simple NRRD files should only be considered for this mime type if they contain - // corresponding tags - if( io->CanReadFile(path.c_str())) - { - io->SetFileName(path); - try - { - io->ReadImageInformation(); - - itk::MetaDataDictionary imgMetaDictionary = io->GetMetaDataDictionary(); - std::vector imgMetaKeys = imgMetaDictionary.GetKeys(); - std::vector::const_iterator itKey = imgMetaKeys.begin(); - std::string metaString; - - for (; itKey != imgMetaKeys.end(); itKey ++) - { - itk::ExposeMetaData (imgMetaDictionary, *itKey, metaString); - if (itKey->find("modality") != std::string::npos) - { - if (metaString.find("DWMRI") != std::string::npos) - { - return canRead; - } - } - } - - } - catch( const itk::ExceptionObject &e ) - { - MITK_ERROR << "ITK Exception: " << e.what(); - } - canRead = false; - } - - return canRead; -} - -DiffusionCoreIOMimeTypes::DiffusionImageNrrdMimeType* DiffusionCoreIOMimeTypes::DiffusionImageNrrdMimeType::Clone() const -{ - return new DiffusionImageNrrdMimeType(*this); -} - - -DiffusionCoreIOMimeTypes::DiffusionImageNrrdMimeType DiffusionCoreIOMimeTypes::DWI_NRRD_MIMETYPE() -{ - return DiffusionImageNrrdMimeType(); -} - -DiffusionCoreIOMimeTypes::DiffusionImageNiftiMimeType::DiffusionImageNiftiMimeType() - : CustomMimeType(DWI_NIFTI_MIMETYPE_NAME()) -{ - std::string category = "Diffusion Weighted Images"; - this->SetCategory(category); - this->SetComment("Diffusion Weighted Images"); - this->AddExtension("nii.gz"); - this->AddExtension("nii"); -} - -bool DiffusionCoreIOMimeTypes::DiffusionImageNiftiMimeType::AppliesTo(const std::string &path) const -{ - bool canRead(CustomMimeType::AppliesTo(path)); - - // fix for bug 18572 - // Currently this function is called for writing as well as reading, in that case - // the image information can of course not be read - // This is a bug, this function should only be called for reading. - if (!itksys::SystemTools::FileExists(path.c_str())) - { - return canRead; - } - //end fix for bug 18572 - - std::string ext = this->GetExtension(path); - ext = itksys::SystemTools::LowerCase(ext); - - // Nifti files should only be considered for this mime type if they are - // accompanied by bvecs and bvals files defining the diffusion information - if (ext == ".nii" || ext == ".nii.gz") - { - std::string base_path = itksys::SystemTools::GetFilenamePath(path); - std::string base = this->GetFilenameWithoutExtension(path); - std::string filename = base; - if (!base_path.empty()) - { - base = base_path + "/" + base; - base_path += "/"; - } - - if (itksys::SystemTools::FileExists(std::string(base + ".bvec").c_str()) - && itksys::SystemTools::FileExists(std::string(base + ".bval").c_str()) - ) - { - return canRead; - } - - if (itksys::SystemTools::FileExists(std::string(base + ".bvecs").c_str()) - && itksys::SystemTools::FileExists(std::string(base + ".bvals").c_str()) - ) - { - return canRead; - } - - // hack for HCP data - if ( filename=="data" && itksys::SystemTools::FileExists(std::string(base_path + "bvec").c_str()) && itksys::SystemTools::FileExists(std::string(base_path + "bval").c_str()) ) - { - return canRead; - } - - if ( filename=="data" && itksys::SystemTools::FileExists(std::string(base_path + "bvecs").c_str()) && itksys::SystemTools::FileExists(std::string(base_path + "bvals").c_str()) ) - { - return canRead; - } - - canRead = false; - } - - return canRead; -} - -DiffusionCoreIOMimeTypes::DiffusionImageNiftiMimeType* DiffusionCoreIOMimeTypes::DiffusionImageNiftiMimeType::Clone() const -{ - return new DiffusionImageNiftiMimeType(*this); -} - - -DiffusionCoreIOMimeTypes::DiffusionImageNiftiMimeType DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE() -{ - return DiffusionImageNiftiMimeType(); -} - -DiffusionCoreIOMimeTypes::DiffusionImageFslMimeType::DiffusionImageFslMimeType() - : CustomMimeType(DWI_FSL_MIMETYPE_NAME()) -{ - std::string category = "Diffusion Weighted Images"; - this->SetCategory(category); - this->SetComment("Diffusion Weighted Images"); - this->AddExtension("fslgz"); - this->AddExtension("fsl"); -} - -bool DiffusionCoreIOMimeTypes::DiffusionImageFslMimeType::AppliesTo(const std::string &path) const -{ - bool canRead(CustomMimeType::AppliesTo(path)); - - // fix for bug 18572 - // Currently this function is called for writing as well as reading, in that case - // the image information can of course not be read - // This is a bug, this function should only be called for reading. - if (!itksys::SystemTools::FileExists(path.c_str())) - { - return canRead; - } - //end fix for bug 18572 - - std::string ext = this->GetExtension(path); - ext = itksys::SystemTools::LowerCase(ext); - - // Nifti files should only be considered for this mime type if they are - // accompanied by bvecs and bvals files defining the diffusion information - if (ext == ".fsl" || ext == ".fslgz") - { - std::string base_path = itksys::SystemTools::GetFilenamePath(path); - std::string base = this->GetFilenameWithoutExtension(path); - if (!base_path.empty()) - base = base_path + "/" + base; - - if (itksys::SystemTools::FileExists(std::string(base + ".bvec").c_str()) - && itksys::SystemTools::FileExists(std::string(base + ".bval").c_str()) - ) - { - return canRead; - } - - if (itksys::SystemTools::FileExists(std::string(base + ".bvecs").c_str()) - && itksys::SystemTools::FileExists(std::string(base + ".bvals").c_str()) - ) - { - return canRead; - } - - if (itksys::SystemTools::FileExists(std::string(base + ext + ".bvec").c_str()) - && itksys::SystemTools::FileExists(std::string(base + ext + ".bval").c_str()) - ) - { - return canRead; - } - - if (itksys::SystemTools::FileExists(std::string(base + ext + ".bvecs").c_str()) - && itksys::SystemTools::FileExists(std::string(base + ext + ".bvals").c_str()) - ) - { - return canRead; - } - - canRead = false; - } - - return canRead; -} - -DiffusionCoreIOMimeTypes::DiffusionImageFslMimeType* DiffusionCoreIOMimeTypes::DiffusionImageFslMimeType::Clone() const -{ - return new DiffusionImageFslMimeType(*this); -} - - -DiffusionCoreIOMimeTypes::DiffusionImageFslMimeType DiffusionCoreIOMimeTypes::DWI_FSL_MIMETYPE() -{ - return DiffusionImageFslMimeType(); -} - - -DiffusionCoreIOMimeTypes::DiffusionImageDicomMimeType::DiffusionImageDicomMimeType() - : CustomMimeType(DWI_DICOM_MIMETYPE_NAME()) -{ - std::string category = "Diffusion Weighted Images"; - this->SetCategory(category); - this->SetComment("Diffusion Weighted Images"); - - this->AddExtension("gdcm"); - this->AddExtension("dcm"); - this->AddExtension("DCM"); - this->AddExtension("dc3"); - this->AddExtension("DC3"); - this->AddExtension("ima"); - this->AddExtension("img"); -} - -bool DiffusionCoreIOMimeTypes::DiffusionImageDicomMimeType::AppliesTo(const std::string &path) const -{ - itk::GDCMImageIO::Pointer gdcmIO = itk::GDCMImageIO::New(); - bool canRead = gdcmIO->CanReadFile(path.c_str()); - - if (!canRead) - return canRead; - - mitk::DICOMDCMTKTagScanner::Pointer scanner = mitk::DICOMDCMTKTagScanner::New(); - mitk::DICOMTag ImageTypeTag(0x0008, 0x0008); - mitk::DICOMTag SeriesDescriptionTag(0x0008, 0x103E); - - mitk::StringList relevantFiles; - relevantFiles.push_back(path); - - scanner->AddTag(ImageTypeTag); - scanner->AddTag(SeriesDescriptionTag); - scanner->SetInputFiles(relevantFiles); - scanner->Scan(); - mitk::DICOMTagCache::Pointer tagCache = scanner->GetScanCache(); - - mitk::DICOMImageFrameList imageFrameList = mitk::ConvertToDICOMImageFrameList(tagCache->GetFrameInfoList()); - mitk::DICOMImageFrameInfo *firstFrame = imageFrameList.begin()->GetPointer(); - - std::string byteString = tagCache->GetTagValue(firstFrame, ImageTypeTag).value; - if (byteString.empty()) - return false; - - std::string byteString2 = tagCache->GetTagValue(firstFrame, SeriesDescriptionTag).value; - if (byteString2.empty()) - return false; - - if (byteString.find("DIFFUSION")==std::string::npos && - byteString2.find("diff")==std::string::npos && - byteString2.find("DWI")==std::string::npos) - return false; - - return canRead; -} - -DiffusionCoreIOMimeTypes::DiffusionImageDicomMimeType* DiffusionCoreIOMimeTypes::DiffusionImageDicomMimeType::Clone() const -{ - return new DiffusionImageDicomMimeType(*this); -} - - -DiffusionCoreIOMimeTypes::DiffusionImageDicomMimeType DiffusionCoreIOMimeTypes::DWI_DICOM_MIMETYPE() -{ - return DiffusionImageDicomMimeType(); -} - - -DiffusionCoreIOMimeTypes::PeakImageMimeType::PeakImageMimeType() : CustomMimeType(PEAK_MIMETYPE_NAME()) -{ - std::string category = "Peak Image"; - this->SetCategory(category); - this->SetComment("Peak Image"); - - this->AddExtension("nrrd"); - this->AddExtension("nii"); - this->AddExtension("nii.gz"); - this->AddExtension("peak"); -} - -bool DiffusionCoreIOMimeTypes::PeakImageMimeType::AppliesTo(const std::string &path) const -{ - std::string ext = itksys::SystemTools::GetFilenameExtension(path); - if (ext==".peak") - return true; - - try - { - itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); - if ( io->CanReadFile( path.c_str() ) ) - { - io->SetFileName( path.c_str() ); - io->ReadImageInformation(); - if ( io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions()==4 && io->GetDimensions(3)%3==0) - return true; - } - } - catch(...) - {} - - try - { - itk::NiftiImageIO::Pointer io = itk::NiftiImageIO::New(); - if ( io->CanReadFile( path.c_str() ) ) - { - io->SetFileName( path.c_str() ); - io->ReadImageInformation(); - if ( io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions()==4 && io->GetDimensions(3)%3==0) - return true; - } - } - catch(...) - {} - - return false; -} - -DiffusionCoreIOMimeTypes::PeakImageMimeType* DiffusionCoreIOMimeTypes::PeakImageMimeType::Clone() const -{ - return new PeakImageMimeType(*this); -} - - -DiffusionCoreIOMimeTypes::PeakImageMimeType DiffusionCoreIOMimeTypes::PEAK_MIMETYPE() -{ - return PeakImageMimeType(); -} - - -DiffusionCoreIOMimeTypes::SHImageMimeType::SHImageMimeType() : CustomMimeType(SH_MIMETYPE_NAME()) -{ - std::string category = "SH Image"; - this->SetCategory(category); - this->SetComment("SH Image"); - - this->AddExtension("nii.gz"); - this->AddExtension("nii"); - this->AddExtension("nrrd"); - this->AddExtension("shi"); -} - -bool DiffusionCoreIOMimeTypes::SHImageMimeType::AppliesTo(const std::string &path) const -{ - std::string ext = itksys::SystemTools::GetFilenameExtension(path); - if (ext==".shi") - return true; - - { - try - { - itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); - if (io->CanReadFile(path.c_str())) - { - io->SetFileName(path.c_str()); - io->ReadImageInformation(); - if (io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions() == 4) - { - switch (io->GetDimensions(3)) - { - case 6: - return true; - break; - case 15: - return true; - break; - case 28: - return true; - break; - case 45: - return true; - break; - case 66: - return true; - break; - case 91: - return true; - break; - default: - return false; - } - } - } - } - catch(...) - {} - } - - { - itk::NiftiImageIO::Pointer io = itk::NiftiImageIO::New(); - if ( io->CanReadFile( path.c_str() ) ) - { - io->SetFileName( path.c_str() ); - io->ReadImageInformation(); - if ( io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions()==4) - { - switch (io->GetDimensions(3)) - { - case 6: - return true; - break; - case 15: - return true; - break; - case 28: - return true; - break; - case 45: - return true; - break; - case 66: - return true; - break; - case 91: - return true; - break; - default : - return false; - } - } - } - } - - return false; -} - -DiffusionCoreIOMimeTypes::SHImageMimeType* DiffusionCoreIOMimeTypes::SHImageMimeType::Clone() const -{ - return new SHImageMimeType(*this); -} - - -DiffusionCoreIOMimeTypes::SHImageMimeType DiffusionCoreIOMimeTypes::SH_MIMETYPE() -{ - return SHImageMimeType(); -} - -CustomMimeType DiffusionCoreIOMimeTypes::DTI_MIMETYPE() -{ - CustomMimeType mimeType(DTI_MIMETYPE_NAME()); - std::string category = "Tensor Image"; - mimeType.SetComment("Diffusion Tensor Image"); - mimeType.SetCategory(category); - mimeType.AddExtension("dti"); - return mimeType; -} - -CustomMimeType DiffusionCoreIOMimeTypes::ODF_MIMETYPE() -{ - CustomMimeType mimeType(ODF_MIMETYPE_NAME()); - std::string category = "ODF Image"; - mimeType.SetComment("Diffusion ODF Image"); - mimeType.SetCategory(category); - mimeType.AddExtension("odf"); - mimeType.AddExtension("qbi"); // legacy support - return mimeType; -} - -// Names -std::string DiffusionCoreIOMimeTypes::PEAK_MIMETYPE_NAME() -{ - static std::string name ="ODF_PEAKS"; - return name; -} - -std::string DiffusionCoreIOMimeTypes::DWI_NRRD_MIMETYPE_NAME() -{ - static std::string name = "DWI_NRRD"; - return name; -} - -std::string DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE_NAME() -{ - static std::string name = "DWI_NIFTI"; - return name; -} - -std::string DiffusionCoreIOMimeTypes::DWI_FSL_MIMETYPE_NAME() -{ - static std::string name = "DWI_FSL"; - return name; -} - -std::string DiffusionCoreIOMimeTypes::DWI_DICOM_MIMETYPE_NAME() -{ - static std::string name = "DWI_DICOM"; - return name; -} - -std::string DiffusionCoreIOMimeTypes::DTI_MIMETYPE_NAME() -{ - static std::string name = "DT_IMAGE"; - return name; -} - -std::string DiffusionCoreIOMimeTypes::ODF_MIMETYPE_NAME() -{ - static std::string name = "ODF_IMAGE"; - return name; -} - -std::string DiffusionCoreIOMimeTypes::SH_MIMETYPE_NAME() -{ - static std::string name = "SH_IMAGE"; - return name; -} - -// Descriptions -std::string DiffusionCoreIOMimeTypes::PEAK_MIMETYPE_DESCRIPTION() -{ - static std::string description = "Peak Image"; - return description; -} - -std::string DiffusionCoreIOMimeTypes::DWI_NRRD_MIMETYPE_DESCRIPTION() -{ - static std::string description = "Diffusion Weighted Images"; - return description; -} - -std::string DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE_DESCRIPTION() -{ - static std::string description = "Diffusion Weighted Images"; - return description; -} - -std::string DiffusionCoreIOMimeTypes::DWI_FSL_MIMETYPE_DESCRIPTION() -{ - static std::string description = "Diffusion Weighted Images"; - return description; -} - -std::string DiffusionCoreIOMimeTypes::DWI_DICOM_MIMETYPE_DESCRIPTION() -{ - static std::string description = "Diffusion Weighted Images"; - return description; -} - -std::string DiffusionCoreIOMimeTypes::DTI_MIMETYPE_DESCRIPTION() -{ - static std::string description = "Diffusion Tensor Image"; - return description; -} - -std::string DiffusionCoreIOMimeTypes::ODF_MIMETYPE_DESCRIPTION() -{ - static std::string description = "ODF Image"; - return description; -} - -std::string DiffusionCoreIOMimeTypes::SH_MIMETYPE_DESCRIPTION() -{ - static std::string description = "SH Image"; - return description; -} - -} diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOMimeTypes.h b/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOMimeTypes.h deleted file mode 100644 index 80441a1..0000000 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreIOMimeTypes.h +++ /dev/null @@ -1,118 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - -#ifndef MITKDiffusionCoreIOMimeTypes_H -#define MITKDiffusionCoreIOMimeTypes_H - -#include "mitkCustomMimeType.h" -#include - -namespace mitk { - -class DiffusionCoreIOMimeTypes -{ -public: - - class DiffusionImageNrrdMimeType : public CustomMimeType - { - public: - DiffusionImageNrrdMimeType(); - bool AppliesTo(const std::string &path) const override; - DiffusionImageNrrdMimeType* Clone() const override; - }; - - class DiffusionImageNiftiMimeType : public CustomMimeType - { - public: - DiffusionImageNiftiMimeType(); - bool AppliesTo(const std::string &path) const override; - DiffusionImageNiftiMimeType* Clone() const override; - }; - - class DiffusionImageFslMimeType : public CustomMimeType - { - public: - DiffusionImageFslMimeType(); - bool AppliesTo(const std::string &path) const override; - DiffusionImageFslMimeType* Clone() const override; - }; - - class DiffusionImageDicomMimeType : public CustomMimeType - { - public: - DiffusionImageDicomMimeType(); - bool AppliesTo(const std::string &path) const override; - DiffusionImageDicomMimeType* Clone() const override; - }; - - class PeakImageMimeType : public CustomMimeType - { - public: - PeakImageMimeType(); - bool AppliesTo(const std::string &path) const override; - PeakImageMimeType* Clone() const override; - }; - - class SHImageMimeType : public CustomMimeType - { - public: - SHImageMimeType(); - bool AppliesTo(const std::string &path) const override; - SHImageMimeType* Clone() const override; - }; - - // Get all Diffusion Mime Types - static std::vector Get(); - - // ------------------------- Image formats (ITK based) -------------------------- - - static DiffusionImageNrrdMimeType DWI_NRRD_MIMETYPE(); - static DiffusionImageNiftiMimeType DWI_NIFTI_MIMETYPE(); - static DiffusionImageFslMimeType DWI_FSL_MIMETYPE(); - static DiffusionImageDicomMimeType DWI_DICOM_MIMETYPE(); - static PeakImageMimeType PEAK_MIMETYPE(); - static CustomMimeType DTI_MIMETYPE(); // dti - static CustomMimeType ODF_MIMETYPE(); // odf, qbi - static SHImageMimeType SH_MIMETYPE(); // spherical harmonics coefficients - - static std::string PEAK_MIMETYPE_NAME(); - static std::string DWI_NRRD_MIMETYPE_NAME(); - static std::string DWI_NIFTI_MIMETYPE_NAME(); - static std::string DWI_FSL_MIMETYPE_NAME(); - static std::string DWI_DICOM_MIMETYPE_NAME(); - static std::string DTI_MIMETYPE_NAME(); - static std::string ODF_MIMETYPE_NAME(); - static std::string SH_MIMETYPE_NAME(); - - static std::string PEAK_MIMETYPE_DESCRIPTION(); - static std::string DWI_NRRD_MIMETYPE_DESCRIPTION(); - static std::string DWI_NIFTI_MIMETYPE_DESCRIPTION(); - static std::string DWI_FSL_MIMETYPE_DESCRIPTION(); - static std::string DWI_DICOM_MIMETYPE_DESCRIPTION(); - static std::string DTI_MIMETYPE_DESCRIPTION(); - static std::string ODF_MIMETYPE_DESCRIPTION(); - static std::string SH_MIMETYPE_DESCRIPTION(); - -private: - - // purposely not implemented - DiffusionCoreIOMimeTypes(); - DiffusionCoreIOMimeTypes(const DiffusionCoreIOMimeTypes&); -}; - -} - -#endif // MITKDiffusionCoreIOMimeTypes_H diff --git a/Modules/DiffusionCore/autoload/IO/mitkTensorImageSource.cpp b/Modules/DiffusionCore/autoload/IO/mitkTensorImageSource.cpp deleted file mode 100644 index 79d0ea5..0000000 --- a/Modules/DiffusionCore/autoload/IO/mitkTensorImageSource.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - - -#include "mitkTensorImageSource.h" - - -mitk::TensorImageSource::TensorImageSource() -{ - // Create the output. We use static_cast<> here because we know the default - // output must be of type TOutputImage - OutputImageType::Pointer output - = static_cast(this->MakeOutput(0).GetPointer()); - Superclass::SetNumberOfRequiredOutputs(1); - Superclass::SetNthOutput(0, output.GetPointer()); -} - -itk::DataObject::Pointer mitk::TensorImageSource::MakeOutput ( DataObjectPointerArraySizeType /*idx*/ ) -{ - return OutputImageType::New().GetPointer(); -} - - -itk::DataObject::Pointer mitk::TensorImageSource::MakeOutput( const DataObjectIdentifierType & name ) -{ - itkDebugMacro("MakeOutput(" << name << ")"); - if( this->IsIndexedOutputName(name) ) - { - return this->MakeOutput( this->MakeIndexFromOutputName(name) ); - } - return static_cast(OutputImageType::New().GetPointer()); -} diff --git a/Modules/DiffusionCore/autoload/IO/mitkTensorImageSource.h b/Modules/DiffusionCore/autoload/IO/mitkTensorImageSource.h deleted file mode 100644 index e2443d6..0000000 --- a/Modules/DiffusionCore/autoload/IO/mitkTensorImageSource.h +++ /dev/null @@ -1,63 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - - -#ifndef TensorImageSource_H_HEADER_INCLUDED_C1E7D6EC -#define TensorImageSource_H_HEADER_INCLUDED_C1E7D6EC - -#include "mitkImageSource.h" -#include "mitkTensorImage.h" - -namespace mitk { - -class TensorImageSource : public ImageSource -{ -public: - - typedef mitk::TensorImage OutputImageType; - typedef OutputImageType::Pointer OutputImagePointer; - typedef SlicedData::RegionType OutputImageRegionType; - typedef itk::DataObject::Pointer DataObjectPointer; - - mitkClassMacro(TensorImageSource,ImageSource); - itkFactorylessNewMacro(Self) - itkCloneMacro(Self) - - /** - * Allocates a new output object and returns it. Currently the - * index idx is not evaluated. - * @param idx the index of the output for which an object should be created - * @returns the new object - */ - itk::DataObject::Pointer MakeOutput ( DataObjectPointerArraySizeType idx ) override; - - /** - * This is a default implementation to make sure we have something. - * Once all the subclasses of ProcessObject provide an appopriate - * MakeOutput(), then ProcessObject::MakeOutput() can be made pure - * virtual. - */ - itk::DataObject::Pointer MakeOutput(const DataObjectIdentifierType &name) override; - -protected: - TensorImageSource(); - ~TensorImageSource() override {} - -}; - -} // namespace mitk - -#endif /* TensorImageSource_H_HEADER_INCLUDED_C1E7D6EC */ diff --git a/Modules/DiffusionIO/CMakeLists.txt b/Modules/DiffusionIO/CMakeLists.txt index 7b10990..bc668ab 100644 --- a/Modules/DiffusionIO/CMakeLists.txt +++ b/Modules/DiffusionIO/CMakeLists.txt @@ -1,8 +1,10 @@ MITK_CREATE_MODULE( SUBPROJECTS MITK-Diffusion - INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS MitkConnectomics MitkDiffusionCore + INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} Mapper ReaderWriter ObjectFactories + DEPENDS MitkConnectomics MitkDiffusionCore MitkSceneSerialization AUTOLOAD_WITH MitkCore - PACKAGE_DEPENDS PUBLIC DCMTK + PACKAGE_DEPENDS + PUBLIC DCMTK + PRIVATE tinyxml ) diff --git a/Modules/DiffusionCore/autoload/IO/mitkCompositeMapper.cpp b/Modules/DiffusionIO/Mapper/mitkCompositeMapper.cpp similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkCompositeMapper.cpp rename to Modules/DiffusionIO/Mapper/mitkCompositeMapper.cpp diff --git a/Modules/DiffusionCore/autoload/IO/mitkCompositeMapper.h b/Modules/DiffusionIO/Mapper/mitkCompositeMapper.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkCompositeMapper.h rename to Modules/DiffusionIO/Mapper/mitkCompositeMapper.h diff --git a/Modules/DiffusionIO/mitkFiberBundleMapper2D.cpp b/Modules/DiffusionIO/Mapper/mitkFiberBundleMapper2D.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleMapper2D.cpp rename to Modules/DiffusionIO/Mapper/mitkFiberBundleMapper2D.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleMapper2D.h b/Modules/DiffusionIO/Mapper/mitkFiberBundleMapper2D.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleMapper2D.h rename to Modules/DiffusionIO/Mapper/mitkFiberBundleMapper2D.h diff --git a/Modules/DiffusionIO/mitkFiberBundleMapper3D.cpp b/Modules/DiffusionIO/Mapper/mitkFiberBundleMapper3D.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleMapper3D.cpp rename to Modules/DiffusionIO/Mapper/mitkFiberBundleMapper3D.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleMapper3D.h b/Modules/DiffusionIO/Mapper/mitkFiberBundleMapper3D.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleMapper3D.h rename to Modules/DiffusionIO/Mapper/mitkFiberBundleMapper3D.h diff --git a/Modules/DiffusionIO/mitkPeakImageMapper2D.cpp b/Modules/DiffusionIO/Mapper/mitkPeakImageMapper2D.cpp similarity index 100% rename from Modules/DiffusionIO/mitkPeakImageMapper2D.cpp rename to Modules/DiffusionIO/Mapper/mitkPeakImageMapper2D.cpp diff --git a/Modules/DiffusionIO/mitkPeakImageMapper2D.h b/Modules/DiffusionIO/Mapper/mitkPeakImageMapper2D.h similarity index 100% rename from Modules/DiffusionIO/mitkPeakImageMapper2D.h rename to Modules/DiffusionIO/Mapper/mitkPeakImageMapper2D.h diff --git a/Modules/DiffusionIO/mitkPeakImageMapper3D.cpp b/Modules/DiffusionIO/Mapper/mitkPeakImageMapper3D.cpp similarity index 100% rename from Modules/DiffusionIO/mitkPeakImageMapper3D.cpp rename to Modules/DiffusionIO/Mapper/mitkPeakImageMapper3D.cpp diff --git a/Modules/DiffusionIO/mitkPeakImageMapper3D.h b/Modules/DiffusionIO/Mapper/mitkPeakImageMapper3D.h similarity index 100% rename from Modules/DiffusionIO/mitkPeakImageMapper3D.h rename to Modules/DiffusionIO/Mapper/mitkPeakImageMapper3D.h diff --git a/Modules/DiffusionIO/mitkConnectomicsObjectFactory.cpp b/Modules/DiffusionIO/ObjectFactories/mitkConnectomicsObjectFactory.cpp similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsObjectFactory.cpp rename to Modules/DiffusionIO/ObjectFactories/mitkConnectomicsObjectFactory.cpp diff --git a/Modules/DiffusionIO/mitkConnectomicsObjectFactory.h b/Modules/DiffusionIO/ObjectFactories/mitkConnectomicsObjectFactory.h similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsObjectFactory.h rename to Modules/DiffusionIO/ObjectFactories/mitkConnectomicsObjectFactory.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreObjectFactory.cpp b/Modules/DiffusionIO/ObjectFactories/mitkDiffusionCoreObjectFactory.cpp similarity index 65% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreObjectFactory.cpp rename to Modules/DiffusionIO/ObjectFactories/mitkDiffusionCoreObjectFactory.cpp index 4c50855..1b4eb3f 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreObjectFactory.cpp +++ b/Modules/DiffusionIO/ObjectFactories/mitkDiffusionCoreObjectFactory.cpp @@ -1,175 +1,204 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkDiffusionCoreObjectFactory.h" #include "mitkProperties.h" #include "mitkBaseRenderer.h" #include "mitkDataNode.h" #include "mitkCompositeMapper.h" #include "mitkGPUVolumeMapper3D.h" +#include +#include +#include +#include + typedef short DiffusionPixelType; typedef std::multimap MultimapType; mitk::DiffusionCoreObjectFactory::DiffusionCoreObjectFactory() : CoreObjectFactoryBase() { static bool alreadyDone = false; if (!alreadyDone) { MITK_DEBUG << "DiffusionCoreObjectFactory c'tor" << std::endl; CreateFileExtensionsMap(); alreadyDone = true; } } mitk::DiffusionCoreObjectFactory::~DiffusionCoreObjectFactory() { } mitk::Mapper::Pointer mitk::DiffusionCoreObjectFactory::CreateMapper(mitk::DataNode* node, MapperSlotId id) { mitk::Mapper::Pointer newMapper=nullptr; + if (!node->GetData()) + return newMapper; + if ( id == mitk::BaseRenderer::Standard2D ) { - std::string classname("OdfImage"); - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + if(std::string("OdfImage").compare(node->GetData()->GetNameOfClass())==0) { newMapper = mitk::CompositeMapper::New(); newMapper->SetDataNode(node); node->SetMapper(3, static_cast(newMapper.GetPointer())->GetImageMapper()); } - classname = "TensorImage"; - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + else if(std::string("TensorImage").compare(node->GetData()->GetNameOfClass())==0) { newMapper = mitk::CompositeMapper::New(); newMapper->SetDataNode(node); node->SetMapper(3, static_cast(newMapper.GetPointer())->GetImageMapper()); } - classname = "ShImage"; - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + else if(std::string("ShImage").compare(node->GetData()->GetNameOfClass())==0) { newMapper = mitk::CompositeMapper::New(); newMapper->SetDataNode(node); node->SetMapper(3, static_cast(newMapper.GetPointer())->GetImageMapper()); } - + else if(std::string("FiberBundle").compare(node->GetData()->GetNameOfClass())==0) + { + newMapper = mitk::FiberBundleMapper2D::New(); + newMapper->SetDataNode(node); + } + else if(std::string("PeakImage").compare(node->GetData()->GetNameOfClass())==0) + { + newMapper = mitk::PeakImageMapper2D::New(); + newMapper->SetDataNode(node); + } } else if ( id == mitk::BaseRenderer::Standard3D ) { - std::string classname("OdfImage"); - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + if(std::string("OdfImage").compare(node->GetData()->GetNameOfClass())==0) { newMapper = mitk::GPUVolumeMapper3D::New(); newMapper->SetDataNode(node); } - classname = "TensorImage"; - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + else if(std::string("TensorImage").compare(node->GetData()->GetNameOfClass())==0) { newMapper = mitk::GPUVolumeMapper3D::New(); newMapper->SetDataNode(node); } - classname = "ShImage"; - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + else if(std::string("ShImage").compare(node->GetData()->GetNameOfClass())==0) { newMapper = mitk::GPUVolumeMapper3D::New(); newMapper->SetDataNode(node); } + else if(std::string("FiberBundle").compare(node->GetData()->GetNameOfClass())==0) + { + newMapper = mitk::FiberBundleMapper3D::New(); + newMapper->SetDataNode(node); + } + else if(std::string("PeakImage").compare(node->GetData()->GetNameOfClass())==0) + { + newMapper = mitk::PeakImageMapper3D::New(); + newMapper->SetDataNode(node); + } } return newMapper; } void mitk::DiffusionCoreObjectFactory::SetDefaultProperties(mitk::DataNode* node) { - std::string classname = "OdfImage"; - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + if (!node->GetData()) + return; + + if(std::string("OdfImage").compare(node->GetData()->GetNameOfClass())==0) { mitk::CompositeMapper::SetDefaultProperties(node); mitk::GPUVolumeMapper3D::SetDefaultProperties(node); } - - classname = "TensorImage"; - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + else if(std::string("TensorImage").compare(node->GetData()->GetNameOfClass())==0) { mitk::CompositeMapper::SetDefaultProperties(node); mitk::GPUVolumeMapper3D::SetDefaultProperties(node); } - - classname = "ShImage"; - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) + else if(std::string("ShImage").compare(node->GetData()->GetNameOfClass())==0) { mitk::CompositeMapper::SetDefaultProperties(node); mitk::GPUVolumeMapper3D::SetDefaultProperties(node); } + else if(std::string("FiberBundle").compare(node->GetData()->GetNameOfClass())==0) + { + mitk::FiberBundleMapper3D::SetDefaultProperties(node); + mitk::FiberBundleMapper2D::SetDefaultProperties(node); + } + else if (std::string("PeakImage").compare(node->GetData()->GetNameOfClass())==0) + { + mitk::PeakImageMapper3D::SetDefaultProperties(node); + mitk::PeakImageMapper2D::SetDefaultProperties(node); + } } const char* mitk::DiffusionCoreObjectFactory::GetFileExtensions() { std::string fileExtension; this->CreateFileExtensions(m_FileExtensionsMap, fileExtension); return fileExtension.c_str(); } mitk::CoreObjectFactoryBase::MultimapType mitk::DiffusionCoreObjectFactory::GetFileExtensionsMap() { return m_FileExtensionsMap; } const char* mitk::DiffusionCoreObjectFactory::GetSaveFileExtensions() { std::string fileExtension; this->CreateFileExtensions(m_SaveFileExtensionsMap, fileExtension); return fileExtension.c_str(); } mitk::CoreObjectFactoryBase::MultimapType mitk::DiffusionCoreObjectFactory::GetSaveFileExtensionsMap() { return m_SaveFileExtensionsMap; } void mitk::DiffusionCoreObjectFactory::CreateFileExtensionsMap() { } struct RegisterDiffusionCoreObjectFactory{ RegisterDiffusionCoreObjectFactory() : m_Factory( mitk::DiffusionCoreObjectFactory::New() ) { mitk::CoreObjectFactory::GetInstance()->RegisterExtraFactory( m_Factory ); } ~RegisterDiffusionCoreObjectFactory() { mitk::CoreObjectFactory::GetInstance()->UnRegisterExtraFactory( m_Factory ); } mitk::DiffusionCoreObjectFactory::Pointer m_Factory; }; static RegisterDiffusionCoreObjectFactory registerDiffusionCoreObjectFactory; diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreObjectFactory.h b/Modules/DiffusionIO/ObjectFactories/mitkDiffusionCoreObjectFactory.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionCoreObjectFactory.h rename to Modules/DiffusionIO/ObjectFactories/mitkDiffusionCoreObjectFactory.h diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkCSVWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkCSVWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkCSVWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkCSVWriter.cpp diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkCSVWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkCSVWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkCSVWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkCSVWriter.h diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkDefinitions.cpp b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkDefinitions.cpp similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkDefinitions.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkDefinitions.cpp diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkDefinitions.h b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkDefinitions.h similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkDefinitions.h rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkDefinitions.h diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkMatrixWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkMatrixWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkMatrixWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkMatrixWriter.cpp diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkMatrixWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkMatrixWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkMatrixWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkMatrixWriter.h diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkReader.cpp similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkReader.cpp diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkReader.h b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkReader.h similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkReader.h diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkSerializer.cpp similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkSerializer.cpp diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkSerializer.h similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkSerializer.h diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkWriter.cpp diff --git a/Modules/DiffusionIO/mitkConnectomicsNetworkWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkConnectomicsNetworkWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkConnectomicsNetworkWriter.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageDicomReaderService.cpp b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageDicomReaderService.cpp similarity index 98% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageDicomReaderService.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageDicomReaderService.cpp index a4e9350..4a28e24 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageDicomReaderService.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageDicomReaderService.cpp @@ -1,327 +1,327 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef __mitkDiffusionImageDicomReaderService_cpp #define __mitkDiffusionImageDicomReaderService_cpp #include "mitkDiffusionImageDicomReaderService.h" #include #include // Diffusion properties #include #include #include #include #include #include #include "itksys/SystemTools.hxx" #include "itkImageFileReader.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include "mitkCustomMimeType.h" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace mitk { DiffusionImageDicomReaderService:: DiffusionImageDicomReaderService(const DiffusionImageDicomReaderService & other) : AbstractFileReader(other) { } DiffusionImageDicomReaderService* DiffusionImageDicomReaderService::Clone() const { return new DiffusionImageDicomReaderService(*this); } DiffusionImageDicomReaderService:: ~DiffusionImageDicomReaderService() {} DiffusionImageDicomReaderService:: DiffusionImageDicomReaderService() - : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DWI_DICOM_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DWI_DICOM_MIMETYPE_DESCRIPTION() ) + : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionIOMimeTypes::DWI_DICOM_MIMETYPE() ), mitk::DiffusionIOMimeTypes::DWI_DICOM_MIMETYPE_DESCRIPTION() ) { Options defaultOptions; defaultOptions["Apply image rotation to gradients"] = true; defaultOptions["Load recursive"] = false; defaultOptions["Split mosaic"] = true; this->SetDefaultOptions(defaultOptions); m_ServiceReg = this->RegisterService(); } std::vector > DiffusionImageDicomReaderService::Read() { return InternalRead(); } std::vector > DiffusionImageDicomReaderService::InternalRead() { std::vector > result_images; OutputType::Pointer outputForCache = OutputType::New(); if ( this->GetInputLocation() == "") { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename to be read is empty!"); } else { const std::string& locale = "C"; const std::string& currLocale = setlocale( LC_ALL, nullptr ); if ( locale.compare(currLocale)!=0 ) { try { setlocale(LC_ALL, locale.c_str()); } catch(...) { MITK_INFO << "Could not set locale " << locale; } } try { Options options = this->GetOptions(); bool load_recursive = us::any_cast(options["Load recursive"]); bool split_mosaic = us::any_cast(options["Split mosaic"]); gdcm::Directory::FilenamesType complete_list; std::string folderName = itksys::SystemTools::GetFilenamePath( this->GetInputLocation() ); if( load_recursive ) { std::string subdir_prefix = ""; itksys::Directory rootdir; rootdir.Load( folderName.c_str() ); for( unsigned int idx=0; idxAddDistinguishingTag( mitk::DICOMTag(0x0028, 0x0010) ); // Number of Rows tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0028, 0x0011) ); // Number of Columns tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0028, 0x0030) ); // Pixel Spacing tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0018, 0x1164) ); // Imager Pixel Spacing tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0020, 0x0037) ); // Image Orientation (Patient) // TODO add tolerance parameter (l. 1572 of original code) // TODO handle as real vectors! cluster with configurable errors! tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0020, 0x000e) ); // Series Instance UID tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0018, 0x0050) ); // Slice Thickness tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0028, 0x0008) ); // Number of Frames //tagSorter->AddDistinguishingTag( mitk::DICOMTag(0x0020, 0x0052) ); // Frame of Reference UID auto tag_sop_instance_uid = mitk::DICOMSortByTag::New( mitk::DICOMTag(0x0008, 0x0018), nullptr ); // SOP instance UID (last resort, not really meaningful but decides clearly) auto tag_trigger_time = mitk::DICOMSortByTag::New( mitk::DICOMTag(0x0018, 0x1060), tag_sop_instance_uid.GetPointer() ); // trigger time auto tag_aqcuisition_time = mitk::DICOMSortByTag::New( mitk::DICOMTag(0x0008, 0x0032), tag_trigger_time.GetPointer()); // aqcuisition time auto tag_aqcuisition_number = mitk::DICOMSortByTag::New( mitk::DICOMTag(0x0020, 0x0012), tag_aqcuisition_time.GetPointer()); // aqcuisition number mitk::DICOMSortCriterion::ConstPointer sorting = mitk::SortByImagePositionPatient::New(tag_aqcuisition_number.GetPointer()).GetPointer(); tagSorter->SetSortCriterion( sorting ); // mosaic gdcmReader->SetResolveMosaic( split_mosaic ); gdcmReader->AddSortingElement( tagSorter ); gdcmReader->SetInputFiles( complete_list ); gdcmReader->SetApplyRotationToGradients(us::any_cast(options["Apply image rotation to gradients"])); try { gdcmReader->AnalyzeInputFiles(); } catch( const itk::ExceptionObject &e) { MITK_ERROR << "Failed to analyze data. " << e.what(); } catch( const std::exception &se) { MITK_ERROR << "Std Exception " << se.what(); } gdcmReader->LoadImages(); for( unsigned int o = 0; o < gdcmReader->GetNumberOfOutputs(); o++ ) { mitk::Image::Pointer loaded_image = gdcmReader->GetOutput(o).GetMitkImage(); StringProperty::Pointer nameProp; if (gdcmReader->GetSeriesName(o)!="-") nameProp = StringProperty::New(gdcmReader->GetSeriesName(o)); else if (gdcmReader->GetStudyName(o)!="-") nameProp = StringProperty::New(gdcmReader->GetStudyName(o)); else nameProp = StringProperty::New(folderName); loaded_image->SetProperty("name", nameProp); std::string val = "-"; if (gdcmReader->patient_ids().size()>o) { val = gdcmReader->patient_ids().at(o); loaded_image->GetPropertyList()->SetStringProperty("DICOM.patient_id",val.c_str()); } if (gdcmReader->patient_names().size()>o) { val = gdcmReader->patient_names().at(o); loaded_image->GetPropertyList()->SetStringProperty("DICOM.patient_name",val.c_str()); } if (gdcmReader->study_instance_uids().size()>o) { val = gdcmReader->study_instance_uids().at(o); loaded_image->GetPropertyList()->SetStringProperty("DICOM.study_instance_uid",val.c_str()); } if (gdcmReader->series_instance_uids().size()>o) { val = gdcmReader->series_instance_uids().at(o); loaded_image->GetPropertyList()->SetStringProperty("DICOM.series_instance_uid",val.c_str()); } if (gdcmReader->sop_instance_uids().size()>o) { val = gdcmReader->sop_instance_uids().at(o); loaded_image->GetPropertyList()->SetStringProperty("DICOM.sop_instance_uid",val.c_str()); } if (gdcmReader->frame_of_reference_uids().size()>o) { val = gdcmReader->frame_of_reference_uids().at(o); loaded_image->GetPropertyList()->SetStringProperty("DICOM.frame_of_reference_uid",val.c_str()); } result_images.push_back(loaded_image.GetPointer()); } // Since we have already read the tree, we can store it in a cache variable // so that it can be assigned to the DataObject in GenerateData(); m_OutputCache = outputForCache; m_CacheTime.Modified(); try { setlocale(LC_ALL, currLocale.c_str()); } catch(...) { MITK_INFO << "Could not reset locale " << currLocale; } } catch(std::exception& e) { try { setlocale(LC_ALL, currLocale.c_str()); } catch(...) { MITK_INFO << "Could not reset locale " << currLocale; } MITK_INFO << "Std::Exception while reading file!!"; MITK_INFO << e.what(); throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what()); } catch(...) { try { setlocale(LC_ALL, currLocale.c_str()); } catch(...) { MITK_INFO << "Could not reset locale " << currLocale; } MITK_INFO << "Exception while reading file!!"; throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested vessel tree file!"); } } return result_images; } } //namespace MITK #endif diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageDicomReaderService.h b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageDicomReaderService.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageDicomReaderService.h rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageDicomReaderService.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiReaderService.cpp b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiReaderService.cpp similarity index 75% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiReaderService.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiReaderService.cpp index 7915778..be7e583 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiReaderService.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiReaderService.cpp @@ -1,425 +1,342 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef __mitkDiffusionImageNiftiReaderService_cpp #define __mitkDiffusionImageNiftiReaderService_cpp #include "mitkDiffusionImageNiftiReaderService.h" #include #include // Diffusion properties #include #include #include #include // ITK includes #include #include #include "itksys/SystemTools.hxx" #include "itkImageFileReader.h" #include "itkMetaDataObject.h" #include "itkNiftiImageIO.h" #include "mitkCustomMimeType.h" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include #include #include #include #include "mitkIOUtil.h" #include #include #include #include namespace mitk { DiffusionImageNiftiReaderService:: DiffusionImageNiftiReaderService(const DiffusionImageNiftiReaderService & other) : AbstractFileReader(other) { } DiffusionImageNiftiReaderService* DiffusionImageNiftiReaderService::Clone() const { return new DiffusionImageNiftiReaderService(*this); } DiffusionImageNiftiReaderService:: ~DiffusionImageNiftiReaderService() {} DiffusionImageNiftiReaderService:: -DiffusionImageNiftiReaderService(CustomMimeType mime_type, std::string mime_type_description ) : mitk::AbstractFileReader( mime_type, mime_type_description ) +DiffusionImageNiftiReaderService() + : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionIOMimeTypes::DWI_NIFTI_MIMETYPE() ), mitk::DiffusionIOMimeTypes::DWI_NIFTI_MIMETYPE_DESCRIPTION() ) + { Options defaultOptions; defaultOptions["Apply image rotation to gradients"] = true; this->SetDefaultOptions(defaultOptions); m_ServiceReg = this->RegisterService(); } -//DiffusionImageNiftiReaderService:: -//DiffusionImageNiftiReaderService() : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE_DESCRIPTION() ) -//{ -// m_ServiceReg = this->RegisterService(); -//} - std::vector > DiffusionImageNiftiReaderService:: Read() { std::vector > result; // Since everything is completely read in GenerateOutputInformation() it is stored // in a cache variable. A timestamp is associated. // If the timestamp of the cache variable is newer than the MTime, we only need to // assign the cache variable to the DataObject. // Otherwise, the tree must be read again from the file and OuputInformation must // be updated! if(m_OutputCache.IsNull()) InternalRead(); result.push_back(m_OutputCache.GetPointer()); return result; } void DiffusionImageNiftiReaderService::InternalRead() { OutputType::Pointer outputForCache = OutputType::New(); if ( this->GetInputLocation() == "") { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename to be read is empty!"); } else { try { mitk::LocaleSwitch localeSwitch("C"); MITK_INFO << "DiffusionImageNiftiReaderService: reading image information"; VectorImageType::Pointer itkVectorImage; std::string ext = this->GetMimeType()->GetExtension( this->GetInputLocation() ); ext = itksys::SystemTools::LowerCase( ext ); - if(ext == ".fsl" || ext == ".fslgz") - { - // create temporary file with correct ending for nifti-io - std::string fname3 = "temp_dwi"; - fname3 += ext == ".fsl" ? ".nii" : ".nii.gz"; - itksys::SystemTools::CopyAFile(this->GetInputLocation().c_str(), fname3.c_str()); - - // create reader and read file - typedef itk::Image ImageType4D; - itk::NiftiImageIO::Pointer io2 = itk::NiftiImageIO::New(); - typedef itk::ImageFileReader FileReaderType; - FileReaderType::Pointer reader = FileReaderType::New(); - reader->SetFileName(fname3); - reader->SetImageIO(io2); - reader->Update(); - ImageType4D::Pointer img4 = reader->GetOutput(); - - // delete temporary file - itksys::SystemTools::RemoveFile(fname3.c_str()); - - // convert 4D file to vector image - itkVectorImage = VectorImageType::New(); - - VectorImageType::SpacingType spacing; - ImageType4D::SpacingType spacing4 = img4->GetSpacing(); - for(int i=0; i<3; i++) - spacing[i] = spacing4[i]; - itkVectorImage->SetSpacing( spacing ); // Set the image spacing - - VectorImageType::PointType origin; - ImageType4D::PointType origin4 = img4->GetOrigin(); - for(int i=0; i<3; i++) - origin[i] = origin4[i]; - itkVectorImage->SetOrigin( origin ); // Set the image origin - - VectorImageType::DirectionType direction; - ImageType4D::DirectionType direction4 = img4->GetDirection(); - for(int i=0; i<3; i++) - for(int j=0; j<3; j++) - direction[i][j] = direction4[i][j]; - itkVectorImage->SetDirection( direction ); // Set the image direction - - VectorImageType::RegionType region; - ImageType4D::RegionType region4 = img4->GetLargestPossibleRegion(); - - VectorImageType::RegionType::SizeType size; - ImageType4D::RegionType::SizeType size4 = region4.GetSize(); - - for(int i=0; i<3; i++) - size[i] = size4[i]; - - VectorImageType::RegionType::IndexType index; - ImageType4D::RegionType::IndexType index4 = region4.GetIndex(); - for(int i=0; i<3; i++) - index[i] = index4[i]; - - region.SetSize(size); - region.SetIndex(index); - itkVectorImage->SetRegions( region ); - - itkVectorImage->SetVectorLength(size4[3]); - itkVectorImage->Allocate(); - - itk::ImageRegionIterator it ( itkVectorImage, itkVectorImage->GetLargestPossibleRegion() ); - typedef VectorImageType::PixelType VecPixType; - for (it.GoToBegin(); !it.IsAtEnd(); ++it) - { - VecPixType vec = it.Get(); - VectorImageType::IndexType currentIndex = it.GetIndex(); - for(int i=0; i<3; i++) - index4[i] = currentIndex[i]; - for(unsigned int ind=0; indGetPixel(index4); - } - it.Set(vec); - } - } - else if(ext == ".nii" || ext == ".nii.gz") + if(ext == ".nii" || ext == ".nii.gz") { // create reader and read file typedef itk::Image ImageType4D; itk::NiftiImageIO::Pointer io2 = itk::NiftiImageIO::New(); ImageType4D::Pointer img4 = ImageType4D::New(); if (io2->CanReadFile(this->GetInputLocation().c_str())) { typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetFileName( this->GetInputLocation() ); reader->SetImageIO(io2); reader->Update(); img4 = reader->GetOutput(); } else { vtkSmartPointer reader = vtkSmartPointer::New(); if (reader->CanReadFile(this->GetInputLocation().c_str())) { reader->SetFileName(this->GetInputLocation().c_str()); reader->SetTimeAsVector(true); reader->Update(); auto vtk_image = reader->GetOutput(); auto header = reader->GetNIFTIHeader(); auto dim = header->GetDim(0); auto matrix = reader->GetQFormMatrix(); if (matrix == nullptr) matrix = reader->GetSFormMatrix(); itk::Matrix direction; direction.SetIdentity(); itk::Matrix ras_lps; ras_lps.SetIdentity(); ras_lps[0][0] = -1; ras_lps[1][1] = -1; if (matrix != nullptr) { for (int r=0; rGetElement(r, c); } direction = direction*ras_lps; itk::Vector< double, 4 > spacing; spacing.Fill(1.0); vtk_image->GetSpacing(spacing.GetDataPointer()); itk::Point< double, 4 > origin; origin.Fill(0.0); vtk_image->GetOrigin(origin.GetDataPointer()); itk::ImageRegion< 4 > region; for (int i=0; i<4; ++i) if (iGetDim(i+1)); else region.SetSize(i, 1); img4->SetSpacing( spacing ); img4->SetOrigin( origin ); img4->SetDirection( direction ); img4->SetRegions( region ); img4->Allocate(); img4->FillBuffer(0); switch (header->GetDim(0)) { case 4: for (int g=0; gGetDim(4); g++) for (int z=0; zGetDim(3); z++) for (int y=0; yGetDim(2); y++) for (int x=0; xGetDim(1); x++) { double val = vtk_image->GetScalarComponentAsDouble(x, y, z, g); ImageType4D::IndexType idx; idx[0] = x; idx[1] = y; idx[2] = z; idx[3] = g; img4->SetPixel(idx, val); } break; default: mitkThrow() << "Image dimension " << header->GetDim(0) << " not supported!"; break; } } } // convert 4D file to vector image itkVectorImage = VectorImageType::New(); VectorImageType::SpacingType spacing; ImageType4D::SpacingType spacing4 = img4->GetSpacing(); for(int i=0; i<3; i++) spacing[i] = spacing4[i]; itkVectorImage->SetSpacing( spacing ); // Set the image spacing VectorImageType::PointType origin; ImageType4D::PointType origin4 = img4->GetOrigin(); for(int i=0; i<3; i++) origin[i] = origin4[i]; itkVectorImage->SetOrigin( origin ); // Set the image origin VectorImageType::DirectionType direction; ImageType4D::DirectionType direction4 = img4->GetDirection(); for(int i=0; i<3; i++) for(int j=0; j<3; j++) direction[i][j] = direction4[i][j]; itkVectorImage->SetDirection( direction ); // Set the image direction VectorImageType::RegionType region; ImageType4D::RegionType region4 = img4->GetLargestPossibleRegion(); VectorImageType::RegionType::SizeType size; ImageType4D::RegionType::SizeType size4 = region4.GetSize(); for(int i=0; i<3; i++) size[i] = size4[i]; VectorImageType::RegionType::IndexType index; ImageType4D::RegionType::IndexType index4 = region4.GetIndex(); for(int i=0; i<3; i++) index[i] = index4[i]; region.SetSize(size); region.SetIndex(index); itkVectorImage->SetRegions( region ); itkVectorImage->SetVectorLength(size4[3]); itkVectorImage->Allocate(); itk::ImageRegionIterator it ( itkVectorImage, itkVectorImage->GetLargestPossibleRegion() ); typedef VectorImageType::PixelType VecPixType; for (it.GoToBegin(); !it.IsAtEnd(); ++it) { VecPixType vec = it.Get(); VectorImageType::IndexType currentIndex = it.GetIndex(); for(int i=0; i<3; i++) index4[i] = currentIndex[i]; for(unsigned int ind=0; indGetPixel(index4); } it.Set(vec); } } // Diffusion Image information START GradientDirectionContainerType::Pointer DiffusionVectors = GradientDirectionContainerType::New(); MeasurementFrameType MeasurementFrame; double BValue = -1; // Diffusion Image information END - if(ext == ".fsl" || ext == ".fslgz" || ext == ".nii" || ext == ".nii.gz") + if(ext == ".nii" || ext == ".nii.gz") { std::string base_path = itksys::SystemTools::GetFilenamePath(this->GetInputLocation()); std::string base = this->GetMimeType()->GetFilenameWithoutExtension(this->GetInputLocation()); if (!base_path.empty()) { base = base_path + "/" + base; base_path += "/"; } // check for possible file names std::string bvals_file, bvecs_file; if (itksys::SystemTools::FileExists(base+".bvals")) bvals_file = base+".bvals"; else if (itksys::SystemTools::FileExists(base+".bval")) bvals_file = base+".bval"; else if (itksys::SystemTools::FileExists(base_path+"bvals")) bvals_file = base_path + "bvals"; else if (itksys::SystemTools::FileExists(base_path+"bval")) bvals_file = base_path + "bval"; if (itksys::SystemTools::FileExists(std::string(base+".bvecs").c_str())) bvecs_file = base+".bvecs"; else if (itksys::SystemTools::FileExists(base+".bvec")) bvals_file = base+".bvec"; else if (itksys::SystemTools::FileExists(base_path+"bvecs")) bvecs_file = base_path + "bvecs"; else if (itksys::SystemTools::FileExists(base_path+"bvec")) bvecs_file = base_path + "bvec"; DiffusionVectors = mitk::gradients::ReadBvalsBvecs(bvals_file, bvecs_file, BValue); MeasurementFrame.set_identity(); } outputForCache = mitk::GrabItkImageMemory( itkVectorImage); // create BValueMap mitk::BValueMapProperty::BValueMap BValueMap = mitk::BValueMapProperty::CreateBValueMap(DiffusionVectors,BValue); mitk::DiffusionPropertyHelper::SetOriginalGradientContainer(outputForCache, DiffusionVectors); mitk::DiffusionPropertyHelper::SetMeasurementFrame(outputForCache, MeasurementFrame); mitk::DiffusionPropertyHelper::SetBValueMap(outputForCache, BValueMap); mitk::DiffusionPropertyHelper::SetReferenceBValue(outputForCache, BValue); mitk::DiffusionPropertyHelper::SetApplyMatrixToGradients(outputForCache, us::any_cast(this->GetOptions()["Apply image rotation to gradients"])); mitk::DiffusionPropertyHelper::InitializeImage(outputForCache); // Since we have already read the tree, we can store it in a cache variable // so that it can be assigned to the DataObject in GenerateData(); m_OutputCache = outputForCache; m_CacheTime.Modified(); } catch(std::exception& e) { MITK_INFO << "Std::Exception while reading file!!"; MITK_INFO << e.what(); throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what()); } catch(...) { MITK_INFO << "Exception while reading file!!"; - throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested vessel tree file!"); + throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested file!"); } } } } //namespace MITK #endif diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiReaderService.h b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiReaderService.h similarity index 93% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiReaderService.h rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiReaderService.h index c4a6b97..ce37bc2 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiReaderService.h +++ b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiReaderService.h @@ -1,74 +1,73 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef __mitkDiffusionImageNiftiReaderService_h #define __mitkDiffusionImageNiftiReaderService_h #include "mitkCommon.h" // MITK includes #include "mitkImageSource.h" #include "mitkFileReader.h" #include // ITK includes #include "itkVectorImage.h" #include "mitkAbstractFileReader.h" namespace mitk { /** \brief */ class DiffusionImageNiftiReaderService : public mitk::AbstractFileReader { public: DiffusionImageNiftiReaderService(const DiffusionImageNiftiReaderService & other); - //DiffusionImageNiftiReaderService(); - DiffusionImageNiftiReaderService(CustomMimeType mime_type, std::string mime_type_description ); + DiffusionImageNiftiReaderService(); ~DiffusionImageNiftiReaderService() override; using AbstractFileReader::Read; std::vector > Read() override; typedef short DiffusionPixelType; typedef mitk::Image OutputType; typedef mitk::DiffusionPropertyHelper::ImageType VectorImageType; typedef mitk::DiffusionPropertyHelper::GradientDirectionType GradientDirectionType; typedef mitk::DiffusionPropertyHelper::MeasurementFrameType MeasurementFrameType; typedef mitk::DiffusionPropertyHelper::GradientDirectionsContainerType GradientDirectionContainerType; protected: OutputType::Pointer m_OutputCache; itk::TimeStamp m_CacheTime; void InternalRead(); private: DiffusionImageNiftiReaderService* Clone() const override; us::ServiceRegistration m_ServiceReg; }; } //namespace MITK #endif // __mitkDiffusionImageNiftiReaderService_h diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiWriterService.cpp b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiWriterService.cpp similarity index 98% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiWriterService.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiWriterService.cpp index 918773f..a856b20 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiWriterService.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiWriterService.cpp @@ -1,249 +1,249 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef __mitkDiffusionImageNiftiWriterService__cpp #define __mitkDiffusionImageNiftiWriterService__cpp #include "mitkDiffusionImageNiftiWriterService.h" #include "itkMetaDataDictionary.h" #include "itkMetaDataObject.h" #include "itkNiftiImageIO.h" #include "itkImageFileWriter.h" #include "itksys/SystemTools.hxx" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include "mitkImageCast.h" #include #include #include #include mitk::DiffusionImageNiftiWriterService::DiffusionImageNiftiWriterService() - : AbstractFileWriter(mitk::Image::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DWI_NIFTI_MIMETYPE_DESCRIPTION()) + : AbstractFileWriter(mitk::Image::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionIOMimeTypes::DWI_NIFTI_MIMETYPE() ), mitk::DiffusionIOMimeTypes::DWI_NIFTI_MIMETYPE_DESCRIPTION()) { RegisterService(); } mitk::DiffusionImageNiftiWriterService::DiffusionImageNiftiWriterService(const mitk::DiffusionImageNiftiWriterService& other) : AbstractFileWriter(other) { } mitk::DiffusionImageNiftiWriterService::~DiffusionImageNiftiWriterService() {} void mitk::DiffusionImageNiftiWriterService::Write() { mitk::Image::ConstPointer input = dynamic_cast(this->GetInput()); VectorImageType::Pointer itkImg; mitk::CastToItkImage(input,itkImg); if (input.IsNull()) { MITK_ERROR <<"Sorry, input to DiffusionImageNiftiWriterService is nullptr!"; return; } if ( this->GetOutputLocation().empty() ) { MITK_ERROR << "Sorry, filename has not been set!"; return ; } mitk::LocaleSwitch localeSwitch("C"); char keybuffer[512]; char valbuffer[512]; //itk::MetaDataDictionary dic = input->GetImage()->GetMetaDataDictionary(); vnl_matrix_fixed measurementFrame = mitk::DiffusionPropertyHelper::GetMeasurementFrame(input); if (measurementFrame(0,0) || measurementFrame(0,1) || measurementFrame(0,2) || measurementFrame(1,0) || measurementFrame(1,1) || measurementFrame(1,2) || measurementFrame(2,0) || measurementFrame(2,1) || measurementFrame(2,2)) { sprintf( valbuffer, " (%lf,%lf,%lf) (%lf,%lf,%lf) (%lf,%lf,%lf)", measurementFrame(0,0), measurementFrame(0,1), measurementFrame(0,2), measurementFrame(1,0), measurementFrame(1,1), measurementFrame(1,2), measurementFrame(2,0), measurementFrame(2,1), measurementFrame(2,2)); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string("measurement frame"),std::string(valbuffer)); } sprintf( valbuffer, "DWMRI"); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string("modality"),std::string(valbuffer)); if(mitk::DiffusionPropertyHelper::GetGradientContainer(input)->Size()) { sprintf( valbuffer, "%1f", mitk::DiffusionPropertyHelper::GetReferenceBValue(input) ); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string("DWMRI_b-value"),std::string(valbuffer)); } for(unsigned int i=0; iSize(); i++) { sprintf( keybuffer, "DWMRI_gradient_%04d", i ); /*if(itk::ExposeMetaData(input->GetMetaDataDictionary(), std::string(keybuffer),tmp)) continue;*/ sprintf( valbuffer, "%1f %1f %1f", mitk::DiffusionPropertyHelper::GetGradientContainer(input)->ElementAt(i).get(0), mitk::DiffusionPropertyHelper::GetGradientContainer(input)->ElementAt(i).get(1), mitk::DiffusionPropertyHelper::GetGradientContainer(input)->ElementAt(i).get(2)); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string(keybuffer),std::string(valbuffer)); } typedef itk::VectorImage ImageType; std::string ext = this->GetMimeType()->GetExtension(this->GetOutputLocation()); ext = itksys::SystemTools::LowerCase(ext); // default extension is .nii.gz if( ext == "") { ext = ".nii.gz"; this->SetOutputLocation(this->GetOutputLocation() + ext); } if (ext == ".nii" || ext == ".nii.gz") { MITK_INFO << "Writing Nifti-Image"; typedef itk::Image ImageType4D; ImageType4D::Pointer img4 = ImageType4D::New(); ImageType::SpacingType spacing = itkImg->GetSpacing(); ImageType4D::SpacingType spacing4; for(int i=0; i<3; i++) spacing4[i] = spacing[i]; spacing4[3] = 1; img4->SetSpacing( spacing4 ); // Set the image spacing ImageType::PointType origin = itkImg->GetOrigin(); ImageType4D::PointType origin4; for(int i=0; i<3; i++) origin4[i] = origin[i]; origin4[3] = 0; img4->SetOrigin( origin4 ); // Set the image origin ImageType::DirectionType direction = itkImg->GetDirection(); ImageType4D::DirectionType direction4; for(int i=0; i<3; i++) for(int j=0; j<3; j++) direction4[i][j] = direction[i][j]; for(int i=0; i<4; i++) direction4[i][3] = 0; for(int i=0; i<4; i++) direction4[3][i] = 0; direction4[3][3] = 1; img4->SetDirection( direction4 ); // Set the image direction ImageType::RegionType region = itkImg->GetLargestPossibleRegion(); ImageType4D::RegionType region4; ImageType::RegionType::SizeType size = region.GetSize(); ImageType4D::RegionType::SizeType size4; for(int i=0; i<3; i++) size4[i] = size[i]; size4[3] = itkImg->GetVectorLength(); ImageType::RegionType::IndexType index = region.GetIndex(); ImageType4D::RegionType::IndexType index4; for(int i=0; i<3; i++) index4[i] = index[i]; index4[3] = 0; region4.SetSize(size4); region4.SetIndex(index4); img4->SetRegions( region4 ); img4->Allocate(); itk::ImageRegionIterator it (itkImg, itkImg->GetLargestPossibleRegion() ); typedef ImageType::PixelType VecPixType; for (it.GoToBegin(); !it.IsAtEnd(); ++it) { VecPixType vec = it.Get(); ImageType::IndexType currentIndex = it.GetIndex(); for(unsigned int ind=0; indSetPixel(index4, vec[ind]); } } itk::NiftiImageIO::Pointer io4 = itk::NiftiImageIO::New(); typedef itk::ImageFileWriter WriterType4; WriterType4::Pointer nrrdWriter4 = WriterType4::New(); nrrdWriter4->UseInputMetaDataDictionaryOn(); nrrdWriter4->SetInput( img4 ); nrrdWriter4->SetFileName(this->GetOutputLocation()); nrrdWriter4->UseCompressionOn(); nrrdWriter4->SetImageIO(io4); try { nrrdWriter4->Update(); } catch (const itk::ExceptionObject& e) { std::cout << e.GetDescription() << std::endl; throw; } std::string base_path = itksys::SystemTools::GetFilenamePath(this->GetOutputLocation()); std::string bvals_file = this->GetMimeType()->GetFilenameWithoutExtension(this->GetOutputLocation()); if (!base_path.empty()) bvals_file = base_path + "/" + bvals_file; bvals_file += ".bvals"; std::string bvecs_file = this->GetMimeType()->GetFilenameWithoutExtension(this->GetOutputLocation()); if (!base_path.empty()) bvecs_file = base_path + "/" + bvecs_file; bvecs_file += ".bvecs"; if(mitk::DiffusionPropertyHelper::GetOriginalGradientContainer(input)->Size()) { MITK_INFO << "Saving original gradient directions"; mitk::gradients::WriteBvalsBvecs(bvals_file, bvecs_file, mitk::DiffusionPropertyHelper::GetOriginalGradientContainer(input), mitk::DiffusionPropertyHelper::GetReferenceBValue(input)); } else if(mitk::DiffusionPropertyHelper::GetGradientContainer(input)->Size()) { MITK_INFO << "Original gradient directions not found. Saving modified gradient directions"; mitk::gradients::WriteBvalsBvecs(bvals_file, bvecs_file, mitk::DiffusionPropertyHelper::GetGradientContainer(input), mitk::DiffusionPropertyHelper::GetReferenceBValue(input)); } } } mitk::DiffusionImageNiftiWriterService* mitk::DiffusionImageNiftiWriterService::Clone() const { return new DiffusionImageNiftiWriterService(*this); } mitk::IFileWriter::ConfidenceLevel mitk::DiffusionImageNiftiWriterService::GetConfidenceLevel() const { mitk::Image::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull() || !mitk::DiffusionPropertyHelper::IsDiffusionWeightedImage( input ) ) { return Unsupported; } else { return Supported; } } #endif //__mitkDiffusionImageNiftiWriterService__cpp diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiWriterService.h b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiWriterService.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNiftiWriterService.h rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNiftiWriterService.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdReaderService.cpp b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdReaderService.cpp similarity index 97% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdReaderService.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdReaderService.cpp index 455463e..05ae996 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdReaderService.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdReaderService.cpp @@ -1,249 +1,249 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef __mitkDiffusionImageNrrdReaderService_cpp #define __mitkDiffusionImageNrrdReaderService_cpp #include "mitkDiffusionImageNrrdReaderService.h" #include #include // Diffusion properties #include #include #include #include // ITK includes #include #include #include "itksys/SystemTools.hxx" #include "itkImageFileReader.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include "mitkCustomMimeType.h" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include #include #include #include "mitkIOUtil.h" #include namespace mitk { DiffusionImageNrrdReaderService:: DiffusionImageNrrdReaderService(const DiffusionImageNrrdReaderService & other) : AbstractFileReader(other) { } DiffusionImageNrrdReaderService* DiffusionImageNrrdReaderService::Clone() const { return new DiffusionImageNrrdReaderService(*this); } DiffusionImageNrrdReaderService:: ~DiffusionImageNrrdReaderService() {} DiffusionImageNrrdReaderService:: DiffusionImageNrrdReaderService() - : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DWI_NRRD_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DWI_NRRD_MIMETYPE_DESCRIPTION() ) + : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionIOMimeTypes::DWI_NRRD_MIMETYPE() ), mitk::DiffusionIOMimeTypes::DWI_NRRD_MIMETYPE_DESCRIPTION() ) { Options defaultOptions; defaultOptions["Apply image rotation to gradients"] = true; this->SetDefaultOptions(defaultOptions); m_ServiceReg = this->RegisterService(); } std::vector > DiffusionImageNrrdReaderService:: Read() { std::vector > result; // Since everything is completely read in GenerateOutputInformation() it is stored // in a cache variable. A timestamp is associated. // If the timestamp of the cache variable is newer than the MTime, we only need to // assign the cache variable to the DataObject. // Otherwise, the tree must be read again from the file and OuputInformation must // be updated! if(m_OutputCache.IsNull()) InternalRead(); result.push_back(m_OutputCache.GetPointer()); return result; } void DiffusionImageNrrdReaderService::InternalRead() { OutputType::Pointer outputForCache = OutputType::New(); if ( this->GetInputLocation() == "") { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename to be read is empty!"); } else { try { mitk::LocaleSwitch localeSwitch("C"); MITK_INFO << "DiffusionImageNrrdReaderService: reading image information"; VectorImageType::Pointer itkVectorImage; std::string ext = this->GetMimeType()->GetExtension( this->GetInputLocation() ); ext = itksys::SystemTools::LowerCase( ext ); if (ext == ".hdwi" || ext == ".dwi" || ext == ".nrrd") { typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetFileName(this->GetInputLocation()); itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); reader->SetImageIO(io); reader->Update(); itkVectorImage = reader->GetOutput(); } // Diffusion Image information START GradientDirectionContainerType::Pointer DiffusionVectors = GradientDirectionContainerType::New(); GradientDirectionContainerType::Pointer OriginalDiffusionVectors = GradientDirectionContainerType::New(); MeasurementFrameType MeasurementFrame; float BValue = -1; // Diffusion Image information END if (ext == ".hdwi" || ext == ".dwi" || ext == ".nrrd") { itk::MetaDataDictionary imgMetaDictionary = itkVectorImage->GetMetaDataDictionary(); std::vector imgMetaKeys = imgMetaDictionary.GetKeys(); std::vector::const_iterator itKey = imgMetaKeys.begin(); std::string metaString; GradientDirectionType vect3d; int numberOfImages = 0; int numberOfGradientImages = 0; bool readb0 = false; double xx, xy, xz, yx, yy, yz, zx, zy, zz; for (; itKey != imgMetaKeys.end(); itKey ++) { double x,y,z; itk::ExposeMetaData (imgMetaDictionary, *itKey, metaString); if (itKey->find("DWMRI_gradient") != std::string::npos) { sscanf(metaString.c_str(), "%lf %lf %lf\n", &x, &y, &z); vect3d[0] = x; vect3d[1] = y; vect3d[2] = z; DiffusionVectors->InsertElement( numberOfImages, vect3d ); ++numberOfImages; // If the direction is 0.0, this is a reference image if (vect3d[0] == 0.0 && vect3d[1] == 0.0 && vect3d[2] == 0.0) { continue; } ++numberOfGradientImages;; } else if (itKey->find("DWMRI_b-value") != std::string::npos) { readb0 = true; BValue = atof(metaString.c_str()); } else if (itKey->find("measurement frame") != std::string::npos) { sscanf(metaString.c_str(), " ( %lf , %lf , %lf ) ( %lf , %lf , %lf ) ( %lf , %lf , %lf ) \n", &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); if (xx>10e-10 || xy>10e-10 || xz>10e-10 || yx>10e-10 || yy>10e-10 || yz>10e-10 || zx>10e-10 || zy>10e-10 || zz>10e-10 ) { MeasurementFrame(0,0) = xx; MeasurementFrame(0,1) = xy; MeasurementFrame(0,2) = xz; MeasurementFrame(1,0) = yx; MeasurementFrame(1,1) = yy; MeasurementFrame(1,2) = yz; MeasurementFrame(2,0) = zx; MeasurementFrame(2,1) = zy; MeasurementFrame(2,2) = zz; } else { MeasurementFrame(0,0) = 1; MeasurementFrame(0,1) = 0; MeasurementFrame(0,2) = 0; MeasurementFrame(1,0) = 0; MeasurementFrame(1,1) = 1; MeasurementFrame(1,2) = 0; MeasurementFrame(2,0) = 0; MeasurementFrame(2,1) = 0; MeasurementFrame(2,2) = 1; } } } if(!readb0) { MITK_INFO << "BValue not specified in header file"; } } outputForCache = mitk::GrabItkImageMemory( itkVectorImage); // create BValueMap mitk::BValueMapProperty::BValueMap BValueMap = mitk::BValueMapProperty::CreateBValueMap(DiffusionVectors,BValue); mitk::DiffusionPropertyHelper::SetOriginalGradientContainer(outputForCache, DiffusionVectors); mitk::DiffusionPropertyHelper::SetMeasurementFrame(outputForCache, MeasurementFrame); mitk::DiffusionPropertyHelper::SetBValueMap(outputForCache, BValueMap); mitk::DiffusionPropertyHelper::SetReferenceBValue(outputForCache, BValue); mitk::DiffusionPropertyHelper::SetApplyMatrixToGradients(outputForCache, us::any_cast(this->GetOptions()["Apply image rotation to gradients"])); mitk::DiffusionPropertyHelper::InitializeImage(outputForCache); // Since we have already read the tree, we can store it in a cache variable // so that it can be assigned to the DataObject in GenerateData(); m_OutputCache = outputForCache; m_CacheTime.Modified(); } catch(std::exception& e) { MITK_INFO << "Std::Exception while reading file!!"; MITK_INFO << e.what(); throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what()); } catch(...) { MITK_INFO << "Exception while reading file!!"; throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested vessel tree file!"); } } } } //namespace MITK #endif diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdReaderService.h b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdReaderService.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdReaderService.h rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdReaderService.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdWriterService.cpp b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdWriterService.cpp similarity index 97% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdWriterService.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdWriterService.cpp index 37e3479..1004af2 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdWriterService.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdWriterService.cpp @@ -1,173 +1,173 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef __mitkDiffusionImageNrrdWriterService__cpp #define __mitkDiffusionImageNrrdWriterService__cpp #include "mitkDiffusionImageNrrdWriterService.h" #include "itkMetaDataDictionary.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include "itkImageFileWriter.h" #include "itksys/SystemTools.hxx" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include "mitkImageCast.h" #include #include #include mitk::DiffusionImageNrrdWriterService::DiffusionImageNrrdWriterService() - : AbstractFileWriter(mitk::Image::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DWI_NRRD_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DWI_NRRD_MIMETYPE_DESCRIPTION()) + : AbstractFileWriter(mitk::Image::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionIOMimeTypes::DWI_NRRD_MIMETYPE() ), mitk::DiffusionIOMimeTypes::DWI_NRRD_MIMETYPE_DESCRIPTION()) { RegisterService(); } mitk::DiffusionImageNrrdWriterService::DiffusionImageNrrdWriterService(const mitk::DiffusionImageNrrdWriterService& other) : AbstractFileWriter(other) { } mitk::DiffusionImageNrrdWriterService::~DiffusionImageNrrdWriterService() {} void mitk::DiffusionImageNrrdWriterService::Write() { mitk::Image::ConstPointer input = dynamic_cast(this->GetInput()); VectorImageType::Pointer itkImg; mitk::CastToItkImage(input,itkImg); if (input.IsNull()) { MITK_ERROR <<"Sorry, input to DiffusionImageNrrdWriterService is nullptr!"; return; } if ( this->GetOutputLocation().empty() ) { MITK_ERROR << "Sorry, filename has not been set!"; return ; } mitk::LocaleSwitch localeSwitch("C"); char keybuffer[512]; char valbuffer[512]; //itk::MetaDataDictionary dic = input->GetImage()->GetMetaDataDictionary(); vnl_matrix_fixed measurementFrame = mitk::DiffusionPropertyHelper::GetMeasurementFrame(input); if (measurementFrame(0,0) || measurementFrame(0,1) || measurementFrame(0,2) || measurementFrame(1,0) || measurementFrame(1,1) || measurementFrame(1,2) || measurementFrame(2,0) || measurementFrame(2,1) || measurementFrame(2,2)) { sprintf( valbuffer, " (%lf,%lf,%lf) (%lf,%lf,%lf) (%lf,%lf,%lf)", measurementFrame(0,0), measurementFrame(0,1), measurementFrame(0,2), measurementFrame(1,0), measurementFrame(1,1), measurementFrame(1,2), measurementFrame(2,0), measurementFrame(2,1), measurementFrame(2,2)); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string("measurement frame"),std::string(valbuffer)); } sprintf( valbuffer, "DWMRI"); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string("modality"),std::string(valbuffer)); if (mitk::DiffusionPropertyHelper::GetOriginalGradientContainer(input)->Size()) { MITK_INFO << "Saving original gradient directions"; sprintf( valbuffer, "%1f", mitk::DiffusionPropertyHelper::GetReferenceBValue(input) ); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string("DWMRI_b-value"),std::string(valbuffer)); for(unsigned int i=0; iSize(); i++) { sprintf( keybuffer, "DWMRI_gradient_%04d", i ); sprintf( valbuffer, "%1f %1f %1f", mitk::DiffusionPropertyHelper::GetOriginalGradientContainer(input)->ElementAt(i).get(0), mitk::DiffusionPropertyHelper::GetOriginalGradientContainer(input)->ElementAt(i).get(1), mitk::DiffusionPropertyHelper::GetOriginalGradientContainer(input)->ElementAt(i).get(2)); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string(keybuffer),std::string(valbuffer)); } } else if(mitk::DiffusionPropertyHelper::GetGradientContainer(input)->Size()) { MITK_INFO << "Original gradient directions not found. Saving modified gradient directions"; sprintf( valbuffer, "%1f", mitk::DiffusionPropertyHelper::GetReferenceBValue(input) ); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string("DWMRI_b-value"),std::string(valbuffer)); for(unsigned int i=0; iSize(); i++) { sprintf( keybuffer, "DWMRI_gradient_%04d", i ); sprintf( valbuffer, "%1f %1f %1f", mitk::DiffusionPropertyHelper::GetGradientContainer(input)->ElementAt(i).get(0), mitk::DiffusionPropertyHelper::GetGradientContainer(input)->ElementAt(i).get(1), mitk::DiffusionPropertyHelper::GetGradientContainer(input)->ElementAt(i).get(2)); itk::EncapsulateMetaData(itkImg->GetMetaDataDictionary(),std::string(keybuffer),std::string(valbuffer)); } } typedef itk::VectorImage ImageType; std::string ext = this->GetMimeType()->GetExtension(this->GetOutputLocation()); ext = itksys::SystemTools::LowerCase(ext); // default extension is .nrrd if( ext == "") { ext = ".nrrd"; this->SetOutputLocation(this->GetOutputLocation() + ext); } if (ext == ".hdwi" || ext == ".nrrd" || ext == ".dwi") { itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); io->SetFileType( itk::ImageIOBase::Binary ); io->UseCompressionOn(); typedef itk::ImageFileWriter WriterType; WriterType::Pointer nrrdWriter = WriterType::New(); nrrdWriter->UseInputMetaDataDictionaryOn(); nrrdWriter->SetInput( itkImg ); nrrdWriter->SetImageIO(io); nrrdWriter->SetFileName(this->GetOutputLocation()); nrrdWriter->UseCompressionOn(); nrrdWriter->SetImageIO(io); try { nrrdWriter->Update(); } catch (const itk::ExceptionObject& e) { std::cout << e.GetDescription() << std::endl; throw; } } } mitk::DiffusionImageNrrdWriterService* mitk::DiffusionImageNrrdWriterService::Clone() const { return new DiffusionImageNrrdWriterService(*this); } mitk::IFileWriter::ConfidenceLevel mitk::DiffusionImageNrrdWriterService::GetConfidenceLevel() const { mitk::Image::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull() || !mitk::DiffusionPropertyHelper::IsDiffusionWeightedImage( input ) ) { return Unsupported; } else { return Supported; } } #endif //__mitkDiffusionImageNrrdWriterService__cpp diff --git a/Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdWriterService.h b/Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdWriterService.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkDiffusionImageNrrdWriterService.h rename to Modules/DiffusionIO/ReaderWriter/mitkDiffusionImageNrrdWriterService.h diff --git a/Modules/DiffusionIO/mitkFiberBundleDicomReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomReader.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleDicomReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomReader.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleDicomReader.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomReader.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleDicomReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomReader.h diff --git a/Modules/DiffusionIO/mitkFiberBundleDicomWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleDicomWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomWriter.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleDicomWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleDicomWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleDicomWriter.h diff --git a/Modules/DiffusionIO/mitkFiberBundleSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleSerializer.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleSerializer.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleSerializer.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleSerializer.h diff --git a/Modules/DiffusionIO/mitkFiberBundleTckReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTckReader.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleTckReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTckReader.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleTckReader.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTckReader.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleTckReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTckReader.h diff --git a/Modules/DiffusionIO/mitkFiberBundleTrackVisReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisReader.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleTrackVisReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisReader.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleTrackVisReader.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisReader.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleTrackVisReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisReader.h diff --git a/Modules/DiffusionIO/mitkFiberBundleTrackVisWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleTrackVisWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisWriter.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleTrackVisWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleTrackVisWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleTrackVisWriter.h diff --git a/Modules/DiffusionIO/mitkFiberBundleVtkReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkReader.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleVtkReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkReader.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleVtkReader.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkReader.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleVtkReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkReader.h diff --git a/Modules/DiffusionIO/mitkFiberBundleVtkWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleVtkWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkWriter.cpp diff --git a/Modules/DiffusionIO/mitkFiberBundleVtkWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkFiberBundleVtkWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkFiberBundleVtkWriter.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageReader.cpp similarity index 94% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageReader.cpp index 8faf43b..01451ca 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageReader.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageReader.cpp @@ -1,118 +1,118 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkNrrdOdfImageReader.h" #include -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include "itkImageFileReader.h" #include "itkImageRegionIterator.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include "mitkITKImageImport.h" #include "mitkImageDataItem.h" #include namespace mitk { NrrdOdfImageReader::NrrdOdfImageReader(const NrrdOdfImageReader& other) : mitk::AbstractFileReader(other) { } NrrdOdfImageReader::NrrdOdfImageReader() - : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::ODF_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::ODF_MIMETYPE_DESCRIPTION() ) + : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionIOMimeTypes::ODF_MIMETYPE() ), mitk::DiffusionIOMimeTypes::ODF_MIMETYPE_DESCRIPTION() ) { m_ServiceReg = this->RegisterService(); } NrrdOdfImageReader::~NrrdOdfImageReader() { } std::vector > NrrdOdfImageReader::Read() { std::vector > result; std::string location = GetInputLocation(); if ( location == "") { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename of the ODF image to be read is empty!"); } else { try { mitk::LocaleSwitch localeSwitch("C"); typedef itk::VectorImage ImageType; itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetImageIO(io); reader->SetFileName(location); reader->Update(); ImageType::Pointer img = reader->GetOutput(); typedef itk::Image,3> VecImgType; VecImgType::Pointer vecImg = VecImgType::New(); vecImg->SetSpacing( img->GetSpacing() ); // Set the image spacing vecImg->SetOrigin( img->GetOrigin() ); // Set the image origin vecImg->SetDirection( img->GetDirection() ); // Set the image direction vecImg->SetLargestPossibleRegion( img->GetLargestPossibleRegion()); vecImg->SetBufferedRegion( img->GetLargestPossibleRegion() ); vecImg->Allocate(); itk::ImageRegionIterator ot (vecImg, vecImg->GetLargestPossibleRegion() ); ot.GoToBegin(); itk::ImageRegionIterator it (img, img->GetLargestPossibleRegion() ); typedef ImageType::PixelType VarPixType; typedef VecImgType::PixelType FixPixType; for (it.GoToBegin(); !it.IsAtEnd(); ++it) { VarPixType vec = it.Get(); FixPixType fixVec(vec.GetDataPointer()); ot.Set(fixVec); ++ot; } OutputType::Pointer resultImage = OutputType::New(); resultImage->InitializeByItk( vecImg.GetPointer() ); resultImage->SetVolume( vecImg->GetBufferPointer() ); result.push_back( resultImage.GetPointer() ); } catch(std::exception& e) { throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what()); } catch(...) { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested vessel tree file!"); } } return result; } } //namespace MITK mitk::NrrdOdfImageReader* mitk::NrrdOdfImageReader::Clone() const { return new NrrdOdfImageReader(*this); } diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageReader.h b/Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageReader.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageReader.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageWriter.cpp similarity index 95% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageWriter.cpp index 9483f59..ed35e5b 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageWriter.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageWriter.cpp @@ -1,129 +1,129 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkNrrdOdfImageWriter.h" #include "itkMetaDataDictionary.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include "itkImageFileWriter.h" #include "mitkImageCast.h" #include "mitkIOMimeTypes.h" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include mitk::NrrdOdfImageWriter::NrrdOdfImageWriter() - : AbstractFileWriter(mitk::OdfImage::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionCoreIOMimeTypes::ODF_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::ODF_MIMETYPE_DESCRIPTION()) + : AbstractFileWriter(mitk::OdfImage::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionIOMimeTypes::ODF_MIMETYPE() ), mitk::DiffusionIOMimeTypes::ODF_MIMETYPE_DESCRIPTION()) { RegisterService(); } mitk::NrrdOdfImageWriter::NrrdOdfImageWriter(const mitk::NrrdOdfImageWriter& other) : AbstractFileWriter(other) { } mitk::NrrdOdfImageWriter::~NrrdOdfImageWriter() {} void mitk::NrrdOdfImageWriter::Write() { InputType::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull()) { MITK_ERROR <<"Sorry, input to NrrdOdfImageWriter is nullptr!"; return; } if ( this->GetOutputLocation().empty() ) { MITK_ERROR << "Sorry, filename has not been set!"; return ; } mitk::LocaleSwitch localeSwitch("C"); itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); io->SetFileType( itk::ImageIOBase::Binary ); io->UseCompressionOn(); typedef itk::VectorImage VecImgType; typedef itk::Image,3> ImageType; typedef itk::ImageFileWriter WriterType; WriterType::Pointer nrrdWriter = WriterType::New(); ImageType::Pointer outimage = ImageType::New(); CastToItkImage(input, outimage); VecImgType::Pointer vecImg = VecImgType::New(); vecImg->SetSpacing( outimage->GetSpacing() ); // Set the image spacing vecImg->SetOrigin( outimage->GetOrigin() ); // Set the image origin vecImg->SetDirection( outimage->GetDirection() ); // Set the image direction vecImg->SetLargestPossibleRegion( outimage->GetLargestPossibleRegion()); vecImg->SetBufferedRegion( outimage->GetLargestPossibleRegion() ); vecImg->SetVectorLength(ODF_SAMPLING_SIZE); vecImg->Allocate(); itk::ImageRegionIterator ot (vecImg, vecImg->GetLargestPossibleRegion() ); ot.GoToBegin(); itk::ImageRegionIterator it (outimage, outimage->GetLargestPossibleRegion() ); typedef ImageType::PixelType VecPixType; typedef VecImgType::PixelType VarVecType; for (it.GoToBegin(); !it.IsAtEnd(); ++it) { VecPixType vec = it.Get(); VarVecType varVec(vec.GetVnlVector().data_block(), ODF_SAMPLING_SIZE); ot.Set(varVec); ++ot; } nrrdWriter->SetInput( vecImg ); nrrdWriter->SetImageIO(io); nrrdWriter->SetFileName(this->GetOutputLocation().c_str()); nrrdWriter->UseCompressionOn(); try { nrrdWriter->Update(); } catch (const itk::ExceptionObject& e) { MITK_INFO << e.what(); } } mitk::NrrdOdfImageWriter* mitk::NrrdOdfImageWriter::Clone() const { return new NrrdOdfImageWriter(*this); } mitk::IFileWriter::ConfidenceLevel mitk::NrrdOdfImageWriter::GetConfidenceLevel() const { InputType::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull() ) { return Unsupported; } else { return Supported; } } diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageWriter.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdOdfImageWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdOdfImageWriter.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageReader.cpp similarity index 98% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageReader.cpp index c6449ec..1347e4c 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageReader.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageReader.cpp @@ -1,428 +1,428 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkNrrdTensorImageReader.h" #include -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include "itkImageFileReader.h" #include "itkImageRegionIterator.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include #include "mitkITKImageImport.h" #include "mitkImageDataItem.h" #include #include #include namespace mitk { NrrdTensorImageReader::NrrdTensorImageReader(const NrrdTensorImageReader& other) : mitk::AbstractFileReader(other) { } NrrdTensorImageReader::NrrdTensorImageReader() - : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DTI_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DTI_MIMETYPE_DESCRIPTION() ) + : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionIOMimeTypes::DTI_MIMETYPE() ), mitk::DiffusionIOMimeTypes::DTI_MIMETYPE_DESCRIPTION() ) { m_ServiceReg = this->RegisterService(); } NrrdTensorImageReader::~NrrdTensorImageReader() { } std::vector > NrrdTensorImageReader::Read() { std::vector > result; std::string location = GetInputLocation(); if ( location == "") { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename is empty!"); } else { try { mitk::LocaleSwitch localeSwitch("C"); try { std::string fname3 = mitk::IOUtil::GetTempPath()+"/temp_dti.nii.gz"; int c = 0; while( itksys::SystemTools::FileExists(fname3) ) { fname3 = mitk::IOUtil::GetTempPath()+"/temp_dti_" + boost::lexical_cast(c) + ".nii.gz"; ++c; } itksys::SystemTools::CopyAFile(location.c_str(), fname3.c_str()); typedef itk::VectorImage ImageType; itk::NiftiImageIO::Pointer io = itk::NiftiImageIO::New(); typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetImageIO(io); reader->SetFileName(fname3); reader->Update(); ImageType::Pointer img = reader->GetOutput(); TensorImage::ItkTensorImageType::Pointer vecImg = TensorImage::ItkTensorImageType::New(); vecImg->SetSpacing( img->GetSpacing() ); // Set the image spacing vecImg->SetOrigin( img->GetOrigin() ); // Set the image origin vecImg->SetDirection( img->GetDirection() ); // Set the image direction vecImg->SetRegions( img->GetLargestPossibleRegion()); vecImg->Allocate(); itk::ImageRegionIterator ot (vecImg, vecImg->GetLargestPossibleRegion() ); ot.GoToBegin(); itk::ImageRegionIterator it (img, img->GetLargestPossibleRegion() ); it.GoToBegin(); typedef ImageType::PixelType VarPixType; typedef TensorImage::PixelType FixPixType; int numComponents = img->GetNumberOfComponentsPerPixel(); if (numComponents==6) { MITK_INFO << "Trying to load dti as 6-comp nifti ..."; while (!it.IsAtEnd()) { VarPixType vec = it.Get(); FixPixType fixVec(vec.GetDataPointer()); TensorImage::PixelType tensor; tensor.SetElement(0, vec.GetElement(0)); tensor.SetElement(1, vec.GetElement(1)); tensor.SetElement(2, vec.GetElement(2)); tensor.SetElement(3, vec.GetElement(3)); tensor.SetElement(4, vec.GetElement(4)); tensor.SetElement(5, vec.GetElement(5)); fixVec = tensor; ot.Set(fixVec); ++ot; ++it; } } else if(numComponents==9) { MITK_INFO << "Trying to load dti as 9-comp nifti ..."; while (!it.IsAtEnd()) { VarPixType vec = it.Get(); TensorImage::PixelType tensor; tensor.SetElement(0, vec.GetElement(0)); tensor.SetElement(1, vec.GetElement(1)); tensor.SetElement(2, vec.GetElement(2)); tensor.SetElement(3, vec.GetElement(4)); tensor.SetElement(4, vec.GetElement(5)); tensor.SetElement(5, vec.GetElement(8)); FixPixType fixVec(tensor); ot.Set(fixVec); ++ot; ++it; } } else if (numComponents==1) { MITK_INFO << "Trying to load dti as 4D nifti ..."; typedef itk::Image ImageType; typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetImageIO(io); reader->SetFileName(fname3); reader->Update(); ImageType::Pointer img = reader->GetOutput(); itk::Size<4> size = img->GetLargestPossibleRegion().GetSize(); while (!ot.IsAtEnd()) { TensorImage::PixelType tensor; ImageType::IndexType idx; idx[0] = ot.GetIndex()[0]; idx[1] = ot.GetIndex()[1]; idx[2] = ot.GetIndex()[2]; if (size[3]==6) { for (unsigned int te=0; teGetPixel(idx)); } } else if (size[3]==9) { idx[3] = 0; tensor.SetElement(0, img->GetPixel(idx)); idx[3] = 1; tensor.SetElement(1, img->GetPixel(idx)); idx[3] = 2; tensor.SetElement(2, img->GetPixel(idx)); idx[3] = 4; tensor.SetElement(3, img->GetPixel(idx)); idx[3] = 5; tensor.SetElement(4, img->GetPixel(idx)); idx[3] = 8; tensor.SetElement(5, img->GetPixel(idx)); } else throw itk::ImageFileReaderException(__FILE__, __LINE__, "Unknown number of components for DTI file. Should be 6 or 9!"); FixPixType fixVec(tensor); ot.Set(fixVec); ++ot; } } OutputType::Pointer resultImage = OutputType::New(); resultImage->InitializeByItk( vecImg.GetPointer() ); resultImage->SetVolume( vecImg->GetBufferPointer() ); result.push_back( resultImage.GetPointer() ); } catch(...) { MITK_INFO << "Trying to load dti as nrrd ..."; typedef itk::VectorImage ImageType; itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetImageIO(io); reader->SetFileName(location); reader->Update(); ImageType::Pointer img = reader->GetOutput(); TensorImage::ItkTensorImageType::Pointer vecImg = TensorImage::ItkTensorImageType::New(); vecImg->SetSpacing( img->GetSpacing() ); // Set the image spacing vecImg->SetOrigin( img->GetOrigin() ); // Set the image origin vecImg->SetDirection( img->GetDirection() ); // Set the image direction vecImg->SetRegions( img->GetLargestPossibleRegion()); vecImg->Allocate(); itk::ImageRegionIterator ot (vecImg, vecImg->GetLargestPossibleRegion() ); ot.GoToBegin(); itk::ImageRegionIterator it (img, img->GetLargestPossibleRegion() ); it.GoToBegin(); typedef ImageType::PixelType VarPixType; typedef TensorImage::PixelType FixPixType; int numComponents = img->GetNumberOfComponentsPerPixel(); itk::MetaDataDictionary imgMetaDictionary = img->GetMetaDataDictionary(); std::vector imgMetaKeys = imgMetaDictionary.GetKeys(); std::vector::const_iterator itKey = imgMetaKeys.begin(); std::string metaString; bool readFrame = false; double xx, xy, xz, yx, yy, yz, zx, zy, zz; MeasurementFrameType measFrame; measFrame.SetIdentity(); MeasurementFrameType measFrameTransp; measFrameTransp.SetIdentity(); for (; itKey != imgMetaKeys.end(); itKey ++) { itk::ExposeMetaData (imgMetaDictionary, *itKey, metaString); if (itKey->find("measurement frame") != std::string::npos) { sscanf(metaString.c_str(), " ( %lf , %lf , %lf ) ( %lf , %lf , %lf ) ( %lf , %lf , %lf ) \n", &xx, &xy, &xz, &yx, &yy, &yz, &zx, &zy, &zz); if (xx>10e-10 || xy>10e-10 || xz>10e-10 || yx>10e-10 || yy>10e-10 || yz>10e-10 || zx>10e-10 || zy>10e-10 || zz>10e-10 ) { readFrame = true; measFrame(0,0) = xx; measFrame(0,1) = xy; measFrame(0,2) = xz; measFrame(1,0) = yx; measFrame(1,1) = yy; measFrame(1,2) = yz; measFrame(2,0) = zx; measFrame(2,1) = zy; measFrame(2,2) = zz; measFrameTransp = measFrame.GetTranspose(); } } } if (numComponents==6) { while (!it.IsAtEnd()) { // T'=RTR' VarPixType vec = it.Get(); FixPixType fixVec(vec.GetDataPointer()); if(readFrame) { TensorImage::PixelType tensor; tensor.SetElement(0, vec.GetElement(0)); tensor.SetElement(1, vec.GetElement(1)); tensor.SetElement(2, vec.GetElement(2)); tensor.SetElement(3, vec.GetElement(3)); tensor.SetElement(4, vec.GetElement(4)); tensor.SetElement(5, vec.GetElement(5)); tensor = ConvertMatrixTypeToFixedArrayType(tensor.PreMultiply(measFrame)); tensor = ConvertMatrixTypeToFixedArrayType(tensor.PostMultiply(measFrameTransp)); fixVec = tensor; } ot.Set(fixVec); ++ot; ++it; } } else if(numComponents==9) { while (!it.IsAtEnd()) { VarPixType vec = it.Get(); TensorImage::PixelType tensor; tensor.SetElement(0, vec.GetElement(0)); tensor.SetElement(1, vec.GetElement(1)); tensor.SetElement(2, vec.GetElement(2)); tensor.SetElement(3, vec.GetElement(4)); tensor.SetElement(4, vec.GetElement(5)); tensor.SetElement(5, vec.GetElement(8)); if(readFrame) { tensor = ConvertMatrixTypeToFixedArrayType(tensor.PreMultiply(measFrame)); tensor = ConvertMatrixTypeToFixedArrayType(tensor.PostMultiply(measFrameTransp)); } FixPixType fixVec(tensor); ot.Set(fixVec); ++ot; ++it; } } else if (numComponents==1) { typedef itk::Image ImageType; itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetImageIO(io); reader->SetFileName(location); reader->Update(); ImageType::Pointer img = reader->GetOutput(); itk::Size<4> size = img->GetLargestPossibleRegion().GetSize(); while (!ot.IsAtEnd()) { TensorImage::PixelType tensor; ImageType::IndexType idx; idx[0] = ot.GetIndex()[0]; idx[1] = ot.GetIndex()[1]; idx[2] = ot.GetIndex()[2]; if (size[3]==6) { for (unsigned int te=0; teGetPixel(idx)); } } else if (size[3]==9) { idx[3] = 0; tensor.SetElement(0, img->GetPixel(idx)); idx[3] = 1; tensor.SetElement(1, img->GetPixel(idx)); idx[3] = 2; tensor.SetElement(2, img->GetPixel(idx)); idx[3] = 4; tensor.SetElement(3, img->GetPixel(idx)); idx[3] = 5; tensor.SetElement(4, img->GetPixel(idx)); idx[3] = 8; tensor.SetElement(5, img->GetPixel(idx)); } else throw itk::ImageFileReaderException(__FILE__, __LINE__, "Unknown number of komponents for DTI file. Should be 6 or 9!"); if(readFrame) { tensor = ConvertMatrixTypeToFixedArrayType(tensor.PreMultiply(measFrame)); tensor = ConvertMatrixTypeToFixedArrayType(tensor.PostMultiply(measFrameTransp)); } FixPixType fixVec(tensor); ot.Set(fixVec); ++ot; } } else { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Image has wrong number of pixel components!"); } OutputType::Pointer resultImage = OutputType::New(); resultImage->InitializeByItk( vecImg.GetPointer() ); resultImage->SetVolume( vecImg->GetBufferPointer() ); result.push_back( resultImage.GetPointer() ); } } catch(std::exception& e) { throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what()); } catch(...) { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested DTI file!"); } } return result; } TensorImage::PixelType NrrdTensorImageReader ::ConvertMatrixTypeToFixedArrayType(const TensorImage::PixelType::Superclass::MatrixType & matrix) { /* | 0 1 2 | * | X 3 4 | * | X X 5 | */ TensorImage::PixelType arr; arr.SetElement(0,matrix(0,0)); arr.SetElement(1,matrix(0,1)); arr.SetElement(2,matrix(0,2)); arr.SetElement(3,matrix(1,3)); arr.SetElement(4,matrix(1,4)); arr.SetElement(5,matrix(2,5)); return arr; } } //namespace MITK mitk::NrrdTensorImageReader* mitk::NrrdTensorImageReader::Clone() const { return new NrrdTensorImageReader(*this); } diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageReader.h b/Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageReader.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageReader.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageWriter.cpp similarity index 93% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageWriter.cpp index 3b30f62..ae40ce1 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageWriter.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageWriter.cpp @@ -1,100 +1,100 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkNrrdTensorImageWriter.h" #include "itkMetaDataDictionary.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include "itkImageFileWriter.h" #include "itkDiffusionTensor3D.h" #include "mitkImageCast.h" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include mitk::NrrdTensorImageWriter::NrrdTensorImageWriter() - : AbstractFileWriter(mitk::TensorImage::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionCoreIOMimeTypes::DTI_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::DTI_MIMETYPE_DESCRIPTION() ) + : AbstractFileWriter(mitk::TensorImage::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionIOMimeTypes::DTI_MIMETYPE() ), mitk::DiffusionIOMimeTypes::DTI_MIMETYPE_DESCRIPTION() ) { RegisterService(); } mitk::NrrdTensorImageWriter::NrrdTensorImageWriter(const mitk::NrrdTensorImageWriter& other) : AbstractFileWriter(other) { } mitk::NrrdTensorImageWriter::~NrrdTensorImageWriter() {} void mitk::NrrdTensorImageWriter::Write() { InputType::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull() ) { MITK_ERROR <<"Sorry, input to NrrdTensorImageWriter is nullptr!"; return; } if ( this->GetOutputLocation().empty() ) { MITK_ERROR << "Sorry, filename has not been set!" ; return ; } mitk::LocaleSwitch localeSwitch("C"); itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); io->SetFileType( itk::ImageIOBase::Binary ); io->UseCompressionOn(); typedef itk::ImageFileWriter WriterType; WriterType::Pointer nrrdWriter = WriterType::New(); TensorImage::ItkTensorImageType::Pointer outimage = TensorImage::ItkTensorImageType::New(); CastToItkImage(input, outimage); nrrdWriter->SetInput( outimage ); nrrdWriter->SetImageIO(io); nrrdWriter->SetFileName(this->GetOutputLocation().c_str()); nrrdWriter->UseCompressionOn(); try { nrrdWriter->Update(); } catch (const itk::ExceptionObject& e) { std::cout << e.GetDescription() << std::endl; } } mitk::NrrdTensorImageWriter* mitk::NrrdTensorImageWriter::Clone() const { return new NrrdTensorImageWriter(*this); } mitk::IFileWriter::ConfidenceLevel mitk::NrrdTensorImageWriter::GetConfidenceLevel() const { InputType::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull() ) { return Unsupported; } else { return Supported; } } diff --git a/Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageWriter.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkNrrdTensorImageWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkNrrdTensorImageWriter.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkOdfImageSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkOdfImageSerializer.cpp similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkOdfImageSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkOdfImageSerializer.cpp diff --git a/Modules/DiffusionCore/autoload/IO/mitkOdfImageSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkOdfImageSerializer.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkOdfImageSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkOdfImageSerializer.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkPeakImageReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkPeakImageReader.cpp similarity index 92% rename from Modules/DiffusionCore/autoload/IO/mitkPeakImageReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkPeakImageReader.cpp index 52bc764..a973d38 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkPeakImageReader.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkPeakImageReader.cpp @@ -1,85 +1,85 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkPeakImageReader.h" #include -#include +#include #include #include #include #include #include #include #include #include #include #include namespace mitk { PeakImageReader::PeakImageReader(const PeakImageReader& other) : mitk::AbstractFileReader(other) { } PeakImageReader::PeakImageReader() - : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::PEAK_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::PEAK_MIMETYPE_DESCRIPTION() ) + : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionIOMimeTypes::PEAK_MIMETYPE() ), mitk::DiffusionIOMimeTypes::PEAK_MIMETYPE_DESCRIPTION() ) { m_ServiceReg = this->RegisterService(); } PeakImageReader::~PeakImageReader() { } std::vector > PeakImageReader::Read() { mitk::LocaleSwitch localeSwitch("C"); std::vector > result; std::string location = GetInputLocation(); std::string ext = itksys::SystemTools::GetFilenameExtension(location); MITK_INFO << "Reading " << location; typedef itk::ImageFileReader FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetFileName(location); if (ext==".peak") { itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); reader->SetImageIO(io); } reader->Update(); Image::Pointer resultImage = dynamic_cast(PeakImage::New().GetPointer()); mitk::CastToMitkImage(reader->GetOutput(), resultImage); resultImage->SetVolume(reader->GetOutput()->GetBufferPointer()); StringProperty::Pointer nameProp; nameProp = StringProperty::New(itksys::SystemTools::GetFilenameWithoutExtension(GetInputLocation())); resultImage->SetProperty("name", nameProp); dynamic_cast(resultImage.GetPointer())->ConstructPolydata(); result.push_back( resultImage.GetPointer() ); return result; } } //namespace MITK mitk::PeakImageReader* mitk::PeakImageReader::Clone() const { return new PeakImageReader(*this); } diff --git a/Modules/DiffusionCore/autoload/IO/mitkPeakImageReader.h b/Modules/DiffusionIO/ReaderWriter/mitkPeakImageReader.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkPeakImageReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkPeakImageReader.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkPeakImageSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkPeakImageSerializer.cpp similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkPeakImageSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkPeakImageSerializer.cpp diff --git a/Modules/DiffusionCore/autoload/IO/mitkPeakImageSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkPeakImageSerializer.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkPeakImageSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkPeakImageSerializer.h diff --git a/Modules/DiffusionIO/mitkPlanarFigureCompositeReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeReader.cpp similarity index 100% rename from Modules/DiffusionIO/mitkPlanarFigureCompositeReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeReader.cpp diff --git a/Modules/DiffusionIO/mitkPlanarFigureCompositeReader.h b/Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeReader.h similarity index 100% rename from Modules/DiffusionIO/mitkPlanarFigureCompositeReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeReader.h diff --git a/Modules/DiffusionIO/mitkPlanarFigureCompositeSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeSerializer.cpp similarity index 100% rename from Modules/DiffusionIO/mitkPlanarFigureCompositeSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeSerializer.cpp diff --git a/Modules/DiffusionIO/mitkPlanarFigureCompositeSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeSerializer.h similarity index 100% rename from Modules/DiffusionIO/mitkPlanarFigureCompositeSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeSerializer.h diff --git a/Modules/DiffusionIO/mitkPlanarFigureCompositeWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkPlanarFigureCompositeWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeWriter.cpp diff --git a/Modules/DiffusionIO/mitkPlanarFigureCompositeWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkPlanarFigureCompositeWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkPlanarFigureCompositeWriter.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkShImageReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkShImageReader.cpp similarity index 95% rename from Modules/DiffusionCore/autoload/IO/mitkShImageReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkShImageReader.cpp index 3ea81d1..83f4dd5 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkShImageReader.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkShImageReader.cpp @@ -1,131 +1,131 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkShImageReader.h" #include -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include "itkImageFileReader.h" #include "itkImageRegionIterator.h" #include "itkMetaDataObject.h" #include "itkNrrdImageIO.h" #include "itkNiftiImageIO.h" #include "mitkITKImageImport.h" #include "mitkImageDataItem.h" #include #include #include namespace mitk { ShImageReader::ShImageReader(const ShImageReader& other) : mitk::AbstractFileReader(other) { } ShImageReader::ShImageReader() - : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionCoreIOMimeTypes::SH_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::SH_MIMETYPE_DESCRIPTION() ) + : mitk::AbstractFileReader( CustomMimeType( mitk::DiffusionIOMimeTypes::SH_MIMETYPE() ), mitk::DiffusionIOMimeTypes::SH_MIMETYPE_DESCRIPTION() ) { m_ServiceReg = this->RegisterService(); } ShImageReader::~ShImageReader() { } template mitk::Image::Pointer ShImageReader::ConvertShImage(ShImage::ShOnDiskType::Pointer img) { typedef itk::ShCoefficientImageImporter< float, shOrder > ImporterType; typename ImporterType::Pointer importer = ImporterType::New(); importer->SetInputImage(img); importer->GenerateData(); mitk::ShImage::Pointer shImage = mitk::ShImage::New(); mitk::Image::Pointer resultImage = dynamic_cast(shImage.GetPointer()); mitk::CastToMitkImage(importer->GetCoefficientImage(), resultImage); resultImage->SetVolume(importer->GetCoefficientImage()->GetBufferPointer()); return resultImage; } std::vector > ShImageReader::Read() { mitk::LocaleSwitch localeSwitch("C"); std::vector > result; std::string location = GetInputLocation(); if ( location == "") { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename is empty!"); } else { try { std::string ext = itksys::SystemTools::GetFilenameExtension(location); typedef itk::ImageFileReader< ShImage::ShOnDiskType > FileReaderType; FileReaderType::Pointer reader = FileReaderType::New(); reader->SetFileName(location); if (ext==".shi") { itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); reader->SetImageIO(io); } reader->Update(); ShImage::ShOnDiskType::Pointer img = reader->GetOutput(); switch (img->GetLargestPossibleRegion().GetSize()[3]) { case 6: result.push_back( ConvertShImage<2>(img).GetPointer() ); break; case 15: result.push_back( ConvertShImage<4>(img).GetPointer() ); break; case 28: result.push_back( ConvertShImage<6>(img).GetPointer() ); break; case 45: result.push_back( ConvertShImage<8>(img).GetPointer() ); break; case 66: result.push_back( ConvertShImage<10>(img).GetPointer() ); break; case 91: result.push_back( ConvertShImage<12>(img).GetPointer() ); break; default : mitkThrow() << "SH order larger 12 not supported"; } } catch(std::exception& e) { throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what()); } catch(...) { throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested vessel tree file!"); } } return result; } } //namespace MITK mitk::ShImageReader* mitk::ShImageReader::Clone() const { return new ShImageReader(*this); } diff --git a/Modules/DiffusionCore/autoload/IO/mitkShImageReader.h b/Modules/DiffusionIO/ReaderWriter/mitkShImageReader.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkShImageReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkShImageReader.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkShImageSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkShImageSerializer.cpp similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkShImageSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkShImageSerializer.cpp diff --git a/Modules/DiffusionCore/autoload/IO/mitkShImageSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkShImageSerializer.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkShImageSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkShImageSerializer.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkShImageWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkShImageWriter.cpp similarity index 95% rename from Modules/DiffusionCore/autoload/IO/mitkShImageWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkShImageWriter.cpp index 6e2ea52..7da6c29 100644 --- a/Modules/DiffusionCore/autoload/IO/mitkShImageWriter.cpp +++ b/Modules/DiffusionIO/ReaderWriter/mitkShImageWriter.cpp @@ -1,138 +1,138 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkShImageWriter.h" #include "itkMetaDataDictionary.h" #include "itkMetaDataObject.h" #include "itkImageFileWriter.h" #include "mitkImageCast.h" #include "mitkIOMimeTypes.h" -#include "mitkDiffusionCoreIOMimeTypes.h" +#include "mitkDiffusionIOMimeTypes.h" #include #include #include #include mitk::ShImageWriter::ShImageWriter() - : AbstractFileWriter(mitk::ShImage::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionCoreIOMimeTypes::SH_MIMETYPE() ), mitk::DiffusionCoreIOMimeTypes::SH_MIMETYPE_DESCRIPTION()) + : AbstractFileWriter(mitk::ShImage::GetStaticNameOfClass(), CustomMimeType( mitk::DiffusionIOMimeTypes::SH_MIMETYPE() ), mitk::DiffusionIOMimeTypes::SH_MIMETYPE_DESCRIPTION()) { RegisterService(); } mitk::ShImageWriter::ShImageWriter(const mitk::ShImageWriter& other) : AbstractFileWriter(other) { } mitk::ShImageWriter::~ShImageWriter() {} template void mitk::ShImageWriter::WriteShImage(InputType::ConstPointer input) { mitk::LocaleSwitch localeSwitch("C"); typename itk::ShCoefficientImageExporter< float, shOrder >::InputImageType::Pointer itk_image = itk::ShCoefficientImageExporter< float, shOrder >::InputImageType::New(); CastToItkImage(input, itk_image); typedef itk::ShCoefficientImageExporter< float, shOrder > ExporterType; typename ExporterType::Pointer exporter = ExporterType::New(); exporter->SetInputImage(itk_image); exporter->GenerateData(); std::string ext = itksys::SystemTools::GetFilenameExtension(this->GetOutputLocation()); typedef itk::ImageFileWriter WriterType; WriterType::Pointer writer = WriterType::New(); ShImage::ShOnDiskType::Pointer image = exporter->GetOutputImage(); writer->SetInput( image ); if (ext==".shi") { itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); io->SetFileType( itk::ImageIOBase::Binary ); io->UseCompressionOn(); writer->SetImageIO(io); } writer->SetFileName(this->GetOutputLocation().c_str()); writer->SetUseCompression(true); try { writer->Update(); } catch (const itk::ExceptionObject& e) { MITK_INFO << e.what(); } } void mitk::ShImageWriter::Write() { InputType::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull()) { MITK_ERROR <<"Sorry, input to ShImageWriter is nullptr!"; return; } if ( this->GetOutputLocation().empty() ) { MITK_ERROR << "Sorry, filename has not been set!"; return ; } switch (input->GetImageDescriptor()->GetChannelTypeById(0).GetNumberOfComponents()) { case 6: WriteShImage<2>(input); break; case 15: WriteShImage<4>(input); break; case 28: WriteShImage<6>(input); break; case 45: WriteShImage<8>(input); break; case 66: WriteShImage<10>(input); break; case 91: WriteShImage<12>(input); break; default : mitkThrow() << "SH order larger 12 not supported"; } } mitk::ShImageWriter* mitk::ShImageWriter::Clone() const { return new ShImageWriter(*this); } mitk::IFileWriter::ConfidenceLevel mitk::ShImageWriter::GetConfidenceLevel() const { InputType::ConstPointer input = dynamic_cast(this->GetInput()); if (input.IsNull() ) { return Unsupported; } else { return Supported; } } diff --git a/Modules/DiffusionCore/autoload/IO/mitkShImageWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkShImageWriter.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkShImageWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkShImageWriter.h diff --git a/Modules/DiffusionCore/autoload/IO/mitkTensorImageSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkTensorImageSerializer.cpp similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkTensorImageSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkTensorImageSerializer.cpp diff --git a/Modules/DiffusionCore/autoload/IO/mitkTensorImageSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkTensorImageSerializer.h similarity index 100% rename from Modules/DiffusionCore/autoload/IO/mitkTensorImageSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkTensorImageSerializer.h diff --git a/Modules/DiffusionIO/mitkTractographyForestReader.cpp b/Modules/DiffusionIO/ReaderWriter/mitkTractographyForestReader.cpp similarity index 100% rename from Modules/DiffusionIO/mitkTractographyForestReader.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkTractographyForestReader.cpp diff --git a/Modules/DiffusionIO/mitkTractographyForestReader.h b/Modules/DiffusionIO/ReaderWriter/mitkTractographyForestReader.h similarity index 100% rename from Modules/DiffusionIO/mitkTractographyForestReader.h rename to Modules/DiffusionIO/ReaderWriter/mitkTractographyForestReader.h diff --git a/Modules/DiffusionIO/mitkTractographyForestSerializer.cpp b/Modules/DiffusionIO/ReaderWriter/mitkTractographyForestSerializer.cpp similarity index 100% rename from Modules/DiffusionIO/mitkTractographyForestSerializer.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkTractographyForestSerializer.cpp diff --git a/Modules/DiffusionIO/mitkTractographyForestSerializer.h b/Modules/DiffusionIO/ReaderWriter/mitkTractographyForestSerializer.h similarity index 100% rename from Modules/DiffusionIO/mitkTractographyForestSerializer.h rename to Modules/DiffusionIO/ReaderWriter/mitkTractographyForestSerializer.h diff --git a/Modules/DiffusionIO/mitkTractographyForestWriter.cpp b/Modules/DiffusionIO/ReaderWriter/mitkTractographyForestWriter.cpp similarity index 100% rename from Modules/DiffusionIO/mitkTractographyForestWriter.cpp rename to Modules/DiffusionIO/ReaderWriter/mitkTractographyForestWriter.cpp diff --git a/Modules/DiffusionIO/mitkTractographyForestWriter.h b/Modules/DiffusionIO/ReaderWriter/mitkTractographyForestWriter.h similarity index 100% rename from Modules/DiffusionIO/mitkTractographyForestWriter.h rename to Modules/DiffusionIO/ReaderWriter/mitkTractographyForestWriter.h diff --git a/Modules/DiffusionIO/files.cmake b/Modules/DiffusionIO/files.cmake index a68e3cd..e8aac0e 100644 --- a/Modules/DiffusionIO/files.cmake +++ b/Modules/DiffusionIO/files.cmake @@ -1,35 +1,60 @@ set(CPP_FILES - mitkDiffusionModuleActivator.cpp - mitkConnectomicsNetworkReader.cpp - mitkConnectomicsNetworkWriter.cpp - mitkConnectomicsNetworkCSVWriter.cpp - mitkConnectomicsNetworkMatrixWriter.cpp - mitkConnectomicsNetworkSerializer.cpp - mitkConnectomicsNetworkDefinitions.cpp - mitkFiberTrackingObjectFactory.cpp - mitkConnectomicsObjectFactory.cpp + mitkDiffusionModuleActivator.cpp mitkDiffusionIOMimeTypes.cpp - mitkFiberBundleDicomReader.cpp - mitkFiberBundleDicomWriter.cpp - mitkFiberBundleTckReader.cpp - mitkFiberBundleTrackVisReader.cpp - mitkFiberBundleTrackVisWriter.cpp - mitkFiberBundleVtkReader.cpp - mitkFiberBundleVtkWriter.cpp - mitkFiberBundleSerializer.cpp - mitkFiberBundleMapper2D.cpp - mitkFiberBundleMapper3D.cpp - mitkPeakImageMapper2D.cpp - mitkPeakImageMapper3D.cpp - - mitkTractographyForestReader.cpp - mitkTractographyForestWriter.cpp - mitkTractographyForestSerializer.cpp - - mitkPlanarFigureCompositeWriter.cpp - mitkPlanarFigureCompositeReader.cpp - mitkPlanarFigureCompositeSerializer.cpp + ObjectFactories/mitkDiffusionCoreObjectFactory.cpp + ObjectFactories/mitkConnectomicsObjectFactory.cpp + + Mapper/mitkFiberBundleMapper2D.cpp + Mapper/mitkFiberBundleMapper3D.cpp + Mapper/mitkPeakImageMapper2D.cpp + Mapper/mitkPeakImageMapper3D.cpp + Mapper/mitkCompositeMapper.cpp + + ReaderWriter/mitkConnectomicsNetworkReader.cpp + ReaderWriter/mitkConnectomicsNetworkWriter.cpp + ReaderWriter/mitkConnectomicsNetworkCSVWriter.cpp + ReaderWriter/mitkConnectomicsNetworkMatrixWriter.cpp + ReaderWriter/mitkConnectomicsNetworkSerializer.cpp + ReaderWriter/mitkConnectomicsNetworkDefinitions.cpp + + ReaderWriter/mitkFiberBundleDicomReader.cpp + ReaderWriter/mitkFiberBundleDicomWriter.cpp + ReaderWriter/mitkFiberBundleTckReader.cpp + ReaderWriter/mitkFiberBundleTrackVisReader.cpp + ReaderWriter/mitkFiberBundleTrackVisWriter.cpp + ReaderWriter/mitkFiberBundleVtkReader.cpp + ReaderWriter/mitkFiberBundleVtkWriter.cpp + ReaderWriter/mitkFiberBundleSerializer.cpp + + ReaderWriter/mitkTractographyForestReader.cpp + ReaderWriter/mitkTractographyForestWriter.cpp + ReaderWriter/mitkTractographyForestSerializer.cpp + + ReaderWriter/mitkPlanarFigureCompositeWriter.cpp + ReaderWriter/mitkPlanarFigureCompositeReader.cpp + ReaderWriter/mitkPlanarFigureCompositeSerializer.cpp + + ReaderWriter/mitkPeakImageReader.cpp + ReaderWriter/mitkPeakImageSerializer.cpp + + ReaderWriter/mitkNrrdTensorImageReader.cpp + ReaderWriter/mitkNrrdTensorImageWriter.cpp + ReaderWriter/mitkTensorImageSerializer.cpp + + ReaderWriter/mitkNrrdOdfImageReader.cpp + ReaderWriter/mitkNrrdOdfImageWriter.cpp + ReaderWriter/mitkOdfImageSerializer.cpp + + ReaderWriter/mitkShImageReader.cpp + ReaderWriter/mitkShImageWriter.cpp + ReaderWriter/mitkShImageSerializer.cpp + + ReaderWriter/mitkDiffusionImageDicomReaderService.cpp + ReaderWriter/mitkDiffusionImageNrrdReaderService.cpp + ReaderWriter/mitkDiffusionImageNrrdWriterService.cpp + ReaderWriter/mitkDiffusionImageNiftiReaderService.cpp + ReaderWriter/mitkDiffusionImageNiftiWriterService.cpp ) diff --git a/Modules/DiffusionIO/mitkDiffusionCoreIOActivator.cpp b/Modules/DiffusionIO/mitkDiffusionCoreIOActivator.cpp new file mode 100644 index 0000000..3d34267 --- /dev/null +++ b/Modules/DiffusionIO/mitkDiffusionCoreIOActivator.cpp @@ -0,0 +1,68 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ +#include +#include + + + +#include +#include +#include + +#include "mitkDiffusionIOMimeTypes.h" + +namespace mitk +{ + /** + \brief Registers services for segmentation module. + */ + class DiffusionCoreIOActivator : public us::ModuleActivator + { + public: + + void Load(us::ModuleContext* context) override + { + m_MimeTypes = mitk::DiffusionIOMimeTypes::Get(); + for (std::vector::const_iterator mimeTypeIter = m_MimeTypes.begin(), + iterEnd = m_MimeTypes.end(); mimeTypeIter != iterEnd; ++mimeTypeIter) + { + us::ServiceProperties props; + mitk::CustomMimeType* mt = *mimeTypeIter; + if (mt->GetName()!=mitk::DiffusionIOMimeTypes::PEAK_MIMETYPE_NAME() && mt->GetName()!=mitk::DiffusionIOMimeTypes::SH_MIMETYPE_NAME()) + props[ us::ServiceConstants::SERVICE_RANKING() ] = 10; + + context->RegisterService(*mimeTypeIter, props); + } + + + } + + void Unload(us::ModuleContext*) override + { + for (unsigned int loop(0); loop < m_MimeTypes.size(); ++loop) + { + delete m_MimeTypes.at(loop); + } + } + + private: + + std::vector m_MimeTypes; + + }; +} + +US_EXPORT_MODULE_ACTIVATOR(mitk::DiffusionCoreIOActivator) diff --git a/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.cpp b/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.cpp index f3f367b..7d7f38b 100644 --- a/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.cpp +++ b/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.cpp @@ -1,291 +1,796 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkDiffusionIOMimeTypes.h" #include "mitkIOMimeTypes.h" #include #include #include #include #include #include #include #include +#include namespace mitk { std::vector DiffusionIOMimeTypes::Get() { std::vector mimeTypes; // order matters here (descending rank for mime types) mimeTypes.push_back(FIBERBUNDLE_VTK_MIMETYPE().Clone()); mimeTypes.push_back(FIBERBUNDLE_TRK_MIMETYPE().Clone()); mimeTypes.push_back(FIBERBUNDLE_TCK_MIMETYPE().Clone()); mimeTypes.push_back(FIBERBUNDLE_DICOM_MIMETYPE().Clone()); - mimeTypes.push_back(CONNECTOMICS_MIMETYPE().Clone()); mimeTypes.push_back(TRACTOGRAPHYFOREST_MIMETYPE().Clone()); - mimeTypes.push_back(PLANARFIGURECOMPOSITE_MIMETYPE().Clone()); + mimeTypes.push_back(DWI_NRRD_MIMETYPE().Clone()); + mimeTypes.push_back(DWI_NIFTI_MIMETYPE().Clone()); + mimeTypes.push_back(DWI_DICOM_MIMETYPE().Clone()); + mimeTypes.push_back(DTI_MIMETYPE().Clone()); + mimeTypes.push_back(ODF_MIMETYPE().Clone()); + mimeTypes.push_back(PEAK_MIMETYPE().Clone()); + mimeTypes.push_back(SH_MIMETYPE().Clone()); + return mimeTypes; } // Mime Types CustomMimeType DiffusionIOMimeTypes::PLANARFIGURECOMPOSITE_MIMETYPE() { CustomMimeType mimeType(PLANARFIGURECOMPOSITE_MIMETYPE_NAME()); std::string category = "Planar Figure Composite"; mimeType.SetComment("Planar Figure Composite"); mimeType.SetCategory(category); mimeType.AddExtension("pfc"); return mimeType; } CustomMimeType DiffusionIOMimeTypes::TRACTOGRAPHYFOREST_MIMETYPE() { CustomMimeType mimeType(TRACTOGRAPHYFOREST_MIMETYPE_NAME()); std::string category = "Tractography Forest"; mimeType.SetComment("Tractography Forest"); mimeType.SetCategory(category); mimeType.AddExtension("rf"); return mimeType; } CustomMimeType DiffusionIOMimeTypes::FIBERBUNDLE_VTK_MIMETYPE() { CustomMimeType mimeType(FIBERBUNDLE_VTK_MIMETYPE_NAME()); std::string category = "VTK Fibers"; mimeType.SetComment("VTK Fibers"); mimeType.SetCategory(category); mimeType.AddExtension("fib"); mimeType.AddExtension("vtk"); return mimeType; } CustomMimeType DiffusionIOMimeTypes::FIBERBUNDLE_TCK_MIMETYPE() { CustomMimeType mimeType(FIBERBUNDLE_TCK_MIMETYPE_NAME()); std::string category = "MRtrix Fibers"; mimeType.SetComment("MRtrix Fibers"); mimeType.SetCategory(category); mimeType.AddExtension("tck"); return mimeType; } CustomMimeType DiffusionIOMimeTypes::FIBERBUNDLE_TRK_MIMETYPE() { CustomMimeType mimeType(FIBERBUNDLE_TRK_MIMETYPE_NAME()); std::string category = "TrackVis Fibers"; mimeType.SetComment("TrackVis Fibers"); mimeType.SetCategory(category); mimeType.AddExtension("trk"); return mimeType; } DiffusionIOMimeTypes::FiberBundleDicomMimeType::FiberBundleDicomMimeType() : CustomMimeType(FIBERBUNDLE_DICOM_MIMETYPE_NAME()) { std::string category = "DICOM Fibers"; this->SetCategory(category); this->SetComment("DICOM Fibers"); this->AddExtension("dcm"); this->AddExtension("DCM"); this->AddExtension("gdcm"); this->AddExtension("dc3"); this->AddExtension("DC3"); this->AddExtension("ima"); this->AddExtension("img"); } bool DiffusionIOMimeTypes::FiberBundleDicomMimeType::AppliesTo(const std::string &path) const { try { std::ifstream myfile; myfile.open (path, std::ios::binary); // myfile.seekg (128); char *buffer = new char [128]; myfile.read (buffer,128); myfile.read (buffer,4); if (std::string(buffer).compare("DICM")!=0) { delete[] buffer; return false; } delete[] buffer; mitk::DICOMDCMTKTagScanner::Pointer scanner = mitk::DICOMDCMTKTagScanner::New(); mitk::DICOMTag SOPInstanceUID(0x0008, 0x0016); mitk::StringList relevantFiles; relevantFiles.push_back(path); scanner->AddTag(SOPInstanceUID); scanner->SetInputFiles(relevantFiles); scanner->Scan(); mitk::DICOMTagCache::Pointer tagCache = scanner->GetScanCache(); mitk::DICOMImageFrameList imageFrameList = mitk::ConvertToDICOMImageFrameList(tagCache->GetFrameInfoList()); if (imageFrameList.empty()) return false; mitk::DICOMImageFrameInfo *firstFrame = imageFrameList.begin()->GetPointer(); std::string tag_value = tagCache->GetTagValue(firstFrame, SOPInstanceUID).value; if (tag_value.empty()) { return false; } if (tag_value.compare(UID_TractographyResultsStorage)!=0) return false; return true; } catch (std::exception& e) { MITK_INFO << e.what(); } return false; } DiffusionIOMimeTypes::FiberBundleDicomMimeType* DiffusionIOMimeTypes::FiberBundleDicomMimeType::Clone() const { return new FiberBundleDicomMimeType(*this); } DiffusionIOMimeTypes::FiberBundleDicomMimeType DiffusionIOMimeTypes::FIBERBUNDLE_DICOM_MIMETYPE() { return FiberBundleDicomMimeType(); } CustomMimeType DiffusionIOMimeTypes::CONNECTOMICS_MIMETYPE() { CustomMimeType mimeType(CONNECTOMICS_MIMETYPE_NAME()); std::string category = "Connectomics Networks"; mimeType.SetComment("Connectomics Networks Files"); mimeType.SetCategory(category); mimeType.AddExtension("cnf"); return mimeType; } CustomMimeType DiffusionIOMimeTypes::CONNECTOMICS_MATRIX_MIMETYPE() { CustomMimeType mimeType(CONNECTOMICS_MATRIX_MIMETYPE_NAME()); std::string category = "Connectomics Networks export"; mimeType.SetComment("Connectomics Matrix Files"); mimeType.SetCategory(category); mimeType.AddExtension("mat"); return mimeType; } CustomMimeType DiffusionIOMimeTypes::CONNECTOMICS_LIST_MIMETYPE() { CustomMimeType mimeType(CONNECTOMICS_LIST_MIMETYPE_NAME()); std::string category = "Connectomics Networks export"; mimeType.SetComment("Connectomics Connection Lists"); mimeType.SetCategory(category); mimeType.AddExtension("txt"); return mimeType; } +DiffusionIOMimeTypes::DiffusionImageNrrdMimeType::DiffusionImageNrrdMimeType() + : CustomMimeType(DWI_NRRD_MIMETYPE_NAME()) +{ + std::string category = "Diffusion Weighted Images"; + this->SetCategory(category); + this->SetComment("Diffusion Weighted Images"); + + this->AddExtension("dwi"); + //this->AddExtension("hdwi"); // saving with detached header does not work out of the box + this->AddExtension("nrrd"); +} + +bool DiffusionIOMimeTypes::DiffusionImageNrrdMimeType::AppliesTo(const std::string &path) const +{ + bool canRead( CustomMimeType::AppliesTo(path) ); + + // fix for bug 18572 + // Currently this function is called for writing as well as reading, in that case + // the image information can of course not be read + // This is a bug, this function should only be called for reading. + if( ! itksys::SystemTools::FileExists( path.c_str() ) ) + { + return canRead; + } + //end fix for bug 18572 + + itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); + // Simple NRRD files should only be considered for this mime type if they contain + // corresponding tags + if( io->CanReadFile(path.c_str())) + { + io->SetFileName(path); + try + { + io->ReadImageInformation(); + + itk::MetaDataDictionary imgMetaDictionary = io->GetMetaDataDictionary(); + std::vector imgMetaKeys = imgMetaDictionary.GetKeys(); + std::vector::const_iterator itKey = imgMetaKeys.begin(); + std::string metaString; + + for (; itKey != imgMetaKeys.end(); itKey ++) + { + itk::ExposeMetaData (imgMetaDictionary, *itKey, metaString); + if (itKey->find("modality") != std::string::npos) + { + if (metaString.find("DWMRI") != std::string::npos) + { + return canRead; + } + } + } + + } + catch( const itk::ExceptionObject &e ) + { + MITK_ERROR << "ITK Exception: " << e.what(); + } + canRead = false; + } + + return canRead; +} + +DiffusionIOMimeTypes::DiffusionImageNrrdMimeType* DiffusionIOMimeTypes::DiffusionImageNrrdMimeType::Clone() const +{ + return new DiffusionImageNrrdMimeType(*this); +} + + +DiffusionIOMimeTypes::DiffusionImageNrrdMimeType DiffusionIOMimeTypes::DWI_NRRD_MIMETYPE() +{ + return DiffusionImageNrrdMimeType(); +} + +DiffusionIOMimeTypes::DiffusionImageNiftiMimeType::DiffusionImageNiftiMimeType() + : CustomMimeType(DWI_NIFTI_MIMETYPE_NAME()) +{ + std::string category = "Diffusion Weighted Images"; + this->SetCategory(category); + this->SetComment("Diffusion Weighted Images"); + this->AddExtension("nii.gz"); + this->AddExtension("nii"); +} + +bool DiffusionIOMimeTypes::DiffusionImageNiftiMimeType::AppliesTo(const std::string &path) const +{ + bool canRead(CustomMimeType::AppliesTo(path)); + + // fix for bug 18572 + // Currently this function is called for writing as well as reading, in that case + // the image information can of course not be read + // This is a bug, this function should only be called for reading. + if (!itksys::SystemTools::FileExists(path.c_str())) + { + return canRead; + } + //end fix for bug 18572 + + std::string ext = this->GetExtension(path); + ext = itksys::SystemTools::LowerCase(ext); + + // Nifti files should only be considered for this mime type if they are + // accompanied by bvecs and bvals files defining the diffusion information + if (ext == ".nii" || ext == ".nii.gz") + { + std::string base_path = itksys::SystemTools::GetFilenamePath(path); + std::string base = this->GetFilenameWithoutExtension(path); + std::string filename = base; + if (!base_path.empty()) + { + base = base_path + "/" + base; + base_path += "/"; + } + + if (itksys::SystemTools::FileExists(std::string(base + ".bvec").c_str()) + && itksys::SystemTools::FileExists(std::string(base + ".bval").c_str()) + ) + { + return canRead; + } + + if (itksys::SystemTools::FileExists(std::string(base + ".bvecs").c_str()) + && itksys::SystemTools::FileExists(std::string(base + ".bvals").c_str()) + ) + { + return canRead; + } + + // hack for HCP data + if ( filename=="data" && itksys::SystemTools::FileExists(std::string(base_path + "bvec").c_str()) && itksys::SystemTools::FileExists(std::string(base_path + "bval").c_str()) ) + { + return canRead; + } + + if ( filename=="data" && itksys::SystemTools::FileExists(std::string(base_path + "bvecs").c_str()) && itksys::SystemTools::FileExists(std::string(base_path + "bvals").c_str()) ) + { + return canRead; + } + + canRead = false; + } + + return canRead; +} + +DiffusionIOMimeTypes::DiffusionImageNiftiMimeType* DiffusionIOMimeTypes::DiffusionImageNiftiMimeType::Clone() const +{ + return new DiffusionImageNiftiMimeType(*this); +} + + +DiffusionIOMimeTypes::DiffusionImageNiftiMimeType DiffusionIOMimeTypes::DWI_NIFTI_MIMETYPE() +{ + return DiffusionImageNiftiMimeType(); +} + +DiffusionIOMimeTypes::DiffusionImageDicomMimeType::DiffusionImageDicomMimeType() + : CustomMimeType(DWI_DICOM_MIMETYPE_NAME()) +{ + std::string category = "Diffusion Weighted Images"; + this->SetCategory(category); + this->SetComment("Diffusion Weighted Images"); + + this->AddExtension("gdcm"); + this->AddExtension("dcm"); + this->AddExtension("DCM"); + this->AddExtension("dc3"); + this->AddExtension("DC3"); + this->AddExtension("ima"); + this->AddExtension("img"); +} + +bool DiffusionIOMimeTypes::DiffusionImageDicomMimeType::AppliesTo(const std::string &path) const +{ + itk::GDCMImageIO::Pointer gdcmIO = itk::GDCMImageIO::New(); + bool canRead = gdcmIO->CanReadFile(path.c_str()); + + if (!canRead) + return canRead; + + mitk::DICOMDCMTKTagScanner::Pointer scanner = mitk::DICOMDCMTKTagScanner::New(); + mitk::DICOMTag ImageTypeTag(0x0008, 0x0008); + mitk::DICOMTag SeriesDescriptionTag(0x0008, 0x103E); + + mitk::StringList relevantFiles; + relevantFiles.push_back(path); + + scanner->AddTag(ImageTypeTag); + scanner->AddTag(SeriesDescriptionTag); + scanner->SetInputFiles(relevantFiles); + scanner->Scan(); + mitk::DICOMTagCache::Pointer tagCache = scanner->GetScanCache(); + + mitk::DICOMImageFrameList imageFrameList = mitk::ConvertToDICOMImageFrameList(tagCache->GetFrameInfoList()); + mitk::DICOMImageFrameInfo *firstFrame = imageFrameList.begin()->GetPointer(); + + std::string byteString = tagCache->GetTagValue(firstFrame, ImageTypeTag).value; + if (byteString.empty()) + return false; + + std::string byteString2 = tagCache->GetTagValue(firstFrame, SeriesDescriptionTag).value; + if (byteString2.empty()) + return false; + + if (byteString.find("DIFFUSION")==std::string::npos && + byteString2.find("diff")==std::string::npos && + byteString2.find("DWI")==std::string::npos) + return false; + + return canRead; +} + +DiffusionIOMimeTypes::DiffusionImageDicomMimeType* DiffusionIOMimeTypes::DiffusionImageDicomMimeType::Clone() const +{ + return new DiffusionImageDicomMimeType(*this); +} + + +DiffusionIOMimeTypes::DiffusionImageDicomMimeType DiffusionIOMimeTypes::DWI_DICOM_MIMETYPE() +{ + return DiffusionImageDicomMimeType(); +} + + +DiffusionIOMimeTypes::PeakImageMimeType::PeakImageMimeType() : CustomMimeType(PEAK_MIMETYPE_NAME()) +{ + std::string category = "Peak Image"; + this->SetCategory(category); + this->SetComment("Peak Image"); + + this->AddExtension("nrrd"); + this->AddExtension("nii"); + this->AddExtension("nii.gz"); + this->AddExtension("peak"); +} + +bool DiffusionIOMimeTypes::PeakImageMimeType::AppliesTo(const std::string &path) const +{ + std::string ext = itksys::SystemTools::GetFilenameExtension(path); + if (ext==".peak") + return true; + + try + { + itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); + if ( io->CanReadFile( path.c_str() ) ) + { + io->SetFileName( path.c_str() ); + io->ReadImageInformation(); + if ( io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions()==4 && io->GetDimensions(3)%3==0) + return true; + } + } + catch(...) + {} + + try + { + itk::NiftiImageIO::Pointer io = itk::NiftiImageIO::New(); + if ( io->CanReadFile( path.c_str() ) ) + { + io->SetFileName( path.c_str() ); + io->ReadImageInformation(); + if ( io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions()==4 && io->GetDimensions(3)%3==0) + return true; + } + } + catch(...) + {} + + return false; +} + +DiffusionIOMimeTypes::PeakImageMimeType* DiffusionIOMimeTypes::PeakImageMimeType::Clone() const +{ + return new PeakImageMimeType(*this); +} + + +DiffusionIOMimeTypes::PeakImageMimeType DiffusionIOMimeTypes::PEAK_MIMETYPE() +{ + return PeakImageMimeType(); +} + + +DiffusionIOMimeTypes::SHImageMimeType::SHImageMimeType() : CustomMimeType(SH_MIMETYPE_NAME()) +{ + std::string category = "SH Image"; + this->SetCategory(category); + this->SetComment("SH Image"); + + this->AddExtension("nii.gz"); + this->AddExtension("nii"); + this->AddExtension("nrrd"); + this->AddExtension("shi"); +} + +bool DiffusionIOMimeTypes::SHImageMimeType::AppliesTo(const std::string &path) const +{ + std::string ext = itksys::SystemTools::GetFilenameExtension(path); + if (ext==".shi") + return true; + + { + try + { + itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New(); + if (io->CanReadFile(path.c_str())) + { + io->SetFileName(path.c_str()); + io->ReadImageInformation(); + if (io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions() == 4) + { + switch (io->GetDimensions(3)) + { + case 6: + return true; + break; + case 15: + return true; + break; + case 28: + return true; + break; + case 45: + return true; + break; + case 66: + return true; + break; + case 91: + return true; + break; + default: + return false; + } + } + } + } + catch(...) + {} + } + + { + itk::NiftiImageIO::Pointer io = itk::NiftiImageIO::New(); + if ( io->CanReadFile( path.c_str() ) ) + { + io->SetFileName( path.c_str() ); + io->ReadImageInformation(); + if ( io->GetPixelType() == itk::ImageIOBase::SCALAR && io->GetNumberOfDimensions()==4) + { + switch (io->GetDimensions(3)) + { + case 6: + return true; + break; + case 15: + return true; + break; + case 28: + return true; + break; + case 45: + return true; + break; + case 66: + return true; + break; + case 91: + return true; + break; + default : + return false; + } + } + } + } + + return false; +} + +DiffusionIOMimeTypes::SHImageMimeType* DiffusionIOMimeTypes::SHImageMimeType::Clone() const +{ + return new SHImageMimeType(*this); +} + + +DiffusionIOMimeTypes::SHImageMimeType DiffusionIOMimeTypes::SH_MIMETYPE() +{ + return SHImageMimeType(); +} + +CustomMimeType DiffusionIOMimeTypes::DTI_MIMETYPE() +{ + CustomMimeType mimeType(DTI_MIMETYPE_NAME()); + std::string category = "Tensor Image"; + mimeType.SetComment("Diffusion Tensor Image"); + mimeType.SetCategory(category); + mimeType.AddExtension("dti"); + return mimeType; +} + +CustomMimeType DiffusionIOMimeTypes::ODF_MIMETYPE() +{ + CustomMimeType mimeType(ODF_MIMETYPE_NAME()); + std::string category = "ODF Image"; + mimeType.SetComment("Diffusion ODF Image"); + mimeType.SetCategory(category); + mimeType.AddExtension("odf"); + mimeType.AddExtension("qbi"); // legacy support + return mimeType; +} + // Names std::string DiffusionIOMimeTypes::FIBERBUNDLE_VTK_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".FiberBundle.vtk"; return name; } std::string DiffusionIOMimeTypes::FIBERBUNDLE_TCK_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".FiberBundle.tck"; return name; } std::string DiffusionIOMimeTypes::FIBERBUNDLE_TRK_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".FiberBundle.trk"; return name; } std::string DiffusionIOMimeTypes::FIBERBUNDLE_DICOM_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".FiberBundle.dcm"; return name; } std::string DiffusionIOMimeTypes::CONNECTOMICS_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".cnf"; return name; } std::string DiffusionIOMimeTypes::CONNECTOMICS_MATRIX_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".mat"; return name; } std::string DiffusionIOMimeTypes::CONNECTOMICS_LIST_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".txt"; return name; } std::string DiffusionIOMimeTypes::PLANARFIGURECOMPOSITE_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".pfc"; return name; } std::string DiffusionIOMimeTypes::TRACTOGRAPHYFOREST_MIMETYPE_NAME() { static std::string name = IOMimeTypes::DEFAULT_BASE_NAME() + ".rf"; return name; } +std::string DiffusionIOMimeTypes::PEAK_MIMETYPE_NAME() +{ + static std::string name ="ODF_PEAKS"; + return name; +} + +std::string DiffusionIOMimeTypes::DWI_NRRD_MIMETYPE_NAME() +{ + static std::string name = "DWI_NRRD"; + return name; +} + +std::string DiffusionIOMimeTypes::DWI_NIFTI_MIMETYPE_NAME() +{ + static std::string name = "DWI_NIFTI"; + return name; +} + +std::string DiffusionIOMimeTypes::DWI_DICOM_MIMETYPE_NAME() +{ + static std::string name = "DWI_DICOM"; + return name; +} + +std::string DiffusionIOMimeTypes::DTI_MIMETYPE_NAME() +{ + static std::string name = "DT_IMAGE"; + return name; +} + +std::string DiffusionIOMimeTypes::ODF_MIMETYPE_NAME() +{ + static std::string name = "ODF_IMAGE"; + return name; +} + +std::string DiffusionIOMimeTypes::SH_MIMETYPE_NAME() +{ + static std::string name = "SH_IMAGE"; + return name; +} + // Descriptions std::string DiffusionIOMimeTypes::FIBERBUNDLE_MIMETYPE_DESCRIPTION() { static std::string description = "Fiberbundles"; return description; } std::string DiffusionIOMimeTypes::CONNECTOMICS_MIMETYPE_DESCRIPTION() { static std::string description = "Connectomics Networks"; return description; } std::string DiffusionIOMimeTypes::PLANARFIGURECOMPOSITE_MIMETYPE_DESCRIPTION() { static std::string description = "Planar Figure Composite"; return description; } std::string DiffusionIOMimeTypes::TRACTOGRAPHYFOREST_MIMETYPE_DESCRIPTION() { static std::string description = "Tractography Forest"; return description; } +std::string DiffusionIOMimeTypes::PEAK_MIMETYPE_DESCRIPTION() +{ + static std::string description = "Peak Image"; + return description; +} + +std::string DiffusionIOMimeTypes::DWI_NRRD_MIMETYPE_DESCRIPTION() +{ + static std::string description = "Diffusion Weighted Images"; + return description; +} + +std::string DiffusionIOMimeTypes::DWI_NIFTI_MIMETYPE_DESCRIPTION() +{ + static std::string description = "Diffusion Weighted Images"; + return description; +} + +std::string DiffusionIOMimeTypes::DWI_DICOM_MIMETYPE_DESCRIPTION() +{ + static std::string description = "Diffusion Weighted Images"; + return description; +} + +std::string DiffusionIOMimeTypes::DTI_MIMETYPE_DESCRIPTION() +{ + static std::string description = "Diffusion Tensor Image"; + return description; +} + +std::string DiffusionIOMimeTypes::ODF_MIMETYPE_DESCRIPTION() +{ + static std::string description = "ODF Image"; + return description; +} + +std::string DiffusionIOMimeTypes::SH_MIMETYPE_DESCRIPTION() +{ + static std::string description = "SH Image"; + return description; +} + } diff --git a/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.h b/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.h index 4868e62..647c593 100644 --- a/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.h +++ b/Modules/DiffusionIO/mitkDiffusionIOMimeTypes.h @@ -1,124 +1,156 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ -#ifndef MITKDIFFUSIONIOMIMETYPES_H -#define MITKDIFFUSIONIOMIMETYPES_H +#ifndef MITKDiffusionIOMimeTypes_H +#define MITKDiffusionIOMimeTypes_H #include "mitkCustomMimeType.h" - #include namespace mitk { class DiffusionIOMimeTypes { public: class DiffusionImageNrrdMimeType : public CustomMimeType { public: DiffusionImageNrrdMimeType(); bool AppliesTo(const std::string &path) const override; DiffusionImageNrrdMimeType* Clone() const override; }; class DiffusionImageNiftiMimeType : public CustomMimeType { public: DiffusionImageNiftiMimeType(); bool AppliesTo(const std::string &path) const override; DiffusionImageNiftiMimeType* Clone() const override; }; // Get all Diffusion Mime Types static std::vector Get(); + class DiffusionImageDicomMimeType : public CustomMimeType + { + public: + DiffusionImageDicomMimeType(); + bool AppliesTo(const std::string &path) const override; + DiffusionImageDicomMimeType* Clone() const override; + }; + + class PeakImageMimeType : public CustomMimeType + { + public: + PeakImageMimeType(); + bool AppliesTo(const std::string &path) const override; + PeakImageMimeType* Clone() const override; + }; + + class SHImageMimeType : public CustomMimeType + { + public: + SHImageMimeType(); + bool AppliesTo(const std::string &path) const override; + SHImageMimeType* Clone() const override; + }; + // ------------------------------ VTK formats ---------------------------------- static CustomMimeType FIBERBUNDLE_VTK_MIMETYPE(); static std::string FIBERBUNDLE_VTK_MIMETYPE_NAME(); static std::string FIBERBUNDLE_MIMETYPE_DESCRIPTION(); // ------------------------------ MRtrix formats ---------------------------------- static CustomMimeType FIBERBUNDLE_TCK_MIMETYPE(); static std::string FIBERBUNDLE_TCK_MIMETYPE_NAME(); // ------------------------------ TrackVis formats ---------------------------------- static CustomMimeType FIBERBUNDLE_TRK_MIMETYPE(); static std::string FIBERBUNDLE_TRK_MIMETYPE_NAME(); // ------------------------------ DICOM formats ---------------------------------- class FiberBundleDicomMimeType : public CustomMimeType { public: FiberBundleDicomMimeType(); bool AppliesTo(const std::string &path) const override; FiberBundleDicomMimeType* Clone() const override; }; static FiberBundleDicomMimeType FIBERBUNDLE_DICOM_MIMETYPE(); static std::string FIBERBUNDLE_DICOM_MIMETYPE_NAME(); // ------------------------- Image formats (ITK based) -------------------------- static DiffusionImageNrrdMimeType DWI_NRRD_MIMETYPE(); static DiffusionImageNiftiMimeType DWI_NIFTI_MIMETYPE(); + static DiffusionImageDicomMimeType DWI_DICOM_MIMETYPE(); + static PeakImageMimeType PEAK_MIMETYPE(); static CustomMimeType DTI_MIMETYPE(); // dti - static CustomMimeType ODF_MIMETYPE(); // qbi, odf + static CustomMimeType ODF_MIMETYPE(); // odf, qbi + static SHImageMimeType SH_MIMETYPE(); // spherical harmonics coefficients + static std::string PEAK_MIMETYPE_NAME(); static std::string DWI_NRRD_MIMETYPE_NAME(); static std::string DWI_NIFTI_MIMETYPE_NAME(); + static std::string DWI_DICOM_MIMETYPE_NAME(); static std::string DTI_MIMETYPE_NAME(); static std::string ODF_MIMETYPE_NAME(); + static std::string SH_MIMETYPE_NAME(); + static std::string PEAK_MIMETYPE_DESCRIPTION(); static std::string DWI_NRRD_MIMETYPE_DESCRIPTION(); static std::string DWI_NIFTI_MIMETYPE_DESCRIPTION(); + static std::string DWI_DICOM_MIMETYPE_DESCRIPTION(); static std::string DTI_MIMETYPE_DESCRIPTION(); static std::string ODF_MIMETYPE_DESCRIPTION(); + static std::string SH_MIMETYPE_DESCRIPTION(); // ------------------------------ MITK formats ---------------------------------- static CustomMimeType CONNECTOMICS_MIMETYPE(); // cnf static CustomMimeType CONNECTOMICS_MATRIX_MIMETYPE(); // mat static CustomMimeType CONNECTOMICS_LIST_MIMETYPE(); // txt static std::string CONNECTOMICS_MIMETYPE_NAME(); static std::string CONNECTOMICS_MATRIX_MIMETYPE_NAME(); static std::string CONNECTOMICS_LIST_MIMETYPE_NAME(); static std::string CONNECTOMICS_MIMETYPE_DESCRIPTION(); static CustomMimeType PLANARFIGURECOMPOSITE_MIMETYPE(); static std::string PLANARFIGURECOMPOSITE_MIMETYPE_NAME(); static std::string PLANARFIGURECOMPOSITE_MIMETYPE_DESCRIPTION(); static CustomMimeType TRACTOGRAPHYFOREST_MIMETYPE(); static std::string TRACTOGRAPHYFOREST_MIMETYPE_NAME(); static std::string TRACTOGRAPHYFOREST_MIMETYPE_DESCRIPTION(); private: // purposely not implemented DiffusionIOMimeTypes(); DiffusionIOMimeTypes(const DiffusionIOMimeTypes&); }; } -#endif // MITKDIFFUSIONIOMIMETYPES_H +#endif // MITKDiffusionIOMimeTypes_H diff --git a/Modules/DiffusionIO/mitkDiffusionModuleActivator.cpp b/Modules/DiffusionIO/mitkDiffusionModuleActivator.cpp index fac6fb1..363c92b 100644 --- a/Modules/DiffusionIO/mitkDiffusionModuleActivator.cpp +++ b/Modules/DiffusionIO/mitkDiffusionModuleActivator.cpp @@ -1,140 +1,204 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + #include #include #include #include "mitkDiffusionIOMimeTypes.h" namespace mitk { /** - \brief Registers services for segmentation module. + \brief Registers reader and writer services. */ class DiffusionModuleActivator : public us::ModuleActivator { public: void Load(us::ModuleContext* context) override { m_MimeTypes = mitk::DiffusionIOMimeTypes::Get(); for (std::vector::const_iterator mimeTypeIter = m_MimeTypes.begin(), iterEnd = m_MimeTypes.end(); mimeTypeIter != iterEnd; ++mimeTypeIter) { us::ServiceProperties props; mitk::CustomMimeType* mt = *mimeTypeIter; if (mt->GetName()==mitk::DiffusionIOMimeTypes::FIBERBUNDLE_VTK_MIMETYPE_NAME()) props[ us::ServiceConstants::SERVICE_RANKING() ] = -1; else if (mt->GetName()==mitk::DiffusionIOMimeTypes::FIBERBUNDLE_TRK_MIMETYPE_NAME()) props[ us::ServiceConstants::SERVICE_RANKING() ] = -2; else if (mt->GetName()==mitk::DiffusionIOMimeTypes::FIBERBUNDLE_TCK_MIMETYPE_NAME()) props[ us::ServiceConstants::SERVICE_RANKING() ] = -3; else if (mt->GetName()==mitk::DiffusionIOMimeTypes::FIBERBUNDLE_DICOM_MIMETYPE_NAME()) props[ us::ServiceConstants::SERVICE_RANKING() ] = -4; else props[ us::ServiceConstants::SERVICE_RANKING() ] = 10; context->RegisterService(*mimeTypeIter, props); } m_FiberBundleVtkReader = new FiberBundleVtkReader(); + m_FiberBundleVtkWriter = new FiberBundleVtkWriter(); m_FiberBundleTrackVisReader = new FiberBundleTrackVisReader(); + m_FiberBundleTrackVisWriter = new FiberBundleTrackVisWriter(); m_FiberBundleTckReader = new FiberBundleTckReader(); m_FiberBundleDicomReader = new FiberBundleDicomReader(); - m_ConnectomicsNetworkReader = new ConnectomicsNetworkReader(); - m_PlanarFigureCompositeReader = new PlanarFigureCompositeReader(); - m_TractographyForestReader = new TractographyForestReader(); - - m_FiberBundleVtkWriter = new FiberBundleVtkWriter(); - m_FiberBundleTrackVisWriter = new FiberBundleTrackVisWriter(); m_FiberBundleDicomWriter = new FiberBundleDicomWriter(); + + m_ConnectomicsNetworkReader = new ConnectomicsNetworkReader(); m_ConnectomicsNetworkWriter = new ConnectomicsNetworkWriter(); m_ConnectomicsNetworkCSVWriter = new ConnectomicsNetworkCSVWriter(); m_ConnectomicsNetworkMatrixWriter = new ConnectomicsNetworkMatrixWriter(); + + m_PlanarFigureCompositeReader = new PlanarFigureCompositeReader(); m_PlanarFigureCompositeWriter = new PlanarFigureCompositeWriter(); + m_TractographyForestReader = new TractographyForestReader(); m_TractographyForestWriter = new TractographyForestWriter(); + + m_DiffusionImageNrrdReader = new DiffusionImageNrrdReaderService(); + m_DiffusionImageNrrdWriter = new DiffusionImageNrrdWriterService(); + + m_DiffusionImageNiftiReader = new DiffusionImageNiftiReaderService(); + m_DiffusionImageNiftiWriter = new DiffusionImageNiftiWriterService(); + + m_DiffusionImageDicomReader = new DiffusionImageDicomReaderService(); + + m_NrrdTensorImageReader = new NrrdTensorImageReader(); + m_NrrdOdfImageReader = new NrrdOdfImageReader(); + m_PeakImageReader = new PeakImageReader(); + m_ShImageReader = new ShImageReader(); + + m_NrrdTensorImageWriter = new NrrdTensorImageWriter(); + m_NrrdOdfImageWriter = new NrrdOdfImageWriter(); + m_ShImageWriter = new ShImageWriter(); + + mitk::DiffusionPropertyHelper::SetupProperties(); } void Unload(us::ModuleContext*) override { for (unsigned int loop(0); loop < m_MimeTypes.size(); ++loop) { delete m_MimeTypes.at(loop); } delete m_FiberBundleVtkReader; delete m_FiberBundleTckReader; delete m_FiberBundleTrackVisReader; delete m_ConnectomicsNetworkReader; delete m_PlanarFigureCompositeReader; delete m_TractographyForestReader; delete m_FiberBundleDicomReader; delete m_FiberBundleDicomWriter; delete m_FiberBundleVtkWriter; delete m_FiberBundleTrackVisWriter; delete m_ConnectomicsNetworkWriter; delete m_ConnectomicsNetworkCSVWriter; delete m_ConnectomicsNetworkMatrixWriter; delete m_PlanarFigureCompositeWriter; delete m_TractographyForestWriter; + + delete m_DiffusionImageNrrdReader; + delete m_DiffusionImageNiftiReader; + delete m_DiffusionImageDicomReader; + delete m_NrrdTensorImageReader; + delete m_NrrdOdfImageReader; + delete m_PeakImageReader; + delete m_ShImageReader; + + delete m_DiffusionImageNrrdWriter; + delete m_DiffusionImageNiftiWriter; + delete m_NrrdTensorImageWriter; + delete m_NrrdOdfImageWriter; + delete m_ShImageWriter; } private: FiberBundleVtkReader * m_FiberBundleVtkReader; FiberBundleTckReader * m_FiberBundleTckReader; FiberBundleTrackVisReader * m_FiberBundleTrackVisReader; FiberBundleDicomReader * m_FiberBundleDicomReader; ConnectomicsNetworkReader * m_ConnectomicsNetworkReader; PlanarFigureCompositeReader* m_PlanarFigureCompositeReader; TractographyForestReader* m_TractographyForestReader; FiberBundleDicomWriter * m_FiberBundleDicomWriter; FiberBundleVtkWriter * m_FiberBundleVtkWriter; FiberBundleTrackVisWriter * m_FiberBundleTrackVisWriter; ConnectomicsNetworkWriter * m_ConnectomicsNetworkWriter; ConnectomicsNetworkCSVWriter * m_ConnectomicsNetworkCSVWriter; ConnectomicsNetworkMatrixWriter * m_ConnectomicsNetworkMatrixWriter; PlanarFigureCompositeWriter* m_PlanarFigureCompositeWriter; TractographyForestWriter* m_TractographyForestWriter; + DiffusionImageNrrdReaderService * m_DiffusionImageNrrdReader; + DiffusionImageNiftiReaderService * m_DiffusionImageNiftiReader; + DiffusionImageDicomReaderService * m_DiffusionImageDicomReader; + NrrdTensorImageReader * m_NrrdTensorImageReader; + NrrdOdfImageReader * m_NrrdOdfImageReader; + PeakImageReader * m_PeakImageReader; + ShImageReader * m_ShImageReader; + + DiffusionImageNrrdWriterService * m_DiffusionImageNrrdWriter; + DiffusionImageNiftiWriterService * m_DiffusionImageNiftiWriter; + NrrdTensorImageWriter * m_NrrdTensorImageWriter; + NrrdOdfImageWriter * m_NrrdOdfImageWriter; + ShImageWriter * m_ShImageWriter; + std::vector m_MimeTypes; }; } US_EXPORT_MODULE_ACTIVATOR(mitk::DiffusionModuleActivator) diff --git a/Modules/DiffusionIO/mitkFiberTrackingObjectFactory.cpp b/Modules/DiffusionIO/mitkFiberTrackingObjectFactory.cpp deleted file mode 100644 index ef3ba90..0000000 --- a/Modules/DiffusionIO/mitkFiberTrackingObjectFactory.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - -#include "mitkFiberTrackingObjectFactory.h" - - -mitk::FiberTrackingObjectFactory::FiberTrackingObjectFactory() - : CoreObjectFactoryBase() -{ -} - -mitk::FiberTrackingObjectFactory::~FiberTrackingObjectFactory() -{ -} - -mitk::Mapper::Pointer mitk::FiberTrackingObjectFactory::CreateMapper(mitk::DataNode* node, MapperSlotId id) -{ - mitk::Mapper::Pointer newMapper=nullptr; - - if ( id == mitk::BaseRenderer::Standard2D ) - { - std::string classname("FiberBundle"); - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) - { - newMapper = mitk::FiberBundleMapper2D::New(); - newMapper->SetDataNode(node); - } - else if(node->GetData() && std::string("PeakImage").compare(node->GetData()->GetNameOfClass())==0) - { - newMapper = mitk::PeakImageMapper2D::New(); - newMapper->SetDataNode(node); - } - - } - else if ( id == mitk::BaseRenderer::Standard3D ) - { - std::string classname("FiberBundle"); - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) - { - newMapper = mitk::FiberBundleMapper3D::New(); - newMapper->SetDataNode(node); - } - else if(node->GetData() && std::string("PeakImage").compare(node->GetData()->GetNameOfClass())==0) - { - newMapper = mitk::PeakImageMapper3D::New(); - newMapper->SetDataNode(node); - } - } - - return newMapper; -} - -void mitk::FiberTrackingObjectFactory::SetDefaultProperties(mitk::DataNode* node) -{ - std::string classname("FiberBundle"); - if(node->GetData() && classname.compare(node->GetData()->GetNameOfClass())==0) - { - mitk::FiberBundleMapper3D::SetDefaultProperties(node); - mitk::FiberBundleMapper2D::SetDefaultProperties(node); - } - else if (node->GetData() && std::string("PeakImage").compare(node->GetData()->GetNameOfClass())==0) - { - mitk::PeakImageMapper3D::SetDefaultProperties(node); - mitk::PeakImageMapper2D::SetDefaultProperties(node); - } -} - -const char* mitk::FiberTrackingObjectFactory::GetFileExtensions() -{ - std::string fileExtension; - this->CreateFileExtensions(m_FileExtensionsMap, fileExtension); - return fileExtension.c_str(); -} - -mitk::CoreObjectFactoryBase::MultimapType mitk::FiberTrackingObjectFactory::GetFileExtensionsMap() -{ - return m_FileExtensionsMap; -} - -const char* mitk::FiberTrackingObjectFactory::GetSaveFileExtensions() -{ - std::string fileExtension; - this->CreateFileExtensions(m_SaveFileExtensionsMap, fileExtension); - return fileExtension.c_str(); -} - -mitk::CoreObjectFactoryBase::MultimapType mitk::FiberTrackingObjectFactory::GetSaveFileExtensionsMap() -{ - return m_SaveFileExtensionsMap; -} - -void mitk::FiberTrackingObjectFactory::CreateFileExtensionsMap() -{ - -} - -void mitk::FiberTrackingObjectFactory::RegisterIOFactories() -{ -} - -struct RegisterFiberTrackingObjectFactory{ - RegisterFiberTrackingObjectFactory() - : m_Factory( mitk::FiberTrackingObjectFactory::New() ) - { - mitk::CoreObjectFactory::GetInstance()->RegisterExtraFactory( m_Factory ); - } - - ~RegisterFiberTrackingObjectFactory() - { - mitk::CoreObjectFactory::GetInstance()->UnRegisterExtraFactory( m_Factory ); - } - - mitk::FiberTrackingObjectFactory::Pointer m_Factory; -}; - -static RegisterFiberTrackingObjectFactory registerFiberTrackingObjectFactory; diff --git a/Modules/DiffusionIO/mitkFiberTrackingObjectFactory.h b/Modules/DiffusionIO/mitkFiberTrackingObjectFactory.h deleted file mode 100644 index d761bf9..0000000 --- a/Modules/DiffusionIO/mitkFiberTrackingObjectFactory.h +++ /dev/null @@ -1,68 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - -#ifndef MITKFIBERTRACKINGOBJECTFACTORY_H -#define MITKFIBERTRACKINGOBJECTFACTORY_H - -#include "mitkCoreObjectFactory.h" - -#include -#include -#include -#include -#include - -namespace mitk { - -class FiberTrackingObjectFactory : public CoreObjectFactoryBase -{ - public: - mitkClassMacro(FiberTrackingObjectFactory,CoreObjectFactoryBase) - itkFactorylessNewMacro(Self) - itkCloneMacro(Self) - - ~FiberTrackingObjectFactory() override; - - Mapper::Pointer CreateMapper(mitk::DataNode* node, MapperSlotId slotId) override; - - void SetDefaultProperties(mitk::DataNode* node) override; - - const char* GetFileExtensions() override; - - mitk::CoreObjectFactoryBase::MultimapType GetFileExtensionsMap() override; - - const char* GetSaveFileExtensions() override; - - mitk::CoreObjectFactoryBase::MultimapType GetSaveFileExtensionsMap() override; - - void RegisterIOFactories(); - -protected: - FiberTrackingObjectFactory(); - private: - void CreateFileExtensionsMap(); - std::string m_ExternalFileExtensions; - std::string m_InternalFileExtensions; - std::string m_SaveFileExtensions; - MultimapType m_FileExtensionsMap; - MultimapType m_SaveFileExtensionsMap; - -}; - -} - - -#endif // MITKFIBERTRACKINGOBJECTFACTORY_H