[Rtk-users] [EXTERNAL] Re: Help modifying first reconstruction example to read TIFF projections

Simon Rit simon.rit at creatis.insa-lyon.fr
Wed Mar 1 16:32:41 CET 2023


Is this image the output of the rtk::ProjectionsReader? If so, it does not
look right because the air seems to be non zero (assuming that white is non
zero). That should have been done automatically for unsigned short
projections, I'm not sure what's wrong here. Maybe set the component type
of your TIFFImageIO (see doxygen here
<https://itk.org/Doxygen/html/classitk_1_1TIFFImageIO-members.html>)?
The next thing is that the sinogram seems to be incomplete (~180°
coverage?) which is a problem for FDK and the probable cause for the bright
streaks. You might want to add a ParkerShortScanImageFilter between the
output of the ProjectionsReader and the FDK reconstruction, as in rtkfdk
<https://github.com/SimonRit/RTK/blob/master/applications/rtkfdk/rtkfdk.cxx#L101-L115>
.
Simon

On Wed, Mar 1, 2023 at 3:46 PM Eldridge, Bryce D <bdeldri at sandia.gov> wrote:

> Ok, thanks. Writing out the projections like you suggested looks ok, I can
> load the written projection stack into slicer and the image data looks
> correct as far as I can tell:
>
>
>
>
>
> But the reconstruction volume still does not look right:
>
>
>
>
>
> *From:* Simon Rit <simon.rit at creatis.insa-lyon.fr>
> *Sent:* Tuesday, February 28, 2023 10:49 PM
> *To:* Eldridge, Bryce D <bdeldri at sandia.gov>
> *Cc:* rtk-users at openrtk.org
> *Subject:* Re: [EXTERNAL] Re: [Rtk-users] Help modifying first
> reconstruction example to read TIFF projections
>
>
>
> The ProjectionsReader usually takes integer projections as input and
> convert them to float with the appropriate conversions. So I don't think it
> is the problem here. To be checked...
>
> Simon
>
>
>
> On Wed, Mar 1, 2023 at 12:38 AM Eldridge, Bryce D <bdeldri at sandia.gov>
> wrote:
>
> I will try writing out the projections and see what I get.
>
>
>
> Could it be a data type issue? The images are unsigned short (16-bit
> grayscale), but I’m using the itk.Image[itk.F,3] type so I’m not sure if
> the projection reader is defaulting to unsigned short and doing the
> appropriate conversions or not.
>
>
>
> It looks like ITK doesn’t include wrapping support for unsigned short by
> default, so I’d have to rebuild it to try to test that.
>
>
>
> *From:* Simon Rit <simon.rit at creatis.insa-lyon.fr>
> *Sent:* Tuesday, February 28, 2023 4:33 PM
> *To:* Eldridge, Bryce D <bdeldri at sandia.gov>
> *Cc:* rtk-users at openrtk.org
> *Subject:* [EXTERNAL] Re: [Rtk-users] Help modifying first reconstruction
> example to read TIFF projections
>
>
>
> Hi,
>
> Maybe you can first check whether the projections are read adequately by
> adding a line itk.imwrite(projectionsSource)? The ProjectionsReader tries
> to automatically convert the projections to line integral and it might do
> something wrong... I don't see what could be wrong in your code.
>
> Simon
>
>
>
> On Tue, Feb 28, 2023 at 11:53 PM Eldridge, Bryce D <bdeldri at sandia.gov>
> wrote:
>
> Hi,
>
>
>
> I am trying to modify the first reconstruction example to read a set of
> 16-bit grayscale TIFF projections that I captured, run the 3D
> reconstruction, and save the output. The projects are taken at 5 degree
> increments over a 180 degree arc.
>
>
>
> It runs without errors, but the reconstructed volume looks very strange
> which makes me think I am doing something wrong.
>
>
>
> Here is the basic python code I am trying to use (modified from the
> example), if anyone can see what I might be doing wrong I would appreciate
> it.
>
>
>
> # Defines the image type
>
> ImageType = itk.Image[itk.F,3]
>
>
>
> # Defines the RTK geometry object
>
> geometry = rtk.ThreeDCircularProjectionGeometry.New()
>
> numberOfProjections = 37
>
> firstAngle = 0.
>
> angularArc = 185.
>
> sid = 914 # source to isocenter distance (mm)
>
> sdd = 1219 # source to detector distance (mm)
>
> for x in range(0,numberOfProjections):
>
>   angle = firstAngle + x * angularArc / numberOfProjections
>
>   geometry.AddProjection(sid,sdd,angle)
>
>
>
> Skipping some code … (file name list setup, geometry output writing) …
>
>
>
> tiffio = itk.TIFFImageIO.New()
>
>
>
> ProjectionsReaderType = rtk.ProjectionsReader[ImageType]
>
> projectionsSource = ProjectionsReaderType.New()
>
> projectionsSource.SetImageIO(tiffio)
>
> projectionsSource.SetFileNames(fileNameList)
>
> projOrigin = [ -0.14*(3072-1)/2, -0.14*(2560-1)/2, 0 ] #input images are
> 3072x2560 pixels with a 0.14mm pixel size
>
> projSpacing = [ 0.14, 0.14, 1.0 ]
>
> projectionsSource.SetOrigin( projOrigin )
>
> projectionsSource.SetSpacing( projSpacing )
>
>
>
> ConstantImageSourceType = rtk.ConstantImageSource[ImageType]
>
>
>
> # Create reconstructed image
>
> constantImageSource2 = ConstantImageSourceType.New()
>
> sizeOutput = [ 512, 512, 512 ]
>
> origin = [ -255.5, -255.5, -255.5 ]
>
> spacing = [ 1.0, 1.0, 1.0 ]
>
> constantImageSource2.SetOrigin( origin )
>
> constantImageSource2.SetSpacing( spacing )
>
> constantImageSource2.SetSize( sizeOutput )
>
> constantImageSource2.SetConstant(0.)
>
>
>
> # FDK reconstruction
>
> print("Reconstructing...")
>
> FDKCPUType = rtk.FDKConeBeamReconstructionFilter[ImageType]
>
> feldkamp = FDKCPUType.New()
>
> feldkamp.SetInput(0, constantImageSource2.GetOutput()) # this is the
> template for the output image type
>
> feldkamp.SetInput(1, projectionsSource.GetOutput()) # this is the
> projection stack from rtk.ProjectionsReader
>
> feldkamp.SetGeometry(geometry)
>
> feldkamp.GetRampFilter().SetTruncationCorrection(0.0)
>
> feldkamp.GetRampFilter().SetHannCutFrequency(0.0)
>
>
>
> # Writer
>
> print("Writing output image...")
>
> WriterType = rtk.ImageFileWriter[ImageType]
>
> writer = WriterType.New()
>
> writer.SetFileName(sys.argv[1])
>
> writer.SetInput(feldkamp.GetOutput())
>
> writer.Update()
>
>
>
>
>
> Thanks
>
>
>
>
>
> _______________________________________________
> Rtk-users mailing list
> rtk-users at openrtk.org
> https://www.creatis.insa-lyon.fr/mailman/listinfo/rtk-users
> <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.creatis.insa-lyon.fr%2Fmailman%2Flistinfo%2Frtk-users&data=05%7C01%7Cbdeldri%40sandia.gov%7C74ac4c0134214b60bcef08db1a18b82f%7C7ccb5a20a303498cb0c129007381b574%7C1%7C0%7C638132465769240689%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=bJ5ousjDotpdMOje49extRArod2djH67SkroT%2FcmXCg%3D&reserved=0>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20230301/e89f02dc/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 120376 bytes
Desc: not available
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20230301/e89f02dc/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 298786 bytes
Desc: not available
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20230301/e89f02dc/attachment-0003.png>


More information about the Rtk-users mailing list