<div dir="ltr"><br><div><div>Hi All,</div><div><br></div><div>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?</div>

<div><br></div><div>Thanks,</div><div>Amber </div><div><br></div><div><br></div><div>#include "itkDICOMImageIO2.h"</div><div>#include "itkImageFileReader.h"</div><div>#include "itkImageFileWriter.h"</div>

<div>#include "itkImage.h"</div><div>#include "itkMetaDataDictionary.h"</div><div>#include "itkMetaDataObject.h"</div><div>//#include "itkGDCMImageIO.h"</div><div><br></div><div>int main( int argc, char* argv[] )</div>

<div>{</div><div><br></div><div>  if( argc < 2 )</div><div>    {</div><div>    std::cerr << "Usage: " << argv[0] << " DicomFile " << std::endl;</div><div>    return EXIT_FAILURE;</div>

<div>    }</div><div><br></div><div>  typedef itk::Image<signed short,2>              ImageType;</div><div>  typedef itk::ImageFileReader< ImageType >       ReaderType;</div><div><br></div><div>  itk::DICOMImageIO2::Pointer dicomIO = itk::DICOMImageIO2::New();</div>

<div><br></div><div>  ReaderType::Pointer reader = ReaderType::New();</div><div><br></div><div>  reader->SetFileName( argv[1] );</div><div><br></div><div>  reader->SetImageIO( dicomIO );</div><div><br></div><div>  try</div>

<div>    {</div><div>    reader->Update();</div><div>    }</div><div>  catch (itk::ExceptionObject &ex)</div><div>    {</div><div>    std::cout << ex << std::endl;</div><div>    return EXIT_FAILURE;</div>

<div>    }</div><div><br></div><div><br></div><div>  const unsigned int length = 2048;</div><div>  </div><div>  char patientName[  length ];</div><div>  char patientID[    length ];</div><div>  char patientSex[   length ];</div>

<div>  char patientAge[   length ];</div><div>  char studyDate[    length ];</div><div>  char modality[     length ];</div><div>  char manufacturer[ length ];</div><div>  char institution[  length ];</div><div>  char model[        length ];</div>

<div><br></div><div>  dicomIO->GetPatientName(  patientName  );</div><div>  dicomIO->GetPatientID(    patientID    );</div><div>  dicomIO->GetPatientSex(   patientSex   );</div><div>  dicomIO->GetPatientAge(   patientAge   );</div>

<div>  dicomIO->GetStudyDate(    studyDate    );</div><div>  dicomIO->GetModality(     modality     );</div><div>  dicomIO->GetManufacturer( manufacturer );</div><div>  dicomIO->GetInstitution(  institution  );</div>

<div>  dicomIO->GetModel(        model        );</div><div><br></div><div>  std::cout << "Before anonymization: " << std::endl; </div><div>  std::cout << "Patient Name : " << patientName  << std::endl;</div>

<div>  std::cout << "Patient ID   : " << patientID    << std::endl;</div><div>  std::cout << "Patient Sex  : " << patientSex   << std::endl;</div><div>  std::cout << "Patient Age  : " << patientAge   << std::endl;</div>

<div>  std::cout << "Study Date   : " << studyDate    << std::endl;</div><div>  std::cout << "Modality     : " << modality     << std::endl;</div><div>  std::cout << "Manufacturer : " << manufacturer << std::endl;</div>

<div>  std::cout << "Institution  : " << institution  << std::endl;</div><div>  std::cout << "Model        : " << model        << std::endl;</div><div><br></div><div>

<br></div><div><br></div><div> try</div><div>    {</div><div>    reader->Update();</div><div>    }</div><div>  catch( itk::ExceptionObject & err )</div><div>    {</div><div>    std::cerr << "ExceptionObject caught !" << std::endl;</div>

<div>    std::cerr << err << std::endl;</div><div>    return EXIT_FAILURE;</div><div>    }</div><div><br></div><div> typedef itk::ImageFileWriter< ImageType > WriterType;</div><div>    WriterType::Pointer writer = WriterType::New();</div>

<div><br></div><div>    std::cout  << "Writing the image as " << std::endl << std::endl;</div><div>    std::cout  << "test_dicom.dcm" << std::endl << std::endl;</div>

<div><br></div><div>    writer->SetFileName( "test_dicom.dcm" );</div><div>    </div><div>    writer->SetInput( reader->GetOutput() );</div><div><br></div><div>    try</div><div>      {</div><div><span style="white-space:pre-wrap">        </span>writer->UpdateLargestPossibleRegion(); //changed from example</div>

<div>      }</div><div>    catch (itk::ExceptionObject &ex)</div><div>      {</div><div>      std::cout << ex;</div><div>      return EXIT_FAILURE;</div><div>      }</div><div><br></div><div><br></div><div>  return EXIT_SUCCESS;</div>

<div><br></div><div>}</div></div></div>