diff --git a/Modules/DiffusionCmdApps/FiberProcessing/TractometryComparison.cpp b/Modules/DiffusionCmdApps/FiberProcessing/TractometryComparison.cpp index 8b980a8..8a42e74 100644 --- a/Modules/DiffusionCmdApps/FiberProcessing/TractometryComparison.cpp +++ b/Modules/DiffusionCmdApps/FiberProcessing/TractometryComparison.cpp @@ -1,133 +1,137 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center. 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 "mitkDiffusionCommandLineParser.h" #include #include #include #include #include #include #include #include #include #include #include #define _USE_MATH_DEFINES #include /*! \brief Join multiple tractograms */ int main(int argc, char* argv[]) { mitkDiffusionCommandLineParser parser; parser.setTitle("Fiber Statistics"); parser.setCategory("Fiber Tracking and Processing Methods"); parser.setContributor("MIC"); parser.setDescription("Output statistics about fiber lengths, weights, etc. to a file."); parser.setArgumentPrefix("--", "-"); parser.addArgument("tracts", "", mitkDiffusionCommandLineParser::StringList, "Input tracts:", "input tracts", us::Any(), false); parser.addArgument("images", "", mitkDiffusionCommandLineParser::StringList, "Input images:", "input images", us::Any(), false); parser.addArgument("out_file", "", mitkDiffusionCommandLineParser::String, "Output File:", "output file", us::Any(), false); + parser.addArgument("num_parcels", "", mitkDiffusionCommandLineParser::Int, "Number of parcels:", "", 15); std::map parsedArgs = parser.parseArguments(argc, argv); if (parsedArgs.size()==0) return EXIT_FAILURE; mitkDiffusionCommandLineParser::StringContainerType inFibs = us::any_cast(parsedArgs["tracts"]); mitkDiffusionCommandLineParser::StringContainerType inImages = us::any_cast(parsedArgs["images"]); std::string outfile = us::any_cast(parsedArgs["out_file"]); - int num_parcels = 20; + + int num_parcels = 15; + if (parsedArgs.count("num_parcels")) + num_parcels = us::any_cast(parsedArgs["num_parcels"]); try { std::vector< std::string > fib_names, img_names; auto input_tracts = mitk::DiffusionDataIOHelper::load_fibs(inFibs, &fib_names); auto input_images = mitk::DiffusionDataIOHelper::load_itk_images>(inImages, &img_names); bool add_header = !itksys::SystemTools::FileExists(outfile, true); std::ofstream statistics_file; statistics_file.open (outfile, std::ios_base::app); if (add_header) statistics_file << "method;tract_file;image_file;parcel;value" << std::endl; auto ref = input_tracts.at(0)->GetDeepCopy(); for (unsigned int i=0; iResampleSpline(1.0); { auto output = mitk::Tractometry::StaticResamplingTractometry(input_images.at(i), fib->GetDeepCopy(), num_parcels, ref); for (unsigned int r=0; r(r) << ";" << boost::lexical_cast(output.get(r,c)) << std::endl; } { auto output = mitk::Tractometry::NearestCentroidPointTractometry(input_images.at(i), fib->GetDeepCopy(), num_parcels, 1, 99, ref); for (unsigned int r=0; r(r) << ";" << boost::lexical_cast(output.at(r).get(c)) << std::endl; } { itk::TractParcellationFilter< itk::Image, itk::Image >::Pointer parcellator = itk::TractParcellationFilter< itk::Image, itk::Image >::New(); parcellator->SetInputImage(input_images.at(i)); parcellator->SetNumParcels(num_parcels); parcellator->SetInputTract(fib->GetDeepCopy()); parcellator->SetReferenceTract(ref); parcellator->Update(); itk::Image::Pointer out_image_pp = parcellator->GetOutput(1); itk::ImageRegionConstIterator< itk::Image > it(input_images.at(i), input_images.at(i)->GetLargestPossibleRegion()); itk::ImageRegionConstIterator< itk::Image > it2(out_image_pp, out_image_pp->GetLargestPossibleRegion()); while (!it.IsAtEnd()) { if (it2.Get()>0) statistics_file << "TractParcellationFilter;" << fib_names.at(i) << ";" << img_names.at(i) << ";" << boost::lexical_cast(it2.Get()-1) << ";" << boost::lexical_cast(it.Get()) << std::endl; ++it; ++it2; } } } statistics_file.close(); } catch (const itk::ExceptionObject& e) { std::cout << e.what(); return EXIT_FAILURE; } catch (std::exception& e) { std::cout << e.what(); return EXIT_FAILURE; } catch (...) { std::cout << "ERROR!?!"; return EXIT_FAILURE; } return EXIT_SUCCESS; }