Ejemplo n.º 1
0
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")
Ejemplo n.º 2
0
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)
Ejemplo n.º 4
0
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