00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_IO_DICOM_GET_HEADER_HH
00027 # define MLN_IO_DICOM_GET_HEADER_HH
00028
00032
00033 # include <iostream>
00034 # include <fstream>
00035
00036 # include <gdcm-2.0/gdcmReader.h>
00037 # include <gdcm-2.0/gdcmImageReader.h>
00038 # include <gdcm-2.0/gdcmWriter.h>
00039 # include <gdcm-2.0/gdcmDataSet.h>
00040 # include <gdcm-2.0/gdcmAttribute.h>
00041
00042 # include <mln/core/concept/image.hh>
00043 # include <mln/core/routine/initialize.hh>
00044 # include <mln/core/box_runstart_piter.hh>
00045 # include <mln/core/pixel.hh>
00046 # include <mln/data/memcpy_.hh>
00047 # include <mln/util/array.hh>
00048
00049 namespace mln
00050 {
00051
00052 namespace io
00053 {
00054
00055 namespace dicom
00056 {
00057
00059 struct dicom_header
00060 {
00061
00062 unsigned dim;
00063
00064
00065 util::array<unsigned> size;
00066 };
00067
00068
00070 dicom_header get_header(const std::string& filename);
00071
00072
00073 # ifndef MLN_INCLUDE_ONLY
00074
00075
00076 dicom_header get_header(const std::string& filename)
00077 {
00078 trace::entering("mln::io::dicom::get_header");
00079
00080 dicom_header header;
00081
00082 gdcm::ImageReader r;
00083 r.SetFileName(filename.c_str());
00084 if (!r.Read())
00085 {
00086 std::cerr << "error: cannot open file '" << filename << "'!";
00087 abort();
00088 }
00089
00090 gdcm::Image& image = r.GetImage();
00091
00092 header.dim = image.GetNumberOfDimensions();
00093 const unsigned int* dims = image.GetDimensions();
00094
00095 for (unsigned i = 2; i < header.dim; ++i)
00096 header.size.append(dims[i]);
00097 for (unsigned i = 0; i < 2; ++i)
00098 header.size.append(dims[i]);
00099
00100 trace::exiting("mln::io::dicom::get_header");
00101 return header;
00102 }
00103
00104
00105 # endif // ! MLN_INCLUDE_ONLY
00106
00107 }
00108
00109 }
00110
00111 }
00112
00113 #endif // ! MLN_IO_DICOM_GET_HEADER_HH
00114