<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">This alternation of behavior is accomplished by this check:</div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><font face="monospace, monospace">  if ( this->MustRescale() )</font></div><div class="gmail_default"><font face="monospace, monospace">    {</font></div><div class="gmail_default"><font face="monospace, monospace">    if ( this->m_ComponentType == CHAR</font></div><div class="gmail_default"><font face="monospace, monospace">         || this->m_ComponentType == UCHAR</font></div><div class="gmail_default"><font face="monospace, monospace">         || this->m_ComponentType == SHORT</font></div><div class="gmail_default"><font face="monospace, monospace">         || this->m_ComponentType == USHORT</font></div><div class="gmail_default"><font face="monospace, monospace">         || this->m_ComponentType == INT</font></div><div class="gmail_default"><font face="monospace, monospace">         || this->m_ComponentType == UINT</font></div><div class="gmail_default"><font face="monospace, monospace">         || this->m_ComponentType == LONG</font></div><div class="gmail_default"><font face="monospace, monospace">         || this->m_ComponentType == ULONG )</font></div><div class="gmail_default"><font face="monospace, monospace">      {</font></div><div class="gmail_default"><font face="monospace, monospace">      this->m_ComponentType = FLOAT;</font></div><div class="gmail_default"><font face="monospace, monospace">      }</font></div><div class="gmail_default"><font face="monospace, monospace">    }</font></div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Regards</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 10, 2017 at 6:43 PM, Dženan Zukić <span dir="ltr"><<a href="mailto:dzenanz@gmail.com" target="_blank">dzenanz@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Hi Tobias,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><span style="font-family:verdana,sans-serif">reading is done in function </span><font face="monospace, monospace">void NiftiImageIO::Read(void *buffer)</font><font face="verdana, sans-serif"> in file C:\Dev\ITK-git\Modules\<wbr>IO\NIFTI\src\itkNiftiImageIO.<wbr>cxx</font></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><span style="font-family:verdana,sans-serif">This function is supposed to read image data from disk into the given buffer pointer. The data type of this buffer is of </span><font face="monospace, monospace">this->m_ComponentType</font><font face="verdana, sans-serif">. In case that NIFTI reader detects it needs to do rescale/slope transformation (in function ReadImageInformation), it says that </font><font face="monospace, monospace">this->m_ComponentType=FLOAT</font><font face="verdana, sans-serif">, no matter what is the real component type on disk. Then Read reads the image data, converts it to float, does rescale/slope transformation in place (float to float).</font></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><span style="font-family:verdana,sans-serif">Later ImageFileReader (which calls </span><font face="monospace, monospace">ImageIO::Read()</font><span style="font-family:verdana,sans-serif">) does C++ cast from </span><font face="monospace, monospace">this->m_ComponentType</font><font face="verdana, sans-serif"> into the type with which ImageFileReader was instantiated.</font></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Regards,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Dženan</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 10, 2017 at 5:02 PM, Wood, Tobias <span dir="ltr"><<a href="mailto:tobias.wood@kcl.ac.uk" target="_blank">tobias.wood@kcl.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I’ve made some progress on rewriting the Bruker code. I’m stuck on when the ImageIO classes should apply scalings/offsets.<br>
<br>
Bruker’s default data type is INT16. They store a scaling and offset that must be applied to the data. For whatever reason, the scaling tends to very small - about 1e-5. Hence a lot of values should be scaled down to < 1. Obviously, if this is done at INT16 precision then most of the data is rounded to zero and lost.<br>
<br>
I tried to copy the NifiIO class which also applies scaling (See lines 707 onwarsds in itkNiftiImageIO.cxx). However - if I read this correctly, it is applying the scaling at the precision/datatype of the image file, not the PixelType requested by the itkImage template parameter to itkImageFileReader.<br>
<br>
At what point is the buffer read by the ImageIO classes converted to the PixelType of the requested itkImage? How do I supply the scaling and offset to this conversion?<br>
<br>
As always, I hope I’m missing something obvious.<br>
Thanks,<br>
Toby<br>
<div class="m_-8842072361717142830HOEnZb"><div class="m_-8842072361717142830h5"><br>
On 16/01/2017, 09:27, "Wood, Tobias" <<a href="mailto:tobias.wood@kcl.ac.uk" target="_blank">tobias.wood@kcl.ac.uk</a>> wrote:<br>
<br>
    >    In addition to Dženan's suggestion, the code could be cleaned up, moved out of the ITKReview module, and placed in its own module in the IO group. This will enable it to be automatically registered like the other ImageIOs.<br>
<br>
    Thanks Matt and Dženan, that’s what I was wondering. I will experiment with the code and submit a patch if I find time.<br>
<br>
    Best wishes,<br>
    Toby<br>
<br>
<br>
<br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>