Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
ResampleMask.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 #include "mitkProperties.h"
13 
14 #include "mitkCommandLineParser.h"
15 #include "mitkIOUtil.h"
16 
18 
19 int main(int argc, char* argv[])
20 {
21  mitkCommandLineParser parser;
22 
23  parser.setTitle("Mask Outlier filtering");
24  parser.setCategory("Basic Image Processing");
25  parser.setDescription("");
26  parser.setContributor("German Cancer Research Center (DKFZ)");
27 
28  parser.setArgumentPrefix("--", "-");
29  // Add command line argument names
30  parser.addArgument("help", "h", mitkCommandLineParser::Bool, "Help:", "Show this help text");
31  parser.addArgument("image", "i", mitkCommandLineParser::File, "Input image:", "Input Image", us::Any(), false, false, false, mitkCommandLineParser::Input);
32  parser.addArgument("output", "o", mitkCommandLineParser::File, "Output file:", "Output Mask", us::Any(), false, false, false, mitkCommandLineParser::Output);
33 
34  parser.addArgument("spacing-x", "x", mitkCommandLineParser::Float, "Spacing in x direction", "Spacing in x direction", us::Any(), false);
35  parser.addArgument("spacing-y", "y", mitkCommandLineParser::Float, "Spacing in y direction", "Spacing in y direction", us::Any(), false);
36  parser.addArgument("spacing-z", "z", mitkCommandLineParser::Float, "Spacing in z direction", "Spacing in z direction", us::Any(), false);
37 
38  parser.addArgument("mapping-type", "mapping", mitkCommandLineParser::Int, "0: Origin aligned, 1: Center aligned, 3: Same size", "0: Origin aligned, 1: Center aligned, 3: Same size", us::Any(), true);
39  parser.addArgument("interpolator-type", "interpolator", mitkCommandLineParser::Int, "0: Linear, 1: BSpline 3, 2: Nearest Neighbour, 3: WSinc Hamming, 4: WSinc Welch", "0: Linear, 1: BSpline 3, 2: Nearest Neighbour, 3: WSinc Hamming, 4: WSinc Welch", us::Any(), true);
40 
41  std::map<std::string, us::Any> parsedArgs = parser.parseArguments(argc, argv);
42 
43  if (parsedArgs.size() == 0)
44  return EXIT_FAILURE;
45 
46  // Show a help message
47  if (parsedArgs.count("help") || parsedArgs.count("h"))
48  {
49  std::cout << parser.helpText();
50  return EXIT_SUCCESS;
51  }
52 
53  std::string inputFilename = us::any_cast<std::string>(parsedArgs["image"]);
54  std::string outputFilename = us::any_cast<std::string>(parsedArgs["output"]);
55 
56  auto nodes = mitk::IOUtil::Load(inputFilename);
57  if (nodes.size() == 0)
58  {
59  MITK_INFO << "No Image Loaded";
60  return 0;
61  }
62  mitk::Image::Pointer image = dynamic_cast<mitk::Image*>(nodes[0].GetPointer());
63 
64  if (image.IsNull())
65  {
66  MITK_INFO << "Loaded data (image) is not of type image";
67  return 0;
68  }
69 
70  mitk::Vector3D spacing;
71  spacing[0] = us::any_cast<float>(parsedArgs["spacing-x"]);
72  spacing[1] = us::any_cast<float>(parsedArgs["spacing-y"]);
73  spacing[2] = us::any_cast<float>(parsedArgs["spacing-z"]);
74 
75  int interpolator = 0;
76  if (parsedArgs.count("interpolator-type"))
77  {
78  interpolator = us::any_cast<int>(parsedArgs["interpolator-type"]);
79  }
80 
81  mitk::ImageMappingInterpolator::Type interpolatorType;
82  switch (interpolator)
83  {
84  case 0:
85  interpolatorType = mitk::ImageMappingInterpolator::Linear;
86  break;
87 
88  case 1:
90  break;
91 
92  case 2:
94  break;
95 
96  case 3:
98  break;
99 
100  case 4:
102  break;
103 
104  default:
105  interpolatorType = mitk::ImageMappingInterpolator::Linear;
106  }
107 
108  int position = 0;
109  if (parsedArgs.count("mapping-type"))
110  {
111  position = us::any_cast<int>(parsedArgs["mapping-type"]);
112  }
113 
115  switch (position)
116  {
117  case 0:
119  break;
120 
121  case 1:
123  break;
124 
125  case 2:
127  break;
128 
129  default:
131  }
132 
133  mitk::Image::Pointer tmpImage = mitk::TransformationOperation::ResampleMask(image, spacing, interpolatorType, gridPosition);
134  mitk::IOUtil::Save(tmpImage, outputFilename);
135 
136 
137  return EXIT_SUCCESS;
138 }
static Image::Pointer ResampleMask(Image::Pointer &image, mitk::Vector3D spacing, mitk::ImageMappingInterpolator::Type interpolator, GridInterpolationPositionType position)
#define MITK_INFO
Definition: mitkLogMacros.h:18
std::string inputFilename
Definition: MitkMCxyz.cpp:625
void setContributor(std::string contributor)
ValueType * any_cast(Any *operand)
Definition: usAny.h:377
void addArgument(const std::string &longarg, const std::string &shortarg, Type type, const std::string &argLabel, const std::string &argHelp=std::string(), const us::Any &defaultValue=us::Any(), bool optional=true, bool ignoreRest=false, bool deprecated=false, mitkCommandLineParser::Channel channel=mitkCommandLineParser::Channel::None)
std::map< std::string, us::Any > parseArguments(const StringContainerType &arguments, bool *ok=nullptr)
std::string outputFilename
Definition: MitkMCxyz.cpp:626
Image class for storing images.
Definition: mitkImage.h:72
Definition: usAny.h:163
int main(int argc, char *argv[])
std::string helpText() const
void setCategory(std::string category)
mitk::Image::Pointer image
void setArgumentPrefix(const std::string &longPrefix, const std::string &shortPrefix)
static void Save(const mitk::BaseData *data, const std::string &path, bool setPathProperty=false)
Save a mitk::BaseData instance.
Definition: mitkIOUtil.cpp:774
void setTitle(std::string title)
void setDescription(std::string description)
static DataStorage::SetOfObjects::Pointer Load(const std::string &path, DataStorage &storage, const ReaderOptionsFunctorBase *optionsCallback=nullptr)
Load a file into the given DataStorage.
Definition: mitkIOUtil.cpp:489