diff --git a/Modules/DiffusionImaging/cmdapps/CMakeLists.txt b/Modules/DiffusionImaging/cmdapps/CMakeLists.txt index 20aa2b0828..6ee4d6b149 100755 --- a/Modules/DiffusionImaging/cmdapps/CMakeLists.txt +++ b/Modules/DiffusionImaging/cmdapps/CMakeLists.txt @@ -1,58 +1,59 @@ if(BUILD_DiffusionCmdApps OR MITK_BUILD_ALL_APPS) # needed include directories include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) # list of diffusion cmdapps # if an app requires additional dependencies # they are added after a "^^" and separated by "_" set( diffusioncmdapps NetworkCreation^^MitkFiberTracking_MitkConnectomics NetworkStatistics^^MitkConnectomics Fiberfox^^MitkFiberTracking MultishellMethods^^MitkFiberTracking PeaksAngularError^^MitkFiberTracking PeakExtraction^^MitkFiberTracking FiberExtraction^^MitkFiberTracking FiberProcessing^^MitkFiberTracking FiberDirectionExtraction^^MitkFiberTracking # LocalDirectionalFiberPlausibility^^MitkFiberTracking # HAS TO USE NEW PEAK IMAGE FORMAT StreamlineTracking^^MitkFiberTracking GibbsTracking^^MitkFiberTracking TractometerMetrics^^MitkFiberTracking FileFormatConverter^^MitkFiberTracking RfTraining^^MitkFiberTracking TractDensity^^MitkFiberTracking + Sift2WeightCopy^^MitkFiberTracking ) foreach(diffusioncmdapp ${diffusioncmdapps}) # extract cmd app name and dependencies string(REPLACE "^^" "\\;" cmdapp_info ${diffusioncmdapp}) set(cmdapp_info_list ${cmdapp_info}) list(GET cmdapp_info_list 0 appname) list(GET cmdapp_info_list 1 raw_dependencies) string(REPLACE "_" "\\;" dependencies "${raw_dependencies}") set(dependencies_list ${dependencies}) mitkFunctionCreateCommandLineApp( NAME ${appname} DEPENDS MitkCore MitkDiffusionCore ${dependencies_list} PACKAGE_DEPENDS ITK ) endforeach() # This cmd app does not depend on mitkDiffusionImaging at all mitkFunctionCreateCommandLineApp( NAME Dicom2Nrrd DEPENDS MitkCore ${dependencies_list} ) if(EXECUTABLE_IS_ENABLED) MITK_INSTALL_TARGETS(EXECUTABLES ${EXECUTABLE_TARGET}) endif() endif() diff --git a/Modules/DiffusionImaging/cmdapps/Sift2WeightCopy.cpp b/Modules/DiffusionImaging/cmdapps/Sift2WeightCopy.cpp new file mode 100644 index 0000000000..4b31ae6801 --- /dev/null +++ b/Modules/DiffusionImaging/cmdapps/Sift2WeightCopy.cpp @@ -0,0 +1,120 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include "mitkCommandLineParser.h" +#include +#include +#include +#include +#include + + +mitk::FiberBundle::Pointer LoadFib(std::string filename) +{ + std::vector fibInfile = mitk::IOUtil::Load(filename); + if( fibInfile.empty() ) + std::cout << "File " << filename << " could not be read!"; + mitk::BaseData::Pointer baseData = fibInfile.at(0); + return dynamic_cast(baseData.GetPointer()); +} + +/*! +\brief Import Sift2 Fiber Weights txt file. +*/ +int main(int argc, char* argv[]) +{ + mitkCommandLineParser parser; + + parser.setTitle("Sift2 Fiber Weight Import"); + parser.setCategory("Fiber Tracking and Processing Methods"); + parser.setDescription("Import sift2 fiber weights."); + parser.setContributor("MBI"); + + parser.setArgumentPrefix("--", "-"); + parser.addArgument("input", "i", mitkCommandLineParser::String, "Input:", "input fiber bundle", us::Any(), false); + parser.addArgument("weights", "w", mitkCommandLineParser::String, "Weights:", "input weights file (.txt)", us::Any(), false); + parser.addArgument("output", "o", mitkCommandLineParser::String, "Output:", "output fiber bundle", us::Any(), false); + + + std::map parsedArgs = parser.parseArguments(argc, argv); + if (parsedArgs.size()==0) + return EXIT_FAILURE; + + bool binary = false; + if (parsedArgs.count("binary")) + binary = us::any_cast(parsedArgs["binary"]); + + bool endpoints = false; + if (parsedArgs.count("endpoints")) + endpoints = us::any_cast(parsedArgs["endpoints"]); + + std::string reference_image = ""; + if (parsedArgs.count("reference_image")) + reference_image = us::any_cast(parsedArgs["reference_image"]); + + std::string inFileName = us::any_cast(parsedArgs["input"]); + std::string weightsFileName = us::any_cast(parsedArgs["weights"]); + std::string outFileName = us::any_cast(parsedArgs["output"]); + + try + { + mitk::FiberBundle::Pointer fib = LoadFib(inFileName); + + std::ifstream fin; + fin.open(weightsFileName); + if (!fin.good()) + return 1; // exit if file not found + + std::vector weights; + for (float d; fin >> d; ) { weights.push_back(d); } + + for(int i = 0; i != weights.size(); i++) { + fib->SetFiberWeight(i, weights[i]); + } + + mitk::IOUtil::SaveBaseData(fib.GetPointer(), outFileName ); + } + 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; +}