[Rtk-users] DRR with limited FOV from 3D-CT

Simon Rit simon.rit at creatis.insa-lyon.fr
Wed Nov 9 14:25:57 UTC 2022


Hi,
The first input of JosephForwardProjectionImageFilter is the image in which
you'll calculate the DRR, typically an empty projection (filled with
zeros). In your code, this is computed with constantImageSource but you're
setting the volume origin, spacing size which is probably wrong. For an
Elekta projection (you showed an Elekta drawing), this would be
constantImageSource.SetOrigin( [-204.4,-204.4,0] )
constantImageSource.SetSpacing( [0.8,0.8,0.8] )
constantImageSource.SetSize( [512, 512,1]  )
Besides, for the CT volume you sent, point (0,0,0) mm is not in the image
and this is the default center of rotation in RTK (see doc
<http://www.openrtk.org/Doxygen/DocGeo3D.html>). Moreover the orientation
is wrong. So either you change the origin and the direction to use RTK
convention or you build your geometry differently, e.g. by setting source
center, detector origin position and detector u v coordinates:
geometry.AddProjection([-57.,20.+sid,25.],[-57+115.,20.+sid-sdd
,25.],[1.,1.,0.],[0.,0.,1.])
where the coordinates (-57,28,25) are those of a point somewhere in the
center of the patient. This will give you line integrals, I don't know what
is the content of your png file but you might have to take the exponential
to have something close to real data. you also have to add 1000 to yourCT
numbers to put air at 0.
In short, read the geometry doc and don't expect us to be able to match
exactly the DRR you sent... This will require some work on your side
Cheers,
Simon

On Wed, Nov 9, 2022 at 11:32 AM Isuru Suranga Wijesinghe <
isurusuranga.wijesinghe at gmail.com> wrote:

> Can I ask any possible solution to my issue please (I just want to get the
> DRR with the limited FOV based on the machine parameters attached above) ???
>
> On Tue, Nov 8, 2022 at 2:12 PM Isuru Suranga Wijesinghe <
> isurusuranga.wijesinghe at gmail.com> wrote:
>
>> In addition to that I want to generate DRRs with a limited field of view
>> as attached in the sample real kV Xray image.
>> I've included a sample CT volume that I'm currently using to generate
>> such DRR images using the machine parameters.  Please assist in resolving
>> this matter. Thank you in advance for your consideration and time.
>>
>>  ref_CT_volume.nii.gz
>> <https://drive.google.com/file/d/1PilfGAhqWe-NFD4Up1CYwSHqDXns04CV/view?usp=drive_web>
>>  sample_real_kv_xray.png
>> <https://drive.google.com/file/d/1zX2HUEEL4-lGxS4daDrhXuhTy1uFBY89/view?usp=drive_web>
>>
>>
>> On Tue, Nov 8, 2022 at 11:23 AM Isuru Suranga Wijesinghe <
>> isurusuranga.wijesinghe at gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I have a 3D-CT volume and want to obtain the DRR projection by adjusting
>>> the machine parameters as shown in the image below.
>>>
>>> Here's my code, and I didn't get the expected DRRs with the limited FOV.
>>> Is there anything missing from the parameter setup?
>>>
>>> Could you please assist me in resolving this issue? Any code level
>>> assistance or advice would be greatly appreciated.
>>>
>>> # Loading 3D CT image
>>> CT = itk.imread("./ct.nii.gz", pixel_type=itk.F)
>>>
>>> # Defines the image type
>>> Dimension_CT = 3
>>> PixelType = itk.F
>>> ImageType = itk.Image[PixelType, Dimension_CT]
>>>
>>> origin_x, origin_y, origin_z = CT.GetOrigin()
>>> space_x, space_y, space_z = CT.GetSpacing()
>>>
>>> # Define origin, sizeOutput and spacing (still need to change these)
>>> origin = [origin_x, origin_y, origin_z]
>>> spacing = [space_x, space_y, space_z]
>>>
>>> sizeOutput = [ 512, 512, 1]
>>>
>>> # Create a stack of empty projection images
>>> ConstantImageSourceType = rtk.ConstantImageSource[ImageType]
>>> constantImageSource = ConstantImageSourceType.New()
>>>
>>> constantImageSource.SetOrigin( origin )
>>> constantImageSource.SetSpacing( spacing )
>>> constantImageSource.SetSize( sizeOutput )
>>> constantImageSource.SetConstant(0.)
>>>
>>> # Defines the RTK geometry object
>>> geometry = rtk.ThreeDCircularProjectionGeometry.New()
>>> firstAngle = 0.
>>> angularArc = 360.
>>> sid = 1000 # source to isocenter distance
>>> sdd = 1536 # source to detector distance
>>> gantryAngle = 0. # rot around y-axis
>>> projOffsetX = 0.
>>> projOffsetY = 0.
>>> outOfPlaneAngle = 90. # rot around x-axis
>>> inPlaneAngle = 0. # rot around z-axis
>>> sourceOffsetX = 0.
>>> sourceOffsetY = 0.
>>> geometry.AddProjection(sid, sdd, gantryAngle)
>>>
>>> REIType = rtk.JosephForwardProjectionImageFilter[ImageType, ImageType]
>>> rei = REIType.New()
>>>
>>> rei.SetGeometry( geometry )
>>> rei.SetInput(0, constantImageSource.GetOutput())
>>> rei.SetInput(1, CT)
>>> rei.Update()
>>>
>>> Dimension = 3
>>> OutputPixelType = itk.UC
>>> OutputImageType = itk.Image[OutputPixelType, Dimension]
>>>
>>> RescaleType = itk.RescaleIntensityImageFilter[ImageType, OutputImageType]
>>> rescaler = RescaleType.New()
>>> rescaler.SetOutputMinimum(0)
>>> rescaler.SetOutputMaximum(255)
>>> rescaler.SetInput(rei.GetOutput())
>>> rescaler.Update()
>>>
>>> WriteType = itk.ImageFileWriter[OutputImageType]
>>> writer = WriteType.New()
>>> writer.SetFileName('./drr_0.png')
>>> writer.SetInput(rescaler.GetOutput())
>>> writer.Update()
>>>
>>>
>>> _______________________________________________
> Rtk-users mailing list
> Rtk-users at public.kitware.com
> https://public.kitware.com/cgi-bin/mailman/listinfo/rtk-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/rtk-users/attachments/20221109/3a36a736/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: drr_0.png
Type: image/png
Size: 35994 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/rtk-users/attachments/20221109/3a36a736/attachment-0001.png>


More information about the Rtk-users mailing list