<div dir="ltr">Thanks Andras! This works perfectly and couldn't be easier.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 16, 2014 at 2:32 PM, Andras Lasso <span dir="ltr"><<a href="mailto:lasso@queensu.ca" target="_blank">lasso@queensu.ca</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Amber,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">DCMTK can most probably read/modify/write these scout images. The easiest is to use the dcmodify tool (for more info google: dcmtk anonymize). You can download
 dcmodify or change the ITK build options to build/use DCMTK.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Andras<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Community [mailto:<a href="mailto:community-bounces@itk.org" target="_blank">community-bounces@itk.org</a>]
<b>On Behalf Of </b>Amber Simpson<br>
<b>Sent:</b> Thursday, January 16, 2014 2:16 PM<br>
<b>To:</b> <a href="mailto:community@itk.org" target="_blank">community@itk.org</a><br>
<b>Subject:</b> [ITK Community] reading/writing a single dicom<u></u><u></u></span></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Hi All,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm attempting to anonymize a single Scout image in dicom format. The image should be written out to the same format to maintain compatibility with another software package. ImageJ, gdcmanon, and ITKsnap cannot read this dicom but OSIRIX
 can. The dicom header appears not to be readable with GDCMImageIO. The dicom can be read using a version of DicomPrintPatientInformation.cxx (from the ITK examples) that relies on DICOMImageIO2. I added a writer to the example but no file (dicom or otherwise)
 is generated. See below for code. Any suggestions on getting this code to work? Or should I take another approach entirely?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Amber <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">#include "itkDICOMImageIO2.h"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">#include "itkImageFileReader.h"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">#include "itkImageFileWriter.h"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">#include "itkImage.h"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">#include "itkMetaDataDictionary.h"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">#include "itkMetaDataObject.h"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">//#include "itkGDCMImageIO.h"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">int main( int argc, char* argv[] )<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">{<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  if( argc < 2 )<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    std::cerr << "Usage: " << argv[0] << " DicomFile " << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    return EXIT_FAILURE;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  typedef itk::Image<signed short,2>              ImageType;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  typedef itk::ImageFileReader< ImageType >       ReaderType;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  itk::DICOMImageIO2::Pointer dicomIO = itk::DICOMImageIO2::New();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  ReaderType::Pointer reader = ReaderType::New();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  reader->SetFileName( argv[1] );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  reader->SetImageIO( dicomIO );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  try<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    reader->Update();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  catch (itk::ExceptionObject &ex)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    std::cout << ex << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    return EXIT_FAILURE;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  const unsigned int length = 2048;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char patientName[  length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char patientID[    length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char patientSex[   length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char patientAge[   length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char studyDate[    length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char modality[     length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char manufacturer[ length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char institution[  length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  char model[        length ];<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetPatientName(  patientName  );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetPatientID(    patientID    );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetPatientSex(   patientSex   );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetPatientAge(   patientAge   );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetStudyDate(    studyDate    );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetModality(     modality     );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetManufacturer( manufacturer );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetInstitution(  institution  );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  dicomIO->GetModel(        model        );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Before anonymization: " << std::endl; <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Patient Name : " << patientName  << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Patient ID   : " << patientID    << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Patient Sex  : " << patientSex   << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Patient Age  : " << patientAge   << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Study Date   : " << studyDate    << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Modality     : " << modality     << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Manufacturer : " << manufacturer << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Institution  : " << institution  << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  std::cout << "Model        : " << model        << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> try<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    reader->Update();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  catch( itk::ExceptionObject & err )<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    std::cerr << "ExceptionObject caught !" << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    std::cerr << err << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    return EXIT_FAILURE;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> typedef itk::ImageFileWriter< ImageType > WriterType;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    WriterType::Pointer writer = WriterType::New();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    std::cout  << "Writing the image as " << std::endl << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    std::cout  << "test_dicom.dcm" << std::endl << std::endl;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    writer->SetFileName( "test_dicom.dcm" );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    writer->SetInput( reader->GetOutput() );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    try<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">      {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">writer->UpdateLargestPossibleRegion(); //changed from example<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">      }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    catch (itk::ExceptionObject &ex)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">      {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">      std::cout << ex;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">      return EXIT_FAILURE;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">      }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">  return EXIT_SUCCESS;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
</div>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>