Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
// clitk includes
#include "clitkDicom2Image_ggo.h"
#include "clitkImageCommon.h"
#include "vvImageReader.h"
#include "vvImageWriter.h"
+#include <gdcmFile.h>
+#include <vtkImageChangeInformation.h>
+#if GDCM_MAJOR_VERSION == 2
+ #include <gdcmImageHelper.h>
+ #include <gdcmAttribute.h>
+ #include <gdcmReader.h>
+#endif
//====================================================================
int main(int argc, char * argv[])
//===========================================
/// Get slices locations ...
+ std::vector<double> theorigin(3);
std::vector<double> sliceLocations;
for(unsigned int i=0; i<args_info.inputs_num; i++) {
//std::cout << "Reading <" << input_files[i] << std::endl;
- gdcm::File * header = clitk::readDicomHeader(input_files[i]);
- sliceLocations.push_back(header->GetZOrigin());
- if (header->GetPixelSize() != 2) {
+#if GDCM_MAJOR_VERSION == 2
+ if (args_info.verbose_flag)
+ std::cout << "Using GDCM-2.x" << std::endl;
+ gdcm::Reader hreader;
+ hreader.SetFileName(input_files[i].c_str());
+ hreader.Read();
+ theorigin = gdcm::ImageHelper::GetOriginValue(hreader.GetFile());
+ sliceLocations.push_back(theorigin[2]);
+ gdcm::Attribute<0x28, 0x100> pixel_size;
+ gdcm::DataSet& ds = hreader.GetFile().GetDataSet();
+ pixel_size.SetFromDataSet(ds);
+ if (pixel_size.GetValue() != 16)
+ {
std::cerr << "Pixel type 2 bytes ! " << std::endl;
std::cerr << "In file " << input_files[i] << std::endl;
exit(0);
}
+#else
+ if (args_info.verbose_flag)
+ std::cout << "Not using GDCM-2.x" << std::endl;
+ gdcm::File *header = new gdcm::File();
+ header->SetFileName(input_files[i]);
+ header->SetMaxSizeLoadEntry(16384); // required ?
+ header->Load();
+ theorigin[0] = header->GetXOrigin();
+ theorigin[1] = header->GetYOrigin();
+ theorigin[2] = header->GetZOrigin();
+ sliceLocations.push_back(theorigin[2]);
+ if (header->GetPixelSize() != 2) {
+ std::cerr << "Pixel type 2 bytes ! " << std::endl;
+ std::cerr << "In file " << input_files[i] << std::endl;
+ exit(0);
+ }
+#endif
}
//===========================================
std::cerr << reader->GetLastError() << std::endl;
return 1;
}
+
+ vvImage::Pointer image = reader->GetOutput();
+ vtkImageData* vtk_image = image->GetFirstVTKImageData();
+ vtkImageChangeInformation* modifier = vtkImageChangeInformation::New();
+ if (args_info.focal_origin_given) {
+ std::vector<double> spacing = image->GetSpacing();
+ std::vector<int> size = image->GetSize();
+ theorigin[0] = -spacing[0]*size[0]/2.0;
+ theorigin[1] = -spacing[1]*size[1]/2.0;
+ modifier->SetInput(vtk_image);
+ modifier->SetOutputOrigin(theorigin[0], theorigin[1], sliceLocations[sliceIndex[0]]);
+ modifier->Update();
+ vvImage::Pointer focal_image = vvImage::New();
+ focal_image->AddVtkImage(modifier->GetOutput());
+ image = focal_image;
+ }
vvImageWriter::Pointer writer = vvImageWriter::New();
- writer->SetInput(reader->GetOutput());
+ writer->SetInput(image);
writer->SetOutputFileName(args_info.output_arg);
writer->Update();
+ modifier->Delete();
+
return 0;
}