I'm working on a project where I should use the conjugate gradient method to reconstruct an SPECT image given the sinogram of the image with the help of matlab. I have realized that the linear equation Ax=b needs to be solved, where b is an N-dimensional vector containing the known sinogram values wrapped into a vector and x is a M-dimensional vector containing the unknown image to be reconstructed and that A is a system vector. I can easily construct b with the sinogram I have, but I don't really know how I should get A. The image I want is 128X128 and the sinogram is 128X32 (i.e. 32 projections).
Does anybody have any Ideas of how i can use the help of matlabs PCG function to reconstruct my image?
The n_th column of the projection matrix A is the radon transformation of the n_th pixel, that is its n_th element is 1 and all other elements are zero. This is doable with the matlab radon function, but I doubt that it is very efficient because A will be sparse and I guess the loop will take quite some time, although 128x128x128x32 should still be manageable and the (sparse) matrix can be cached in a .mat file as long as your geometry doesn't change.
You can try other matlab scripts, for example http://www2.imm.dtu.dk/~pch/AIRtools/ where you get A by calling
N=128; % 128x128 pixels p=128; % Number of rays per projection alpha=(0:32)*180/32; % List of projection angles in degrees A=paralleltomo(N, alpha, p);
I hope that helps.