@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.
@rijobro and I had a look at incorporating horizontal bed position into STIR. The grand plan is simple:
get_morget_tget_m/get_t, i.e. specify them to be in a coordinate system w.r.t. the bed) (get_mis currently zero in the centre of the scanner, but this would now only be true for the reference bed-position)Aims:
m=0intersects voxels atz=0, etc.Complications:
get_m, at least up to a constant shift). Example: give a large whole-body image to the projector for a particular bed-position. It would be impossible to know what z-offset/bed-position to apply if this depends on the number of planes in the image.Given that current
get_mis 0 in the middle of the scanner, andimage-z=0in 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_spacingIt seems then that for backwards compatibility, we need a default
bed_offset=(num_rings-1)/2*ring_spacingwhich is slightly weird.Anyone any better ideas? @NikEfth, @ashgillman ?
Notes:
bed_offsetin the above eq. I guess that's pure convention.zoom_imagewhen used withzoomarguments, as this currently tries to preserve the centre.