UCL / UCL/STIR

filtering and zooming of attenuation images

Open
#141 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
160
Forks
113
Avg merge
12d 15h
Merged PRs (30d)
1

Description

We need to give the opportunity to filter the image first (to PET resolution, which is scanner specific). In addition, it would be useful to add a facility to downsample the image to save some time (CT and MR images tend to have too small voxel sizes for PET anyway). It’d also help us to prevent trouble with the z-voxel size.

The downsampling should be almost trivial in STIR using the zoom_image function (except that it needs to rescale zoomed voxel values, see zoom_att_image.sh).

I guess many people will find it useful as a stand-alone image-operation. It would be nice to make this available in BinNormalisationFromAttenuationImage (and expose in calculate_attenuation_coefficients). Actual design is a bit tricky, as usual, with trade-offs between generics and ease-of-use.

Possibly best/easiest to a class AttenuationImagePreprocessor, although another option would to create a FilterAndZoom class (that would have option for rescaling with value-preservation/total-count-preservation or such that the forward-projection has the same value (i.e. scale with ratio of x-voxel-size.). but of course, this could be built by chaining any DataProcessor with a new Zoom class.... But Zoom is a terrible name (but I don't like Resampler as we don't sample in zoom_image).

Suggested extra keyword (with corresponding set/get functions) for BinNormalisationFromAttenuationImage:

  • image filter type (of type DataProcessor), defaulting to no filter.
  • cache result (defaulting to off) might be good to add as at present every call of apply/undo will redo the projection. It would then have to cache the Attenuation Factors for instance, and then just divide/multiply. This option could be moved up to BinNormalisation of course

It'd be user-friendly to find the desirable voxel sizes from the scanner but that seems to imply that we split this into an (optional) filter and (optional) zooming...

Suggestions?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading STIR's zoom_image function and zoom_att_image.sh to understand downsampling and voxel-value rescaling. Then inspect BinNormalisationFromAttenuationImage and calculate_attenuation_coefficients. Done would require an agreed design for filtering, zooming, and optional caching, but the issue leaves those trade-offs unresolved.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
computer-vision
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.