X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkDicom2Image.cxx;h=aa63b0489bd50505255c2610640e8bbb4615c70e;hb=b7b8f2b040d1772c30c34653ee3fe0c27bc8fa71;hp=b1b105d676746bc70817053004cad8e76208cd15;hpb=60850f3574637676931f327adee41d29f94bc067;p=clitk.git diff --git a/tools/clitkDicom2Image.cxx b/tools/clitkDicom2Image.cxx index b1b105d..aa63b04 100644 --- a/tools/clitkDicom2Image.cxx +++ b/tools/clitkDicom2Image.cxx @@ -17,6 +17,7 @@ ===========================================================================**/ // clitk includes +#include "clitkIO.h" #include "clitkDicom2Image_ggo.h" #include "clitkCommon.h" #include "clitkImageCommon.h" @@ -25,7 +26,7 @@ #include #include #include -#if GDCM_MAJOR_VERSION == 2 +#if GDCM_MAJOR_VERSION >= 2 #include #include #include @@ -38,6 +39,8 @@ int main(int argc, char * argv[]) { // init command line GGO(clitkDicom2Image, args_info); + CLITK_INIT; + std::vector input_files; ///if std_input is given, read the input files from stdin if (args_info.std_input_given) { @@ -61,7 +64,7 @@ int main(int argc, char * argv[]) std::map< int, std::vector > theorientation; std::map< int, std::vector > sliceLocations; std::map< int, std::vector > 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 @@ -73,7 +76,7 @@ int main(int argc, char * argv[]) for(unsigned int i=0; i= 2 gdcm::Reader hreader; hreader.SetFileName(input_files[i].c_str()); hreader.Read(); @@ -84,22 +87,25 @@ int main(int argc, char * argv[]) series_number_att.SetFromDataSet(ds); series_number = series_number_att.GetValue(); } - + 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; pixel_size.SetFromDataSet(ds); /* if (pixel_size.GetValue() != 16) @@ -118,7 +124,7 @@ int main(int argc, char * argv[]) if (args_info.extract_series_flag) { series_number = atoi(header->GetEntryValue(0x20,0x11).c_str()); } - + series_numbers.insert(series_number); theorigin[series_number].resize(3); theorigin[series_number][0] = header->GetXOrigin(); @@ -200,7 +206,7 @@ int main(int argc, char * argv[]) std::cerr << reader->GetLastError() << std::endl; return 1; } - + vvImage::Pointer image = reader->GetOutput(); vtkImageData* vtk_image = image->GetFirstVTKImageData(); vtkImageChangeInformation* modifier = vtkImageChangeInformation::New(); @@ -226,34 +232,24 @@ int main(int argc, char * argv[]) outfile = args_info.output_arg; else { std::ostringstream name; - name << *sn << "_" << args_info.output_arg; + std::vector directory = clitk::SplitFilename(args_info.output_arg); + if (directory.size() == 2) + name << directory[0] << "/" << *sn << "_" << directory[1]; + else + 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); - } + if (args_info.patientSystem_flag && !image->GetTransform().empty()) + writer->SetSaveTransform(true); writer->SetOutputFileName(outfile); writer->Update(); modifier->Delete(); - + sn++; } - + return 0; }