{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example: MRI Application\n", "In this example we take an image of the Shepp-Logan phantom and we evaluate the\n", "forward NUFFT on a set of points defining a radial *k*-space trajectory. Then,\n", "we use the the adjoint NUFFT to recover the image from the radial *k*-space\n", "data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prepare data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's begin by creating an example image. We will use a Shepp-Logan phantom,\n", "generated using [TensorFlow MRI](https://pypi.org/project/tensorflow-mri/)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "image: \n", " - shape: (256, 256)\n", " - dtype: \n" ] } ], "source": [ "import tensorflow as tf\n", "import tensorflow_mri as tfmri\n", "\n", "grid_shape = [256, 256]\n", "image = tfmri.image.phantom(shape=grid_shape, dtype=tf.complex64)\n", "\n", "print(\"image: \\n - shape: {}\\n - dtype: {}\".format(image.shape, image.dtype))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us also create a *k*-space trajectory. In this example we will create a\n", "radial trajectory, also using TensorFlow MRI." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "points: \n", " - shape: (119296, 2)\n", " - dtype: \n", " - range: [-3.1415927410125732, 3.141521453857422]\n" ] } ], "source": [ "points = tfmri.sampling.radial_trajectory(base_resolution=256, views=233)\n", "points = tf.reshape(points, [-1, 2])\n", "\n", "print(\"points: \\n - shape: {}\\n - dtype: {}\\n - range: [{}, {}]\".format(\n", " points.shape, points.dtype,\n", " tf.math.reduce_min(points), tf.math.reduce_max(points)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The trajectory should have shape `[..., M, N]`, where `M` is the number of\n", "points and `N` is the number of dimensions. Any additional dimensions `...` will\n", "be treated as batch dimensions.\n", "\n", "Batch dimensions for `image` and `traj`, if any, will be broadcasted.\n", "\n", "Spatial frequencies should be provided in radians/voxel, ie, in the range\n", "`[-pi, pi]`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we'll also need density compensation weights for our set of nonuniform\n", "points. These are necessary in the adjoint transform, to compensate for the fact\n", "that the sampling density in a radial trajectory is not uniform. Here we use\n", "`tensorflow-mri` to calculate these weights." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "weights: \n", " - shape: (119296,)\n", " - dtype: \n" ] } ], "source": [ "weights = tfmri.sampling.radial_density(base_resolution=256, views=233)\n", "weights = tf.reshape(weights, [-1])\n", "\n", "print(\"weights: \\n - shape: {}\\n - dtype: {}\".format(weights.shape, weights.dtype))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Forward transform (image to *k*-space)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, let's calculate the k-space coefficients for the given image and trajectory points (image to k-space transform)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "kspace: \n", " - shape: (119296,)\n", " - dtype: \n" ] } ], "source": [ "import tensorflow_nufft as tfft\n", "\n", "kspace = tfft.nufft(image, points,\n", " transform_type='type_2',\n", " fft_direction='forward')\n", "\n", "print(\"kspace: \\n - shape: {}\\n - dtype: {}\".format(kspace.shape, kspace.dtype))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are using a type-2 transform (uniform to nonuniform) and a forward FFT\n", "(image domain to frequency domain). These are the default values for\n", "`transform_type` and `fft_direction`, so providing them was not necessary in\n", "this case." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adjoint transform (*k*-space to image)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now perform the adjoint transform to recover the image given the\n", "*k*-space data. In this case, we will use a type-1 transform (nonuniform to\n", "uniform) and a backward FFT (frequency domain to image domain). Also note that,\n", "prior to evaluating the NUFFT, we will compensate for the nonuniform sampling\n", "density by simply dividing the *k*-space samples by the density weights.\n", "Finally, for type-1 transforms we need to specify an additional `grid_shape`\n", "argument, which should be the size of the image. If there are any batch\n", "dimensions, `grid_shape` should **not** include them." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "recon: \n", " - shape: (256, 256)\n", " - dtype: \n" ] } ], "source": [ "# Apply density compensation.\n", "comp_kspace = kspace / tf.cast(weights, tf.complex64)\n", "\n", "recon = tfft.nufft(comp_kspace, points,\n", " grid_shape=grid_shape,\n", " transform_type='type_1',\n", " fft_direction='backward')\n", "\n", "print(\"recon: \\n - shape: {}\\n - dtype: {}\".format(recon.shape, recon.dtype))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, let's visualize the images." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Image after forward\\nand adjoint NUFFT')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, ax = plt.subplots(1, 2)\n", "ax[0].imshow(tf.abs(image), cmap='gray')\n", "ax[0].set_title(\"Original image\")\n", "ax[1].imshow(tf.abs(recon), cmap='gray')\n", "ax[1].set_title(\"Image after forward\\nand adjoint NUFFT\")" ] } ], "metadata": { "interpreter": { "hash": "f2e9680e84a08a465034748c8dabc0d5e08f67c7d54806eb285996e1b68e54dc" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.7" } }, "nbformat": 4, "nbformat_minor": 2 }