#include "vvImageReader.h"
#include "vvImageWriter.h"
#include <gdcmFile.h>
+#include <vtkVersion.h>
#include <vtkImageChangeInformation.h>
#if GDCM_MAJOR_VERSION == 2
#include <gdcmImageHelper.h>
int series_number = -1;
std::set<int> series_numbers;
std::map< int, std::vector<double> > theorigin;
+ std::map< int, std::vector<double> > theorientation;
std::map< int, std::vector<double> > sliceLocations;
std::map< int, std::vector<std::string> > seriesFiles;
- for(unsigned int i=0; i<args_info.inputs_num; i++) {
- //std::cout << "Reading <" << input_files[i] << std::endl;
#if GDCM_MAJOR_VERSION == 2
+ if (args_info.verbose_flag)
+ std::cout << "Using GDCM-2.x" << std::endl;
+#else
+ if (args_info.verbose_flag) {
+ std::cout << "Not using GDCM-2.x" << std::endl;
+ std::cout<< "The image orientation is not supported with this version of GDCM" <<std::endl;
+ }
+#endif
+ for(unsigned int i=0; i<args_info.inputs_num; i++) {
if (args_info.verbose_flag)
- std::cout << "Using GDCM-2.x" << std::endl;
+ std::cout << "Reading <" << input_files[i] << std::endl;
+#if GDCM_MAJOR_VERSION == 2
gdcm::Reader hreader;
hreader.SetFileName(input_files[i].c_str());
hreader.Read();
if (args_info.extract_series_flag) {
gdcm::Attribute<0x20,0x11> series_number_att;
- series_number_att.SetFromDataSet(hreader.GetFile().GetDataSet());
+ series_number_att.SetFromDataSet(ds);
series_number = series_number_att.GetValue();
}
series_numbers.insert(series_number);
theorigin[series_number] = gdcm::ImageHelper::GetOriginValue(hreader.GetFile());
- sliceLocations[series_number].push_back(theorigin[series_number][2]);
+ theorientation[series_number] = gdcm::ImageHelper::GetDirectionCosinesValue(hreader.GetFile());
+ double n1 = theorientation[series_number][1]*theorientation[series_number][5]-
+ theorientation[series_number][2]*theorientation[series_number][4];
+ double n2 = theorientation[series_number][3]*theorientation[series_number][2]-
+ theorientation[series_number][5]*theorientation[series_number][0];
+ double n3 = theorientation[series_number][0]*theorientation[series_number][4]-
+ theorientation[series_number][1]*theorientation[series_number][3];
+ double sloc = theorigin[series_number][0]*n1+
+ theorigin[series_number][1]*n2+
+ theorigin[series_number][2]*n3;
+ sliceLocations[series_number].push_back(sloc);
seriesFiles[series_number].push_back(input_files[i]);
gdcm::Attribute<0x28, 0x100> pixel_size;
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);
- }
+ /* if (pixel_size.GetValue() != 16)
+ {
+ std::cerr << "Pixel type not 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 ?
theorigin[series_number][2] = header->GetZOrigin();
sliceLocations[series_number].push_back(theorigin[series_number][2]);
seriesFiles[series_number].push_back(input_files[i]);
- if (header->GetPixelSize() != 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::vector<std::string> files = seriesFiles[*sn];
std::vector<int> sliceIndex;
clitk::GetSortedIndex(locs, sliceIndex);
- if (args_info.verboseSliceLocation_flag) {
+ if (args_info.verbose_flag) {
std::cout << locs[sliceIndex[0]] << " -> "
<< sliceIndex[0] << " / " << 0 << " => "
<< "0 mm "
std::vector<int> size = image->GetSize();
origin[0] = -spacing[0]*size[0]/2.0;
origin[1] = -spacing[1]*size[1]/2.0;
+#if VTK_MAJOR_VERSION <= 5
modifier->SetInput(vtk_image);
+#else
+ modifier->SetInputData(vtk_image);
+#endif
modifier->SetOutputOrigin(origin[0], origin[1], locs[sliceIndex[0]]);
modifier->Update();
vvImage::Pointer focal_image = vvImage::New();
name << *sn << "_" << args_info.output_arg;
outfile = name.str();
}
+ //Check on transform
+ bool bId = true;
+ for(unsigned int i=0; i<4; i++) {
+ for(unsigned int j=0; j<4; j++) {
+ double elt = image->GetTransform()[0]->GetMatrix()->GetElement(i,j);
+ if(i==j && elt!=1.) {
+ bId = false;
+ }
+ if(i!=j && elt!=0.) {
+ bId = false;
+ }
+ }
+ }
vvImageWriter::Pointer writer = vvImageWriter::New();
writer->SetInput(image);
+ if(!bId) {
+ writer->SetSaveTransform(true);
+ }
writer->SetOutputFileName(outfile);
writer->Update();