diff --git a/Modules/Connectomics/CMakeLists.txt b/Modules/Connectomics/CMakeLists.txt index e310934..a040900 100644 --- a/Modules/Connectomics/CMakeLists.txt +++ b/Modules/Connectomics/CMakeLists.txt @@ -1,8 +1,8 @@ MITK_CREATE_MODULE( SUBPROJECTS MITK-Diffusion INCLUDE_DIRS Algorithms Algorithms/BrainParcellation IODataStructures Rendering ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS MitkDiffusionCore MitkFiberTracking + DEPENDS MitkDiffusionCore PACKAGE_DEPENDS VTK|vtkInfovisLayout ) add_subdirectory(Testing) diff --git a/Modules/DiffusionCore/CMakeLists.txt b/Modules/DiffusionCore/CMakeLists.txt index 5affec6..55d0676 100644 --- a/Modules/DiffusionCore/CMakeLists.txt +++ b/Modules/DiffusionCore/CMakeLists.txt @@ -1,26 +1,26 @@ # 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/OdfImages IODataStructures/TensorImages IODataStructures Rendering ${CMAKE_CURRENT_BINARY_DIR} + 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 - PUBLIC VTK|vtkFiltersProgrammable OpenMP|OpenMP_CXX + 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/IODataStructures/OdfImages/mitkOdfImageSource.cpp b/Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImageSource.cpp deleted file mode 100644 index e34cd73..0000000 --- a/Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImageSource.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 "mitkOdfImageSource.h" - - -mitk::OdfImageSource::OdfImageSource() -{ - // 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::OdfImageSource::MakeOutput ( DataObjectPointerArraySizeType /*idx*/ ) -{ - return OutputImageType::New().GetPointer(); -} - - -itk::DataObject::Pointer mitk::OdfImageSource::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/IODataStructures/OdfImages/mitkOdfImageSource.h b/Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImageSource.h deleted file mode 100644 index 072bc57..0000000 --- a/Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImageSource.h +++ /dev/null @@ -1,64 +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 OdfImageSource_H_HEADER_INCLUDED_C1E7D6EC -#define OdfImageSource_H_HEADER_INCLUDED_C1E7D6EC - -#include "mitkImageSource.h" -#include "mitkOdfImage.h" -#include - -namespace mitk { - -class MITKDIFFUSIONCORE_EXPORT OdfImageSource : public ImageSource -{ -public: - - typedef mitk::OdfImage OutputImageType; - typedef OutputImageType::Pointer OutputImagePointer; - typedef SlicedData::RegionType OutputImageRegionType; - typedef itk::DataObject::Pointer DataObjectPointer; - - mitkClassMacro(OdfImageSource,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: - OdfImageSource(); - ~OdfImageSource() override {} - -}; - -} // namespace mitk - -#endif /* OdfImageSource_H_HEADER_INCLUDED_C1E7D6EC */ diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundle.cpp b/Modules/DiffusionCore/IODataStructures/mitkFiberBundle.cpp similarity index 100% rename from Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundle.cpp rename to Modules/DiffusionCore/IODataStructures/mitkFiberBundle.cpp diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundle.h b/Modules/DiffusionCore/IODataStructures/mitkFiberBundle.h similarity index 98% rename from Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundle.h rename to Modules/DiffusionCore/IODataStructures/mitkFiberBundle.h index 349c199..377f42d 100644 --- a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundle.h +++ b/Modules/DiffusionCore/IODataStructures/mitkFiberBundle.h @@ -1,214 +1,214 @@ /*=================================================================== 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 _MITK_FiberBundle_H #define _MITK_FiberBundle_H //includes for MITK datastructure #include -#include +#include #include #include #include #include #include #include //includes storing fiberdata #include #include #include #include #include #include #include #include namespace mitk { /** * \brief Base Class for Fiber Bundles; */ -class MITKFIBERTRACKING_EXPORT FiberBundle : public BaseData +class MITKDIFFUSIONCORE_EXPORT FiberBundle : public BaseData { public: typedef itk::Image ItkUcharImgType; // fiber colorcodings static const char* FIBER_ID_ARRAY; void UpdateOutputInformation() override; void SetRequestedRegionToLargestPossibleRegion() override; bool RequestedRegionIsOutsideOfTheBufferedRegion() override; bool VerifyRequestedRegion() override; void SetRequestedRegion(const itk::DataObject*) override; mitkClassMacro( FiberBundle, BaseData ) itkFactorylessNewMacro(Self) itkCloneMacro(Self) mitkNewMacro1Param(Self, vtkSmartPointer) // custom constructor // colorcoding related methods void ColorFibersByFiberWeights(bool opacity, bool normalize); void ColorFibersByCurvature(bool opacity, bool normalize); void ColorFibersByLength(bool opacity, bool normalize); void ColorFibersByScalarMap(mitk::Image::Pointer, bool opacity, bool normalize); template void ColorFibersByScalarMap(const mitk::PixelType pixelType, mitk::Image::Pointer, bool opacity, bool normalize); void ColorFibersByOrientation(); void SetFiberOpacity(vtkDoubleArray *FAValArray); void ResetFiberOpacity(); void SetFiberColors(vtkSmartPointer fiberColors); void SetFiberColors(float r, float g, float b, float alpha=255); vtkSmartPointer GetFiberColors() const { return m_FiberColors; } // fiber compression void Compress(float error = 0.0); // fiber resampling void ResampleSpline(float pointDistance=1); void ResampleSpline(float pointDistance, double tension, double continuity, double bias ); void ResampleLinear(double pointDistance=1); void ResampleToNumPoints(unsigned int targetPoints); mitk::FiberBundle::Pointer FilterByWeights(float weight_thr, bool invert=false); bool RemoveShortFibers(float lengthInMM); bool RemoveLongFibers(float lengthInMM); bool ApplyCurvatureThreshold(float minRadius, bool deleteFibers); void MirrorFibers(unsigned int axis); void RotateAroundAxis(double x, double y, double z); void TranslateFibers(double x, double y, double z); void ScaleFibers(double x, double y, double z, bool subtractCenter=true); void TransformFibers(double rx, double ry, double rz, double tx, double ty, double tz); void TransformFibers(itk::ScalableAffineTransform< mitk::ScalarType >::Pointer transform); void RemoveDir(vnl_vector_fixed dir, double threshold); template< class TType=float > void TransformPoint(itk::Point& point, itk::Matrix< TType, 3, 3>& rot, TType& tx, TType& ty, TType& tz) { mitk::Point3D center = this->GetGeometry()->GetCenter(); point[0] -= center[0]; point[1] -= center[1]; point[2] -= center[2]; point = rot*point; point[0] += center[0]+tx; point[1] += center[1]+ty; point[2] += center[2]+tz; } template< class TType=float > void TransformPoint(itk::Point& point, TType rx, TType ry, TType rz, TType tx, TType ty, TType tz) { auto rot = mitk::imv::GetRotationMatrixItk(rx, ry, rz); mitk::Point3D center = this->GetGeometry()->GetCenter(); point[0] -= center[0]; point[1] -= center[1]; point[2] -= center[2]; point = rot*point; point[0] += center[0]+tx; point[1] += center[1]+ty; point[2] += center[2]+tz; } itk::Matrix< double, 3, 3 > TransformMatrix(itk::Matrix< double, 3, 3 > m, double rx, double ry, double rz); // add/subtract fibers FiberBundle::Pointer AddBundle(FiberBundle* fib); mitk::FiberBundle::Pointer AddBundles(std::vector< mitk::FiberBundle::Pointer > fibs); FiberBundle::Pointer SubtractBundle(FiberBundle* fib); // fiber subset extraction FiberBundle::Pointer ExtractFiberSubset(DataNode *roi, DataStorage* storage); std::vector ExtractFiberIdSubset(DataNode* roi, DataStorage* storage); FiberBundle::Pointer RemoveFibersOutside(ItkUcharImgType* mask, bool invert=false); float GetOverlap(ItkUcharImgType* mask); std::tuple GetDirectionalOverlap(ItkUcharImgType* mask, mitk::PeakImage::ItkPeakImageType* peak_image); float GetNumEpFractionInMask(ItkUcharImgType* mask, bool different_label); mitk::FiberBundle::Pointer SubsampleFibers(float factor, bool random_seed); // get/set data float GetFiberLength(unsigned int index) const { return m_FiberLengths.at(index); } vtkSmartPointer GetFiberWeights() const { return m_FiberWeights; } float GetFiberWeight(unsigned int fiber) const; void SetFiberWeights(float newWeight); void SetFiberWeight(unsigned int fiber, float weight); void SetFiberWeights(vtkSmartPointer weights); void SetFiberPolyData(vtkSmartPointer, bool updateGeometry = true); vtkSmartPointer GetFiberPolyData() const; itkGetConstMacro( NumFibers, unsigned int) //itkGetMacro( FiberSampling, int) itkGetConstMacro( MinFiberLength, float ) itkGetConstMacro( MaxFiberLength, float ) itkGetConstMacro( MeanFiberLength, float ) itkGetConstMacro( MedianFiberLength, float ) itkGetConstMacro( LengthStDev, float ) itkGetConstMacro( UpdateTime2D, itk::TimeStamp ) itkGetConstMacro( UpdateTime3D, itk::TimeStamp ) void RequestUpdate2D(){ m_UpdateTime2D.Modified(); } void RequestUpdate3D(){ m_UpdateTime3D.Modified(); } void RequestUpdate(){ m_UpdateTime2D.Modified(); m_UpdateTime3D.Modified(); } unsigned int GetNumberOfPoints() const; // copy fiber bundle mitk::FiberBundle::Pointer GetDeepCopy(); // compare fiber bundles bool Equals(FiberBundle* fib, double eps=0.01); itkSetMacro( ReferenceGeometry, mitk::BaseGeometry::Pointer ) itkGetConstMacro( ReferenceGeometry, mitk::BaseGeometry::Pointer ) vtkSmartPointer GeneratePolyDataByIds(std::vector fiberIds, vtkSmartPointer weights); protected: FiberBundle( vtkPolyData* fiberPolyData = nullptr ); ~FiberBundle() override; void GenerateFiberIds(); void UpdateFiberGeometry(); void PrintSelf(std::ostream &os, itk::Indent indent) const override; private: // actual fiber container vtkSmartPointer m_FiberPolyData; // contains fiber ids vtkSmartPointer m_FiberIdDataSet; unsigned int m_NumFibers; vtkSmartPointer m_FiberColors; vtkSmartPointer m_FiberWeights; std::vector< float > m_FiberLengths; float m_MinFiberLength; float m_MaxFiberLength; float m_MeanFiberLength; float m_MedianFiberLength; float m_LengthStDev; itk::TimeStamp m_UpdateTime2D; itk::TimeStamp m_UpdateTime3D; mitk::BaseGeometry::Pointer m_ReferenceGeometry; }; } // namespace mitk #endif /* _MITK_FiberBundle_H */ diff --git a/Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImage.cpp b/Modules/DiffusionCore/IODataStructures/mitkOdfImage.cpp similarity index 100% rename from Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImage.cpp rename to Modules/DiffusionCore/IODataStructures/mitkOdfImage.cpp diff --git a/Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImage.h b/Modules/DiffusionCore/IODataStructures/mitkOdfImage.h similarity index 100% rename from Modules/DiffusionCore/IODataStructures/OdfImages/mitkOdfImage.h rename to Modules/DiffusionCore/IODataStructures/mitkOdfImage.h diff --git a/Modules/FiberTracking/IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.cpp b/Modules/DiffusionCore/IODataStructures/mitkPlanarFigureComposite.cpp similarity index 100% rename from Modules/FiberTracking/IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.cpp rename to Modules/DiffusionCore/IODataStructures/mitkPlanarFigureComposite.cpp diff --git a/Modules/FiberTracking/IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.h b/Modules/DiffusionCore/IODataStructures/mitkPlanarFigureComposite.h similarity index 93% rename from Modules/FiberTracking/IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.h rename to Modules/DiffusionCore/IODataStructures/mitkPlanarFigureComposite.h index 7487ab2..d0e7a08 100644 --- a/Modules/FiberTracking/IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.h +++ b/Modules/DiffusionCore/IODataStructures/mitkPlanarFigureComposite.h @@ -1,65 +1,65 @@ /*=================================================================== 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 _MITK_PLANARFIGURECOMPOSITE_H #define _MITK_PLANARFIGURECOMPOSITE_H #include "mitkCommon.h" #include "mitkBaseData.h" -#include +#include #include "mitkPlanarFigure.h" #include "itkVectorContainer.h" #include "mitkDataNode.h" namespace mitk { -class MITKFIBERTRACKING_EXPORT PlanarFigureComposite : public BaseData +class MITKDIFFUSIONCORE_EXPORT PlanarFigureComposite : public BaseData { public: enum OperationType { AND, OR, NOT }; mitkClassMacro(PlanarFigureComposite, BaseData) itkFactorylessNewMacro(Self) itkCloneMacro(Self) void SetRequestedRegionToLargestPossibleRegion() override; bool RequestedRegionIsOutsideOfTheBufferedRegion() override; bool VerifyRequestedRegion() override; void SetRequestedRegion(const itk::DataObject*) override; // set if this compsition is AND, OR, NOT void setOperationType(OperationType); OperationType getOperationType() const; protected: PlanarFigureComposite(); ~PlanarFigureComposite() override; PlanarFigureComposite(const Self& other); private: OperationType m_compOperation; }; } #endif diff --git a/Modules/DiffusionCore/IODataStructures/mitkShImageSource.cpp b/Modules/DiffusionCore/IODataStructures/mitkShImageSource.cpp deleted file mode 100644 index c3bc718..0000000 --- a/Modules/DiffusionCore/IODataStructures/mitkShImageSource.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 "mitkShImageSource.h" - - -mitk::ShImageSource::ShImageSource() -{ - // 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::ShImageSource::MakeOutput ( DataObjectPointerArraySizeType /*idx*/ ) -{ - return OutputImageType::New().GetPointer(); -} - - -itk::DataObject::Pointer mitk::ShImageSource::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/IODataStructures/mitkShImageSource.h b/Modules/DiffusionCore/IODataStructures/mitkShImageSource.h deleted file mode 100644 index 2db7ea8..0000000 --- a/Modules/DiffusionCore/IODataStructures/mitkShImageSource.h +++ /dev/null @@ -1,64 +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 ShImageSource_H_HEADER_INCLUDED_C1E7D6EC -#define ShImageSource_H_HEADER_INCLUDED_C1E7D6EC - -#include "mitkImageSource.h" -#include "mitkShImage.h" -#include - -namespace mitk { - -class MITKDIFFUSIONCORE_EXPORT ShImageSource : public ImageSource -{ -public: - - typedef mitk::ShImage OutputImageType; - typedef OutputImageType::Pointer OutputImagePointer; - typedef SlicedData::RegionType OutputImageRegionType; - typedef itk::DataObject::Pointer DataObjectPointer; - - mitkClassMacro(ShImageSource,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: - ShImageSource(); - ~ShImageSource() override {} - -}; - -} // namespace mitk - -#endif /* ShImageSource_H_HEADER_INCLUDED_C1E7D6EC */ diff --git a/Modules/DiffusionCore/IODataStructures/TensorImages/mitkTensorImage.cpp b/Modules/DiffusionCore/IODataStructures/mitkTensorImage.cpp similarity index 100% rename from Modules/DiffusionCore/IODataStructures/TensorImages/mitkTensorImage.cpp rename to Modules/DiffusionCore/IODataStructures/mitkTensorImage.cpp diff --git a/Modules/DiffusionCore/IODataStructures/TensorImages/mitkTensorImage.h b/Modules/DiffusionCore/IODataStructures/mitkTensorImage.h similarity index 100% rename from Modules/DiffusionCore/IODataStructures/TensorImages/mitkTensorImage.h rename to Modules/DiffusionCore/IODataStructures/mitkTensorImage.h diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkTrackvis.cpp b/Modules/DiffusionCore/IODataStructures/mitkTrackvis.cpp similarity index 100% rename from Modules/FiberTracking/IODataStructures/FiberBundle/mitkTrackvis.cpp rename to Modules/DiffusionCore/IODataStructures/mitkTrackvis.cpp diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkTrackvis.h b/Modules/DiffusionCore/IODataStructures/mitkTrackvis.h similarity index 97% rename from Modules/FiberTracking/IODataStructures/FiberBundle/mitkTrackvis.h rename to Modules/DiffusionCore/IODataStructures/mitkTrackvis.h index 513b0a5..2de10a2 100644 --- a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkTrackvis.h +++ b/Modules/DiffusionCore/IODataStructures/mitkTrackvis.h @@ -1,80 +1,80 @@ /*=================================================================== 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 _TRACKVIS #define _TRACKVIS #include #include #include #include #include #include #include #include // Structure to hold metadata of a TrackVis file // --------------------------------------------- struct TrackVis_header { char id_string[6]; short int dim[3]; float voxel_size[3]; float origin[3]; short int n_scalars; char scalar_name[10][20]; short int n_properties; char property_name[10][20]; char reserved[508]; char voxel_order[4]; char pad2[4]; float image_orientation_patient[6]; char pad1[2]; unsigned char invert_x; unsigned char invert_y; unsigned char invert_z; unsigned char swap_xy; unsigned char swap_yz; unsigned char swap_zx; int n_count; int version; int hdr_size; }; // Class to handle TrackVis files. // ------------------------------- -class MITKFIBERTRACKING_EXPORT TrackVisFiberReader +class MITKDIFFUSIONCORE_EXPORT TrackVisFiberReader { private: std::string m_Filename; FILE* m_FilePointer; public: TrackVis_header m_Header; short create(std::string m_Filename, const mitk::FiberBundle* fib, bool lps); short open(std::string m_Filename ); short read( mitk::FiberBundle* fib ); short append(const mitk::FiberBundle* fib ); void writeHdr(); void updateTotal( int totFibers ); void close(); bool IsTransformValid(); TrackVisFiberReader(); ~TrackVisFiberReader(); }; #endif diff --git a/Modules/FiberTracking/IODataStructures/mitkTractographyForest.cpp b/Modules/DiffusionCore/IODataStructures/mitkTractographyForest.cpp similarity index 100% rename from Modules/FiberTracking/IODataStructures/mitkTractographyForest.cpp rename to Modules/DiffusionCore/IODataStructures/mitkTractographyForest.cpp diff --git a/Modules/FiberTracking/IODataStructures/mitkTractographyForest.h b/Modules/DiffusionCore/IODataStructures/mitkTractographyForest.h similarity index 95% rename from Modules/FiberTracking/IODataStructures/mitkTractographyForest.h rename to Modules/DiffusionCore/IODataStructures/mitkTractographyForest.h index e004f40..81fa7f1 100644 --- a/Modules/FiberTracking/IODataStructures/mitkTractographyForest.h +++ b/Modules/DiffusionCore/IODataStructures/mitkTractographyForest.h @@ -1,72 +1,72 @@ /*=================================================================== 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 _MITK_TractographyForest_H #define _MITK_TractographyForest_H #include -#include +#include #undef DIFFERENCE #define VIGRA_STATIC_LIB #include namespace mitk { /** * \brief Class containing random forest datastructures used for fiber tractography; */ -class MITKFIBERTRACKING_EXPORT TractographyForest : public BaseData +class MITKDIFFUSIONCORE_EXPORT TractographyForest : public BaseData { public: void UpdateOutputInformation() override; void SetRequestedRegionToLargestPossibleRegion() override; bool RequestedRegionIsOutsideOfTheBufferedRegion() override; bool VerifyRequestedRegion() override; void SetRequestedRegion(const itk::DataObject*) override; mitkClassMacro( TractographyForest, BaseData ) itkFactorylessNewMacro(Self) itkCloneMacro(Self) mitkNewMacro1Param(Self, std::shared_ptr< vigra::RandomForest >) // custom constructor int GetNumFeatures() const; int GetNumTrees() const; int GetNumClasses() const; int GetMaxTreeDepth() const; int IndexToClassLabel(int idx) const; bool HasForest() const; void PredictProbabilities(vigra::MultiArray<2, float>& features, vigra::MultiArray<2, float>& probabilities) const; std::shared_ptr< const vigra::RandomForest > GetForest() const { return m_Forest; } protected: TractographyForest( std::shared_ptr< vigra::RandomForest > forest = nullptr ); ~TractographyForest() override; void PrintSelf(std::ostream &os, itk::Indent indent) const override; private: std::shared_ptr< vigra::RandomForest > m_Forest; ///< random forest classifier }; } // namespace mitk #endif /* _MITK_TractographyForest_H */ diff --git a/Modules/DiffusionCore/files.cmake b/Modules/DiffusionCore/files.cmake index c0278c8..7895686 100644 --- a/Modules/DiffusionCore/files.cmake +++ b/Modules/DiffusionCore/files.cmake @@ -1,164 +1,166 @@ set(CPP_FILES # DicomImport # DicomImport/mitkGroupDiffusionHeadersFilter.cpp DicomImport/mitkDicomDiffusionImageHeaderReader.cpp DicomImport/mitkGEDicomDiffusionImageHeaderReader.cpp DicomImport/mitkPhilipsDicomDiffusionImageHeaderReader.cpp DicomImport/mitkSiemensDicomDiffusionImageHeaderReader.cpp DicomImport/mitkSiemensMosaicDicomDiffusionImageHeaderReader.cpp DicomImport/mitkDiffusionDICOMFileReader.cpp DicomImport/mitkDiffusionHeaderDICOMFileReader.cpp DicomImport/mitkDiffusionHeaderSiemensDICOMFileReader.cpp DicomImport/mitkDiffusionHeaderSiemensDICOMFileHelper.cpp DicomImport/mitkDiffusionHeaderSiemensMosaicDICOMFileReader.cpp DicomImport/mitkDiffusionHeaderGEDICOMFileReader.cpp DicomImport/mitkDiffusionHeaderPhilipsDICOMFileReader.cpp # DataStructures -> DWI IODataStructures/DiffusionWeightedImages/mitkDiffusionImageHeaderInformation.cpp IODataStructures/DiffusionWeightedImages/mitkDiffusionImageCorrectionFilter.cpp IODataStructures/DiffusionWeightedImages/mitkDiffusionImageCreationFilter.cpp # Properties IODataStructures/Properties/mitkBValueMapProperty.cpp IODataStructures/Properties/mitkGradientDirectionsProperty.cpp IODataStructures/Properties/mitkMeasurementFrameProperty.cpp IODataStructures/Properties/mitkDiffusionPropertyHelper.cpp IODataStructures/Properties/mitkNodePredicateIsDWI.cpp # Serializer IODataStructures/Properties/mitkBValueMapPropertySerializer.cpp IODataStructures/Properties/mitkGradientDirectionsPropertySerializer.cpp IODataStructures/Properties/mitkMeasurementFramePropertySerializer.cpp - # DataStructures -> Odf - IODataStructures/OdfImages/mitkOdfImageSource.cpp - IODataStructures/OdfImages/mitkOdfImage.cpp + IODataStructures/mitkOdfImage.cpp IODataStructures/mitkShImage.cpp - IODataStructures/mitkShImageSource.cpp - - # DataStructures -> Tensor - IODataStructures/TensorImages/mitkTensorImage.cpp - - # DataStructures -> Peaks + IODataStructures/mitkTensorImage.cpp IODataStructures/mitkPeakImage.cpp + IODataStructures/mitkFiberBundle.cpp + IODataStructures/mitkTrackvis.cpp + IODataStructures/mitkPlanarFigureComposite.cpp + IODataStructures/mitkTractographyForest.cpp + Rendering/vtkMaskedProgrammableGlyphFilter.cpp Rendering/mitkVectorImageVtkGlyphMapper3D.cpp Rendering/vtkOdfSource.cxx Rendering/vtkThickPlane.cxx Rendering/mitkOdfNormalizationMethodProperty.cpp Rendering/mitkOdfScaleByProperty.cpp # Algorithms Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.cpp Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.cpp Algorithms/itkDwiGradientLengthCorrectionFilter.cpp # Registration Algorithms & Co. Algorithms/Registration/mitkRegistrationWrapper.cpp Algorithms/Registration/mitkPyramidImageRegistrationMethod.cpp # Algorithms/Registration/mitkRegistrationMethodITK4.cpp Algorithms/Registration/mitkDWIHeadMotionCorrectionFilter.cpp # MultishellProcessing Algorithms/Reconstruction/MultishellProcessing/itkADCAverageFunctor.cpp Algorithms/Reconstruction/MultishellProcessing/itkADCFitFunctor.cpp Algorithms/Reconstruction/MultishellProcessing/itkKurtosisFitFunctor.cpp Algorithms/Reconstruction/MultishellProcessing/itkBiExpFitFunctor.cpp # Function Collection mitkDiffusionFunctionCollection.cpp ) set(H_FILES # function Collection mitkDiffusionFunctionCollection.h # Rendering Rendering/mitkOdfVtkMapper2D.h # Reconstruction Algorithms/Reconstruction/itkDiffusionQballReconstructionImageFilter.h Algorithms/Reconstruction/mitkTeemDiffusionTensor3DReconstructionImageFilter.h Algorithms/Reconstruction/itkAnalyticalDiffusionQballReconstructionImageFilter.h Algorithms/Reconstruction/itkDiffusionMultiShellQballReconstructionImageFilter.h Algorithms/Reconstruction/itkPointShell.h Algorithms/Reconstruction/itkOrientationDistributionFunction.h Algorithms/Reconstruction/itkDiffusionIntravoxelIncoherentMotionReconstructionImageFilter.h Algorithms/Reconstruction/itkDiffusionKurtosisReconstructionImageFilter.h Algorithms/Reconstruction/itkBallAndSticksImageFilter.h Algorithms/Reconstruction/itkMultiTensorImageFilter.h # Fitting functions Algorithms/Reconstruction/FittingFunctions/mitkAbstractFitter.h Algorithms/Reconstruction/FittingFunctions/mitkMultiTensorFitter.h Algorithms/Reconstruction/FittingFunctions/mitkBallStickFitter.h # MultishellProcessing Algorithms/Reconstruction/MultishellProcessing/itkRadialMultishellToSingleshellImageFilter.h Algorithms/Reconstruction/MultishellProcessing/itkDWIVoxelFunctor.h Algorithms/Reconstruction/MultishellProcessing/itkADCAverageFunctor.h Algorithms/Reconstruction/MultishellProcessing/itkKurtosisFitFunctor.h Algorithms/Reconstruction/MultishellProcessing/itkBiExpFitFunctor.h Algorithms/Reconstruction/MultishellProcessing/itkADCFitFunctor.h - # Properties + IODataStructures/mitkFiberBundle.h + IODataStructures/mitkTrackvis.h + IODataStructures/mitkPlanarFigureComposite.h + IODataStructures/mitkTractographyForest.h + IODataStructures/Properties/mitkBValueMapProperty.h IODataStructures/Properties/mitkGradientDirectionsProperty.h IODataStructures/Properties/mitkMeasurementFrameProperty.h IODataStructures/Properties/mitkDiffusionPropertyHelper.h IODataStructures/DiffusionWeightedImages/mitkDiffusionImageTransformedCreationFilter.h # Algorithms Algorithms/itkDiffusionOdfGeneralizedFaImageFilter.h Algorithms/itkDiffusionOdfPrepareVisualizationImageFilter.h Algorithms/itkElectrostaticRepulsionDiffusionGradientReductionFilter.h Algorithms/itkTensorDerivedMeasurementsFilter.h Algorithms/itkBrainMaskExtractionImageFilter.h Algorithms/itkB0ImageExtractionImageFilter.h Algorithms/itkB0ImageExtractionToSeparateImageFilter.h Algorithms/itkTensorImageToDiffusionImageFilter.h Algorithms/itkTensorToL2NormImageFilter.h Algorithms/itkGaussianInterpolateImageFunction.h Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.h Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.h Algorithms/itkDiffusionTensorPrincipalDirectionImageFilter.h Algorithms/itkCartesianToPolarVectorImageFilter.h Algorithms/itkPolarToCartesianVectorImageFilter.h Algorithms/itkDistanceMapFilter.h Algorithms/itkResidualImageFilter.h Algorithms/itkExtractChannelFromRgbaImageFilter.h Algorithms/itkTensorReconstructionWithEigenvalueCorrectionFilter.h Algorithms/itkMergeDiffusionImagesFilter.h Algorithms/itkShCoefficientImageImporter.h Algorithms/itkShCoefficientImageExporter.h Algorithms/itkOdfMaximaExtractionFilter.h Algorithms/itkResampleDwiImageFilter.h Algorithms/itkDwiGradientLengthCorrectionFilter.h Algorithms/itkAdcImageFilter.h Algorithms/itkDwiNormilzationFilter.h Algorithms/itkSplitDWImageFilter.h Algorithms/itkRemoveDwiChannelFilter.h Algorithms/itkExtractDwiChannelFilter.h Algorithms/itkFlipPeaksFilter.h Algorithms/itkShToOdfImageFilter.h Algorithms/itkFourDToVectorImageFilter.h Algorithms/itkVectorImageToFourDImageFilter.h Algorithms/Registration/mitkDWIHeadMotionCorrectionFilter.h Algorithms/itkNonLocalMeansDenoisingFilter.h Algorithms/itkVectorImageToImageFilter.h Algorithms/itkSplitVectorImageFilter.h Algorithms/itkRegularizedIVIMLocalVariationImageFilter.h Algorithms/itkRegularizedIVIMReconstructionFilter.h Algorithms/itkRegularizedIVIMReconstructionSingleIteration.h ) set( TOOL_FILES ) diff --git a/Modules/DiffusionIO/CMakeLists.txt b/Modules/DiffusionIO/CMakeLists.txt index f38cfad..7b10990 100644 --- a/Modules/DiffusionIO/CMakeLists.txt +++ b/Modules/DiffusionIO/CMakeLists.txt @@ -1,8 +1,8 @@ MITK_CREATE_MODULE( SUBPROJECTS MITK-Diffusion INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS MitkConnectomics MitkFiberTracking + DEPENDS MitkConnectomics MitkDiffusionCore AUTOLOAD_WITH MitkCore PACKAGE_DEPENDS PUBLIC DCMTK ) diff --git a/Modules/FiberTracking/CMakeLists.txt b/Modules/FiberTracking/CMakeLists.txt index af90880..37a846f 100644 --- a/Modules/FiberTracking/CMakeLists.txt +++ b/Modules/FiberTracking/CMakeLists.txt @@ -1,47 +1,46 @@ set(_module_deps MitkDiffusionCore MitkGraphAlgorithms MitkCLVigraRandomForest) mitk_check_module_dependencies( MODULES ${_module_deps} MISSING_DEPENDENCIES_VAR _missing_deps ) if(NOT _missing_deps) set(lut_url http://mitk.org/download/data/FibertrackingLUT.tar.gz) set(lut_tarball ${CMAKE_CURRENT_BINARY_DIR}/FibertrackingLUT.tar.gz) file(DOWNLOAD ${lut_url} ${lut_tarball} EXPECTED_MD5 38ecb6d4a826c9ebb0f4965eb9aeee44 TIMEOUT 60 STATUS status SHOW_PROGRESS ) list(GET status 0 status_code) list(GET status 1 status_msg) if(NOT status_code EQUAL 0) message(SEND_ERROR "${status_msg} (error code ${status_code})") endif() file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Resources) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ../FibertrackingLUT.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Resources RESULT_VARIABLE result ERROR_VARIABLE err_msg) if(result) message(SEND_ERROR "Unpacking FibertrackingLUT.tar.gz failed: ${err_msg}") endif() endif() MITK_CREATE_MODULE( SUBPROJECTS MITK-Diffusion - INCLUDE_DIRS Algorithms Algorithms/TrackingHandlers Algorithms/ClusteringMetrics Algorithms/GibbsTracking Algorithms/StochasticTracking IODataStructures IODataStructures/FiberBundle IODataStructures/PlanarFigureComposite ${CMAKE_CURRENT_BINARY_DIR} + INCLUDE_DIRS Algorithms Algorithms/TrackingHandlers Algorithms/ClusteringMetrics Algorithms/GibbsTracking Algorithms/StochasticTracking IODataStructures ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${_module_deps} - PACKAGE_DEPENDS PUBLIC ITK|ITKFFT ITK|ITKDiffusionTensorImage Vigra HDF5 OpenMP|OpenMP_CXX ) if(MODULE_IS_ENABLED) add_subdirectory(Testing) endif() diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleSource.cpp b/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleSource.cpp deleted file mode 100644 index 15dbbee..0000000 --- a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleSource.cpp +++ /dev/null @@ -1,34 +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 "mitkOdfImageSource.h" - - -mitk::OdfImageSource::OdfImageSource() -{ - // 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()); -} - -mitk::OdfImageSource::DataObjectPointer mitk::OdfImageSource::MakeOutput( unsigned int /*idx*/ ) -{ - return static_cast(OutputImageType::New().GetPointer()); -} diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleSource.h b/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleSource.h deleted file mode 100644 index 7993aa5..0000000 --- a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleSource.h +++ /dev/null @@ -1,52 +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 OdfImageSource_H_HEADER_INCLUDED_C1E7D6EC -#define OdfImageSource_H_HEADER_INCLUDED_C1E7D6EC - -#include "mitkImageSource.h" -#include "mitkOdfImage.h" - -//NOTE>umbenennen .. ableiten von DataSource - - -namespace mitk { - -class OdfImageSource : public ImageSource -{ -public: - - typedef mitk::OdfImage OutputImageType; - typedef OutputImageType::Pointer OutputImagePointer; - typedef SlicedData::RegionType OutputImageRegionType; - typedef itk::DataObject::Pointer DataObjectPointer; - - mitkClassMacro(OdfImageSource,ImageSource); - itkFactorylessNewMacro(Self) - itkCloneMacro(Self) - - virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx); - -protected: - OdfImageSource(); - virtual ~OdfImageSource() {} - -}; - -} // namespace mitk - -#endif /* OdfImageSource_H_HEADER_INCLUDED_C1E7D6EC */ diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleThreadMonitor.cpp b/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleThreadMonitor.cpp deleted file mode 100644 index 3aa3cbf..0000000 --- a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleThreadMonitor.cpp +++ /dev/null @@ -1,254 +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 "mitkFiberBundleThreadMonitor.h" - - - -mitk::FiberBundleThreadMonitor::FiberBundleThreadMonitor() -: m_monitorBracketOpen("[") -, m_monitorBracketClose("]") -, m_monitorHeading("Monitoring Fiberprocessing Threads") -, m_monitorMask("Thread Status:\nStarted: Finished: Terminated:") -, m_monitorStatus("_initialized") -, m_monitorStarted(0) -, m_monitorFinished(0) -, m_monitorTerminated(0) -{ - m_monitorBracketOpenPosition[0] = 0; - m_monitorBracketOpenPosition[1] = 0; - m_monitorBracketClosePosition[0] = 0; - m_monitorBracketClosePosition[1] = 0; - m_monitorHeadingPosition[0] = 0; - m_monitorHeadingPosition[1] = 0; - m_monitorMaskPosition[0] = 0; - m_monitorMaskPosition[1] = 0; - m_monitorStatusPosition[0] = 0; - m_monitorStatusPosition[1] = 0; - m_monitorStartedPosition[0] = 0; - m_monitorStartedPosition[1] = 0; - m_monitorFinishedPosition[0] = 0; - m_monitorFinishedPosition[1] = 0; - m_monitorTerminatedPosition[0] = 0; - m_monitorTerminatedPosition[1] = 0; - - - m_monitorHeadingOpacity = 0; - m_monitorMaskOpacity = 0; - m_monitorTerminatedOpacity = 0; - m_monitorFinishedOpacity = 0; - m_monitorStartedOpacity = 0; - m_monitorStatusOpacity = 0; -} - -mitk::FiberBundleThreadMonitor::~FiberBundleThreadMonitor() -{ - -} - - -QString mitk::FiberBundleThreadMonitor::getBracketOpen(){ - return m_monitorBracketOpen; -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getBracketOpenPosition(){ - return m_monitorBracketOpenPosition; -} -void mitk::FiberBundleThreadMonitor::setBracketOpenPosition(mitk::Point2D pnt){ - m_monitorBracketOpenPosition[0] = pnt[0]; - m_monitorBracketOpenPosition[1] = pnt[1]; -} - - - - -QString mitk::FiberBundleThreadMonitor::getBracketClose(){ - return m_monitorBracketClose; -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getBracketClosePosition(){ - return m_monitorBracketClosePosition; -} -void mitk::FiberBundleThreadMonitor::setBracketClosePosition(mitk::Point2D pnt){ - m_monitorBracketClosePosition[0] = pnt[0]; - m_monitorBracketClosePosition[1] = pnt[1]; -} - - - -QString mitk::FiberBundleThreadMonitor::getHeading(){ - return m_monitorHeading; -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getHeadingPosition(){ - return m_monitorHeadingPosition; -} -void mitk::FiberBundleThreadMonitor::setHeadingPosition(mitk::Point2D pnt){ - m_monitorHeadingPosition[0] = pnt[0]; - m_monitorHeadingPosition[1] = pnt[1]; -} -int mitk::FiberBundleThreadMonitor::getHeadingOpacity(){ - return m_monitorHeadingOpacity; -} -void mitk::FiberBundleThreadMonitor::setHeadingOpacity(int opacity){ - m_monitorHeadingOpacity = opacity; -} - - - - -QString mitk::FiberBundleThreadMonitor::getMask(){ - return m_monitorMask; -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getMaskPosition(){ - return m_monitorMaskPosition; -} -void mitk::FiberBundleThreadMonitor::setMaskPosition(mitk::Point2D pnt){ - m_monitorMaskPosition[0] = pnt[0]; - m_monitorMaskPosition[1] = pnt[1]; -} -int mitk::FiberBundleThreadMonitor::getMaskOpacity(){ - return m_monitorMaskOpacity; -} -void mitk::FiberBundleThreadMonitor::setMaskOpacity(int opacity){ - m_monitorMaskOpacity = opacity; -} - - - - - -QString mitk::FiberBundleThreadMonitor::getStatus(){ - return m_monitorStatus; -} -void mitk::FiberBundleThreadMonitor::setStatus(QString status){ - m_statusMutex.lock(); - m_monitorStatus = status; - m_statusMutex.unlock(); -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getStatusPosition(){ - return m_monitorStatusPosition; -} -void mitk::FiberBundleThreadMonitor::setStatusPosition(mitk::Point2D pnt){ - m_monitorStatusPosition[0] = pnt[0]; - m_monitorStatusPosition[1] = pnt[1]; -} -int mitk::FiberBundleThreadMonitor::getStatusOpacity(){ - return m_monitorStatusOpacity; -} -void mitk::FiberBundleThreadMonitor::setStatusOpacity(int opacity){ - m_monitorStatusOpacity = opacity; -} - - -int mitk::FiberBundleThreadMonitor::getStarted(){ - return m_monitorStarted; -} -/* is thread safe :) */ -void mitk::FiberBundleThreadMonitor::setStarted(int val) -{ - m_startedMutex.lock(); - m_monitorStarted = val; - m_startedMutex.unlock(); -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getStartedPosition(){ - return m_monitorStartedPosition; -} -void mitk::FiberBundleThreadMonitor::setStartedPosition(mitk::Point2D pnt){ - m_monitorStartedPosition[0] = pnt[0]; - m_monitorStartedPosition[1] = pnt[1]; -} -int mitk::FiberBundleThreadMonitor::getStartedOpacity(){ - return m_monitorStartedOpacity; -} -void mitk::FiberBundleThreadMonitor::setStartedOpacity(int opacity){ - m_monitorStartedOpacity = opacity; -} - - - - -int mitk::FiberBundleThreadMonitor::getFinished(){ - return m_monitorFinished; -} -void mitk::FiberBundleThreadMonitor::setFinished(int val) -{ - m_finishedMutex.lock(); - m_monitorFinished = val; - m_finishedMutex.unlock(); -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getFinishedPosition(){ - return m_monitorFinishedPosition; -} -void mitk::FiberBundleThreadMonitor::setFinishedPosition(mitk::Point2D pnt){ - m_monitorFinishedPosition[0] = pnt[0]; - m_monitorFinishedPosition[1] = pnt[1]; -} -int mitk::FiberBundleThreadMonitor::getFinishedOpacity(){ - return m_monitorFinishedOpacity; -} -void mitk::FiberBundleThreadMonitor::setFinishedOpacity(int opacity){ - m_monitorFinishedOpacity = opacity; -} - - - - -int mitk::FiberBundleThreadMonitor::getTerminated(){ - return m_monitorTerminated; -} -void mitk::FiberBundleThreadMonitor::setTerminated(int val) -{ - m_terminatedMutex.lock(); - m_monitorTerminated = val; - m_terminatedMutex.unlock(); -} -mitk::Point2D mitk::FiberBundleThreadMonitor::getTerminatedPosition(){ - return m_monitorTerminatedPosition; -} -void mitk::FiberBundleThreadMonitor::setTerminatedPosition(mitk::Point2D pnt){ - m_monitorTerminatedPosition[0] = pnt[0]; - m_monitorTerminatedPosition[1] = pnt[1]; -} -int mitk::FiberBundleThreadMonitor::getTerminatedOpacity(){ - return m_monitorTerminatedOpacity; -} -void mitk::FiberBundleThreadMonitor::setTerminatedOpacity(int opacity){ - m_monitorTerminatedOpacity = opacity; -} - - - -/* ESSENTIAL IMPLEMENTATION OF SUPERCLASS METHODS */ -void mitk::FiberBundleThreadMonitor::UpdateOutputInformation() -{ - -} -void mitk::FiberBundleThreadMonitor::SetRequestedRegionToLargestPossibleRegion() -{ - -} -bool mitk::FiberBundleThreadMonitor::RequestedRegionIsOutsideOfTheBufferedRegion() -{ - return false; -} -bool mitk::FiberBundleThreadMonitor::VerifyRequestedRegion() -{ - return true; -} -void mitk::FiberBundleThreadMonitor::SetRequestedRegion(const itk::DataObject *data ) -{ - -} - diff --git a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleThreadMonitor.h b/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleThreadMonitor.h deleted file mode 100644 index ba718a9..0000000 --- a/Modules/FiberTracking/IODataStructures/FiberBundle/mitkFiberBundleThreadMonitor.h +++ /dev/null @@ -1,154 +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 _MITK_FiberBundleThreadMonitor_H -#define _MITK_FiberBundleThreadMonitor_H - -//includes for MITK datastructure -#include "mitkBaseData.h" -#include -#include - -#include - - -namespace mitk { - - /** - * \brief Base Class for Fiber Bundles; */ - class MITKFIBERTRACKING_EXPORT FiberBundleThreadMonitor : public BaseData - { - - public: - - // ======virtual methods must have====== - virtual void UpdateOutputInformation(); - virtual void SetRequestedRegionToLargestPossibleRegion(); - virtual bool RequestedRegionIsOutsideOfTheBufferedRegion(); - virtual bool VerifyRequestedRegion(); - virtual void SetRequestedRegion(const itk::DataObject *data ); - //======================================= - - mitkClassMacro( FiberBundleThreadMonitor, BaseData ); - itkFactorylessNewMacro(Self) - itkCloneMacro(Self) - - - void setTextL1(QString); - QString getTextL1(); - - QString getBracketOpen(); - mitk::Point2D getBracketOpenPosition(); - void setBracketOpenPosition(mitk::Point2D); - int getBracketOpenOpacity(); // range 0 - 10, multiplicationfactor 0.1 (in mapper) - - QString getBracketClose(); - mitk::Point2D getBracketClosePosition(); - void setBracketClosePosition(mitk::Point2D); - int getBracketCloseOpacity(); // range 0 - 10, multiplicationfactor 0.1 (in mapper) - - QString getHeading(); - mitk::Point2D getHeadingPosition(); - void setHeadingPosition(mitk::Point2D); - int getHeadingOpacity(); // range 0 - 10, multiplicationfactor 0.1 (in mapper) - void setHeadingOpacity(int); - - QString getMask(); - mitk::Point2D getMaskPosition(); - void setMaskPosition(mitk::Point2D); - int getMaskOpacity(); // multiplicationfactor 0.1 (in mapper) - void setMaskOpacity(int); - - QString getStatus(); - void setStatus(QString); - mitk::Point2D getStatusPosition(); - void setStatusPosition(mitk::Point2D); - int getStatusOpacity(); // multiplicationfactor 0.1 (in mapper) - void setStatusOpacity(int); - - int getStarted(); - void setStarted(int); - mitk::Point2D getStartedPosition(); - void setStartedPosition(mitk::Point2D); - int getStartedOpacity(); // multiplicationfactor 0.1 (in mapper) - void setStartedOpacity(int); - - int getFinished(); - void setFinished(int); - mitk::Point2D getFinishedPosition(); - void setFinishedPosition(mitk::Point2D); - int getFinishedOpacity(); // multiplicationfactor 0.1 (in mapper) - void setFinishedOpacity(int); - - int getTerminated(); - void setTerminated(int); - mitk::Point2D getTerminatedPosition(); - void setTerminatedPosition(mitk::Point2D); - int getTerminatedOpacity(); // multiplicationfactor 0.1 (in mapper) - void setTerminatedOpacity(int); - - - protected: - FiberBundleThreadMonitor(); - virtual ~FiberBundleThreadMonitor(); - - - private: - QString m_monitorBracketOpen; - mitk::Point2D m_monitorBracketOpenPosition; - - QString m_monitorBracketClose; - mitk::Point2D m_monitorBracketClosePosition; - - QString m_monitorHeading; - mitk::Point2D m_monitorHeadingPosition; - int m_monitorHeadingOpacity; - - QString m_monitorMask; - mitk::Point2D m_monitorMaskPosition; - int m_monitorMaskOpacity; - - QString m_monitorStatus; - mitk::Point2D m_monitorStatusPosition; - int m_monitorStatusOpacity; - - int m_monitorStarted; - mitk::Point2D m_monitorStartedPosition; - int m_monitorStartedOpacity; - - int m_monitorFinished; - mitk::Point2D m_monitorFinishedPosition; - int m_monitorFinishedOpacity; - - int m_monitorTerminated; - mitk::Point2D m_monitorTerminatedPosition; - int m_monitorTerminatedOpacity; - - QMutex m_startedMutex; - QMutex m_finishedMutex; - QMutex m_terminatedMutex; - QMutex m_statusMutex; - - - - - - }; - -} // namespace mitk - -#endif /* _MITK_FiberBundle_H */ diff --git a/Modules/FiberTracking/files.cmake b/Modules/FiberTracking/files.cmake index d98038c..be71c70 100644 --- a/Modules/FiberTracking/files.cmake +++ b/Modules/FiberTracking/files.cmake @@ -1,82 +1,70 @@ set(CPP_FILES - - mitkFiberTrackingModuleActivator.cpp - - ## IO datastructures - IODataStructures/FiberBundle/mitkFiberBundle.cpp - IODataStructures/FiberBundle/mitkTrackvis.cpp - IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.cpp - IODataStructures/mitkTractographyForest.cpp - IODataStructures/mitkStreamlineTractographyParameters.cpp + mitkStreamlineTractographyParameters.cpp # Tractography Algorithms/GibbsTracking/mitkParticleGrid.cpp Algorithms/GibbsTracking/mitkMetropolisHastingsSampler.cpp Algorithms/GibbsTracking/mitkEnergyComputer.cpp Algorithms/GibbsTracking/mitkGibbsEnergyComputer.cpp Algorithms/GibbsTracking/mitkFiberBuilder.cpp Algorithms/GibbsTracking/mitkSphereInterpolator.cpp Algorithms/itkStreamlineTrackingFilter.cpp Algorithms/TrackingHandlers/mitkTrackingDataHandler.cpp Algorithms/TrackingHandlers/mitkTrackingHandlerTensor.cpp Algorithms/TrackingHandlers/mitkTrackingHandlerPeaks.cpp Algorithms/TrackingHandlers/mitkTrackingHandlerOdf.cpp ) set(H_FILES - # DataStructures -> FiberBundle - IODataStructures/FiberBundle/mitkFiberBundle.h - IODataStructures/FiberBundle/mitkTrackvis.h - IODataStructures/mitkTractographyForest.h - IODataStructures/mitkStreamlineTractographyParameters.h + mitkStreamlineTractographyParameters.h # Algorithms Algorithms/itkTractDensityImageFilter.h Algorithms/itkTractsToFiberEndingsImageFilter.h Algorithms/itkTractsToRgbaImageFilter.h Algorithms/itkTractsToVectorImageFilter.h Algorithms/itkEvaluateDirectionImagesFilter.h Algorithms/itkEvaluateTractogramDirectionsFilter.h Algorithms/itkFiberCurvatureFilter.h Algorithms/itkTractClusteringFilter.h Algorithms/itkTractDistanceFilter.h Algorithms/itkFiberExtractionFilter.h Algorithms/itkTdiToVolumeFractionFilter.h # Tractography Algorithms/TrackingHandlers/mitkTrackingDataHandler.h Algorithms/TrackingHandlers/mitkTrackingHandlerRandomForest.h Algorithms/TrackingHandlers/mitkTrackingHandlerTensor.h Algorithms/TrackingHandlers/mitkTrackingHandlerPeaks.h Algorithms/TrackingHandlers/mitkTrackingHandlerOdf.h Algorithms/itkGibbsTrackingFilter.h Algorithms/itkStochasticTractographyFilter.h Algorithms/GibbsTracking/mitkParticle.h Algorithms/GibbsTracking/mitkParticleGrid.h Algorithms/GibbsTracking/mitkMetropolisHastingsSampler.h Algorithms/GibbsTracking/mitkSimpSamp.h Algorithms/GibbsTracking/mitkEnergyComputer.h Algorithms/GibbsTracking/mitkGibbsEnergyComputer.h Algorithms/GibbsTracking/mitkSphereInterpolator.h Algorithms/GibbsTracking/mitkFiberBuilder.h Algorithms/itkStreamlineTrackingFilter.h # Clustering Algorithms/ClusteringMetrics/mitkClusteringMetric.h Algorithms/ClusteringMetrics/mitkClusteringMetricEuclideanMean.h Algorithms/ClusteringMetrics/mitkClusteringMetricEuclideanMax.h Algorithms/ClusteringMetrics/mitkClusteringMetricEuclideanStd.h Algorithms/ClusteringMetrics/mitkClusteringMetricAnatomic.h Algorithms/ClusteringMetrics/mitkClusteringMetricScalarMap.h Algorithms/ClusteringMetrics/mitkClusteringMetricInnerAngles.h Algorithms/ClusteringMetrics/mitkClusteringMetricLength.h ) set(RESOURCE_FILES # Binary directory resources FiberTrackingLUTBaryCoords.bin FiberTrackingLUTIndices.bin ) diff --git a/Modules/FiberTracking/mitkFiberTrackingModuleActivator.cpp b/Modules/FiberTracking/mitkFiberTrackingModuleActivator.cpp deleted file mode 100644 index 87579cf..0000000 --- a/Modules/FiberTracking/mitkFiberTrackingModuleActivator.cpp +++ /dev/null @@ -1,43 +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 - -namespace mitk -{ - /** - \brief Registers services for segmentation module. - */ - class FiberTrackingModuleActivator : public us::ModuleActivator - { - public: - - void Load(us::ModuleContext* /*context*/) override - { - - } - - void Unload(us::ModuleContext*) override - { - - } - - private: - - - }; -} - -US_EXPORT_MODULE_ACTIVATOR(mitk::FiberTrackingModuleActivator) diff --git a/Modules/FiberTracking/IODataStructures/mitkStreamlineTractographyParameters.cpp b/Modules/FiberTracking/mitkStreamlineTractographyParameters.cpp similarity index 100% rename from Modules/FiberTracking/IODataStructures/mitkStreamlineTractographyParameters.cpp rename to Modules/FiberTracking/mitkStreamlineTractographyParameters.cpp diff --git a/Modules/FiberTracking/IODataStructures/mitkStreamlineTractographyParameters.h b/Modules/FiberTracking/mitkStreamlineTractographyParameters.h similarity index 100% rename from Modules/FiberTracking/IODataStructures/mitkStreamlineTractographyParameters.h rename to Modules/FiberTracking/mitkStreamlineTractographyParameters.h diff --git a/Modules/MriSimulation/Algorithms/itkDftImageFilter.h b/Modules/MriSimulation/Algorithms/itkDftImageFilter.h index 2960a60..a5aa373 100644 --- a/Modules/MriSimulation/Algorithms/itkDftImageFilter.h +++ b/Modules/MriSimulation/Algorithms/itkDftImageFilter.h @@ -1,80 +1,79 @@ /*=================================================================== 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. ===================================================================*/ /*=================================================================== This file is based heavily on a corresponding ITK filter. ===================================================================*/ #ifndef __itkDftImageFilter_h_ #define __itkDftImageFilter_h_ -#include #include #include #include #include namespace itk{ /** * \brief 2D Discrete Fourier Transform Filter (complex to real). Special issue for Fiberfox -> rearranges slice. */ template< class TPixelType > class DftImageFilter : public ImageToImageFilter< Image< vcl_complex< TPixelType > >, Image< vcl_complex< TPixelType > > > { public: typedef DftImageFilter Self; typedef SmartPointer Pointer; typedef SmartPointer ConstPointer; typedef ImageToImageFilter< Image< vcl_complex< TPixelType > >, Image< vcl_complex< TPixelType > > > Superclass; /** Method for creation through the object factory. */ itkFactorylessNewMacro(Self) itkCloneMacro(Self) /** Runtime information support. */ itkTypeMacro(DftImageFilter, ImageToImageFilter) typedef typename Superclass::InputImageType InputImageType; typedef typename Superclass::OutputImageType OutputImageType; typedef typename Superclass::OutputImageRegionType OutputImageRegionType; void SetParameters( FiberfoxParameters& param ){ m_Parameters = param; } protected: DftImageFilter(); ~DftImageFilter() override {} void BeforeThreadedGenerateData() override; void ThreadedGenerateData( const OutputImageRegionType &outputRegionForThread, ThreadIdType threadId) override; private: FiberfoxParameters m_Parameters; }; } #ifndef ITK_MANUAL_INSTANTIATION #include "itkDftImageFilter.cpp" #endif #endif //__itkDftImageFilter_h_ diff --git a/Modules/MriSimulation/Algorithms/itkFibersFromPlanarFiguresFilter.cpp b/Modules/MriSimulation/Algorithms/itkFibersFromPlanarFiguresFilter.cpp index a96514f..67a9c19 100644 --- a/Modules/MriSimulation/Algorithms/itkFibersFromPlanarFiguresFilter.cpp +++ b/Modules/MriSimulation/Algorithms/itkFibersFromPlanarFiguresFilter.cpp @@ -1,248 +1,245 @@ /*=================================================================== 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 __itkibersFromPlanarFiguresFilter_cpp #define __itkibersFromPlanarFiguresFilter_cpp #include "itkFibersFromPlanarFiguresFilter.h" #include #include #include -#include -#include #include -#include #include #include #include #include #include #include #include namespace itk{ FibersFromPlanarFiguresFilter::FibersFromPlanarFiguresFilter() : m_FixSeed(false) { } FibersFromPlanarFiguresFilter::~FibersFromPlanarFiguresFilter() { } void FibersFromPlanarFiguresFilter::GeneratePoints() { Statistics::MersenneTwisterRandomVariateGenerator::Pointer randGen = Statistics::MersenneTwisterRandomVariateGenerator::New(); if (m_FixSeed) randGen->SetSeed(0); else randGen->SetSeed(); m_2DPoints.clear(); unsigned int count = 0; while (count < m_Parameters.m_Density) { mitk::Vector2D p; switch (m_Parameters.m_Distribution) { case FiberGenerationParameters::DISTRIBUTE_GAUSSIAN: p[0] = randGen->GetNormalVariate(0, m_Parameters.m_Variance); p[1] = randGen->GetNormalVariate(0, m_Parameters.m_Variance); break; default: p[0] = randGen->GetUniformVariate(-1, 1); p[1] = randGen->GetUniformVariate(-1, 1); } if (sqrt(p[0]*p[0]+p[1]*p[1]) <= 1) { m_2DPoints.push_back(p); count++; } } } void FibersFromPlanarFiguresFilter::SetFixSeed(bool FixSeed) { m_FixSeed = FixSeed; } void FibersFromPlanarFiguresFilter::GenerateData() { // check if enough fiducials are available for (unsigned int i=0; i m_VtkCellArray = vtkSmartPointer::New(); vtkSmartPointer m_VtkPoints = vtkSmartPointer::New(); std::vector< mitk::PlanarEllipse::Pointer > bundle = m_Parameters.m_Fiducials.at(i); std::vector< unsigned int > fliplist; if (i container = vtkSmartPointer::New(); mitk::PlanarEllipse::Pointer figure = bundle.at(0); mitk::Point2D p0 = figure->GetControlPoint(0); mitk::Point2D p1 = figure->GetControlPoint(1); mitk::Point2D p2 = figure->GetControlPoint(2); mitk::Point2D p3 = figure->GetControlPoint(3); double r1 = p0.EuclideanDistanceTo(p1); double r2 = p0.EuclideanDistanceTo(p2); mitk::Vector2D eDir = p1-p0; eDir.Normalize(); mitk::Vector2D tDir = p3-p0; tDir.Normalize(); // apply twist vnl_matrix_fixed tRot; tRot[0][0] = tDir[0]; tRot[1][1] = tRot[0][0]; tRot[1][0] = sin(acos(tRot[0][0])); tRot[0][1] = -tRot[1][0]; if (tDir[1]<0) tRot.inplace_transpose(); m_2DPoints[j].SetVnlVector(tRot*m_2DPoints[j].GetVnlVector()); // apply new ellipse shape vnl_vector_fixed< double, 2 > newP; newP[0] = m_2DPoints.at(j)[0]; newP[1] = m_2DPoints.at(j)[1]; double alpha = acos(eDir[0]); if (eDir[1]>0) alpha = 2*itk::Math::pi-alpha; vnl_matrix_fixed eRot; eRot[0][0] = cos(alpha); eRot[1][1] = eRot[0][0]; eRot[1][0] = sin(alpha); eRot[0][1] = -eRot[1][0]; newP = eRot*newP; newP[0] *= r1; newP[1] *= r2; newP = eRot.transpose()*newP; p0[0] += newP[0]; p0[1] += newP[1]; const mitk::PlaneGeometry* planeGeo = figure->GetPlaneGeometry(); mitk::Point3D w, wc; planeGeo->Map(p0, w); wc = figure->GetWorldControlPoint(0); vtkIdType id = m_VtkPoints->InsertNextPoint(w.GetDataPointer()); container->GetPointIds()->InsertNextId(id); vnl_vector_fixed< double, 3 > n = planeGeo->GetNormalVnl(); for (unsigned int k=1; kGetControlPoint(0); p1 = figure->GetControlPoint(1); p2 = figure->GetControlPoint(2); p3 = figure->GetControlPoint(3); r1 = p0.EuclideanDistanceTo(p1); r2 = p0.EuclideanDistanceTo(p2); eDir = p1-p0; eDir.Normalize(); mitk::Vector2D tDir2 = p3-p0; tDir2.Normalize(); mitk::Vector2D temp; temp.Fill(0); temp.SetVnlVector(tRot.transpose() * tDir2.GetVnlVector()); // apply twist tRot[0][0] = tDir[0]*tDir2[0] + tDir[1]*tDir2[1]; if (tRot[0][0]>1.0) tRot[0][0] = 1.0; tRot[1][1] = tRot[0][0]; tRot[1][0] = sin(acos(tRot[0][0])); tRot[0][1] = -tRot[1][0]; if (temp[1]<0) tRot.inplace_transpose(); m_2DPoints[j].SetVnlVector(tRot*m_2DPoints[j].GetVnlVector()); tDir = tDir2; // apply new ellipse shape newP[0] = m_2DPoints.at(j)[0]; newP[1] = m_2DPoints.at(j)[1]; // calculate normal mitk::PlaneGeometry* planeGeo = const_cast(figure->GetPlaneGeometry()); mitk::Vector3D perp = wc-planeGeo->ProjectPointOntoPlane(wc); perp.Normalize(); vnl_vector_fixed< double, 3 > n2 = planeGeo->GetNormalVnl(); wc = figure->GetWorldControlPoint(0); // is flip needed? if (dot_product(perp.GetVnlVector(),n2)>0 && dot_product(n,n2)<=0.00001) newP[0] *= -1; if (fliplist.at(k)>0) newP[0] *= -1; n = n2; alpha = acos(eDir[0]); if (eDir[1]>0) alpha = 2*itk::Math::pi-alpha; eRot[0][0] = cos(alpha); eRot[1][1] = eRot[0][0]; eRot[1][0] = sin(alpha); eRot[0][1] = -eRot[1][0]; newP = eRot*newP; newP[0] *= r1; newP[1] *= r2; newP = eRot.transpose()*newP; p0[0] += newP[0]; p0[1] += newP[1]; mitk::Point3D w; planeGeo->Map(p0, w); vtkIdType id = m_VtkPoints->InsertNextPoint(w.GetDataPointer()); container->GetPointIds()->InsertNextId(id); } m_VtkCellArray->InsertNextCell(container); } vtkSmartPointer fiberPolyData = vtkSmartPointer::New(); fiberPolyData->SetPoints(m_VtkPoints); fiberPolyData->SetLines(m_VtkCellArray); mitk::FiberBundle::Pointer mitkFiberBundle = mitk::FiberBundle::New(fiberPolyData); mitkFiberBundle->ResampleSpline(m_Parameters.m_Sampling, m_Parameters.m_Tension, m_Parameters.m_Continuity, m_Parameters.m_Bias); m_FiberBundles.push_back(mitkFiberBundle); } } } #endif // __itkFibersFromPlanarFiguresFilter_cpp diff --git a/Modules/MriSimulation/Algorithms/itkKspaceImageFilter.h b/Modules/MriSimulation/Algorithms/itkKspaceImageFilter.h index 471eec3..2f007d6 100644 --- a/Modules/MriSimulation/Algorithms/itkKspaceImageFilter.h +++ b/Modules/MriSimulation/Algorithms/itkKspaceImageFilter.h @@ -1,161 +1,160 @@ /*=================================================================== 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. ===================================================================*/ /*=================================================================== This file is based heavily on a corresponding ITK filter. ===================================================================*/ #ifndef __itkKspaceImageFilter_h_ #define __itkKspaceImageFilter_h_ -#include #include #include #include #include #include #include #include namespace itk{ /** * \brief Simulates k-space acquisition of one slice with a single shot EPI sequence. Enables the simulation of various effects occuring during real MR acquisitions: * - T2 signal relaxation * - Spikes * - N/2 Ghosts * - Aliasing (wrap around) * - Image distortions (off-frequency effects) * - Gibbs ringing * - Eddy current effects * Based on a discrete fourier transformation. * See "Fiberfox: Facilitating the creation of realistic white matter software phantoms" (DOI: 10.1002/mrm.25045) for details. */ template< class ScalarType > class KspaceImageFilter : public ImageSource< Image< vcl_complex< ScalarType >, 2 > > { public: typedef KspaceImageFilter Self; typedef SmartPointer Pointer; typedef SmartPointer ConstPointer; typedef ImageSource< Image< vcl_complex< ScalarType >, 2 > > Superclass; /** Method for creation through the object factory. */ itkFactorylessNewMacro(Self) itkCloneMacro(Self) /** Runtime information support. */ itkTypeMacro(KspaceImageFilter, ImageToImageFilter) typedef typename itk::Image< ScalarType, 2 > InputImageType; typedef typename InputImageType::Pointer InputImagePointerType; typedef typename Superclass::OutputImageType OutputImageType; typedef typename Superclass::OutputImageRegionType OutputImageRegionType; typedef itk::Matrix MatrixType; typedef itk::Point Point2D; typedef itk::Vector< float,3> VectorType; itkSetMacro( SpikesPerSlice, unsigned int ) ///< Number of spikes per slice. Corresponding parameter in fiberfox parameter object specifies the number of spikes for the whole image and can thus not be used here. itkSetMacro( Z, double ) ///< Slice position, necessary for eddy current simulation. itkSetMacro( RandSeed, int ) ///< Use constant seed for random generator for reproducible results. itkSetMacro( Translation, VectorType ) itkSetMacro( RotationMatrix, MatrixType ) itkSetMacro( Zidx, int ) itkSetMacro( StoreTimings, bool ) itkSetMacro( FiberBundle, FiberBundle::Pointer ) itkSetMacro( CoilPosition, VectorType ) itkGetMacro( KSpaceImage, typename InputImageType::Pointer ) ///< k-space magnitude image itkGetMacro( TickImage, typename InputImageType::Pointer ) ///< k-space readout ordering encoded in the voxels itkGetMacro( RfImage, typename InputImageType::Pointer ) ///< time passed since last RF pulse encoded per voxel itkGetMacro( SpikeLog, std::string ) void SetParameters( FiberfoxParameters* param ){ m_Parameters = param; } void SetCompartmentImages( std::vector< InputImagePointerType > cImgs ) { m_CompartmentImages=cImgs; } ///< One signal image per compartment. void SetT2( std::vector< float > t2Vector ) { m_T2=t2Vector; } ///< One T2 relaxation constant per compartment image. void SetT1( std::vector< float > t1Vector ) { m_T1=t1Vector; } ///< One T1 relaxation constant per compartment image. void SetDiffusionGradientDirection(itk::Vector g) { m_DiffusionGradientDirection=g; } ///< Gradient direction is needed for eddy current simulation. protected: KspaceImageFilter(); ~KspaceImageFilter() override {} float CoilSensitivity(VectorType& pos); void BeforeThreadedGenerateData() override; void ThreadedGenerateData( const OutputImageRegionType &outputRegionForThread, ThreadIdType threadID) override; void AfterThreadedGenerateData() override; VectorType m_CoilPosition; FiberfoxParameters* m_Parameters; std::vector< float > m_T2; std::vector< float > m_T1; std::vector< float > m_T1Relax; std::vector< InputImagePointerType > m_CompartmentImages; itk::Vector m_DiffusionGradientDirection; float m_Z; int m_Zidx; int m_RandSeed; itk::Statistics::MersenneTwisterRandomVariateGenerator::Pointer m_RandGen; unsigned int m_SpikesPerSlice; FiberBundle::Pointer m_FiberBundle; float m_Gamma; VectorType m_Translation; ///< used to find correct point in frequency map (head motion) MatrixType m_RotationMatrix; float m_TransX; float m_TransY; float m_TransZ; bool m_IsBaseline; vcl_complex m_Spike; MatrixType m_Transform; std::string m_SpikeLog; float m_CoilSensitivityFactor; typename InputImageType::Pointer m_KSpaceImage; typename InputImageType::Pointer m_TickImage; typename InputImageType::Pointer m_RfImage; AcquisitionType* m_ReadoutScheme; typename itk::Image< ScalarType, 2 >::Pointer m_MovedFmap; int ringing_lines_x; int ringing_lines_y; float kxMax; float kyMax; float xMax; float yMax; float yMaxFov; float yMaxFov_half; float numPix; bool m_StoreTimings; private: }; } #ifndef ITK_MANUAL_INSTANTIATION #include "itkKspaceImageFilter.cpp" #endif #endif //__itkKspaceImageFilter_h_ diff --git a/Modules/MriSimulation/CMakeLists.txt b/Modules/MriSimulation/CMakeLists.txt index 8f35324..b60e7c5 100644 --- a/Modules/MriSimulation/CMakeLists.txt +++ b/Modules/MriSimulation/CMakeLists.txt @@ -1,12 +1,11 @@ MITK_CREATE_MODULE( SUBPROJECTS MITK-Diffusion - INCLUDE_DIRS SignalModels Sequences ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS MitkFiberTracking - PACKAGE_DEPENDS PUBLIC OpenMP|OpenMP_CXX + INCLUDE_DIRS SignalModels Sequences Algorithms ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS MitkDiffusionCore MitkFiberTracking ) if(MODULE_IS_ENABLED) add_subdirectory(Testing) endif() diff --git a/Modules/MriSimulation/SignalModels/mitkDiffusionNoiseModel.h b/Modules/MriSimulation/SignalModels/mitkDiffusionNoiseModel.h index ae7ecd7..80e1cce 100644 --- a/Modules/MriSimulation/SignalModels/mitkDiffusionNoiseModel.h +++ b/Modules/MriSimulation/SignalModels/mitkDiffusionNoiseModel.h @@ -1,59 +1,58 @@ /*=================================================================== 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 _MITK_DiffusionNoiseModel_H #define _MITK_DiffusionNoiseModel_H -#include #include #include #include #include namespace mitk { /** * \brief Abstract class for diffusion noise models * */ template< class ScalarType = double > class DiffusionNoiseModel { public: DiffusionNoiseModel(){} virtual ~DiffusionNoiseModel(){} typedef itk::VariableLengthVector< ScalarType > PixelType; /** Adds noise according to model to the input pixel. Has to be implemented in subclass. **/ virtual void AddNoise(PixelType& pixel) = 0; /** Seed for random generator. Has to be implemented in subclass. **/ virtual void SetSeed(int seed) = 0; virtual double GetNoiseVariance() = 0; virtual void SetNoiseVariance(double var) = 0; protected: }; } #endif diff --git a/Modules/MriSimulation/SignalModels/mitkDiffusionSignalModel.h b/Modules/MriSimulation/SignalModels/mitkDiffusionSignalModel.h index c180960..42f22aa 100644 --- a/Modules/MriSimulation/SignalModels/mitkDiffusionSignalModel.h +++ b/Modules/MriSimulation/SignalModels/mitkDiffusionSignalModel.h @@ -1,113 +1,112 @@ /*=================================================================== 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 _MITK_DiffusionSignalModel_H #define _MITK_DiffusionSignalModel_H -#include #include #include #include #include #include #include namespace mitk { /** * \brief Abstract class for diffusion signal models * */ template< class ScalarType = double > class DiffusionSignalModel { public: DiffusionSignalModel() : m_T2(100) , m_T1(0) , m_BValue(1000) {} ~DiffusionSignalModel(){} typedef itk::Image ItkDoubleImgType; typedef itk::VariableLengthVector< ScalarType > PixelType; typedef itk::Vector GradientType; typedef std::vector GradientListType; typedef itk::Statistics::MersenneTwisterRandomVariateGenerator ItkRandGenType; typedef mitk::DiffusionPropertyHelper DPH; /** Realizes actual signal generation. Has to be implemented in subclass. **/ virtual PixelType SimulateMeasurement(GradientType& fiberDirection) = 0; virtual ScalarType SimulateMeasurement(unsigned int dir, GradientType& fiberDirection) = 0; void SetGradientList(DPH::GradientDirectionsContainerType* gradients) { m_GradientList.clear(); for ( unsigned int i=0; iSize(); ++i ) { DPH::GradientDirectionType g_vnl = gradients->GetElement(i); GradientType g_itk; g_itk[0] = g_vnl[0]; g_itk[1] = g_vnl[1]; g_itk[2] = g_vnl[2]; m_GradientList.push_back(g_itk); } } void SetGradientList(GradientListType gradientList) { this->m_GradientList = gradientList; } GradientListType GetGradientList(){ return m_GradientList; } GradientType GetGradientDirection(int i) { return m_GradientList.at(i); } void SetT2(double T2) { m_T2 = T2; } double GetT2() { return m_T2; } void SetT1(double T1) { m_T1 = T1; } double GetT1() { return m_T1; } void SetVolumeFractionImage(ItkDoubleImgType::Pointer img){ m_VolumeFractionImage = img; } ItkDoubleImgType::Pointer GetVolumeFractionImage(){ return m_VolumeFractionImage; } void SetRandomGenerator(ItkRandGenType::Pointer randgen){ m_RandGen = randgen; } ItkRandGenType::Pointer GetRandomGenerator(){ return m_RandGen; } void SetSeed(int s) ///< set seed for random generator { if (m_RandGen.IsNull()) m_RandGen = itk::Statistics::MersenneTwisterRandomVariateGenerator::New(); m_RandGen->SetSeed(s); } void SetBvalue(double bValue) { m_BValue = bValue; } ///< b-value used to generate the artificial signal double GetBvalue() { return m_BValue; } unsigned int m_CompartmentId; ///< GUI flag. Which compartment is this model assigned to? protected: GradientListType m_GradientList; ///< Diffusion gradient direction container double m_T2; ///< Tissue specific transversal relaxation time double m_T1; ///< Tissue specific longitudinal relaxation time ItkDoubleImgType::Pointer m_VolumeFractionImage; ///< Tissue specific volume fraction for each voxel (only relevant for non fiber compartments) ItkRandGenType::Pointer m_RandGen; ///< Random number generator double m_BValue; }; } #endif diff --git a/Modules/MriSimulation/mitkFiberfoxParameters.h b/Modules/MriSimulation/mitkFiberfoxParameters.h index cb4580e..144f7e5 100644 --- a/Modules/MriSimulation/mitkFiberfoxParameters.h +++ b/Modules/MriSimulation/mitkFiberfoxParameters.h @@ -1,339 +1,339 @@ /*=================================================================== 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 _MITK_FiberfoxParameters_H #define _MITK_FiberfoxParameters_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace mitk { - class MITKFIBERTRACKING_EXPORT FiberfoxParameters; + class MITKMRISIMULATION_EXPORT FiberfoxParameters; /** Signal generation */ class MITKMRISIMULATION_EXPORT SignalGenerationParameters { friend FiberfoxParameters; public: typedef itk::Image ItkFloatImgType; typedef itk::Image ItkUcharImgType; typedef itk::Vector GradientType; typedef std::vector GradientListType; enum CoilSensitivityProfile : int { COIL_CONSTANT, COIL_LINEAR, COIL_EXPONENTIAL }; enum AcquisitionType : int { SingleShotEpi, ConventionalSpinEcho, FastSpinEcho, }; SignalGenerationParameters() : m_AcquisitionType(SignalGenerationParameters::SingleShotEpi) , m_SignalScale(100) , m_tEcho(100) , m_tRep(4000) , m_tInv(0) , m_tLine(1) , m_tInhom(50) , m_EchoTrainLength(8) , m_ReversePhase(false) , m_PartialFourier(1.0) , m_NoiseVariance(0.001f) , m_NumberOfCoils(1) , m_CoilSensitivityProfile(SignalGenerationParameters::COIL_CONSTANT) , m_CoilSensitivity(0.3f) , m_SimulateKspaceAcquisition(false) , m_AxonRadius(0) , m_DoDisablePartialVolume(false) , m_Spikes(0) , m_SpikeAmplitude(1) , m_KspaceLineOffset(0) , m_EddyStrength(0.002f) , m_Tau(70) , m_CroppingFactor(1) , m_Drift(0.06) , m_DoAddGibbsRinging(false) , m_ZeroRinging(0) , m_DoSimulateRelaxation(true) , m_DoAddMotion(false) , m_DoRandomizeMotion(true) , m_DoAddDrift(false) , m_FrequencyMap(nullptr) , m_MaskImage(nullptr) , m_Bvalue(1000) { m_ImageRegion.SetSize(0, 12); m_ImageRegion.SetSize(1, 12); m_ImageRegion.SetSize(2, 3); m_ImageSpacing.Fill(2.0); m_ImageOrigin.Fill(0.0); m_ImageDirection.SetIdentity(); m_Translation.Fill(0.0); m_Rotation.Fill(0.0); SetNumWeightedVolumes(6); } /** input/output image specifications */ itk::ImageRegion<3> m_CroppedRegion; ///< Image size with reduced FOV. itk::ImageRegion<3> m_ImageRegion; ///< Image size. itk::Vector m_ImageSpacing; ///< Image voxel size. itk::Point m_ImageOrigin; ///< Image origin. itk::Matrix m_ImageDirection; ///< Image rotation matrix. /** Other acquisitions parameters */ AcquisitionType m_AcquisitionType; ///< determines k-space trajectory and maximum echo position(s) float m_SignalScale; ///< Scaling factor for output signal (before noise is added). float m_tEcho; ///< Echo time TE. float m_tRep; ///< Echo time TR. float m_tInv; ///< Inversion time float m_tLine; ///< k-space line readout time (dwell time). float m_tInhom; ///< T2' unsigned int m_EchoTrainLength; ///< Only relevant for Fast Spin Echo sequence (number of k-space lines acquired with one RF pulse) bool m_ReversePhase; ///< If true, the phase readout direction will be inverted (-y instead of y) float m_PartialFourier; ///< Partial fourier factor (0.5-1) float m_NoiseVariance; ///< Variance of complex gaussian noise unsigned int m_NumberOfCoils; ///< Number of coils in multi-coil acquisition CoilSensitivityProfile m_CoilSensitivityProfile; ///< Choose between constant, linear or exponential sensitivity profile of the used coils float m_CoilSensitivity; ///< signal remaining in slice center bool m_SimulateKspaceAcquisition;///< Flag to enable/disable k-space acquisition simulation double m_AxonRadius; ///< Determines compartment volume fractions (0 == automatic axon radius estimation) bool m_DoDisablePartialVolume; ///< Disable partial volume effects. Each voxel is either all fiber or all non-fiber. /** Artifacts and other effects */ unsigned int m_Spikes; ///< Number of spikes randomly appearing in the image float m_SpikeAmplitude; ///< amplitude of spikes relative to the largest signal intensity (magnitude of complex) float m_KspaceLineOffset; ///< Causes N/2 ghosts. Larger offset means stronger ghost. float m_EddyStrength; ///< Strength of eddy current induced gradients in mT/m. float m_Tau; ///< Eddy current decay constant (in ms) float m_CroppingFactor; ///< FOV size in y-direction is multiplied by this factor. Causes aliasing artifacts. float m_Drift; ///< Global signal decrease by the end of the acquisition. bool m_DoAddGibbsRinging; ///< Add Gibbs ringing artifact int m_ZeroRinging; ///< If > 0, ringing is simulated by by setting the defined percentage of higher frequencies to 0 in k-space. Otherwise, the input to the k-space simulation is generated with twice the resolution and cropped during k-space simulation (much slower). bool m_DoSimulateRelaxation; ///< Add T2 relaxation effects bool m_DoAddMotion; ///< Enable motion artifacts. bool m_DoRandomizeMotion; ///< Toggles between random and linear motion. bool m_DoAddDrift; ///< Add quadratic signal drift. std::vector< bool > m_MotionVolumes; ///< Indicates the image volumes that are affected by motion ///< with positive numbers, inverted logic with negative numbers. itk::Vector m_Translation; ///< Maximum translational motion. itk::Vector m_Rotation; ///< Maximum rotational motion. ItkFloatImgType::Pointer m_FrequencyMap; ///< If != nullptr, distortions are added to the image using this frequency map. ItkUcharImgType::Pointer m_MaskImage; ///< Signal is only genrated inside of the mask image. std::vector< int > GetBaselineIndices(); ///< Returns list of nun-diffusion-weighted image volume indices unsigned int GetFirstBaselineIndex(); ///< Returns index of first non-diffusion-weighted image volume bool IsBaselineIndex(unsigned int idx); ///< Checks if image volume with given index is non-diffusion-weighted volume or not. unsigned int GetNumWeightedVolumes(); ///< Get number of diffusion-weighted image volumes unsigned int GetNumBaselineVolumes(); ///< Get number of non-diffusion-weighted image volumes unsigned int GetNumVolumes(); ///< Get number of baseline and diffusion-weighted image volumes GradientListType GetGradientDirections(); ///< Return gradient direction container mitk::DiffusionPropertyHelper::GradientDirectionsContainerType::Pointer GetItkGradientContainer(); GradientType GetGradientDirection(unsigned int i); std::vector< int > GetBvalues(); ///< Returns a vector with all unique b-values (determined by the gradient magnitudes) double GetBvalue(); void ApplyDirectionMatrix(); protected: unsigned int m_NumGradients; ///< Number of diffusion-weighted image volumes. unsigned int m_NumBaseline; ///< Number of non-diffusion-weighted image volumes. GradientListType m_GradientDirections; ///< Total number of image volumes. double m_Bvalue; ///< Acquisition b-value void SetNumWeightedVolumes(int numGradients); ///< Automaticall calls GenerateGradientHalfShell() afterwards. void SetGradienDirections(GradientListType gradientList); void SetGradienDirections(mitk::DiffusionPropertyHelper::GradientDirectionsContainerType::Pointer gradientList); void GenerateGradientHalfShell(); ///< Generates half shell of gradient directions (with m_NumGradients non-zero directions) }; /** Fiber generation */ class MITKMRISIMULATION_EXPORT FiberGenerationParameters { public: enum FiberDistribution { DISTRIBUTE_UNIFORM, // distribute fibers uniformly in the ROIs DISTRIBUTE_GAUSSIAN // distribute fibers using a 2D gaussian }; typedef std::vector< std::vector< mitk::PlanarEllipse::Pointer > > FiducialListType; typedef std::vector< std::vector< unsigned int > > FlipListType; FiberGenerationParameters() : m_Distribution(DISTRIBUTE_UNIFORM) , m_Density(100) , m_Variance(100) , m_Sampling(1) , m_Tension(0) , m_Continuity(0) , m_Bias(0) { m_Rotation.Fill(0.0); m_Translation.Fill(0.0); m_Scale.Fill(1.0); } FiberDistribution m_Distribution; unsigned int m_Density; double m_Variance; double m_Sampling; double m_Tension; double m_Continuity; double m_Bias; mitk::Vector3D m_Rotation; mitk::Vector3D m_Translation; mitk::Vector3D m_Scale; FlipListType m_FlipList; ///< contains flags indicating a flip of the 2D fiber x-coordinates (needed to resolve some unwanted fiber twisting) FiducialListType m_Fiducials; ///< container of the planar ellipses used as fiducials for the fiber generation process }; /** GUI persistence, input, output, ... */ class MITKMRISIMULATION_EXPORT MiscFiberfoxParameters { public: MiscFiberfoxParameters() : m_ResultNode(DataNode::New()) , m_ParentNode(nullptr) , m_SignalModelString("") , m_ArtifactModelString("") , m_OutputPath("/tmp/") , m_OutputPrefix("fiberfox") , m_AfterSimulationMessage("") , m_BvalsFile("") , m_BvecsFile("") , m_OutputAdditionalImages(false) , m_CheckAdvancedSignalOptionsBox(false) , m_DoAddNoise(false) , m_DoAddGhosts(false) , m_DoAddAliasing(false) , m_DoAddSpikes(false) , m_DoAddEddyCurrents(false) , m_DoAddDistortions(false) , m_MotionVolumesBox("random") , m_CheckRealTimeFibersBox(true) , m_CheckAdvancedFiberOptionsBox(false) , m_CheckConstantRadiusBox(false) , m_CheckIncludeFiducialsBox(true) {} DataNode::Pointer m_ResultNode; ///< Stores resulting image. DataNode::Pointer m_ParentNode; ///< Parent node of result node. std::string m_SignalModelString; ///< Appendet to the name of the result node std::string m_ArtifactModelString; ///< Appendet to the name of the result node std::string m_OutputPath; ///< Image is automatically saved to the specified folder after simulation is finished. std::string m_OutputPrefix; /** Prefix for filename of output files and logfile. */ std::string m_AfterSimulationMessage; ///< Store messages that are displayed after the simulation has finished (e.g. warnings, automatic parameter adjustments etc.) std::string m_BvalsFile; std::string m_BvecsFile; /** member variables that store the check-state of GUI checkboxes */ // image generation bool m_OutputAdditionalImages; bool m_CheckAdvancedSignalOptionsBox; bool m_DoAddNoise; bool m_DoAddGhosts; bool m_DoAddAliasing; bool m_DoAddSpikes; bool m_DoAddEddyCurrents; bool m_DoAddDistortions; std::string m_MotionVolumesBox; // fiber generation bool m_CheckRealTimeFibersBox; bool m_CheckAdvancedFiberOptionsBox; bool m_CheckConstantRadiusBox; bool m_CheckIncludeFiducialsBox; }; /** * \brief Datastructure to manage the Fiberfox signal generation parameters. * */ class MITKMRISIMULATION_EXPORT FiberfoxParameters { public: typedef itk::Image ItkFloatImgType; typedef itk::Image ItkDoubleImgType; typedef itk::Image ItkUcharImgType; typedef DiffusionSignalModel DiffusionModelType; typedef std::vector< DiffusionModelType* > DiffusionModelListType; typedef DiffusionNoiseModel NoiseModelType; FiberfoxParameters(); FiberfoxParameters(const FiberfoxParameters ¶ms); ~FiberfoxParameters(); /** Not templated parameters */ FiberGenerationParameters m_FiberGen; ///< Fiber generation parameters SignalGenerationParameters m_SignalGen; ///< Signal generation parameters MiscFiberfoxParameters m_Misc; ///< GUI realted and I/O parameters /** Templated parameters */ DiffusionModelListType m_FiberModelList; ///< Intra- and inter-axonal compartments. DiffusionModelListType m_NonFiberModelList; ///< Extra-axonal compartments. std::shared_ptr< NoiseModelType > m_NoiseModel; ///< If != nullptr, noise is added to the image. void GenerateGradientHalfShell(); void SetNumWeightedVolumes(int numGradients); ///< Automaticall calls GenerateGradientHalfShell() afterwards. void SetGradienDirections(mitk::SignalGenerationParameters::GradientListType gradientList); void SetGradienDirections(mitk::DiffusionPropertyHelper::GradientDirectionsContainerType::Pointer gradientList); void SetBvalue(double Bvalue); void UpdateSignalModels(); void ClearFiberParameters(); void ClearSignalParameters(); void ApplyDirectionMatrix(); void PrintSelf(); ///< Print parameters to stdout. void SaveParameters(std::string filename); ///< Save image generation parameters to .ffp file. void LoadParameters(std::string filename, bool fix_seed=false); ///< Load image generation parameters from .ffp file. template< class ParameterType > ParameterType ReadVal(boost::property_tree::ptree::value_type const& v, std::string tag, ParameterType defaultValue, bool essential=false); std::string m_MissingTags; }; } #endif diff --git a/Plugins/org.mitk.gui.qt.diffusionimaging/CMakeLists.txt b/Plugins/org.mitk.gui.qt.diffusionimaging/CMakeLists.txt index 7694d4e..08a6c66 100644 --- a/Plugins/org.mitk.gui.qt.diffusionimaging/CMakeLists.txt +++ b/Plugins/org.mitk.gui.qt.diffusionimaging/CMakeLists.txt @@ -1,8 +1,8 @@ project(org_mitk_gui_qt_diffusionimaging) mitk_create_plugin( SUBPROJECTS MITK-Diffusion EXPORT_DIRECTIVE DIFFUSIONIMAGING_EXPORT EXPORTED_INCLUDE_SUFFIXES src - MODULE_DEPENDS MitkDiffusionCore MitkConnectomics + MODULE_DEPENDS MitkFiberTracking MitkConnectomics )