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 <bdel...@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-us...@openrtk.org > https://www.creatis.insa-lyon.fr/mailman/listinfo/rtk-users >
_______________________________________________ Rtk-users mailing list rtk-us...@openrtk.org https://www.creatis.insa-lyon.fr/mailman/listinfo/rtk-users