diff --git a/Modules/DiffusionImaging/Algorithms/mitkTractAnalyzer.cpp b/Modules/DiffusionImaging/Algorithms/mitkTractAnalyzer.cpp new file mode 100644 index 0000000000..d5e9be0f60 --- /dev/null +++ b/Modules/DiffusionImaging/Algorithms/mitkTractAnalyzer.cpp @@ -0,0 +1,162 @@ + +#ifndef __mitkTractAnalyzer_cpp +#define __mitkTractAnalyzer_cpp + + + +#include +#include + +#include + + +#include +#include + +#include +#include + + +using namespace std; + +namespace mitk { + + TractAnalyzer::TractAnalyzer() + { + + } + + + void TractAnalyzer::BuildGraph(itk::Index<3> startPoint, itk::Index<3> endPoint) + { + + typedef itk::ShortestPathImageFilter ShortestPathFilterType; + typedef itk::ShortestPathCostFunctionTbss CostFunctionType; + + + FloatImageType::Pointer meanSkeleton; + + mitk::CastToItkImage(m_InputImage, meanSkeleton); + + // Only use the mitk image + + + + if(meanSkeleton) + { + CostFunctionType::Pointer costFunction = CostFunctionType::New(); + costFunction->SetImage(meanSkeleton); + costFunction->SetStartIndex(startPoint); + costFunction->SetEndIndex(endPoint); + costFunction->SetThreshold(m_Threshold); + + ShortestPathFilterType::Pointer pathFinder = ShortestPathFilterType::New(); + pathFinder->SetCostFunction(costFunction); + pathFinder->SetFullNeighborsMode(true); + //pathFinder->SetCalcMode(ShortestPathFilterType::A_STAR); + pathFinder->SetInput(meanSkeleton); + pathFinder->SetStartIndex(startPoint); + pathFinder->SetEndIndex(endPoint); + pathFinder->Update(); + + m_Path = pathFinder->GetVectorPath(); + + + m_RoiImg = pathFinder->GetOutput(); + } + + + + } + + void TractAnalyzer::MeasureRoi() + { + + // Output two types + ProjectionsImageType::SizeType size = m_Projections->GetLargestPossibleRegion().GetSize(); + + std::ofstream file(m_FileName.c_str()); + + std::vector individuals; + for(int i=0; i group = m_Groups[i]; + for(int j=0; j ix = m_Roi[k]; + itk::Index<4> ix4; + ix4[0] = ix[0]; + ix4[1] = ix[1]; + ix4[2] = ix[2]; + ix4[3] = j; + + float f = m_Projections->GetPixel(ix4); + + file << f << " "; + + } + + file << "\n"; + + } + + file.close(); + + + + // Write the long format output + std::ofstream fileLong(m_FileNameLong.c_str()); + + fileLong << "ID " << "group " << "position " << "value\n"; + + for(int i=0; i ix = m_Roi[i]; + itk::Index<4> ix4; + ix4[0] = ix[0]; + ix4[1] = ix[1]; + ix4[2] = ix[2]; + ix4[3] = j; + + float f = m_Projections->GetPixel(ix4); + + fileLong << "ID" << j << " " << individuals[j] << " " << "pos" << i << " "<< f << "\n"; + } + } + + fileLong.close(); + + + } + + + +} +#endif diff --git a/Modules/DiffusionImaging/Algorithms/mitkTractAnalyzer.h b/Modules/DiffusionImaging/Algorithms/mitkTractAnalyzer.h new file mode 100644 index 0000000000..6fbc00d524 --- /dev/null +++ b/Modules/DiffusionImaging/Algorithms/mitkTractAnalyzer.h @@ -0,0 +1,144 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile: itkDiffusionTensor3DReconstructionImageFilter.h,v $ + Language: C++ + Date: $Date: 2006-03-27 17:01:06 $ + Version: $Revision: 1.12 $ + + Copyright (c) Insight Software Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __mitkTractAnalyzer_h_ +#define __mitkTractAnalyzer_h_ + +#include "MitkDiffusionImagingMBIExports.h" +#include +#include + + +namespace mitk{ +/** \class TractAnalyzer + */ + + +class MitkDiffusionImagingMBI_EXPORT TractAnalyzer +{ + +public: + + + TractAnalyzer(); + ~TractAnalyzer() {}; + + typedef itk::Image CharImageType; + typedef itk::Image FloatImageType; + typedef itk::Image ProjectionsImageType; + typedef itk::VectorImage VectorImageType; + + + + /* + void SetSkeleton(CharImageType::Pointer skeleton) + { + m_Skeleton = skeleton; + } + + void SetMeanSkeleton(FloatImageType::Pointer i) + { + m_MeanSkeleton = i; + }*/ + + + void SetTbssImage(mitk::TbssImage::Pointer tbssImg) + { + m_TbssImage = tbssImg; + } + + void SetProjections(ProjectionsImageType::Pointer projections) + { + m_Projections = projections; + } + + void BuildGraph(itk::Index<3> startPoint, itk::Index<3> endPoint); + + std::vector< itk::Index<3> > GetPath() + { + return m_Path; + } + + void SetFileName(std::string fname) + { + m_FileName = fname; + } + + void SetFileNameLong(std::string fname) + { + m_FileNameLong = fname; + } + + void SetRoi(std::vector< itk::Index<3> > roi) + { + m_Roi = roi; + } + + CharImageType::Pointer GetRoiImage() + { + return m_RoiImg; + } + + void SetGroups(std::vector< std::pair > groups) + { + m_Groups = groups; + } + + void MeasureRoi(); + + void SetInputImage(mitk::Image::Pointer inputImage) + { + m_InputImage = inputImage; + } + + + void SetThreshold(double threshold) + { + m_Threshold = threshold; + } + + +protected: + + + //CharImageType::Pointer m_Skeleton; + CharImageType::Pointer m_RoiImg; + ProjectionsImageType::Pointer m_Projections; + //FloatImageType::Pointer m_MeanSkeleton; + mitk::TbssImage::Pointer m_TbssImage; + + mitk::Image::Pointer m_InputImage; + + double m_Threshold; + + std::vector< itk::Index<3> > m_Path; + + std::string m_FileName; + + std::string m_FileNameLong; // For the regression analysis 'friendly' file + + std::vector< std::pair > m_Groups; + + std::vector< itk::Index<3> > m_Roi; + +private: + +}; + +} + +#endif //__itkTractAnalyzer_h_ + diff --git a/Modules/DiffusionImaging/files.cmake b/Modules/DiffusionImaging/files.cmake index 961349c228..8f7c4358de 100644 --- a/Modules/DiffusionImaging/files.cmake +++ b/Modules/DiffusionImaging/files.cmake @@ -1,180 +1,181 @@ SET(CPP_FILES # DicomImport DicomImport/mitkDicomDiffusionImageReader.cpp DicomImport/mitkGroupDiffusionHeadersFilter.cpp DicomImport/mitkDicomDiffusionImageHeaderReader.cpp DicomImport/mitkGEDicomDiffusionImageHeaderReader.cpp DicomImport/mitkPhilipsDicomDiffusionImageHeaderReader.cpp DicomImport/mitkSiemensDicomDiffusionImageHeaderReader.cpp DicomImport/mitkSiemensMosaicDicomDiffusionImageHeaderReader.cpp # DataStructures IODataStructures/mitkDiffusionImagingObjectFactory.cpp # DataStructures -> DWI IODataStructures/DiffusionWeightedImages/mitkDiffusionImageHeaderInformation.cpp IODataStructures/DiffusionWeightedImages/mitkDiffusionImageSource.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageReader.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageWriter.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageIOFactory.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageWriterFactory.cpp IODataStructures/DiffusionWeightedImages/mitkDiffusionImageSerializer.cpp # DataStructures -> QBall IODataStructures/QBallImages/mitkQBallImageSource.cpp IODataStructures/QBallImages/mitkNrrdQBallImageReader.cpp IODataStructures/QBallImages/mitkNrrdQBallImageWriter.cpp IODataStructures/QBallImages/mitkNrrdQBallImageIOFactory.cpp IODataStructures/QBallImages/mitkNrrdQBallImageWriterFactory.cpp IODataStructures/QBallImages/mitkQBallImage.cpp IODataStructures/QBallImages/mitkQBallImageSerializer.cpp # DataStructures -> Tensor IODataStructures/TensorImages/mitkTensorImageSource.cpp IODataStructures/TensorImages/mitkNrrdTensorImageReader.cpp IODataStructures/TensorImages/mitkNrrdTensorImageWriter.cpp IODataStructures/TensorImages/mitkNrrdTensorImageIOFactory.cpp IODataStructures/TensorImages/mitkNrrdTensorImageWriterFactory.cpp IODataStructures/TensorImages/mitkTensorImage.cpp IODataStructures/TensorImages/mitkTensorImageSerializer.cpp # DataStructures -> FiberBundle IODataStructures/FiberBundle/mitkFiberBundle.cpp IODataStructures/FiberBundle/mitkFiberBundleWriter.cpp IODataStructures/FiberBundle/mitkFiberBundleReader.cpp IODataStructures/FiberBundle/mitkFiberBundleIOFactory.cpp IODataStructures/FiberBundle/mitkFiberBundleWriterFactory.cpp IODataStructures/FiberBundle/mitkFiberBundleSerializer.cpp IODataStructures/FiberBundle/mitkParticle.cpp IODataStructures/FiberBundle/mitkParticleGrid.cpp # DataStructures -> FiberBundleX IODataStructures/FiberBundleX/mitkFiberBundleX.cpp IODataStructures/FiberBundleX/mitkFiberBundleXWriter.cpp IODataStructures/FiberBundleX/mitkFiberBundleXReader.cpp IODataStructures/FiberBundleX/mitkFiberBundleXIOFactory.cpp IODataStructures/FiberBundleX/mitkFiberBundleXWriterFactory.cpp IODataStructures/FiberBundleX/mitkFiberBundleXSerializer.cpp IODataStructures/FiberBundleX/mitkFiberBundleXThreadMonitor.cpp # DataStructures -> PlanarFigureComposite IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.cpp # DataStructures -> Tbss IODataStructures/TbssImages/mitkTbssImageSource.cpp IODataStructures/TbssImages/mitkTbssRoiImageSource.cpp IODataStructures/TbssImages/mitkNrrdTbssImageReader.cpp IODataStructures/TbssImages/mitkNrrdTbssImageIOFactory.cpp IODataStructures/TbssImages/mitkNrrdTbssRoiImageReader.cpp IODataStructures/TbssImages/mitkNrrdTbssRoiImageIOFactory.cpp IODataStructures/TbssImages/mitkTbssImage.cpp IODataStructures/TbssImages/mitkTbssRoiImage.cpp IODataStructures/TbssImages/mitkNrrdTbssImageWriter.cpp IODataStructures/TbssImages/mitkNrrdTbssImageWriterFactory.cpp IODataStructures/TbssImages/mitkNrrdTbssRoiImageWriter.cpp IODataStructures/TbssImages/mitkNrrdTbssRoiImageWriterFactory.cpp IODataStructures/TbssImages/mitkTbssImporter.cpp # Rendering Rendering/vtkMaskedProgrammableGlyphFilter.cpp Rendering/mitkCompositeMapper.cpp Rendering/mitkVectorImageVtkGlyphMapper3D.cpp Rendering/vtkOdfSource.cxx Rendering/vtkThickPlane.cxx Rendering/mitkOdfNormalizationMethodProperty.cpp Rendering/mitkOdfScaleByProperty.cpp Rendering/mitkFiberBundleMapper2D.cpp Rendering/mitkFiberBundleMapper3D.cpp Rendering/mitkFiberBundleXMapper2D.cpp Rendering/mitkFiberBundleXMapper3D.cpp Rendering/mitkFiberBundleXThreadMonitorMapper3D.cpp Rendering/mitkTbssImageMapper.cpp Rendering/mitkPlanarCircleMapper3D.cpp Rendering/mitkPlanarPolygonMapper3D.cpp # Interactions Interactions/mitkFiberBundleInteractor.cpp # Algorithms Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.cpp Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.cpp + Algorithms/mitkTractAnalyzer.cpp # Tractography Tractography/itkStochasticTractographyFilter.h ) SET(H_FILES # Rendering Rendering/mitkDiffusionImageMapper.h Rendering/mitkTbssImageMapper.h Rendering/mitkOdfVtkMapper2D.h Rendering/mitkFiberBundleMapper2D.h Rendering/mitkFiberBundleMapper3D.h Rendering/mitkFiberBundleXMapper3D.h Rendering/mitkFiberBundleXMapper2D.h Rendering/mitkFiberBundleXThreadMonitorMapper3D.h Rendering/mitkPlanarCircleMapper3D.h Rendering/mitkPlanarPolygonMapper3D.h # Reconstruction Reconstruction/itkDiffusionQballReconstructionImageFilter.h Reconstruction/mitkTeemDiffusionTensor3DReconstructionImageFilter.h Reconstruction/itkAnalyticalDiffusionQballReconstructionImageFilter.h Reconstruction/itkPointShell.h Reconstruction/itkOrientationDistributionFunction.h Reconstruction/itkDiffusionIntravoxelIncoherentMotionReconstructionImageFilter.h Reconstruction/itkRegularizedIVIMLocalVariationImageFilter.h Reconstruction/itkRegularizedIVIMReconstructionFilter.h Reconstruction/itkRegularizedIVIMReconstructionSingleIteration.h # IO Datastructures IODataStructures/DiffusionWeightedImages/mitkDiffusionImage.h IODataStructures/FiberBundle/itkSlowPolyLineParametricPath.h # DataStructures -> FiberBundleX IODataStructures/FiberBundleX/mitkFiberBundleX.h IODataStructures/FiberBundleX/mitkFiberBundleXWriter.h IODataStructures/FiberBundleX/mitkFiberBundleXReader.h IODataStructures/FiberBundleX/mitkFiberBundleXIOFactory.h IODataStructures/FiberBundleX/mitkFiberBundleXWriterFactory.h IODataStructures/FiberBundleX/mitkFiberBundleXSerializer.h IODataStructures/FiberBundleX/mitkFiberBundleXThreadMonitor.h # Tractography Tractography/itkGibbsTrackingFilter.h Tractography/itkStochasticTractographyFilter.h # Algorithms Algorithms/itkDiffusionQballGeneralizedFaImageFilter.h Algorithms/itkDiffusionQballPrepareVisualizationImageFilter.h Algorithms/itkTensorDerivedMeasurementsFilter.h Algorithms/itkBrainMaskExtractionImageFilter.h Algorithms/itkB0ImageExtractionImageFilter.h Algorithms/itkTensorImageToDiffusionImageFilter.h Algorithms/itkTensorToL2NormImageFilter.h Algorithms/itkTractsToProbabilityImageFilter.h Algorithms/itkTractsToFiberEndingsImageFilter.h Algorithms/itkGaussianInterpolateImageFunction.h Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.h Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.h Algorithms/itkDiffusionTensorPrincipleDirectionImageFilter.h Algorithms/itkCartesianToPolarVectorImageFilter.h Algorithms/itkPolarToCartesianVectorImageFilter.h Algorithms/itkDistanceMapFilter.h Algorithms/itkProjectionFilter.h Algorithms/itkSkeletonizationFilter.h ) SET( TOOL_FILES ) IF(WIN32) ENDIF(WIN32) #MITK_MULTIPLEX_PICTYPE( Algorithms/mitkImageRegistrationMethod-TYPE.cpp )