filtering and zooming of attenuation images
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 typeDataProcessor), defaulting to no filter.cache result(defaulting to off) might be good to add as at present every call ofapply/undowill 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 toBinNormalisationof 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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