tomography/xdesign

View on GitHub
docs/source/demos/Shepp.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Simple How-to Explaining Phantoms\n",
    "\n",
    "Demonstrate simple basic custom phantom and sinogram generation with XDesign."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from xdesign import *\n",
    "\n",
    "###################|###################|###################|###################|"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Phantom creation\n",
    "\n",
    "Create various `Phantoms` each with unique geometry. Make non-convex polygons by meshing together convex polygons."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Make a circle with a triangle cut out\n",
    "m = Mesh()\n",
    "m.append(Circle(Point([0.0, 0.0]), radius=0.5))\n",
    "m.append(-Triangle(Point([-0.3, -0.2]),\n",
    "                   Point([0.0, -0.3]),\n",
    "                   Point([0.3, -0.2])))\n",
    "\n",
    "\n",
    "head = Phantom(geometry=m)\n",
    "\n",
    "# Make two eyes separately\n",
    "eyeL = Phantom(geometry=Circle(Point([-0.2, 0.0]), radius=0.1))\n",
    "eyeR = Phantom(geometry=Circle(Point([0.2, 0.0]), radius=0.1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define materials to use in the phantom. Assigning multiple phantoms the same material saves memory."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "material = SimpleMaterial(mass_attenuation=1.0)\n",
    "\n",
    "head.material = material\n",
    "eyeL.material = material\n",
    "eyeR.material = material"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Collect the phantoms together by making the eyes and mouth children of the head `Phantom`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Phantom(geometry=Mesh(faces=[Circle(center=Point([0.0, 0.0]), radius=0.5, sign=1), Triangle(Point([-0.3, -0.2]), Point([0.0, -0.3]), Point([0.3, -0.2]))]), children=[Phantom(geometry=Circle(center=Point([-0.2, 0.0]), radius=0.1, sign=1), children=[], material=SimpleMaterial(mass_attenuation=1.0)), Phantom(geometry=Circle(center=Point([0.2, 0.0]), radius=0.1, sign=1), children=[], material=SimpleMaterial(mass_attenuation=1.0))], material=SimpleMaterial(mass_attenuation=1.0))\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/user/python/venvs/py373/lib/python3.7/site-packages/xdesign/geometry/area.py:724: UserWarning: Didn't check that Mesh contains Circle.\n",
      "  warnings.warn(\"Didn't check that Mesh contains Circle.\")\n"
     ]
    }
   ],
   "source": [
    "head.append(eyeL)\n",
    "head.append(eyeR)\n",
    "\n",
    "print(repr(head))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Viewing phantom geometry and properties\n",
    "\n",
    "Plot the `Phantom` geometry and properties with a colorbar."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 700x300 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(7, 3), dpi=100)\n",
    "\n",
    "# plot geometry\n",
    "axis = fig.add_subplot(121, aspect='equal')\n",
    "plt.grid()\n",
    "plot_phantom(head, axis=axis, labels=False)\n",
    "plt.xlim([-.5, .5])\n",
    "plt.ylim([-.5, .5])\n",
    "\n",
    "# plot property\n",
    "plt.subplot(1, 2, 2)\n",
    "im = plt.imshow(discrete_phantom(head, 100, prop='mass_attenuation'),\n",
    "                interpolation='none', cmap=plt.cm.inferno, origin='lower')\n",
    "\n",
    "# plot colorbar\n",
    "fig.subplots_adjust(right=0.8)\n",
    "cbar_ax = fig.add_axes([0.85, 0.16, 0.05, 0.7])\n",
    "fig.colorbar(im, cax=cbar_ax)\n",
    "\n",
    "# save the figure\n",
    "plt.savefig('Shepp_sidebyside.png', dpi=600,\n",
    "        orientation='landscape', papertype=None, format=None,\n",
    "        transparent=True, bbox_inches='tight', pad_inches=0.0,\n",
    "        frameon=False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Simulate data acquisition\n",
    "\n",
    "Simulate data acquisition for parallel beam around 180 degrees."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "NPIXEL = 100\n",
    "theta, h = np.meshgrid(np.linspace(0, np.pi, NPIXEL, endpoint=False),\n",
    "                       np.linspace(0, 1, NPIXEL, endpoint=False) - 0.5 + 1/NPIXEL/2)\n",
    "theta = theta.flatten()\n",
    "h = h.flatten()\n",
    "v = h*0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "probe = Probe(size=1/NPIXEL)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/user/python/venvs/py373/lib/python3.7/site-packages/xdesign/geometry/algorithms.py:54: RuntimeWarning: halfspacecirc was out of bounds, -1.6769698407692601e-09\n",
      "  RuntimeWarning)\n"
     ]
    }
   ],
   "source": [
    "sino = probe.measure(head, theta, h)\n",
    "sino = -np.log(sino)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the sinogram."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8), dpi=100)\n",
    "plt.imshow(np.reshape(sino, (NPIXEL, NPIXEL)), cmap='inferno',\n",
    "           interpolation='nearest')\n",
    "plt.savefig('Shepp_sinogram.png', dpi=600,\n",
    "        orientation='landscape', papertype=None, format=None,\n",
    "        transparent=True, bbox_inches='tight', pad_inches=0.0,\n",
    "        frameon=False)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "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.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}