diff --git a/Modules/DiffusionImaging/MiniApps/DicomFolderDump.cpp b/Modules/DiffusionImaging/MiniApps/DicomFolderDump.cpp new file mode 100644 index 0000000000..de7b606c92 --- /dev/null +++ b/Modules/DiffusionImaging/MiniApps/DicomFolderDump.cpp @@ -0,0 +1,85 @@ +/*=================================================================== + +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 "MiniAppManager.h" + +#include "mitkDicomSeriesReader.h" +#include "mitkProperties.h" +// CTK +#include "ctkCommandLineParser.h" +#include "mitkIOUtil.h" + + +int DicomFolderDump(int argc, char* argv[]) +{ + ctkCommandLineParser parser; + parser.setArgumentPrefix("--","-"); + // Add command line argument names + parser.addArgument("help", "h",ctkCommandLineParser::Bool, "Show this help text"); + parser.addArgument("xml", "x",ctkCommandLineParser::Bool, "Print a XML description of this modules command line interface"); + parser.addArgument("input", "i", ctkCommandLineParser::String, "Input folder",us::Any(),false); + parser.addArgument("output", "o", ctkCommandLineParser::String, "Output folder (ending with /)",us::Any(),false); + parser.addArgument("filename", "f", ctkCommandLineParser::String, "Output filename (incl. .nrrd)",us::Any(),false); + + map parsedArgs = parser.parseArguments(argc, argv); + + + // Show a help message + if ( parsedArgs.count("help") || parsedArgs.count("h")) + { + std::cout << parser.helpText(); + return EXIT_SUCCESS; + } + + std::string inputFolder = us::any_cast(parsedArgs["input"]); + std::string outputFolder = us::any_cast(parsedArgs["output"]); + std::string outFileName = us::any_cast(parsedArgs["filename"]); + + //check if DICOMTags have been set as property for mitk::Image + mitk::DicomSeriesReader::FileNamesGrouping seriesInFiles = mitk::DicomSeriesReader::GetSeries( inputFolder, true ); + std::list images; + std::map fileMap; + + // TODO sort series UIDs, implementation of map iterator might differ on different platforms (or verify this is a standard topic??) + for (mitk::DicomSeriesReader::FileNamesGrouping::const_iterator seriesIter = seriesInFiles.begin(); + seriesIter != seriesInFiles.end(); + ++seriesIter) + { + mitk::DicomSeriesReader::StringContainer files = seriesIter->second.GetFilenames(); + + mitk::DataNode::Pointer node = mitk::DicomSeriesReader::LoadDicomSeries( files ); + + if (node.IsNotNull()) + { + mitk::Image::Pointer image = dynamic_cast( node->GetData() ); + + images.push_back( image ); + fileMap.insert( std::pair(image,files)); + } + } + + // WARN: EXPECT ONLY ONE ITEM PER FOLDER + for ( std::list::const_iterator imageIter = images.begin(); + imageIter != images.end(); + ++imageIter ) + { + const mitk::Image::Pointer image = *imageIter; + mitk::IOUtil::SaveImage(image,outputFolder + outFileName); + } + return EXIT_SUCCESS; +} +RegisterDiffusionMiniApp(DicomFolderDump); diff --git a/Modules/DiffusionImaging/MiniApps/files.cmake b/Modules/DiffusionImaging/MiniApps/files.cmake index d8e72a7df5..26a8d5afb8 100644 --- a/Modules/DiffusionImaging/MiniApps/files.cmake +++ b/Modules/DiffusionImaging/MiniApps/files.cmake @@ -1,27 +1,28 @@ set(CPP_FILES mitkDiffusionMiniApps.cpp MiniAppManager.cpp BatchedFolderRegistration.cpp + DicomFolderDump.cpp FileFormatConverter.cpp TensorReconstruction.cpp TensorDerivedMapsExtraction.cpp QballReconstruction.cpp DiffusionIndices.cpp ExtractImageStatistics.cpp CopyGeometry.cpp GibbsTracking.cpp StreamlineTracking.cpp FiberProcessing.cpp LocalDirectionalFiberPlausibility.cpp #TractogramAngularError.cpp FiberDirectionExtraction.cpp PeakExtraction.cpp PeaksAngularError.cpp MultishellMethods.cpp #FiberFoxProcessing.cpp ExportShImage.cpp NetworkCreation.cpp NetworkStatistics.cpp DwiDenoising.cpp )