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 ======================================================================-====*/
18 #ifndef CLITKIMAGECOMMON_CXX
19 #define CLITKIMAGECOMMON_CXX
21 ------------------------------------------------=
22 * @file clitkImageCommon.cxx
23 * @author David Sarrut <david.sarrut@creatis.insa-lyon.fr>
24 * @date 02 Oct 2007 14:30:47
29 ------------------------------------------------=*/
31 #include "clitkImageCommon.h"
33 //--------------------------------------------------------------------
34 void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
36 std::string & pixeType) {
37 itk::ImageIOBase::Pointer genericReader =
38 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
40 std::cerr << "Image file format unknown while reading " << filename << std::endl;
43 genericReader->SetFileName(filename.c_str());
44 genericReader->ReadImageInformation();
45 pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
46 dimension = genericReader->GetNumberOfDimensions();
48 //--------------------------------------------------------------------
51 //--------------------------------------------------------------------
52 void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
54 std::string & pixeType, int & components) {
55 itk::ImageIOBase::Pointer genericReader =
56 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
58 std::cerr << "Image file format unknown while reading " << filename << std::endl;
61 genericReader->SetFileName(filename.c_str());
62 genericReader->ReadImageInformation();
63 pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
64 dimension = genericReader->GetNumberOfDimensions();
65 components= genericReader->GetNumberOfComponents();
67 //--------------------------------------------------------------------
69 //--------------------------------------------------------------------
70 // Read a dicom header
71 gdcm::File * clitk::readDicomHeader(const std::string & filename,
74 std::cout << "Reading DICOM <" << filename << ">" << std::endl;
76 gdcm::File *header = new gdcm::File();
77 header->SetFileName(filename);
78 header->SetMaxSizeLoadEntry(16384); // required ?
82 //--------------------------------------------------------------------
84 //--------------------------------------------------------------------
85 itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename, bool exit_on_error) {
86 itk::ImageIOBase::Pointer reader =
87 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
89 if (exit_on_error) //default behavior for tools who don't handle the problem
91 std::cerr << "Error reading file " << filename << ", exiting immediately" << std::endl;
97 reader->SetFileName(filename);
98 reader->ReadImageInformation();
101 //--------------------------------------------------------------------
103 //--------------------------------------------------------------------
104 void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level) {
105 unsigned int dim = header->GetNumberOfDimensions();
106 std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
107 std::vector<int> inputSize;
108 std::vector<double> inputSpacing;
109 std::vector<double> inputOrigin;
110 inputSize.resize(dim);
111 inputSpacing.resize(dim);
112 inputOrigin.resize(dim);
113 for(unsigned int i=0; i<dim; i++) {
114 inputSpacing[i] = header->GetSpacing(i);
115 inputSize[i] = header->GetDimensions(i);
116 inputOrigin[i] = header->GetOrigin(i);
119 clitk::GetTypeSizeFromString(header->GetComponentTypeAsString(header->GetComponentType()));
120 unsigned int nbOfComponents = header->GetNumberOfComponents();
123 if (nbOfComponents !=1) os << nbOfComponents << "x" << pixelTypeName;
124 else os << pixelTypeName;
126 for(unsigned int i=0; i< dim-1; i++)
127 os << inputSize[i] << "x";
128 os << inputSize[dim-1]
130 for(unsigned int i=0; i< dim-1; i++)
131 os << inputSpacing[i] << "x";
132 os << inputSpacing[dim-1]
134 for(unsigned int i=0; i< dim-1; i++)
135 os << inputOrigin[i] << "x";
136 os << inputOrigin[dim-1] << " ";
139 os << "Dim = " << dim << "D" << std::endl;
140 os << "PixelType = " << pixelTypeName << std::endl;
141 if (nbOfComponents > 1)
142 os << "Vector = " << nbOfComponents << std::endl;
144 for(unsigned int i=0; i< dim; i++) {
145 os << inputSize[i] << " ";
149 for(unsigned int i=0; i< dim; i++) {
150 os << inputSpacing[i] << " ";
154 os << "# voxels = " << header->GetImageSizeInPixels() << std::endl;
155 os << "Size (mm) = ";
156 for(unsigned int i=0; i< dim; i++) {
157 os << inputSize[i]*inputSpacing[i] << " ";
159 os << "mm" << std::endl;
160 os << "Origin (mm)= ";
161 for(unsigned int i=0; i< dim; i++) {
162 os << inputOrigin[i] << " ";
164 os << "mm" << std::endl;
168 for(unsigned int i=0; i< dim; i++) {
169 vol *= inputSize[i]*inputSpacing[i]/10.0;
171 os << vol << " cc" << std::endl;
172 int mem = header->GetImageSizeInPixels()*pixelSize*nbOfComponents;
173 double memKb = (double)mem/1024.0;
174 double memMb = (double)mem/1024.0/1024.0;
175 double memGb = (double)mem/1024.0/1024.0/1024.0;
176 if (lrint(memKb) <= 0)
177 os << "Memory = " << mem << " bytes" << std::endl;
179 if (lrint(memMb) <= 0)
180 os << "Memory = " << memKb << " Kb (" << mem << " bytes)" << std::endl;
182 if (lrint(memGb) <= 0)
183 os << "Memory = " << memMb << " Mb (" << mem << " bytes)" << std::endl;
185 os << "Memory = " << memGb << " Gb (" << mem << " bytes)" << std::endl;
191 //--------------------------------------------------------------------
193 #endif /* end #define CLITKIMAGECOMMON_CXX */