using Sinograms: SinoPar, rays, plan_fbp, fbp, fbp_sino_filter using ImageGeoms: ImageGeom, fovs, MaskCircle using ImagePhantoms: SheppLogan, shepp_logan, radon, phantom using Unitful: mm using MIRTjim: jim, prompt isinteractive() ? jim(:prompt, true) : prompt(:draw); ig = ImageGeom(MaskCircle(); dims=(128,126), deltas = (2mm,2mm) ) rg = SinoPar( ; nb = 130, d = 2mm, na = 100) μ = 0.01 / mm # typical linear attenuation coefficient ob = shepp_logan(SheppLogan(); fovs = fovs(ig), u = (1, 1, μ)) sino = radon(rays(rg), ob) jim(axes(rg), sino; title="Shepp-Logan sinogram", xlabel="r", ylabel="ϕ") # Image reconstruction via FBP plan = plan_fbp(rg, ig) fbp_image = fbp(plan, sino) clim = (0.9, 1.1) .* μ jim(axes(ig), fbp_image, "FBP image"; clim) true_image = phantom(axes(ig)..., ob, 2) jim(axes(ig)..., true_image, "True phantom image"; clim) sino_filt = fbp_sino_filter(sino, plan.filter) jim(axes(rg), sino_filt; title="Filtered sinogram", xlabel="r", ylabel="ϕ")