[Rtk-users] CT forward projection image quality

Vincent Libertiaux vl at xris.eu
Wed Sep 11 09:40:20 CEST 2024


Hi Timothy,



I don't know if it would be suitable for you but I regularly use gvxr 
(https://pypi.org/project/gvxr/) to simulate the xray image acquisition 
process.  It has many very interesting feature 
(monochromatic,polychromatic with realistic spectrum, CT, stl meshes 
operations,...) and runs on the GPU.


I hope it can be of any assitance to you.

Best regards,


Vincent



On 10.09.24 18:11, Timothy Wang Bok Yau wrote:
> Hi everyone,
>
> I recently started using rtk to generate DRRs and was hoping to 
> receive some insight on how to improve the quality of a DRR generated 
> from a patient CT. I am hoping that the DRR would be able to 
> approximate the quality of a kV projection from a cone beam CT. 
> Currently I am setting the projection parameters to match the kV 
> acquisition parameters on our linear accelerators, but am finding that 
> the DRRs I produce are very blurry with low contrast. I was able to 
> find some studies in the literature using rtk to generate DRRs and 
> have found that their image quality is significantly better than what 
> I am currently achieving (see Fig. 1 from the following paper 
> https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4833659/). I've copied my 
> code for generating the DRRs. Any insight would be greatly appreciated.
>
> # Read CT in from DICOM files
> dirName = r"C:\Users\yaut\CT"
> namesGenerator = itk.GDCMSeriesFileNames.New()
> namesGenerator.SetUseSeriesDetails(True)
> namesGenerator.AddSeriesRestriction("0008|0021")
> namesGenerator.SetGlobalWarningDisplay(False)
> namesGenerator.SetDirectory(dirName)
> uid = namesGenerator.GetSeriesUIDs()[0]
> fileNames = namesGenerator.GetFileNames(uid)
> # Setup the  image series reader using GDCMImageIO
> ImageType = itk.Image[itk.F,3]
> reader = itk.ImageSeriesReader[ImageType].New()
> dicomIO = itk.GDCMImageIO.New()
> reader.SetImageIO(dicomIO)
> reader.SetFileNames(fileNames)
> reader.ForceOrthogonalDirectionOff()
> # Read DICOM
> reader.Update()
> CT = reader.GetOutput()
> # change the direction and origin to align with the RTK convention
> CTDirection = np.array([[0.,1.,0.],[0.,0.,1.],[-1.,0.,0.]])
> CT.SetDirection(itk.matrix_from_array(CTDirection))
> # Center the image around 0 which is the default center of rotation
> CT.SetOrigin([-0.5*(CT.GetLargestPossibleRegion().GetSize()[1]-1)*CT.GetSpacing()[1],
>                   
>  -0.5*(CT.GetLargestPossibleRegion().GetSize()[2]-1)*CT.GetSpacing()[2],
>                     
> 0.5*(CT.GetLargestPossibleRegion().GetSize()[0]-1)*CT.GetSpacing()[0]])
>
>
> # Set forward projection geometry
> geometry = rtk.ThreeDCircularProjectionGeometry.New()
> # Image type
> ImageType = itk.Image[itk.F,3]
> # Image geometry
> geometry = rtk.ThreeDCircularProjectionGeometry.New()
> numberOfProjections = 360
> firstAngle = 0
> angularArc = 2*np.pi
> # Source to isocentre distance in mm
> sid = 1000
> # Source to detector distance in mm
> sdd = 1500
> for x in range(0,numberOfProjections):
>     angle = firstAngle + x*angularArc/numberOfProjections
>     geometry.AddProjectionInRadians(sid,sdd,angle,inPlaneAngle=np.pi)
> # Create a stack of empty projection images
> # Spacing and output size are set based on kV acquisition parameters 
> on our Linacs
> ConstantImageSourceType = rtk.ConstantImageSource[ImageType]
> constantImageSource = ConstantImageSourceType.New()
> origin = CT.GetOrigin()
> sizeOutput = [1024, 1024,  numberOfProjections ]
> spacing = [0.388, 0.388, 0.5] #mm
> constantImageSource.SetOrigin( origin )
> constantImageSource.SetSpacing( spacing )
> constantImageSource.SetSize( sizeOutput )
> constantImageSource.SetConstant(0.)
> # Generate DRRs
> JosephType = rtk.JosephForwardProjectionImageFilter[ImageType, ImageType]
> joseph = JosephType.New()
> joseph.SetGeometry(geometry)
> joseph.SetInput(constantImageSource.GetOutput())
> joseph.SetInput(1, CT)
>
>
> _______________________________________________
> Rtk-users mailing list
> rtk-users at openrtk.org
> https://www.creatis.insa-lyon.fr/mailman/listinfo/rtk-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20240911/d972cb49/attachment-0001.htm>


More information about the Rtk-users mailing list