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

Eldridge, Bryce D bdeldri at sandia.gov
Tue Feb 28 23:47:31 CET 2023


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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20230228/6a58ce01/attachment.htm>


More information about the Rtk-users mailing list