X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkDicom2Image.cxx;h=e705f85ca7e68fb6dd2a733cb67a3ea252f73d23;hb=afd2671211668e6106886aa59c7bb13a82c48a94;hp=e6e239650a19af0b8a71d0a10f6069d86aa6d655;hpb=133a3b14fe0d225aff4ea4edd53d61e7f3d063c2;p=clitk.git diff --git a/tools/clitkDicom2Image.cxx b/tools/clitkDicom2Image.cxx index e6e2396..e705f85 100644 --- a/tools/clitkDicom2Image.cxx +++ b/tools/clitkDicom2Image.cxx @@ -60,7 +60,7 @@ int main(int argc, char * argv[]) //Get GDCMSeriesFileNames order to sort filenames typedef itk::GDCMSeriesFileNames NamesGeneratorType; NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New(); - nameGenerator->SetUseSeriesDetails(true); + nameGenerator->SetUseSeriesDetails(false); std::string folderName="."; const size_t last_slash_idx = input_files[0].rfind('/'); if (std::string::npos != last_slash_idx) @@ -74,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) @@ -93,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()); @@ -117,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) @@ -132,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); @@ -158,23 +159,31 @@ 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; + 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 " @@ -220,8 +229,22 @@ 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