1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
19 #ifndef CLITKIMAGECOMMON_CXX
20 #define CLITKIMAGECOMMON_CXX
22 #include "clitkImageCommon.h"
24 //--------------------------------------------------------------------
25 void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
27 std::string & pixeType)
29 itk::ImageIOBase::Pointer genericReader =
30 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
32 clitkExceptionMacro("Image file format unknown while reading file <" << filename << ">");
34 genericReader->SetFileName(filename.c_str());
35 genericReader->ReadImageInformation();
36 pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
37 dimension = genericReader->GetNumberOfDimensions();
39 //--------------------------------------------------------------------
42 //--------------------------------------------------------------------
43 void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
45 std::string & pixeType, int & components)
47 itk::ImageIOBase::Pointer genericReader =
48 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
50 clitkExceptionMacro("Image file format unknown while reading file <" << filename << ">");
52 genericReader->SetFileName(filename.c_str());
53 genericReader->ReadImageInformation();
54 pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
55 dimension = genericReader->GetNumberOfDimensions();
56 components= genericReader->GetNumberOfComponents();
58 //--------------------------------------------------------------------
60 //--------------------------------------------------------------------
61 // Read a dicom header
62 gdcm::File * clitk::readDicomHeader(const std::string & filename,
66 std::cout << "Reading DICOM <" << filename << ">" << std::endl;
68 gdcm::File *header = new gdcm::File();
69 header->SetFileName(filename);
70 header->SetMaxSizeLoadEntry(16384); // required ?
74 ///--------------------------------------------------------------------
76 //--------------------------------------------------------------------
77 itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename, bool exit_on_error)
79 itk::ImageIOBase::Pointer reader =
80 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
82 if (exit_on_error) { //default behavior for tools who don't handle the problem
83 clitkExceptionMacro("Error reading file " << filename << ", exiting immediately");
86 reader->SetFileName(filename);
87 reader->ReadImageInformation();
90 //--------------------------------------------------------------------
92 //--------------------------------------------------------------------
93 void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level)
95 unsigned int dim = header->GetNumberOfDimensions();
96 std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
97 std::vector<int> inputSize;
98 std::vector<double> inputSpacing;
99 std::vector<double> inputOrigin;
100 inputSize.resize(dim);
101 inputSpacing.resize(dim);
102 inputOrigin.resize(dim);
103 for(unsigned int i=0; i<dim; i++) {
104 inputSpacing[i] = header->GetSpacing(i);
105 inputSize[i] = header->GetDimensions(i);
106 inputOrigin[i] = header->GetOrigin(i);
109 clitk::GetTypeSizeFromString(header->GetComponentTypeAsString(header->GetComponentType()));
110 unsigned int nbOfComponents = header->GetNumberOfComponents();
113 if (nbOfComponents !=1) os << nbOfComponents << "x" << pixelTypeName;
114 else os << pixelTypeName;
116 for(unsigned int i=0; i< dim-1; i++)
117 os << inputSize[i] << "x";
118 os << inputSize[dim-1]
120 for(unsigned int i=0; i< dim-1; i++)
121 os << inputSpacing[i] << "x";
122 os << inputSpacing[dim-1]
124 for(unsigned int i=0; i< dim-1; i++)
125 os << inputOrigin[i] << "x";
126 os << inputOrigin[dim-1] << " ";
127 os << header->GetImageSizeInPixels() << " ";
129 os << "Dim = " << dim << "D" << std::endl;
130 os << "PixelType = " << pixelTypeName << std::endl;
131 if (nbOfComponents > 1)
132 os << "Vector = " << nbOfComponents << std::endl;
134 for(unsigned int i=0; i< dim; i++) {
135 os << inputSize[i] << " ";
139 for(unsigned int i=0; i< dim; i++) {
140 os << inputSpacing[i] << " ";
144 os << "# voxels = " << header->GetImageSizeInPixels() << std::endl;
145 os << "Size (mm) = ";
146 for(unsigned int i=0; i< dim; i++) {
147 os << inputSize[i]*inputSpacing[i] << " ";
149 os << "mm" << std::endl;
150 os << "Origin (mm)= ";
151 for(unsigned int i=0; i< dim; i++) {
152 os << inputOrigin[i] << " ";
154 os << "mm" << std::endl;
158 for(unsigned int i=0; i< dim; i++) {
159 vol *= inputSize[i]*inputSpacing[i]/10.0;
161 os << vol << " cc" << std::endl;
162 int mem = header->GetImageSizeInPixels()*pixelSize*nbOfComponents;
163 double memKb = (double)mem/1024.0;
164 double memMb = (double)mem/1024.0/1024.0;
165 double memGb = (double)mem/1024.0/1024.0/1024.0;
166 if (lrint(memKb) <= 0)
167 os << "Memory = " << mem << " bytes" << std::endl;
169 if (lrint(memMb) <= 0)
170 os << "Memory = " << memKb << " Kb (" << mem << " bytes)" << std::endl;
172 if (lrint(memGb) <= 0)
173 os << "Memory = " << memMb << " Mb (" << mem << " bytes)" << std::endl;
175 os << "Memory = " << memGb << " Gb (" << mem << " bytes)" << std::endl;
181 //--------------------------------------------------------------------
183 #endif /* end #define CLITKIMAGECOMMON_CXX */