]> Creatis software - clitk.git/blobdiff - tools/clitkDicom2Image.cxx
Debug opening dicom with rotation matrix
[clitk.git] / tools / clitkDicom2Image.cxx
index 1ac985e504de85c97aef1c8695a0d59cf3b84660..5c9889b2e202bd437ebbfdff346a4c1cf64098f3 100644 (file)
@@ -26,7 +26,7 @@
 #include <gdcmFile.h>
 #include <vtkVersion.h>
 #include <vtkImageChangeInformation.h>
-#if GDCM_MAJOR_VERSION == 2
+#if GDCM_MAJOR_VERSION >= 2
   #include <gdcmImageHelper.h>
   #include <gdcmAttribute.h>
   #include <gdcmReader.h>
@@ -64,7 +64,7 @@ int main(int argc, char * argv[])
   std::map< int, std::vector<double> > theorientation;
   std::map< int, std::vector<double> > sliceLocations;
   std::map< int, std::vector<std::string> > seriesFiles;
-#if GDCM_MAJOR_VERSION == 2
+#if GDCM_MAJOR_VERSION >= 2
   if (args_info.verbose_flag)
     std::cout << "Using GDCM-2.x" << std::endl;
 #else
@@ -76,7 +76,7 @@ int main(int argc, char * argv[])
   for(unsigned int i=0; i<args_info.inputs_num; i++) {
     if (args_info.verbose_flag)
         std::cout << "Reading <" << input_files[i] << std::endl;
-#if GDCM_MAJOR_VERSION == 2
+#if GDCM_MAJOR_VERSION >= 2
     gdcm::Reader hreader;
     hreader.SetFileName(input_files[i].c_str());
     hreader.Read();
@@ -91,16 +91,19 @@ int main(int argc, char * argv[])
     series_numbers.insert(series_number);
     theorigin[series_number] = gdcm::ImageHelper::GetOriginValue(hreader.GetFile());
     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);
+    if (args_info.patientSystem_flag) {
+      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);
+    } else
+      sliceLocations[series_number].push_back(theorigin[series_number][2]);
     seriesFiles[series_number].push_back(input_files[i]);
 
     gdcm::Attribute<0x28, 0x100> pixel_size;
@@ -198,6 +201,7 @@ int main(int argc, char * argv[])
     // Read write serie
     vvImageReader::Pointer reader = vvImageReader::New();
     reader->SetInputFilenames(sorted_files);
+    reader->SetPatientCoordinateSystem(args_info.patientSystem_flag);
     reader->Update(vvImageReader::DICOM);
     if (reader->GetLastError().size() != 0) {
       std::cerr << reader->GetLastError() << std::endl;
@@ -236,26 +240,10 @@ int main(int argc, char * argv[])
         name << *sn << "_" << args_info.output_arg;
       outfile = name.str();
     }
-    //Check on transform
-    bool bId = true;
-    if (!image->GetTransform().empty()) {
-      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);
-    }
+    if (args_info.patientSystem_flag && !image->GetTransform().empty())
+      writer->SetSaveTransform(true);
     writer->SetOutputFileName(outfile);
     writer->Update();