Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
CLPolyToNrrd.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 #ifndef mitkCLPolyToNrrd_cpp
13 #define mitkCLPolyToNrrd_cpp
14 
15 #include "time.h"
16 #include <sstream>
17 
18 #include <mitkIOUtil.h>
19 #include <vtkPolyData.h>
20 #include <vtkCellArray.h>
21 #include <mitkSurface.h>
22 
23 #include "mitkCommandLineParser.h"
24 
26 #include <vtkSmartPointer.h>
27 #include <vtkLinearExtrusionFilter.h>
30 
31 
32 
33 typedef itk::Image< double, 3 > FloatImageType;
34 typedef itk::Image< unsigned char, 3 > MaskImageType;
35 
36 int main(int argc, char* argv[])
37 {
38  mitkCommandLineParser parser;
39  parser.setArgumentPrefix("--", "-");
40  // required params
41  parser.addArgument("polydata", "p", mitkCommandLineParser::Directory, "Input Polydata", "Path to the input VTK polydata", us::Any(), false, false, false, mitkCommandLineParser::Input);
42  parser.addArgument("image", "i", mitkCommandLineParser::Directory, "Input Image", "Image which defines the dimensions of the Segmentation", us::Any(), false, false, false, mitkCommandLineParser::Output);
43  parser.addArgument("output", "o", mitkCommandLineParser::File, "Output file", "Output files. Two files are create, a .nrrd image and a 3d-vtk.", us::Any(), false, false, false, mitkCommandLineParser::Input);
44  // Miniapp Infos
45  parser.setCategory("Classification Tools");
46  parser.setTitle("2D-Polydata to Nrrd Segmentation");
47  parser.setDescription("Creates a Nrrd segmentation based on a 2d-vtk polydata.");
48  parser.setContributor("German Cancer Research Center (DKFZ)");
49 
50  std::map<std::string, us::Any> parsedArgs = parser.parseArguments(argc, argv);
51 
52  if (parsedArgs.size()==0)
53  {
54  return EXIT_FAILURE;
55  }
56  if ( parsedArgs.count("help") || parsedArgs.count("h"))
57  {
58  return EXIT_SUCCESS;
59  }
60 
61  mitk::BaseData::Pointer data = mitk::IOUtil::Load(parsedArgs["polydata"].ToString())[0];
62  mitk::Image::Pointer image = mitk::IOUtil::Load<mitk::Image>(parsedArgs["image"].ToString());
63 
64  //MITK_INFO << data;
65  mitk::Surface::Pointer surf = dynamic_cast<mitk::Surface*>(data.GetPointer());
66  vtkSmartPointer<vtkPolyData> circle = surf->GetVtkPolyData();
67 
68  vtkSmartPointer<vtkLinearExtrusionFilter> extruder =
69  vtkSmartPointer<vtkLinearExtrusionFilter>::New();
70 
71  extruder->SetInputData(circle);
72  image->GetGeometry()->GetSpacing()[2];
73  extruder->SetScaleFactor(1.);
74  extruder->SetExtrusionTypeToNormalExtrusion();
75  extruder->SetVector(0, 0, image->GetGeometry()->GetSpacing()[2]);
76  extruder->Update();
77  surf->SetVtkPolyData(extruder->GetOutput());
78 
80  surfaceToImageFilter->MakeOutputBinaryOn();
81  surfaceToImageFilter->SetInput(surf);
82  surfaceToImageFilter->SetImage(image);
83  surfaceToImageFilter->Update();
84  mitk::Image::Pointer resultImage = surfaceToImageFilter->GetOutput();
85 
87  multiFilter->SetInput(resultImage);
88  multiFilter->Update();
89  resultImage = multiFilter->GetOutput();
90 
91  std::string saveAs = parsedArgs["output"].ToString();
92  MITK_INFO << "Save as: " << saveAs;
93  saveAs = saveAs + ".vtk";
94  mitk::IOUtil::Save(surf.GetPointer(),saveAs);
95 
96  saveAs = parsedArgs["output"].ToString();
97  MITK_INFO << "Save as: " << saveAs;
98  saveAs = saveAs + ".nrrd";
99  mitk::IOUtil::Save(resultImage,saveAs);
100 
101  return 0;
102 }
103 
104 #endif
Class for storing surfaces (vtkPolyData).
Definition: mitkSurface.h:28
virtual vtkPolyData * GetVtkPolyData(unsigned int t=0) const
#define MITK_INFO
Definition: mitkLogMacros.h:18
itk::Image< unsigned char, 3 > MaskImageType
void setContributor(std::string contributor)
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)
Definition: usAny.h:163
void setCategory(std::string category)
mitk::Image::Pointer image
void setArgumentPrefix(const std::string &longPrefix, const std::string &shortPrefix)
itk::Image< double, 3 > FloatImageType
static void Save(const mitk::BaseData *data, const std::string &path, bool setPathProperty=false)
Save a mitk::BaseData instance.
Definition: mitkIOUtil.cpp:774
int main(int argc, char *argv[])
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