3D reconstruction of radial OCT slices

Hi everyone!

I’m working on radial OCT scans of the optic nerve head (eye), and the slices are rotated from each other by 15°.
Since I don’t have parallel slices, I’m struggling to construct the 3D model of the optic nerve head using those rotational slices. Is there a way that I could do it in 3D Slicer?

Thanks in advance

Yes, that should be no problem at all. You can use the code snippet provided here:

You just need to set numberOfTimePoints to 1, as I guess your data set is a simple 3D volume (not a 3D+t volume sequence).

1 Like

Hello,

Thank you so much for taking the time to answer my question.
Yes exactly, I only need a 3D model with no time included.
I tried the code snippet you provided and made sure that I have the extensions installed.
I set numberOgTimePoints to 1, but I have an error of type : AttributeError: ‘NoneType’ object has no attribute ‘GetDataNodeAtValue’. Maybe there is a None value in the “inputVolumeSequenceNode”.
Would you mind explaining why does this error arise so I can fix it?

Thank you again.

As a starting point, you need to create a sequence node that contains each image slice and its correct position and orientation. This is done automatically if you read your images from an MRI scanner but if you just have a bunch of TIFF files then you need to put together the sequence manually.

First of all, you need to set the origin, spacing, and axis directions for each image slice. The origin is the physical position of one corner of the image, spacing is the size of one pixel, and axis directions are the directions of the x, y, and z (=cross(x,y)) axes of the image, using either the Transforms module, or using SetOrigin, SetSpacing, and SetIJKToRASDirections methods of each volume node. Once all the image slices have the correct geometry, you can put them into a sequence using either Python scripting, or using Sequences module: in Edit tab, choose Sequence → Create new sequence, select each node in the “Add remove data nodes” section, and click the green arrow button until all images are added to the sequence.

1 Like

Thank you for providing the instructions.
Using Transforms, I defined the rotation angle of each slice, then I created a sequence that contains all the slices. And I got no errors this time in the code you provided, but I don’t get the 3D volume. Am I missing a step?
Also, I noticed, when I apply the rotation to each slice, only the last slice’s rotation is displayed (the other slices are not rotated even though I defined their rotation angle).

If you want to rotate the slice view along with the image slice then you can use Volume Reslice Driver module in SlicerIGT extension.

What you have above is a 3D volume. You can see that near the center of rotation the gaps between the slices are filled. However, at the output resolution you have chosen the gap between slices gets way too big as you move away from the rotation center. Therefore, there is no way to meaningfully fill those gaps from the available information.

You can increase the size of the filled region if you lower the output resolution, but then of course the image will contain less details (will appear more blurry). Therefore, if you want to have a larger filled region without quality loss then you need to acquire more slices. For a reasonable sized 3D region I would recommend to acquire at least 5-10x more slices.