1 #ifndef CLITKIMAGECOMMON_CXX
2 #define CLITKIMAGECOMMON_CXX
4 ------------------------------------------------=
5 * @file clitkImageCommon.cxx
6 * @author David Sarrut <david.sarrut@creatis.insa-lyon.fr>
7 * @date 02 Oct 2007 14:30:47
12 ------------------------------------------------=*/
14 #include "clitkImageCommon.h"
16 //--------------------------------------------------------------------
17 void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
19 std::string & pixeType) {
20 itk::ImageIOBase::Pointer genericReader =
21 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
23 std::cerr << "Image file format unknown while reading " << filename << std::endl;
26 genericReader->SetFileName(filename.c_str());
27 genericReader->ReadImageInformation();
28 pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
29 dimension = genericReader->GetNumberOfDimensions();
31 //--------------------------------------------------------------------
34 //--------------------------------------------------------------------
35 void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
37 std::string & pixeType, int & components) {
38 itk::ImageIOBase::Pointer genericReader =
39 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
41 std::cerr << "Image file format unknown while reading " << filename << std::endl;
44 genericReader->SetFileName(filename.c_str());
45 genericReader->ReadImageInformation();
46 pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
47 dimension = genericReader->GetNumberOfDimensions();
48 components= genericReader->GetNumberOfComponents();
50 //--------------------------------------------------------------------
52 //--------------------------------------------------------------------
53 // Read a dicom header
54 gdcm::File * clitk::readDicomHeader(const std::string & filename,
57 std::cout << "Reading DICOM <" << filename << ">" << std::endl;
59 gdcm::File *header = new gdcm::File();
60 header->SetFileName(filename);
61 header->SetMaxSizeLoadEntry(16384); // required ?
65 //--------------------------------------------------------------------
67 //--------------------------------------------------------------------
68 itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename, bool exit_on_error) {
69 itk::ImageIOBase::Pointer reader =
70 itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
72 if (exit_on_error) //default behavior for tools who don't handle the problem
74 std::cerr << "Error reading file " << filename << ", exiting immediately" << std::endl;
80 reader->SetFileName(filename);
81 reader->ReadImageInformation();
84 //--------------------------------------------------------------------
86 //--------------------------------------------------------------------
87 void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level) {
88 unsigned int dim = header->GetNumberOfDimensions();
89 std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
90 std::vector<int> inputSize;
91 std::vector<double> inputSpacing;
92 std::vector<double> inputOrigin;
93 inputSize.resize(dim);
94 inputSpacing.resize(dim);
95 inputOrigin.resize(dim);
96 for(unsigned int i=0; i<dim; i++) {
97 inputSpacing[i] = header->GetSpacing(i);
98 inputSize[i] = header->GetDimensions(i);
99 inputOrigin[i] = header->GetOrigin(i);
102 clitk::GetTypeSizeFromString(header->GetComponentTypeAsString(header->GetComponentType()));
103 unsigned int nbOfComponents = header->GetNumberOfComponents();
106 if (nbOfComponents !=1) os << nbOfComponents << "x" << pixelTypeName;
107 else os << pixelTypeName;
109 for(unsigned int i=0; i< dim-1; i++)
110 os << inputSize[i] << "x";
111 os << inputSize[dim-1]
113 for(unsigned int i=0; i< dim-1; i++)
114 os << inputSpacing[i] << "x";
115 os << inputSpacing[dim-1];
118 os << "Dim = " << dim << "D" << std::endl;
119 os << "PixelType = " << pixelTypeName << std::endl;
120 if (nbOfComponents > 1)
121 os << "Vector = " << nbOfComponents << std::endl;
123 for(unsigned int i=0; i< dim; i++) {
124 os << inputSize[i] << " ";
128 for(unsigned int i=0; i< dim; i++) {
129 os << inputSpacing[i] << " ";
133 os << "# voxels = " << header->GetImageSizeInPixels() << std::endl;
134 os << "Size (mm) = ";
135 for(unsigned int i=0; i< dim; i++) {
136 os << inputSize[i]*inputSpacing[i] << " ";
138 os << "mm" << std::endl;
139 os << "Origin (mm)= ";
140 for(unsigned int i=0; i< dim; i++) {
141 os << inputOrigin[i] << " ";
143 os << "mm" << std::endl;
147 for(unsigned int i=0; i< dim; i++) {
148 vol *= inputSize[i]*inputSpacing[i]/10.0;
150 os << vol << " cc" << std::endl;
151 int mem = header->GetImageSizeInPixels()*pixelSize*nbOfComponents;
152 double memKb = (double)mem/1024.0;
153 double memMb = (double)mem/1024.0/1024.0;
154 double memGb = (double)mem/1024.0/1024.0/1024.0;
155 if (lrint(memKb) <= 0)
156 os << "Memory = " << mem << " bytes" << std::endl;
158 if (lrint(memMb) <= 0)
159 os << "Memory = " << memKb << " Kb (" << mem << " bytes)" << std::endl;
161 if (lrint(memGb) <= 0)
162 os << "Memory = " << memMb << " Mb (" << mem << " bytes)" << std::endl;
164 os << "Memory = " << memGb << " Gb (" << mem << " bytes)" << std::endl;
170 //--------------------------------------------------------------------
172 #endif /* end #define CLITKIMAGECOMMON_CXX */