]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIOGimmickView.cpp
allow data anonymization
[creaImageIO.git] / src / creaImageIOGimmickView.cpp
index 76342d64da63897103dbdf17b01575d587b4341a..02d18a7d490af03bb2eab27f1540d000f6b5aea3 100644 (file)
@@ -5,6 +5,8 @@
 #if defined(USE_GDCM)
 #include <gdcmGlobal.h>
 #include <gdcmSerieHelper.h>
+#include <gdcmFileHelper.h>
+#include <gdcmUtil.h>
 #include <vtkGdcmReader.h>
 #endif
 
@@ -839,6 +841,66 @@ void GimmickView::ReadImagesNotThreadedInVector(std::vector<vtkImageData*>& s, s
   
 
 
+////////////////////////////////////////////////////////////////////////
+void GimmickView::Anonymize(std::vector<std::string> i_filenames, int type)
+{
+       bool res = true;
+   std::vector<GDCM_NAME_SPACE::FileHelper *> filesH;
+   std::vector<std::string> suid;
+   std::map<std::string, std::string> msuid;
+   std::string tempuid = GDCM_NAME_SPACE::Util::CreateUniqueUID();
+   int i = 1;
+   std::vector<std::string>::iterator it = i_filenames.begin();
+   for(; it != i_filenames.end(); it++)
+   {
+
+          GDCM_NAME_SPACE::File *file;
+          file = GDCM_NAME_SPACE::File::New(  );
+          file->SetLoadMode( GDCM_NAME_SPACE::LD_ALL );
+          file->SetFileName( (*it).c_str() );
+          res = file->Load();
+          if ( !res ) 
+          {
+                       std::cerr << "Sorry, " <<  (*it).c_str()  <<"  not a gdcm-readable "
+                 << "DICOM / ACR File" <<std::endl;
+                       file ->Delete();
+       //return 0;
+               }
+               std::cout << " ... is readable " << std::endl;
+               
+               // We need a gdcm::FileHelper, since we want to load the pixels        
+               GDCM_NAME_SPACE::FileHelper *fh = GDCM_NAME_SPACE::FileHelper::New(file);
+       
+   uint8_t *imageData = fh->GetImageData();
+
+          // Institution name 
+          file->AddAnonymizeElement(0x0008, 0x0080, "*"); 
+          // Patient's name 
+          file->AddAnonymizeElement(0x0010, 0x0010, "*");   
+          // Patient's ID
+          file->AddAnonymizeElement( 0x0010, 0x0020,"1515" );   
+          // Study Instance UID
+          file->AddAnonymizeElement(0x0020, 0x000d, tempuid );
+          // Telephone
+          file->AddAnonymizeElement(0x0010, 0x2154, "3615" );
+
+          // Aware user will add here more fields to anonymize here
+
+          // The gdcm::File is modified in memory
+
+          file->AnonymizeFile();
+
+          
+          i++;
+          fh->SetContentType(GDCM_NAME_SPACE::UNMODIFIED_PIXELS_IMAGE);
+   
+          fh->WriteDcmExplVR(file->GetFileName() +".ano1" );
+          std::cout << i <<"  End Anonymize" << std::cout;  
+          file->ClearAnonymizeList();
+          file->Delete();
+          fh->Delete();
+   }
+}
 ////////////////////////////////////////////////////////////////////////
 //void GimmickView::Anonymize(std::vector<std::string> i_filenames, int type)
 //{