<div dir="ltr"><div><div>Hello Again<br><br>I found the information, that in SimpleITK the MetaDataDictionary interface is only part of the Image class. Currently it provides a read only interface, with the GetMetaDataKeys(), and GetMetaData(key) methods. This get method only returns the type of data in the dictionary converted to a string.<br><br>The required method would be Image::SetMetaData(key,value). But unfortunately I do not see this method, so I think that this is still not implemented. The only what I need is to keep information that my files belong to one series of images, which belongs to one patient and study ( not necessarily the same study or series as the original).<br><br></div>Regards.<br><br></div>Peter.<br><div><div><br><div class="gmail_extra"><br><div class="gmail_quote">2016-07-07 14:45 GMT+02:00 Dženan Zukić <span dir="ltr"><<a href="mailto:dzenanz@gmail.com" target="_blank">dzenanz@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="font-family:verdana,sans-serif;font-size:small">Hi Piotr,</div><div style="font-family:verdana,sans-serif;font-size:small"><br></div><div style="font-family:verdana,sans-serif;font-size:small">instead of ImageReader->GetMetaDataDictionary() call ImageSeriesReader->GetMetaDataDictionary(). Also, the image format you are writing to needs to be able to support metadata (e.g. .mha, .nrrd, DICOM), otherwise the metadata is lost (.nii, .jpg, .bmp etc).</div><div style="font-family:verdana,sans-serif;font-size:small"><br></div><div style="font-family:verdana,sans-serif;font-size:small">But for writing DICOM, the process might be somewhat different from what I described in the first email. Definitely different if you want metadata copied slice for slice from input to output - in this case some metadata needs to be changed anyway, such as flag that this is a derived image and not an original image coming out of a scanner.</div><div style="font-family:verdana,sans-serif;font-size:small"><br></div><div style="font-family:verdana,sans-serif;font-size:small">I suppose that MetaDataDictionary class is not wrapped. You can then loop through all the keys and copy them and their content one by one.</div><div style="font-family:verdana,sans-serif;font-size:small"><br></div><div style="font-family:verdana,sans-serif;font-size:small">Regards</div></div><div class=""><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 7, 2016 at 8:35 AM, Piotr Piasecki <span dir="ltr"><<a href="mailto:piotpia124@student.polsl.pl" target="_blank">piotpia124@student.polsl.pl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div>Hi Dženan,<br><br>thank you for your help and for this example. Unfortunately, I have not found method GetMetaDataDictionary() in SimpleITK in C# (I found only GetMetaDataKeys() and GetMetaData(string key)). Also, I have not found a method SetMetaDataDictionary or any other that allows me to assign DICOM tags.<br><br>My short piece of code looks like this:<br><br>static public void ReadImage()<br>        {<br>            sitk.ImageFileReader reader = new sitk.ImageFileReader();<br>            reader.SetFileName(@".\DICOM_TEST\original.dcm");<br>            var image = reader.Execute();<br><br>            sitk.ImageFileWriter writer = new sitk.ImageFileWriter();<br>            writer.SetFileName(@".\DICOM_TEST\modified.dcm");<br>            writer.Execute(image);<br>        }<br><br><span lang="en"><span>Another problem is</span> <span>that your</span> <span>example describes</span> <span>only</span><span> loading and</span> <span>saving</span> <span>a single .dcm file</span><span>.</span> <span>What</span> <span>if</span> <span>I have to</span> <span>process a</span> <span>whole</span> <span>series of files</span><span> using sitk.ImageSeriesReader and sitk.ImageSeriesWriter?<br><br></span></span></div><span lang="en"><span>Regards,<br><br></span></span></div><span lang="en"><span>Peter.<br></span></span><div><div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-07-05 15:45 GMT+02:00 Dženan Zukić <span dir="ltr"><<a href="mailto:dzenanz@gmail.com" target="_blank">dzenanz@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="font-family:verdana,sans-serif;font-size:small">Hi Piotr,</div><div style="font-family:verdana,sans-serif;font-size:small"><br></div><div style="font-family:verdana,sans-serif;font-size:small">if you want to carry over metadata from input image to output image, you should save the metadata dictionary in a way similar to this:</div><div style="font-family:verdana,sans-serif;font-size:small"><br></div><div><div><font face="monospace, monospace">itk::MetaDataDictionary metadata;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">template< typename TImage ></font></div><div><font face="monospace, monospace">itk::SmartPointer<TImage> readImage(std::string fileName)</font></div><div><font face="monospace, monospace">{</font></div><div><font face="monospace, monospace">    typedef itk::ImageFileReader<TImage> ReaderType;</font></div><div><font face="monospace, monospace">    typename ReaderType::Pointer reader = ReaderType::New();</font></div><div><font face="monospace, monospace">    reader->SetFileName(fileName.c_str());</font></div><div><font face="monospace, monospace">    try</font></div><div><font face="monospace, monospace">    {</font></div><div><font face="monospace, monospace">        reader->Update();</font></div><div><font face="monospace, monospace">        metadata = reader->GetMetaDataDictionary();</font></div><div><font face="monospace, monospace">        return reader->GetOutput();</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">    catch (itk::ExceptionObject & error)</font></div><div><font face="monospace, monospace">    {</font></div><div><font face="monospace, monospace">        std::cerr << "Error: " << error << std::endl;</font></div><div><font face="monospace, monospace">        return NULL;</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">template< typename TImage ></font></div><div><font face="monospace, monospace">void writeImage(itk::SmartPointer<TImage> image, std::string fileName)</font></div><div><font face="monospace, monospace">{</font></div><div><font face="monospace, monospace">    image->SetMetaDataDictionary(metadata); //full metadata</font></div><div><font face="monospace, monospace">    typedef itk::ImageFileWriter<TImage> WriterType;</font></div><div><font face="monospace, monospace">    typename WriterType::Pointer writer = WriterType::New();</font></div><div><font face="monospace, monospace">    writer->SetFileName(fileName.c_str());</font></div><div><font face="monospace, monospace">    writer->SetInput(image);</font></div><div><font face="monospace, monospace">    try</font></div><div><font face="monospace, monospace">    {</font></div><div><font face="monospace, monospace">        writer->Update();</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">    catch (itk::ExceptionObject & error)</font></div><div><font face="monospace, monospace">    {</font></div><div><font face="monospace, monospace">        std::cerr << "Error: " << error << std::endl;</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">}</font></div></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 5, 2016 at 2:46 AM, Piotr Piasecki <span dir="ltr"><<a href="mailto:piotpia124@student.polsl.pl" target="_blank">piotpia124@student.polsl.pl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear Sir or Madam.<br>
<br>
I am a student in Biomedical Engineering at the Silesian University of Technology. During my studies I worked with ITK and SimpleITK in C#. I want to use them in my current project, but I have an important question. After loading and processing a series of .dcm files I lost information about the patient and study to which they belong, and that they belong to one series. How can I keep this information?<br>
<br>
I will be very grateful for any answer.<br>
<br>
Best regards.<br>
<br>
Peter.<br>
_____________________________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" 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" rel="noreferrer" 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" rel="noreferrer" 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" rel="noreferrer" 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" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/insight-users</a><br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div></div></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div></div></div>