From: Frederic Cervenansky Date: Sun, 18 Dec 2011 23:07:42 +0000 (+0000) Subject: allow data anonymization X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=creaImageIO.git;a=commitdiff_plain;h=a881ab2fb97d10dd3cff975444f81b0b497b2ad7 allow data anonymization --- diff --git a/src/creaImageIOGimmickView.cpp b/src/creaImageIOGimmickView.cpp index 76342d6..02d18a7 100644 --- a/src/creaImageIOGimmickView.cpp +++ b/src/creaImageIOGimmickView.cpp @@ -5,6 +5,8 @@ #if defined(USE_GDCM) #include #include +#include +#include #include #endif @@ -839,6 +841,66 @@ void GimmickView::ReadImagesNotThreadedInVector(std::vector& s, s +//////////////////////////////////////////////////////////////////////// +void GimmickView::Anonymize(std::vector i_filenames, int type) +{ + bool res = true; + std::vector filesH; + std::vector suid; + std::map msuid; + std::string tempuid = GDCM_NAME_SPACE::Util::CreateUniqueUID(); + int i = 1; + std::vector::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" <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 i_filenames, int type) //{ diff --git a/src/creaImageIOGimmickView.h b/src/creaImageIOGimmickView.h index c34f895..fb9f177 100644 --- a/src/creaImageIOGimmickView.h +++ b/src/creaImageIOGimmickView.h @@ -12,8 +12,8 @@ #include #endif -#if defined(USE_QT4) -#include +#if defined(USE_QT) +#include "Qt/creaImageIOQMultiThreadImageReader.h" #endif @@ -112,8 +112,7 @@ namespace creaImageIO { GimmickError("INTERNAL ERROR : EditFields not implemented"); } /// Anonymize or de-anonymize data - virtual void Anonymize(std::vector i_filenames, int type) - { GimmickError("INTERNAL ERROR : Anonymize not implemented"); } + void Anonymize(std::vector i_filenames, int type); /// Display all Dicom Tags virtual void DumpTags(const std::string filename) diff --git a/src/creaImageIOWxTreeView.cpp b/src/creaImageIOWxTreeView.cpp index 34db01a..49bba9b 100644 --- a/src/creaImageIOWxTreeView.cpp +++ b/src/creaImageIOWxTreeView.cpp @@ -222,11 +222,11 @@ namespace creaImageIO wxMenuItem* m4Item=menuItem->Append(wxID_ANY, _T("&Display Dicom Tags")); menuItem->AppendSubMenu(subExportMenu, wxT("&Export")); -#if defined(USE_GDCM_ANOM) + wxMenuItem* m1Item=menuItem->Append(wxID_ANY, _T("&Anonymize")); mAnonymizingID=m1Item->GetId(); - Connect( mAnonymizingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnAnonymize) ); -#endif + Connect( mAnonymizingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnAnonymizer) ); + mLocalCopyID=m2Item->GetId(); mEditFieldID=m3Item->GetId(); mDumpID=m4Item->GetId(); @@ -821,11 +821,11 @@ namespace creaImageIO wxBusyCursor busy; std::vector filesname; std::vector nodes; -// nodes.push_back(((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node); + nodes.push_back(((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node); if(nodes.size() != 0) { GetFilenamesAsString(nodes,filesname); - // GetGimmickView()->Anonymize(filesname,0); + GetGimmickView()->Anonymize(filesname,0); } }