<div dir="ltr">Hi Steve, <div><br></div><div>Not 100% sure. Maybe our implementation of something like this in DIPY can help? </div><div><br></div><div><a href="https://github.com/nipy/dipy/blob/master/dipy/io/utils.py#L49-L91">https://github.com/nipy/dipy/blob/master/dipy/io/utils.py#L49-L91</a><br></div><div><br></div><div>Cheers, </div><div><br></div><div>Ariel</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 23, 2019 at 7:24 AM Stephen Taylor <<a href="mailto:stephen.taylor@imm.ox.ac.uk">stephen.taylor@imm.ox.ac.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-GB">
<div class="gmail-m_8116899228057654525WordSection1">
<p class="MsoNormal">Hi,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I don't understand how to set RGB values directly in NiBabel. I have seen the previous post ( <a href="https://mail.python.org/pipermail/neuroimaging/2016-November/001230.html" target="_blank">https://mail.python.org/pipermail/neuroimaging/2016-November/001230.html</a>)
 that gives random colours in a 3d matrix but I don't understand how to assign a specific RGB value in a particular voxel. <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">So building on the previous example in the link, I create a 2 x 1 x 1 volume and change the values of the colours directly:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">import nibabel as nib</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">import numpy as np</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">nifti_path = "test.nii"</span><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">shape_3d = (2,1,1)</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">rgb_dtype = np.dtype([('R', 'u1'), ('G', 'u1'), ('B', 'u1')])</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">rgb_arr = np.random.randint(0, 256, size=shape_3d + (3,)).astype('u1')</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">rgb_arr[0][0][0] = [100,150,200]</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">rgb_arr[1][0][0] = [10,20,30]</span><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">rgb_typed = rgb_arr.copy().view(rgb_dtype).reshape(shape_3d)</span><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">img = nib.Nifti1Image(rgb_typed, np.eye(4))</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">print(rgb_typed)</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">nib.save(img, nifti_path)</span><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">The image that is returned (‘test.nii’) when inspected in Fiji/ImageJ looks like this:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><img border="0" width="132" height="52" style="width: 1.375in; height: 0.5416in;" id="gmail-m_8116899228057654525Picture_x0020_1" src="cid:16a5256d63e4cff311" alt="image.png"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">and the  <span style="font-family:"Courier New"">rgb_typed</span>  array is:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">[[[(100, 150, 200)]]<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"> [[( 10,  20,  30)]]]<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">However, in the actual image (shown above) the green colour RGB values are 100,200,020 (not as I expected <span style="font-family:"Courier New"">100,150,200)</span>and the red colour is 150,010,030 (not as I expected
<span style="font-family:"Courier New"">10,20,30)</span> so the RGB values seem to be mixed up. Clearly I am doing something wrong. How do I directly set the colours of a voxel in a volume?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks, for any help,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">Steve<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">----------------------------------<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">Head of Analysis, Visualisation  and Informatics,
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">MRC Weatherall Institute of Molecular Medicine,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">Oxford.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

_______________________________________________<br>
Neuroimaging mailing list<br>
<a href="mailto:Neuroimaging@python.org" target="_blank">Neuroimaging@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/neuroimaging" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/neuroimaging</a><br>
</blockquote></div>