def genrate_sinogam_ref(image, angles): size = image.shape[0] sinogram = numpy.zeros((size, len(angles)), dtype="float32") for ia, angle in enumerate(angles): tmp_proj = project(rotate_square(image, angle)) sinogram[:, ia] = tmp_proj return sinogram.astype("float32"), angles.astype("float32")
def genrate_sinogam(image, angles): size = image.shape[0] sinogram = np.zeros((size, len(angles)), dtype='float32') for ia, angle in enumerate(angles): tmp_proj = project(rotate_square(image, angle)) sinogram[:, ia] = tmp_proj return sinogram.astype('float32'), angles.astype('float32')
def test_project(): N=50 x=modified_shepp_logan((N,N,3))[:,:,1] x=numpy.array(x) rp=ref.project(x) ip=ispmd.project(x) # import pylab # pylab.figure() # pylab.subplot(211) # pylab.plot(rp) # pylab.subplot(212) # pylab.plot(ip) # pylab.show() assert is_equal(rp,ip)
def sart(sinogram,angles): reconst_shape = numpy.array(sinogram.shape[0],dtype='int32') # #normalize sinograms # sinogram *= numpy.mean(sinogram.sum(axis=0)) / sinogram.sum(axis=0) tomo_rec = numpy.zeros((reconst_shape, reconst_shape), dtype='float32') tmp_backproj=numpy.zeros_like(tomo_rec) tmp_rot=numpy.zeros_like(tomo_rec) for coeff in numpy.array([0.8,0.3,],dtype='float32'): shuffle_iang = numpy.arange(len(angles)) numpy.random.shuffle(shuffle_iang) for iang in shuffle_iang: rotate_square_ref(tomo_rec, angles[iang],tmp_rot) tmp_proj = sinogram[:, iang] - project(tmp_rot) back_project_ref(tmp_proj * coeff,tmp_backproj) rotate_square_ref(tmp_backproj, -angles[iang],tmp_rot) add_ref(tomo_rec,tmp_rot) tomo_rec -= 0.5*tomo_rec*(tomo_rec < 0) return tomo_rec