JuliaImageRecon / ImagePhantoms.jl

Software phantoms for image reconstruction
MIT License
11 stars 4 forks source link

ImagePhantoms.jl

https://github.com/JuliaImageRecon/ImagePhantoms.jl

action status pkgeval status codecov license docs-stable docs-dev Aqua QA code-style deps version pkgeval

logo

This Julia language repo provides tools for working with software-defined image phantoms like the Shepp-Logan phantom (both 2D and 3D versions).

For each phantom shape, methods are available for computing samples of its image (using phantom), its Radon transform (2D) or X-ray line integrals (3D), (using radon), and its 2D or 3D Fourier transform (using spectrum).

For explanations and examples see the documentation using the blue "docs" links above.

Getting started

using Pkg
Pkg.add("ImagePhantoms")

Example

using ImagePhantoms
image = shepp_logan(256)

p = shepp_logan(SheppLoganToft())
sinogram = radon(range(-1,1,101), deg2rad.(0:180), p) # 101 × 181

Example

using ImagePhantoms
using MIRTjim: jim
using Plots # @animate, gif
function disk_phantom(title::String)
    (dx,dy) = (1, 1)
    (M,N) = (2^8,2^8)
    x = (-M÷2:M÷2-1) * dx
    y = (-N÷2:N÷2-1) * dy
    params = disk_phantom_params( ; rhead = () -> rand(100:105))
    objects = ellipse(params) # vector of Object2d{Ellipse}
    img = phantom(x, y, objects) # sampled at all (x,y) pairs
    jim(x, y, img; title, clim=(0,1300))
end
anim = @animate for i in 1:8
    disk_phantom("Realization $i")
end
gif(anim, "disk.gif", fps = 8)

animated phantom gif

Philosophy

Often "phantoms" are treated as digital images. Here, the shapes (rectangles, gaussians, ellipses, etc.) are all defined analytically as functions, as are their line integrals and Fourier transforms. Then one can sample those analytical functions to make digital images, sinograms, and spectra.

Parallel MRI (SENSE)

Most of the methods here are of general use for any imaging modality. There are a few methods (mri_smap_basis, mri_smap_fit, mri_spectra) that are specific to simulating parallel MRI (multiple receive coils) based on the 2012 paper by Guerquin-Kern et al.. See the documentation for details.

Documentation

For more examples with graphics, see the documentation.

Currently the package supports the following 2D shapes: ellipses/circles, rectangles/squares, gaussians, triangles, and the following 3D shapes: ellipsoids/spheres, cuboids/cubes, gaussians, cylinders, cones.

Dependents

Related packages

Compatibility

Tested with Julia ≥ 1.10.