diff --git a/Modules/DiffusionImaging/DiffusionCore/cmdapps/DImp.cpp b/Modules/DiffusionImaging/DiffusionCore/cmdapps/DImp.cpp new file mode 100644 index 0000000000..7b5aa3b823 --- /dev/null +++ b/Modules/DiffusionImaging/DiffusionCore/cmdapps/DImp.cpp @@ -0,0 +1,67 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include +#include +#include +#include "mitkCommandLineParser.h" + +/*! +\brief Copies transformation matrix of one image to another +*/ +int main(int argc, char* argv[]) +{ + mitkCommandLineParser parser; + + parser.setTitle("DIMP"); + parser.setCategory("Preprocessing Tools"); + parser.setDescription("TEMPORARY: Converts DICOM to other image types"); + parser.setContributor("MIC"); + + parser.setArgumentPrefix("--", "-"); + parser.addArgument("in", "i", mitkCommandLineParser::InputFile, "Input:", "input image", us::Any(), false); + parser.addArgument("out", "o", mitkCommandLineParser::OutputFile, "Output:", "output image", us::Any(), false); + + std::map parsedArgs = parser.parseArguments(argc, argv); + if (parsedArgs.size()==0) + return EXIT_FAILURE; + + // mandatory arguments + std::string imageName = us::any_cast(parsedArgs["in"]); + std::string outImage = us::any_cast(parsedArgs["out"]); + + try + { + mitk::Image::Pointer source = dynamic_cast(mitk::IOUtil::Load(imageName)[0].GetPointer()); + mitk::IOUtil::Save(source, outImage); + } + catch (itk::ExceptionObject e) + { + std::cout << e; + return EXIT_FAILURE; + } + catch (std::exception e) + { + std::cout << e.what(); + return EXIT_FAILURE; + } + catch (...) + { + std::cout << "ERROR!?!"; + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} diff --git a/Modules/DiffusionImaging/DiffusionCore/cmdapps/DReg.cpp b/Modules/DiffusionImaging/DiffusionCore/cmdapps/DReg.cpp new file mode 100644 index 0000000000..d129043cb9 --- /dev/null +++ b/Modules/DiffusionImaging/DiffusionCore/cmdapps/DReg.cpp @@ -0,0 +1,133 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include +#include +#include +#include "mitkCommandLineParser.h" +#include +#include +#include +#include +#include +#include +#include + +typedef mitk::DiffusionPropertyHelper DPH; +/*! +\brief Copies transformation matrix of one image to another +*/ +int main(int argc, char* argv[]) +{ + mitkCommandLineParser parser; + + parser.setTitle("DREG"); + parser.setCategory("Preprocessing Tools"); + parser.setDescription("TEMPORARY: Rigid registration of two images"); + parser.setContributor("MIC"); + + parser.setArgumentPrefix("--", "-"); + parser.addArgument("", "f", mitkCommandLineParser::InputFile, "Fixed:", "fixed image", us::Any(), false); + parser.addArgument("", "m", mitkCommandLineParser::InputFile, "Moving:", "moving image", us::Any(), false); + parser.addArgument("", "o", mitkCommandLineParser::OutputFile, "Output:", "output image", us::Any(), false); + + std::map parsedArgs = parser.parseArguments(argc, argv); + if (parsedArgs.size()==0) + return EXIT_FAILURE; + + // mandatory arguments + std::string f = us::any_cast(parsedArgs["f"]); + std::string m = us::any_cast(parsedArgs["m"]); + std::string o = us::any_cast(parsedArgs["o"]); + + try + { + typedef itk::Image< float, 3 > ItkFloatImageType; + + mitk::Image::Pointer fixed = dynamic_cast(mitk::IOUtil::Load(f)[0].GetPointer()); + mitk::Image::Pointer moving = dynamic_cast(mitk::IOUtil::Load(m)[0].GetPointer()); + mitk::Image::Pointer fixed_single = fixed; + mitk::Image::Pointer moving_single = moving; + + mitk::MultiModalRigidDefaultRegistrationAlgorithm< ItkFloatImageType >::Pointer algo = mitk::MultiModalRigidDefaultRegistrationAlgorithm< ItkFloatImageType >::New(); + mitk::MITKAlgorithmHelper helper(algo); + + if (mitk::DiffusionPropertyHelper::IsDiffusionWeightedImage(fixed)) + { + DPH::ImageType::Pointer itkVectorImagePointer = DPH::ImageType::New(); + mitk::CastToItkImage(fixed, itkVectorImagePointer); + + itk::ExtractDwiChannelFilter< short >::Pointer filter = itk::ExtractDwiChannelFilter< short >::New(); + filter->SetInput( itkVectorImagePointer); + filter->SetChannelIndex(0); + filter->Update(); + + fixed_single = mitk::Image::New(); + fixed_single->InitializeByItk( filter->GetOutput() ); + fixed_single->SetImportChannel( filter->GetOutput()->GetBufferPointer() ); + } + + if (mitk::DiffusionPropertyHelper::IsDiffusionWeightedImage(moving)) + { + DPH::ImageType::Pointer itkVectorImagePointer = DPH::ImageType::New(); + mitk::CastToItkImage(moving, itkVectorImagePointer); + + itk::ExtractDwiChannelFilter< short >::Pointer filter = itk::ExtractDwiChannelFilter< short >::New(); + filter->SetInput( itkVectorImagePointer); + filter->SetChannelIndex(0); + filter->Update(); + + moving_single = mitk::Image::New(); + moving_single->InitializeByItk( filter->GetOutput() ); + moving_single->SetImportChannel( filter->GetOutput()->GetBufferPointer() ); + } + + helper.SetData(moving_single, fixed_single); + mitk::MAPRegistrationWrapper::Pointer reg = helper.GetMITKRegistrationWrapper(); + + mitk::Image::Pointer registered_image = mitk::ImageMappingHelper::refineGeometry(moving, reg, true); + + if (mitk::DiffusionPropertyHelper::IsDiffusionWeightedImage(registered_image)) + { + mitk::DiffusionPropertyHelper propertyHelper( registered_image ); + propertyHelper.InitializeImage(); + + std::string file_extension = itksys::SystemTools::GetFilenameExtension(o); + if (file_extension==".nii" || file_extension==".nii.gz") + mitk::IOUtil::Save(registered_image, "application/vnd.mitk.nii.gz", o); + else + mitk::IOUtil::Save(registered_image, o); + } + else + mitk::IOUtil::Save(registered_image, o); + } + catch (itk::ExceptionObject e) + { + std::cout << e; + return EXIT_FAILURE; + } + catch (std::exception e) + { + std::cout << e.what(); + return EXIT_FAILURE; + } + catch (...) + { + std::cout << "ERROR!?!"; + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +}