Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
VerifyDICOMMitkImageDump.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 
13 #include "mitkTestDICOMLoading.h"
14 #include "mitkImage.h"
15 
16 std::vector<std::string> LoadDumps(const std::string& fileName)
17 {
18  std::vector<std::string> separatedDumps;
19 
20  std::ifstream fileStream( fileName.c_str() );
21 
22  std::string buffer;
23  std::string line;
24  while(fileStream){
25  std::getline(fileStream, line);
26 
27  if (line.find("-- Image ") == 0)
28  {
29  // separator: starts a new image block
30  if ( !buffer.empty() )
31  {
32  // unless this is the first block
33  separatedDumps.push_back(buffer);
34  buffer.clear();
35  }
36  }
37  else
38  {
39  buffer += line + "\n";
40  }
41  }
42  fileStream.close();
43 
44  // eat last image dump
45  if ( !buffer.empty() )
46  {
47  separatedDumps.push_back(buffer);
48  buffer.clear();
49  }
50 
51  return separatedDumps;
52 }
53 
54 
55 int main(int argc, char** argv)
56 {
64  if (argc < 2)
65  {
66  MITK_ERROR << "Usage:";
67  MITK_ERROR << " " << argv[0] << " reference.dump file1 [file2 .. fileN]";
68  MITK_ERROR << " ";
69  MITK_ERROR << " Loads all DICOM images in file1 to fileN as MITK images ";
70  MITK_ERROR << " and compares loaded images against stored expectations (dumps).";
71  MITK_ERROR << " See also DumpDICOMMitkImage (generates dumps)";
72  return EXIT_FAILURE;
73  }
74 
76  mitk::StringList files;
77 
78  // load from argv[1]
79  // separate at "-- Image n"
80  // store in an array of dumps
81 
82  std::vector<std::string> expectedDumps = LoadDumps(argv[1]);
83 
84  for (int arg = 2; arg < argc; ++arg) files.push_back( argv[arg] );
85 
87 
88  unsigned int imageCounter(0);
89  for ( mitk::TestDICOMLoading::ImageList::const_iterator imageIter = images.begin();
90  imageIter != images.end();
91  ++imageIter, ++imageCounter )
92  {
93  std::string imageDump = loader.DumpImageInformation( *imageIter );
94 
95  if (imageCounter >= expectedDumps.size())
96  {
97  MITK_ERROR << "Loader produces more images than expected. Aborting after image " << (imageCounter-1);
98  MITK_INFO << "Image " << imageCounter << " loaded as:\n" << imageDump;
99  return EXIT_FAILURE;
100  }
101 
102  bool loadedAsExpected = loader.CompareImageInformationDumps( expectedDumps[imageCounter], imageDump );
103  if (loadedAsExpected)
104  {
105  MITK_INFO << "Image " << imageCounter << " loads as expected.";
106  }
107  else
108  {
109  MITK_ERROR << "Image " << imageCounter << " did not load as expected.";
110  MITK_INFO << "Expected: \n" << expectedDumps[imageCounter] << "\nGot:\n" << imageDump;
111  return EXIT_FAILURE;
112  }
113  }
114 
115  if (images.size() < expectedDumps.size())
116  {
117  MITK_ERROR << "Loader produced only " << images.size() << " mitk::Images, while test expected " << expectedDumps.size() << " images";
118  return EXIT_FAILURE;
119  }
120 
121 
122  return EXIT_SUCCESS;
123 }
124 
static char * line
Definition: svm.cpp:2870
ImageVectorType images
#define MITK_INFO
Definition: mitkLogMacros.h:18
#define MITK_ERROR
Definition: mitkLogMacros.h:20
std::string DumpImageInformation(const Image *image)
Dump relevant image information for later comparison.
std::list< Image::Pointer > ImageList
std::vector< std::string > StringList
int main(int argc, char **argv)
ImageList LoadFiles(const StringList &files)
std::vector< std::string > LoadDumps(const std::string &fileName)
bool CompareImageInformationDumps(const std::string &reference, const std::string &test)
Compare two image information dumps.