Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bed positions and projection/detector/image coordinates #219

Open
KrisThielemans opened this issue Jul 31, 2018 · 1 comment
Open

bed positions and projection/detector/image coordinates #219

KrisThielemans opened this issue Jul 31, 2018 · 1 comment
Assignees
Milestone

Comments

@KrisThielemans
Copy link
Collaborator

@rijobro and I had a look at incorporating horizontal bed position into STIR. The grand plan is simple:

  • make sure that all projectors (and symmetries) etc find LORs/detectors coordinates using get_m or get_t
  • take bed position into account in get_m/get_t, i.e. specify them to be in a coordinate system w.r.t. the bed) (get_m is currently zero in the centre of the scanner, but this would now only be true for the reference bed-position)
  • image coordinates should use the same coordinate system

Aims:

  • whatever the bed position, a direct LOR at m=0 intersects voxels at z=0, etc.
  • if we know the patient orientation, we can figure out the LPS of each voxel, which should then correspond to what the manufacturer uses (in DICOM).

Complications:

Given that current get_m is 0 in the middle of the scanner, and image-z=0 in the centre of the first ring (for standard-sized images), it seems we need a shift:

new_get_m = current_get_m - bed_offset + (num_rings-1)/2*ring_spacing

It seems then that for backwards compatibility, we need a default bed_offset=(num_rings-1)/2*ring_spacing which is slightly weird.

Anyone any better ideas? @NikEfth, @ashgillman ?

Notes:

  • we haven't thought hard yet about the sign of the bed_offset in the above eq. I guess that's pure convention.
  • There's probably going to be a backward incompatibility for zoom_image when used with zoom arguments, as this currently tries to preserve the centre.
@ashgillman
Copy link
Collaborator

Trying to wrap my head around. Why are changes to get_t required? Is it not only transaxial?

What will z=0 mean? Does it make it easier to keep the numerous systems, but have them all move with the bed? So their position is defined w.r.t. the rings if z=0, but from this point move with the bed. This way, get_m will be the same if bed position is 0.

Backwards compatibility is tricky..
Perhaps if you want the same projection and your data has a bed offset you have to manually set it to 0.

@KrisThielemans KrisThielemans modified the milestones: v4.0, v4.1 Oct 14, 2019
@KrisThielemans KrisThielemans modified the milestones: v4.1, v6.0 May 23, 2020
@KrisThielemans KrisThielemans modified the milestones: v6.0, v7.0 Jan 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants