-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgen_plan.jl
46 lines (44 loc) · 1.36 KB
/
gen_plan.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# gen_plan.jl
using LinearMapsAA
using LinearMaps
using SPECTrecon
using CUDA
function gen_plan(mumap::AbstractArray,
psfs::AbstractArray;
T::DataType = Float32)
dy = 4.7952 # transaxial pixel size in mm
nx, ny, nz = size(mumap)
nview = size(psfs, 4)
plan = SPECTplan(mumap, psfs, dy; T)
idim = (nx,ny,nz)
odim = (nx,nz,nview)
A = LinearMapAA(x -> project(x, plan), y -> backproject(y, plan),
(prod(odim), prod(idim)); T, odim, idim)
Asum = CuArray(A' * ones(T, nx, nz, nview))
return A, Asum
end
# mumap = CuArray(rand(Float32,128,128,80))
# psfs = CuArray(ones(37,37,128,128))
# dy = 4.7952 # transaxial pixel size in mm
# nx, ny, nz = size(mumap)
# nview = size(psfs, 4)
# T = Float32
# plan = CuSPECTplan(mumap, psfs, dy; T)
# idim = (nx,ny,nz)
# odim = (nx,nz,nview)
# A = LinearMapAA(x -> Cuproject(x, plan), y -> Cubackproject(y, plan),
# (prod(odim), prod(idim)); T, odim, idim)
# Asum = A' * CuArray(ones(T, nx, nz, nview))
# Asum1 = Cubackproject(CuArray(ones(T, nx, nz, nview)), plan)
#
#
# nx = 8
# ny = 8
# nz = 6
# idim = (nx,ny,nz)
# odim = (nx,ny,nz)
# T = Float32
# A = LinearMapAA(x -> 2 * x, y -> 2 * y, (prod(odim), prod(idim)); T, odim, idim)
# B = LinearMap(x -> 2 * x, y -> 2 * y, prod(odim))
# A * CuArray(ones(T, nx, ny, nz))
# B * CuArray(ones(T, prod(odim)))