<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:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Arial;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Times;
        panose-1:2 0 5 0 0 0 0 0 0 0;}
@font-face
        {font-family:Geneva;
        panose-1:2 11 5 3 3 4 4 4 2 4;}
@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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
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.apple-tab-span
        {mso-style-name:apple-tab-span;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Calibri;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Hello Matias,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Please take a look at the following github pull request (<a href="https://github.com/SimpleITK/SimpleITK/pull/134)">https://github.com/SimpleITK/SimpleITK/pull/134)</a>, this branch should
 provide the functionality you are looking for. See the Python example script included in the commit for the usage of the DICOM series writing.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">     hope this helps<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">            Ziv</span><span style="font-size:10.5pt;font-family:Calibri;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-family:Calibri;color:black">From: </span>
</b><span style="font-family:Calibri;color:black">Matias <matimontg@gmail.com><br>
<b>Date: </b>Thursday, March 30, 2017 at 12:14 PM<br>
<b>To: </b>"insight-users@itk.org" <insight-users@itk.org><br>
<b>Subject: </b>Re: [ITK-users] [ITK] SimpleITK Serieswriter and DicomTags<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Yes, this is what I would need to migrate to C#: <o:p></o:p></p>
<div>
<p class="MsoNormal">It basically reads a dicom directory and performs rotation on the volume, then writes the resulting images back to a directory, copying the tags from the original images.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">#include "itkImage.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkGDCMImageIO.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkGDCMSeriesFileNames.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkImageSeriesReader.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkResampleImageFilter.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkEuler3DTransform.hxx"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "gdcmUIDGenerator.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkImageFileWriter.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkImageSeriesWriter.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkNumericSeriesFileNames.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "itkTranslationTransform.h"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include "string.h";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include <itkSliceIterator.h><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">#include <iostream><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include <string><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include <fstream><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">static void CopyDictionary(itk::MetaDataDictionary &fromDict,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::MetaDataDictionary &toDict);<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">if (argc < 8)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cerr << "Uso: " << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cerr << argv[0] << " Directorio_A_Rotar  DirectorioResultante Gamma Beta Alfa CentroRotacionX CentroRotacionY CentroRotacionZ"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><< 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 signed short    PixelType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">const unsigned int      Dimension = 3;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">const unsigned int Dimension_Serie = 2;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::Image< PixelType, Dimension >         ImageType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::Image<PixelType, Dimension_Serie> ImageType_Serie;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::ImageSeriesReader< ImageType >        ReaderType;<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">typedef itk::GDCMImageIO       ImageIOType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">ImageIOType::Pointer gdcmIO = ImageIOType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">reader->SetImageIO(gdcmIO);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::GDCMSeriesFileNames NamesGeneratorType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">nameGenerator->SetUseSeriesDetails(true);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">nameGenerator->AddSeriesRestriction("0008|0021");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">nameGenerator->SetDirectory(argv[1]);<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">std::cout << std::endl << "The directory: " << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << std::endl << argv[1] << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << "Contains the following DICOM Series: ";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">typedef std::vector< std::string >    SeriesIdContainer;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">while (seriesItr != seriesEnd)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << seriesItr->c_str() << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">++seriesItr;<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">std::string seriesIdentifier;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">seriesIdentifier = seriesUID.begin()->c_str();<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">std::cout << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << "Now reading series: " << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << seriesIdentifier << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">typedef std::vector< std::string >   FileNamesContainer;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FileNamesContainer fileNames;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">fileNames = nameGenerator->GetFileNames(seriesIdentifier);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">reader->SetFileNames(fileNames);<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">const ImageType * inputImage = reader->GetOutput();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">/*int numerodedicoms = inputImage->GetLargestPossibleRegion().GetSize()[2];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">int dicomcentral = numerodedicoms / 2;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << "Dimenion " <<  dicomcentral << std::endl;*/<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//itk::EncapsulateMetaData<std::string>(dictionary, "0020|0032","-208\\-236\\66");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::ResampleImageFilter<ImageType, ImageType> FilterType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FilterType::Pointer FiltroResample = FilterType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetInput(reader->GetOutput());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::LinearInterpolateImageFunction<ImageType, double > InterpolatorType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">InterpolatorType::Pointer interpolator = InterpolatorType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetInterpolator(interpolator);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetOutputDirection(inputImage->GetDirection());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetOutputOrigin(inputImage->GetOrigin());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">ImageType::SizeType inputSize = inputImage->GetLargestPossibleRegion().GetSize();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetSize(inputSize);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">const ImageType::SpacingType& inputSpacing = inputImage->GetSpacing();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetOutputSpacing(inputSpacing);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetDefaultPixelValue(-1000); //Cambiar por un parametro<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::Euler3DTransform< double > TransformType; //Transform<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">TransformType::Pointer transform = TransformType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">double alfa, beta, gamma, centro_rotacion_X, centro_rotacion_Y, centro_rotacion_Z;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">gamma = atof(argv[3]); <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">beta= atof(argv[4]);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">alfa = atof(argv[5]);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">centro_rotacion_X = atof(argv[6]);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">centro_rotacion_Y = atof(argv[7]);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">centro_rotacion_Z = atof(argv[8]);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">transform->SetRotation(gamma, beta, alfa); //Radianes en el siguiente orden en ITK: Gamma, Beta, Alfa | Ibarra<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//double centro[3] = { -14.8371, -54.9443, 175.75 }; //XmmPromedio, YmmPromedio, Z Central (mm): Leer directorio y tomar la del medio<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">double centro[3] = { centro_rotacion_X, centro_rotacion_Y, centro_rotacion_Z }; //XmmPromedio, YmmPromedio, Z Central (mm): Leer directorio y tomar la del medio<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">transform->SetCenter(centro);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << "Centro: " << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << transform->GetCenter() << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->SetTransform(transform);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//FiltroResample->SetMetaDataDictionary(dictionary);<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">FiltroResample->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">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"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">ReaderType::DictionaryRawPointer inputDict = (*(reader->GetMetaDataDictionaryArray()))[0];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">ReaderType::DictionaryArrayType outputArray;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//std::cout << "array: " << std::endl << outputArray[0] << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// To keep the new series in the same study as the original we need<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// to keep the same study UID. But we need new series and frame of<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// reference UID's.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">gdcm::UIDGenerator suid;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//std::string seriesUID = suid.Generate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">gdcm::UIDGenerator fuid;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string frameOfReferenceUID = fuid.Generate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">std::string studyUID;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string sopClassUID;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::ExposeMetaData<std::string>(*inputDict, "0020|000d", studyUID);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::ExposeMetaData<std::string>(*inputDict, "0008|0016", sopClassUID);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">gdcmIO->KeepOriginalUIDOn();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">using namespace std;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">double myArray_Z[70]; //Cambiar esto por un argumento que especifica la cantidad de imagenes.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">double myArray_X[70]; //Cambiar esto por un argumento que especifica la cantidad de imagenes.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">double myArray_Y[70]; //Cambiar esto por un argumento que especifica la cantidad de imagenes.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">ifstream file("file.txt");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">if (file.is_open())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">for (int i = 0; i < 70; ++i) //Recordar cambiar por el argumento que especifica cantidad de imagenes<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">file >> myArray_Z[i];<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">std::cout << "valor primer Z array: " << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << myArray_Z[0] << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">for (unsigned int f = 0; f < inputSize[2]; f++)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// Create a new dictionary for this slice<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">ReaderType::DictionaryRawPointer dict = new ReaderType::DictionaryType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Copy the dictionary from the first slice<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">CopyDictionary(*inputDict, *dict);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Set the UID's for the study, series, SOP  and frame of reference<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0020|000d", studyUID);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//itk::EncapsulateMetaData<std::string>(*dict, "0020|000e", seriesUID);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0020|0052", frameOfReferenceUID);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">gdcm::UIDGenerator sopuid;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string sopInstanceUID = sopuid.Generate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0008|0018", sopInstanceUID);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0002|0003", sopInstanceUID);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Change fields that are slice specific<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::ostringstream value;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value << f + 1;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Image Number<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0020|0013", value.str());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Series Description - Append new description to current series<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// description<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string oldSeriesDesc;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::ExposeMetaData<std::string>(*inputDict, "0008|103e", oldSeriesDesc);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value << oldSeriesDesc<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><< ": Resampled with pixel spacing "<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><< inputSpacing[0] << ", "<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><< inputSpacing[1] << ", "<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><< inputSpacing[2];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// This is an long string and there is a 64 character limit in the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// standard<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">unsigned lengthDesc = value.str().length();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">std::string seriesDesc(value.str(), 0,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">lengthDesc > 64 ? 64<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">: lengthDesc);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0008|103e", seriesDesc);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Series Number<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value << 1001;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0020|0011", value.str());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Derivation Description - How this image was derived<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">for (int i = 0; i < argc; i++)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value << argv[i] << " ";<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">lengthDesc = value.str().length();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string derivationDesc(value.str(), 0,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">lengthDesc > 1024 ? 1024<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">: lengthDesc);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0008|2111", derivationDesc);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Image Position Patient: This is calculated by computing the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// physical coordinate of the first pixel in each slice.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">ImageType::PointType position;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">ImageType::IndexType index;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">index[0] = 0;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">index[1] = 0;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">index[2] = myArray_Z[f];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FiltroResample->GetOutput()->TransformIndexToPhysicalPoint(index, position);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">//El origen que calculamos en el proyecto no se toca. (Origen = origen - average)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">//Cambiamos el ImageOrientationPatient SOLAMENTE si el valor original en la imagen es: 1\0\0\0\1\0. En el caso que se cambia el signo, se debe cambiar el signo del origen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//value << -1 << "\\" << 0 << "\\" << 0 << "\\" << 0 << "\\" << -1 << "\\" << 0; //PASAR ESTO POR ARGUMENTO!!!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//itk::EncapsulateMetaData<std::string>(*dict, "0020|0037", value.str());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value << -235.1629 << "\\" << -195.0557 << "\\" << myArray_Z[f]; //PASAR ESTO POR ARGUMENTO!!! El origen - Centro<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0020|0032", value.str());<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">// Slice Location: For now, we store the z component of the Image<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// Position Patient.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value << position[2];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0020|1041", value.str());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Slice Thickness: For now, we store the z spacing<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value.str("");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value << inputSpacing[2];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0018|0050",<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value.str());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// Spacing Between Slices<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(*dict, "0018|0088",<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">value.str());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// Save the dictionary<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">outputArray.push_back(dict);<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">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">typedef itk::ImageSeriesWriter< ImageType, ImageType_Serie > SeriesWriterType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">seriesWriter->SetInput(FiltroResample->GetOutput());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">writer->SetFileName(argv[2]);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">writer->SetInput(FiltroResample->GetOutput());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">itksys::SystemTools::MakeDirectory("Test"); //PASAR ESTO POR ARGUMENTO!!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::NumericSeriesFileNames OutputNamesGeneratorType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">OutputNamesGeneratorType::Pointer outputNames = OutputNamesGeneratorType::New();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string seriesFormat("Test"); //PASAR ESTO POR ARGUMENTO!!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">seriesFormat = seriesFormat + "/" + "IM%d.dcm";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">outputNames->SetSeriesFormat(seriesFormat.c_str());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">outputNames->SetStartIndex(1);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">outputNames->SetEndIndex(inputSize[2]);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">seriesWriter->SetImageIO(gdcmIO);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">seriesWriter->SetFileNames(outputNames->GetFileNames());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">seriesWriter->SetMetaDataDictionaryArray(&outputArray);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << "Escribiendo la imagen como..." << std::endl << std::endl;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::cout << argv[2] << std::endl << std::endl;<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->Update();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">seriesWriter->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">}<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">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>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">void CopyDictionary(itk::MetaDataDictionary &fromDict, itk::MetaDataDictionary &toDict)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::MetaDataDictionary DictionaryType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">DictionaryType::ConstIterator itr = fromDict.Begin();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">DictionaryType::ConstIterator end = fromDict.End();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">typedef itk::MetaDataObject< std::string > MetaDataStringType;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">while (itr != end)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::MetaDataObjectBase::Pointer  entry = itr->second;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">MetaDataStringType::Pointer entryvalue =<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">dynamic_cast<MetaDataStringType *>(entry.GetPointer());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">if (entryvalue)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string tagkey = itr->first;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">std::string tagvalue = entryvalue->GetMetaDataObjectValue();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">itk::EncapsulateMetaData<std::string>(toDict, tagkey, tagvalue);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">++itr;<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>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">El jue., 30 de mar. de 2017 a la(s) 11:25, Lowekamp, Bradley (NIH/NLM/LHC) [C] [via ITK - Users] <<a href="file:////user/SendEmail.jtp%3ftype=node&node=38056&i=0" target="_top">[hidden email]</a>> escribió:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.5pt;padding:0in 0in 0in 12.0pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="margin-bottom:12.0pt">Hello, <br>
<br>
Writing correct DICOM continues to be a struggle with SimpleITK and ITK. It is generally recommended to directly use GDCM or DCMTK to write a proper DICOM series.
<br>
<br>
SimpleITK tries to keep things, well, simple and straight forward. But ITK ties to do some smart things, which get in the way for certain uses with SimpleITK. We are trying to document and develop a nominal set of DICOM output operations that work in SimpleITK.
<br>
<br>
Do you have working C++ code that works for your intended operation? Can you share a small section of code which does what you expect it C++?
<br>
<br>
Thank, <br>
Brad <br>
<br>
<br>
<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
> On Mar 30, 2017, at 8:49 AM, Matias <<a href="http://user/SendEmail.jtp?type=node&node=38052&i=0" target="_blank">[hidden email]</a>> wrote:
<br>
> <br>
> Hi, <br>
> <br>
> I've been dealing with ITK for years in C++ and now I would need to use <br>
> SimpleITK and C# as far as I can in a new proyect. <br>
> <br>
> Is the SimpleITK SeriesWriter working for Dicom Files? Last time I tried to <br>
> use it I had problems with the DicomTags, these would not copy or there was <br>
> no method to copy the tags to the resulting slices. <br>
> <br>
> Currently, I read a volume of slices, apply rotation and then I need to <br>
> write the resulting image as another set of slices AND keeping tag <br>
> information such as patient name, etc. <br>
> <br>
> Thank you, <br>
> <br>
> Matias. <br>
> <br>
> <br>
> <br>
> -- <br>
> View this message in context: <a href="http://itk-users.7.n7.nabble.com/SimpleITK-Serieswriter-and-DicomTags-tp38050.html" target="_blank">
http://itk-users.7.n7.nabble.com/SimpleITK-Serieswriter-and-DicomTags-tp38050.html</a><br>
> Sent from the ITK - Users mailing list archive at Nabble.com. <br>
> _____________________________________ <br>
> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a>
<br>
> <br>
> Visit other Kitware open-source projects at <br>
> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
> <br>
> Kitware offers ITK Training Courses, for more information visit: <br>
> <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
> <br>
> Please keep messages on-topic and check the ITK FAQ at: <br>
> <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
> <br>
> Follow this link to subscribe/unsubscribe: <br>
> <a href="http://public.kitware.com/mailman/listinfo/insight-users" target="_blank">
http://public.kitware.com/mailman/listinfo/insight-users</a><br>
> _______________________________________________ <br>
> Community mailing list <o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">> <a href="http://user/SendEmail.jtp?type=node&node=38052&i=1" target="_blank">
[hidden email]</a> <br>
> <a href="http://public.kitware.com/mailman/listinfo/community" target="_blank">
http://public.kitware.com/mailman/listinfo/community</a><o:p></o:p></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_____________________________________ <br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a> <br>
<br>
Visit other Kitware open-source projects at <br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit: <br>
<a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at: <br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe: <br>
<a href="http://public.kitware.com/mailman/listinfo/insight-users" target="_blank">http://public.kitware.com/mailman/listinfo/insight-users</a><br>
<br>
<o:p></o:p></p>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="1" width="100%" noshade="" style="color:#CCCCCC" align="center">
</div>
<div>
<div>
<p class="MsoNormal"><b><span style="font-size:9.0pt;font-family:Geneva;color:#444444">If you reply to this email, your message will be added to the discussion below:<o:p></o:p></span></b></p>
</div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:Geneva;color:#444444"><a href="http://itk-users.7.n7.nabble.com/SimpleITK-Serieswriter-and-DicomTags-tp38050p38052.html" target="_blank">http://itk-users.7.n7.nabble.com/SimpleITK-Serieswriter-and-DicomTags-tp38050p38052.html</a>
<o:p></o:p></span></p>
</div>
<div style="margin-top:4.8pt">
<p class="MsoNormal" style="line-height:18.0pt"><span style="font-size:8.5pt;font-family:Geneva;color:#666666">To unsubscribe from SimpleITK Serieswriter and DicomTags,
<a href="" target="_blank">click here</a>.<br>
<a href="http://itk-users.7.n7.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml" target="_blank"><span style="font-size:7.0pt;font-family:Times">NAML</span></a>
<o:p></o:p></span></p>
</div>
</blockquote>
</div>
</div>
</div>
<div>
<p class="MsoNormal">-- <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">Matias<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div class="MsoNormal">
<hr size="2" width="300" style="width:225.0pt" align="left">
</div>
<p class="MsoNormal">View this message in context: <a href="http://itk-users.7.n7.nabble.com/SimpleITK-Serieswriter-and-DicomTags-tp38050p38056.html">
Re: [ITK-users] [ITK] SimpleITK Serieswriter and DicomTags</a><br>
Sent from the <a href="http://itk-users.7.n7.nabble.com/">ITK - Users mailing list archive</a> at Nabble.com.<br>
<br>
<o:p></o:p></p>
</div>
</body>
</html>