# helpers
    fft = lambda x0: np.fft.ifftshift(np.fft.fft2(np.fft.fftshift(
        x0, axes=(0, 1)), axes=(0, 1)), axes=(0, 1))
    ifft = lambda x0: np.fft.fftshift(np.fft.ifft2(np.fft.ifftshift(
        x0, axes=(0, 1)), axes=(0, 1)), axes=(0, 1))

    # Sizes we want
    N, M, nc = 300, 192, 8
    calib_lines = 20

    # Make square kspace
    assert N >= M, 'First must be largest dim!'
    N2 = int(N/2)
    imspace = np.flipud(
        shepp_logan(N))[..., None]*gaussian_csm(N, N, nc)

    # Trim down to make nonsquare
    # 1st > 2nd
    trim = int((N - M)/2)
    pad = int(calib_lines/2)
    imspace1 = imspace[:, trim:-trim, :]
    kspace1 = fft(imspace1)
    calib1 = kspace1[N2-pad:N2+pad, ...].copy()
    kspace1[::2, ...] = 0 # Undersample: R=2

    # 2nd > 1st
    imspace2 = imspace[trim:-trim, ...]
    kspace2 = fft(imspace2)
    calib2 = kspace2[:, N2-pad:N2+pad, :].copy()
    kspace2[:, ::2, :] = 0
示例#2
0
'''Basic hp-GRAPPA usage.'''

import numpy as np
from mpl_toolkits.mplot3d import Axes3D  # pylint: disable=W0611 # NOQA
import matplotlib.pyplot as plt
from phantominator import shepp_logan

from pygrappa import hpgrappa, mdgrappa
from utils import gaussian_csm

if __name__ == '__main__':

    # The much abused Shepp-Logan phantom
    N, ncoil = 128, 5
    ph = shepp_logan(N)[..., None]*gaussian_csm(N, N, ncoil)
    fov = (10e-2, 10e-2)  # 10cm x 10cm FOV

    # k-space-ify it
    ax = (0, 1)
    kspace = np.fft.ifftshift(np.fft.fft2(np.fft.fftshift(
        ph, axes=ax), axes=ax), axes=ax)

    # Get an ACS region
    pad = 12
    ctr = int(N/2)
    calib = kspace[ctr-pad:ctr+pad, ...].copy()

    # Undersample: R=3
    kspace[0::3, ...] = 0
    kspace[1::3, ...] = 0
示例#3
0
from time import time

import numpy as np
import matplotlib.pyplot as plt
from phantominator import shepp_logan

from pygrappa import mdgrappa
from utils import gaussian_csm

if __name__ == '__main__':

    # Generate fake sensitivity maps: mps
    L, M, N = 128, 128, 2
    ncoils = 4
    mps = gaussian_csm(L, M, ncoils)[..., None, :]

    # generate 3D phantom
    ph = shepp_logan((L, M, N), zlims=(-.25, .25))
    imspace = ph[..., None]*mps
    ax = (0, 1, 2)
    kspace = np.fft.fftshift(np.fft.fftn(
        np.fft.ifftshift(imspace, axes=ax), axes=ax), axes=ax)

    # calibrate a kernel
    kernel_size = (4, 5, 5)

    # undersample by a factor of 2 in both kx and ky
    mask = np.ones(kspace.shape, dtype=bool)
    mask[::2, 1::2, ...] = False
    mask[1::2, ::2, ...] = False
import numpy as np
import matplotlib.pyplot as plt
from phantominator import shepp_logan
from skimage.metrics import normalized_root_mse as compare_nrmse  # pylint: disable=E0611,E0401
from tqdm import tqdm

from pygrappa import cgrappa as grappa
from utils import gaussian_csm

if __name__ == '__main__':

    # Simple phantom
    N = 128
    ncoils = 5
    csm = gaussian_csm(N, N, ncoils)
    ph = shepp_logan(N)[..., None] * csm

    # Put into k-space
    ax = (0, 1)
    kspace = np.fft.ifftshift(np.fft.fft2(np.fft.fftshift(ph, axes=ax),
                                          axes=ax),
                              axes=ax)
    kspace_orig = kspace.copy()

    # 20x20 ACS region
    pad = 10
    ctr = int(N / 2)
    calib = kspace[ctr - pad:ctr + pad, ctr - pad:ctr + pad, :].copy()

    # R=2x2
示例#5
0
'''Basic usage of CG-SENSE implementation.'''

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
from phantominator import shepp_logan

from pygrappa import cgsense
from utils import gaussian_csm

if __name__ == '__main__':

    N, nc = 128, 4
    sens = gaussian_csm(N, N, nc)

    im = shepp_logan(N) + np.finfo('float').eps
    im = im[..., None] * sens
    kspace = np.fft.fftshift(np.fft.fft2(np.fft.ifftshift(im, axes=(0, 1)),
                                         axes=(0, 1)),
                             axes=(0, 1))

    # Undersample
    kspace[::2, 1::2, :] = 0
    kspace[1::2, ::2, :] = 0

    # SOS of the aliased image
    aliased = np.fft.ifftshift(np.fft.ifft2(np.fft.fftshift(kspace,
                                                            axes=(0, 1)),
                                            axes=(0, 1)),
                               axes=(0, 1))
    aliased = np.sqrt(np.sum(np.abs(aliased)**2, axis=-1))