<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Amber,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></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.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Andras<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></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:community-bounces@itk.org]
<b>On Behalf Of </b>Amber Simpson<br>
<b>Sent:</b> Thursday, January 16, 2014 2:16 PM<br>
<b>To:</b> community@itk.org<br>
<b>Subject:</b> [ITK Community] reading/writing a single dicom<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">Hi All,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></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?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Amber <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkDICOMImageIO2.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkImageFileReader.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkImageFileWriter.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkImage.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkMetaDataDictionary.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkMetaDataObject.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//#include "itkGDCMImageIO.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">int main( int argc, char* argv[] )<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> if( argc < 2 )<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cerr << "Usage: " << argv[0] << " DicomFile " << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return EXIT_FAILURE;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> typedef itk::Image<signed short,2> ImageType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> typedef itk::ImageFileReader< ImageType > ReaderType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> itk::DICOMImageIO2::Pointer dicomIO = itk::DICOMImageIO2::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> ReaderType::Pointer reader = ReaderType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> reader->SetFileName( argv[1] );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> reader->SetImageIO( dicomIO );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> try<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> reader->Update();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> catch (itk::ExceptionObject &ex)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << ex << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return EXIT_FAILURE;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> const unsigned int length = 2048;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char patientName[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char patientID[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char patientSex[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char patientAge[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char studyDate[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char modality[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char manufacturer[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char institution[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> char model[ length ];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetPatientName( patientName );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetPatientID( patientID );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetPatientSex( patientSex );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetPatientAge( patientAge );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetStudyDate( studyDate );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetModality( modality );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetManufacturer( manufacturer );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetInstitution( institution );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> dicomIO->GetModel( model );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Before anonymization: " << std::endl; <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Patient Name : " << patientName << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Patient ID : " << patientID << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Patient Sex : " << patientSex << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Patient Age : " << patientAge << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Study Date : " << studyDate << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Modality : " << modality << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Manufacturer : " << manufacturer << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Institution : " << institution << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Model : " << model << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> try<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> reader->Update();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> catch( itk::ExceptionObject & err )<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cerr << "ExceptionObject caught !" << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cerr << err << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return EXIT_FAILURE;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> typedef itk::ImageFileWriter< ImageType > WriterType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> WriterType::Pointer writer = WriterType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "Writing the image as " << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << "test_dicom.dcm" << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> writer->SetFileName( "test_dicom.dcm" );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> writer->SetInput( reader->GetOutput() );<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> try<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">writer->UpdateLargestPossibleRegion(); //changed from example<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> catch (itk::ExceptionObject &ex)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> std::cout << ex;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> return EXIT_FAILURE;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> return EXIT_SUCCESS;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
</div>
</div>
</div>
</body>
</html>