/*! * \file OxOriginalShmolliDicomReader.hxx * \author Konrad Werys * \date 2018/08/24 */ #ifndef Tomato_OxOriginalShmolliDicomReader_HXX #define Tomato_OxOriginalShmolliDicomReader_HXX #include #include "OxOriginalShmolliDicomReader.h" namespace Ox { template< typename MeasureType > int OriginalShmolliDicomReader ::readAndSort() { // Mag typename ReadFileListFilterType::Pointer readerMag = ReadFileListFilterType::New(); readerMag->SetFileList(_filesMag); readerMag->Update(); typename SortInvTimesImageFilterType::Pointer sorterMag = SortInvTimesImageFilterType::New(); sorterMag->SetInvTimesNonSorted(readerMag->GetInvTimes()); sorterMag->SetInput(readerMag->GetOutput()); sorterMag->Update(); // pha typename ReadFileListFilterType::Pointer readerPha = ReadFileListFilterType::New(); readerPha->SetFileList(_filesPha); readerPha->Update(); typename SortInvTimesImageFilterType::Pointer sorterPha = SortInvTimesImageFilterType::New(); sorterPha->SetInvTimesNonSorted(readerPha->GetInvTimes()); sorterPha->SetInput(readerPha->GetOutput()); sorterPha->Update(); if (sorterMag->GetInvTimesSorted() == sorterPha->GetInvTimesSorted()){ vnl_vector temp = sorterMag->GetInvTimesSorted(); _nSamples = temp.size(); _invTimes = new InputPixelType[_nSamples]; KWUtil::copyArrayToArray(_nSamples, _invTimes, temp.data_block()); } else { throw std::runtime_error("Mag and Pha inv times are not equal"); } _imageMag = sorterMag->GetOutput(); _imagePha = sorterPha->GetOutput(); if (_filesT1.size() > 0) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesT1.at(0)); reader->Update(); _imageT1color = reader->GetOutput(); } if (_filesT1.size() > 1) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesT1.at(1)); reader->Update(); _imageT1grey = reader->GetOutput(); } if (_filesFitparams.size() > 0) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesFitparams.at(0)); reader->Update(); _imageR2 = reader->GetOutput(); } if (_filesFitparams.size() > 1) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesFitparams.at(1)); reader->Update(); _imageA = reader->GetOutput(); } if (_filesFitparams.size() > 2) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesFitparams.at(2)); reader->Update(); _imageB = reader->GetOutput(); } if (_filesFitparams.size() > 3) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesFitparams.at(3)); reader->Update(); _imageT1star = reader->GetOutput(); } if (_filesFitparams.size() > 4) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesFitparams.at(4)); reader->Update(); _imageNShmolliSamplesUsed = reader->GetOutput(); } if (_filesFitparams.size() > 5) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesFitparams.at(5)); reader->Update(); _imageChiSqrt = reader->GetOutput(); } if (_filesFitparams.size() > 6) { typename itk::ImageFileReader::Pointer reader = itk::ImageFileReader::New(); reader->SetFileName(_filesFitparams.at(6)); reader->Update(); _imageSnr = reader->GetOutput(); } return 0; // EXIT_SUCCESS } template< typename MeasureType > int OriginalShmolliDicomReader ::visualise(){ #ifdef USE_VTK // visual presentation of the results if (_visualise) { // // see if pha is ok // typedef itk::ExtractImageFilter< Image3dType, Image2dType > ExtractFilterType; // ExtractFilterType::Pointer extractFilter = ExtractFilterType::New(); // // ExtractFilterType::InputImageIndexType extrindex; // extrindex.Fill(0); // extrindex[2] = 6; // ExtractFilterType::InputImageSizeType size = _imagePha->GetLargestPossibleRegion().GetSize(); // size[2] = 0; // ExtractFilterType::InputImageRegionType region = _imagePha->GetLargestPossibleRegion(); // region.SetSize(size); // region.SetIndex(extrindex); // extractFilter->SetExtractionRegion(region); // extractFilter->SetInput(_imagePha); // extractFilter->SetDirectionCollapseToSubmatrix(); QuickView viewer; viewer.AddImage(_imageT1color.GetPointer(), true, "T1 color"); viewer.AddImage(_imageT1grey.GetPointer(), true, "T1 grey"); viewer.AddImage(_imageR2.GetPointer(), true, "R2"); viewer.AddImage(_imageA.GetPointer(), true, "A"); viewer.AddImage(_imageB.GetPointer(), true, "B"); viewer.AddImage(_imageT1star.GetPointer(), true, "T1*"); viewer.AddImage(_imageChiSqrt.GetPointer(), true, "ChiSqrt"); viewer.AddImage(_imageSnr.GetPointer(), true, "SNR"); viewer.AddImage(_imageNShmolliSamplesUsed.GetPointer(), true, "Number of Samples used in reconstruction"); viewer.AddImage(_imageChiSqrt.GetPointer(), true, "ChiSqrt"); //viewer.SetViewPortSize(500); viewer.Visualize(); } #else // USE_VTK printf("Visualisation not possible: the project was configured not to use VTK. Install VTK and reconfigure the project in CMake."); //throw itk::ExceptionObject(__FILE__, __LINE__, "Visualisation not possible: the project was configured not to use VTK. Install VTK and reconfigure the project in CMake."); #endif // USE_VTK return 0; //EXIT_SUCCESS } template< typename MeasureType > int OriginalShmolliDicomReader ::copyFromImage(MeasureType* array, const typename Image3dType::Pointer image, const typename Image3dType::IndexType index){ typename Image3dType::SizeType size = image->GetLargestPossibleRegion().GetSize(); typename Image3dType::IndexType tempIndex = index; for (int i = 0; i < size[2]; ++i){ tempIndex[2] = i; array[i] = image->GetPixel(tempIndex); } return 0; //EXIT_SUCCESS } } // namespace Ox #endif //Tomato_OxOriginalShmolliDicomReader_H