X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkDicom2Image.cxx;h=614c5d96b458c4905316142bd791d34df76632ca;hb=a384b1aa2ad35011b2741fca00a2a52e26b30e8f;hp=b3bcc902de0699f224e2047f9922f4f0f057bc29;hpb=e4970a5c24b53d6842e4f8f02d63b957f03bfbba;p=clitk.git diff --git a/tools/clitkDicom2Image.cxx b/tools/clitkDicom2Image.cxx index b3bcc90..614c5d9 100644 --- a/tools/clitkDicom2Image.cxx +++ b/tools/clitkDicom2Image.cxx @@ -23,6 +23,8 @@ #include "clitkImageCommon.h" #include "vvImageReader.h" #include "vvImageWriter.h" +#include +#include #include #include #include @@ -55,6 +57,15 @@ int main(int argc, char * argv[]) } else for (unsigned int i=0; iSetUseSeriesDetails(false); + std::string folderName="."; + const size_t last_slash_idx = input_files[0].rfind('/'); + if (std::string::npos != last_slash_idx) + folderName = input_files[0].substr(0, last_slash_idx); + nameGenerator->SetInputDirectory(folderName); //=========================================== /// Get slices locations ... @@ -63,6 +74,7 @@ int main(int argc, char * argv[]) std::map< std::string, std::vector > theorigin; std::map< std::string, std::vector > theorientation; std::map< std::string, std::vector > sliceLocations; + std::map< std::string, std::vector > instanceNumber; std::map< std::string, std::vector > seriesFiles; #if GDCM_MAJOR_VERSION >= 2 if (args_info.verbose_flag) @@ -82,11 +94,9 @@ int main(int argc, char * argv[]) hreader.Read(); gdcm::DataSet& ds = hreader.GetFile().GetDataSet(); - if (args_info.extract_series_flag) { - gdcm::Attribute<0x20,0x000e> series_UID_att; - series_UID_att.SetFromDataSet(ds); - series_UID = series_UID_att.GetValue(); - } + gdcm::Attribute<0x20,0x000e> series_UID_att; + series_UID_att.SetFromDataSet(ds); + series_UID = series_UID_att.GetValue().c_str(); series_UIDs.insert(series_UID); theorigin[series_UID] = gdcm::ImageHelper::GetOriginValue(hreader.GetFile()); @@ -106,6 +116,10 @@ int main(int argc, char * argv[]) sliceLocations[series_UID].push_back(theorigin[series_UID][2]); seriesFiles[series_UID].push_back(input_files[i]); + gdcm::Attribute<0x20,0x0013> instanceNumber_att; + instanceNumber_att.SetFromDataSet(ds); + instanceNumber[series_UID].push_back(instanceNumber_att.GetValue()); + gdcm::Attribute<0x28, 0x100> pixel_size; pixel_size.SetFromDataSet(ds); /* if (pixel_size.GetValue() != 16) @@ -121,9 +135,7 @@ int main(int argc, char * argv[]) header->SetMaxSizeLoadEntry(16384); // required ? header->Load(); - if (args_info.extract_series_flag) { - series_UID = header->GetEntryValue(0x20,0x000e).c_str(); - } + series_UID = header->GetEntryValue(0x20,0x000e).c_str(); series_UIDs.insert(series_UID); theorigin[series_UID].resize(3); @@ -147,9 +159,32 @@ int main(int argc, char * argv[]) while ( sn != series_UIDs.end() ) { std::vector locs = sliceLocations[*sn]; std::vector origin = theorigin[*sn]; + std::vector instanceNumberSerie = instanceNumber[*sn]; std::vector files = seriesFiles[*sn]; - std::vector sliceIndex; - clitk::GetSortedIndex(locs, sliceIndex); + std::vector sliceIndex(files.size()); + //clitk::GetSortedIndex(locs, sliceIndex); + //Look for files into GDCMSeriesFileNames, because it sorts files correctly and take the order + const std::vector & temp = nameGenerator->GetFileNames(*sn); + for(unsigned int i=0; i " << sliceIndex[0] << " / " << 0 << " => " @@ -194,8 +229,27 @@ int main(int argc, char * argv[]) // Create ordered vector of filenames std::vector sorted_files; sorted_files.resize(sliceIndex.size()); - for(unsigned int i=0; i::iterator maxInstanceNumber = std::max_element(instanceNumberSerie.begin(), instanceNumberSerie.end()); + std::vector instanceNumberTemp(*maxInstanceNumber, ""); + for(unsigned int i=0; i