Exemplo n.º 1
0
class TestAMP(unittest.TestCase):
    '''Make sure we line up with Stanford results.'''
    def setUp(self):
        data = load_test_data('mr_utils/test_data/tests/cs/thresholding/amp',
                              ['cdf97', 'mask', 'x0', 'y'])
        self.cdf97, self.mask, self.x0, self.y = data[:]  #pylint: disable=W0632
        self.uft = UFT(self.mask)
        self.level = 5

    def test_uft(self):
        '''Test undersampled fourier encoding.'''

        y0 = self.uft.forward_ortho(self.x0)
        self.assertTrue(np.allclose(self.y, y0))

    @unittest.skip('Currently do not know how to match cdf97 using pywavelets')
    def test_wavelet_decomposition(self):
        '''Make sure we decompose using the same wavelet transformation.'''

        wavelet_transform, locations = cdf97_2d_forward(self.x0, self.level)

        # # Check 'em out
        # view(np.stack((np.log(np.abs(self.cdf97)),
        #                np.log(np.abs(wavelet_transform)))))
        # view(np.stack((self.cdf97 - wavelet_transform)), log=True)
        #
        # # Make sure we can go back
        inverse = cdf97_2d_inverse(wavelet_transform, locations)
        self.assertTrue(np.allclose(self.x0, inverse))
        # view(self.x0 - inverse)
        # view(cdf97_2d_inverse(wavelet_transform, locations))

        # Currently failing...
        self.assertTrue(np.allclose(wavelet_transform, self.cdf97))
Exemplo n.º 2
0
from mr_utils.sim.traj import cartesian_pe

if __name__ == '__main__':

    # Same binary smiley face example
    do_reordering = True
    N = 1000
    x = binary_smiley(N)
    k = np.sum(np.abs(np.diff(x)) > 0)
    np.random.seed(5)
    samp = cartesian_pe(x.shape, undersample=.2, reflines=5)
    uft = UFT(samp)

    # Make the complex measurement in kspace
    # Note this is different than uft.forward, as fftshift must be performed
    y = uft.forward_ortho(x)

    # Solve inverse problem using gradient descent with TV sparsity constraint
    x_hat = GD_TV(y,
                  forward_fun=uft.forward_ortho,
                  inverse_fun=uft.inverse_ortho,
                  alpha=.5,
                  lam=.022,
                  do_reordering=do_reordering,
                  x=x,
                  ignore_residual=True,
                  disp=True,
                  maxiter=50)

    # Look at the before/after shots
    view(np.stack((uft.inverse_ortho(y), x_hat)))
Exemplo n.º 3
0
    run = ['monosort', 'lagrangian']  # none is always run to get prior

    # Need a reasonable numerical phantom
    x = np.rot90(modified_shepp_logan((N, N, N))[:, :, int(N / 2)])
    # view(x)

    # Sparsifying transform
    level = 3
    wvlt, locations = cdf97_2d_forward(x, level)
    sparsify = lambda x: cdf97_2d_forward(x, level)[0]
    unsparsify = lambda x: cdf97_2d_inverse(x, locations)

    # Do radial golden-angle sampling
    mask = radial(x.shape, num_spokes, skinny=True, extend=False)
    uft = UFT(mask)
    kspace_u = uft.forward_ortho(x)
    view(kspace_u, fft=True)

    # # We need to find the best alpha for the no ordering recon
    # pGD = partial(
    #     proximal_GD, y=kspace_u, forward_fun=uft.forward_ortho,
    #     inverse_fun=uft.inverse_ortho, sparsify=sparsify,
    #     unsparsify=unsparsify, mode='soft', thresh_sep=True,
    #     selective=None, x=x, ignore_residual=False, disp=False,
    #     maxiter=500)
    # obj = lambda alpha0: compare_mse(
    #     np.abs(x), np.abs(pGD(alpha=alpha0)))
    # alpha0 = 0.05
    # res = minimize(obj, alpha0)
    # print(res)
    # The best is alpha0 = 0.01743203 for 500 iterations, N=64