X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkDicom2Image.cxx;h=b1b105d676746bc70817053004cad8e76208cd15;hb=9f0023e9ebaf8ca646681282839175d35eea746b;hp=6f36bc07d2062dcb0c0cfe6db136bb97c9d8d3f8;hpb=5bea196497686f70796822951af654373cba9f97;p=clitk.git diff --git a/tools/clitkDicom2Image.cxx b/tools/clitkDicom2Image.cxx index 6f36bc0..b1b105d 100644 --- a/tools/clitkDicom2Image.cxx +++ b/tools/clitkDicom2Image.cxx @@ -23,6 +23,7 @@ #include "vvImageReader.h" #include "vvImageWriter.h" #include +#include #include #if GDCM_MAJOR_VERSION == 2 #include @@ -57,13 +58,22 @@ int main(int argc, char * argv[]) int series_number = -1; std::set series_numbers; std::map< int, std::vector > theorigin; + std::map< int, std::vector > theorientation; std::map< int, std::vector > sliceLocations; std::map< int, std::vector > seriesFiles; - for(unsigned int i=0; i 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; @@ -90,8 +110,6 @@ int main(int argc, char * argv[]) } */ #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 ? @@ -126,7 +144,7 @@ int main(int argc, char * argv[]) std::vector files = seriesFiles[*sn]; std::vector 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 " @@ -191,7 +209,11 @@ int main(int argc, char * argv[]) std::vector 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(); @@ -207,9 +229,24 @@ int main(int argc, char * argv[]) name << *sn << "_" << args_info.output_arg; outfile = name.str(); } - DD("before write"); + //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();