{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Implementing Filtered Back Projection"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll use the classes of PyTomography to implement filtered back projection in SPECT."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from pytomography.projections import ForwardProjectionNet, BackProjectionNet\n",
    "from pytomography.metadata import ObjectMeta, ImageMeta\n",
    "from pytomography.mappings import MapNet\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import torch"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The two foundational tools of image reconstruction are\n",
    "\n",
    "1. Forward projection $\\sum_{i} c_{ij} a_i$\n",
    "2. Back projection $\\sum_{j} c_{ij} b_j$\n",
    "\n",
    "Let's discuss what these operators actually mean. First, let's define our quantities. $c_{ij}$ is known as the system matrix, and may include information involving attenuation and PSF correction. $a_i$ is an arbtriary object and $b_j$ is an arbitrary image. \n",
    "\n",
    "It's worth now discussing what the indices $i$ and $j$ actually mean. You might think: objects are three dimensional, shouldn't there be at least 3 indices when we're doing linear operations? Consider the following: because we are in a discrete space, any 3 dimensional object can be converted to a single (albeit very long) one dimensional object: a 128x128x128 3D matrix can be converted into a single 1D vector of length 2097152. That's how many voxels there are in object space: you can think of index $i$ as indexing a single voxel.\n",
    "\n",
    "The same can be said for an image. If we have 64 projections of matrix size 128x128, then that can be thought of as a single vector of length 1048576. That's also how many individual detector elements there are.\n",
    "\n",
    "So in forward projection $\\sum_{i} c_{ij} a_i$, the system matrix $c_{ij}$ maps the contribution from voxel $i$ to a detector element $j$. In back projection $\\sum_{j} c_{ij} b_j$, the system matrix $c_{ij}$ maps the intensity in detector element back to every possible voxel $i$ that could have contributed to it. In reality, however, not every voxel that could have contributed to detector element $j$ does so with equal intensity; it is for this reason that forward projection followed by back projection does not yield the original image. \n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's experiment with these operators. First we'll make a 3D rectangle in object space:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 128, 128, 132])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = torch.linspace(-1,1,128)\n",
    "y = torch.linspace(-1,1,128)\n",
    "z = torch.linspace(-1,1,132)\n",
    "xv, yv, zv = torch.meshgrid([x,y,z], indexing='ij')\n",
    "object_truth = (xv>-0.2)*(xv<0.2)*(yv>-0.15)*(yv<0.15)*(zv>-0.1)*(zv<0.1)\n",
    "object_truth = object_truth.to(torch.float).unsqueeze(dim=0) # add batch dimension\n",
    "object_truth.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7ff7fde43cd0>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(5,4))\n",
    "plt.pcolormesh(object_truth[0].sum(axis=2).T, cmap='Greys_r')\n",
    "plt.axis('off')\n",
    "plt.colorbar()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before we do any projections, we need to get corresponding metadata for our object. In this case, we'll assume the voxel sizes are 1cm $^3$. For our image space, we'll assume 60 projections are taken at angular spacing of 6 degrees."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "angles = np.arange(0,360.,6.)\n",
    "object_meta = ObjectMeta(dr=(1,1,1), shape=object_truth[0].shape)\n",
    "image_meta = ImageMeta(object_meta, angles=angles)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With this metadata, we can create our forward and back projection networks. We'll use no image correction techniques now."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "fp_net = ForwardProjectionNet(obj2obj_nets=[],\n",
    "                              im2im_nets=[],\n",
    "                              object_meta=object_meta,\n",
    "                              image_meta=image_meta)\n",
    "bp_net = BackProjectionNet(obj2obj_nets=[],\n",
    "                           im2im_nets=[],\n",
    "                           object_meta=object_meta,\n",
    "                           image_meta=image_meta)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now use the `fp_net` to convert the object into an image (this is a Mickey-Mouse version of a detector simulation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 60, 128, 132])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "image = fp_net(object_truth)\n",
    "image.shape"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can look at a projection at 60 degrees for example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAAFeCAYAAADEw9X5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfNElEQVR4nO3de5CVdf3A8c/hvrsgN5fLAkLeEzA0wUsqkIg5eClFCaM0mWi8lDmliVr6U1FTy5lUNNAYLxglYWppSmbljI2KqOHkXVG5CaSCoCmX7+8PZk+se2Fl+crCeb1mGNfnfJ9znrPDhz3nvc85p5BSSgEAAAAAW1iLrX0AAAAAAGyfhCcAAAAAshCeAAAAAMhCeAIAAAAgC+EJAAAAgCyEJwAAAACyEJ4AAAAAyEJ4AgAAACAL4QkAAACALISnZqZQKMTFF1+8tQ8D2ASzCtsu8wvbNjMM2wazSjXhqQGTJ0+OQqEQ+++//9Y+lKzWr18fV111VXzuc5+Ldu3axd577x2/+c1vGr3/e++9FxMmTIjKysqoqKiI4cOHx9y5czMeMdRUCrO6aNGiGDduXOyxxx7RoUOH6NSpUwwZMiRuvfXWSCnVWr9w4cI48cQTo1OnTrHDDjvEscceG6+99lqjb++xxx6Lgw8+OMrLy6NHjx7x/e9/P1atWrUl7xJERGnMb7VXX301TjrppOjWrVuUlZXFbrvtFhdccEGtdc8//3x85Stfifbt20eXLl3im9/8ZixbtqzRt3PvvffGvvvuG+3atYuddtopLrrooli7du2WvCtQVCoz/Morr8To0aOjc+fOUV5eHgcffHA88sgjda41wzRHpTKrkyZNimOOOSa6d+/eYPiaNWtWjBkzJnbeeecoLy+PPfbYI374wx/Ge++9V+f6psxlU59vbw9abe0DaM6mT58e/fr1iyeeeCJeeeWV2HXXXbf2IWVxwQUXxJVXXhnf+c53YvDgwXHPPffESSedFIVCIb7+9a83uO/69etj1KhR8eyzz8Y555wTO+64Y0yePDmGDRsWTz31VOy2226f0b2glJXCrC5fvjwWLFgQo0ePjp122inWrFkTs2fPjlNOOSVefPHFuPzyy4trV61aFcOHD48VK1bE+eefH61bt45rr702hg4dGs8880x07dq1wdt65pln4rDDDovPf/7z8Ytf/CIWLFgQ11xzTbz88svxwAMP5L6rlJhSmN+IDXM1bNiw6NWrV/zwhz+Mrl27xptvvhlvvfVWjXULFiyIQw89NDp27BiXX355rFq1Kq655pqYN29ePPHEE9GmTZsGb+eBBx6Ir371qzFs2LC47rrrYt68eXHZZZfF0qVL48Ybb8x5FylRpTDDb731Vhx44IHRsmXLOOecc6KioiKmTZsWI0eOjIcffjgOPfTQ4lozTHNVCrMaEXHhhRdGjx49Yp999okHH3yw3nUTJkyIqqqqGDduXOy0004xb968uP766+P++++PuXPnRllZWXFtU+eyKc+3txuJOr322mspItKsWbNSZWVluvjiiz+T242IdNFFF30mt5VSSgsWLEitW7dOZ5xxRnHb+vXr0yGHHJJ69+6d1q5d2+D+v/3tb1NEpLvuuqu4benSpalTp05p7Nix2Y4bqpXKrNbnqKOOShUVFTVm9Wc/+1mKiPTEE08Utz3//POpZcuWaeLEiZu8ziOPPDL17NkzrVixorht6tSpKSLSgw8+uGXvACWtVOZ33bp1acCAAWn//fdPH3zwQYNrTzvttFRWVpbeeOON4rbZs2eniEi/+tWvNnlbe+21V/rCF76Q1qxZU9x2wQUXpEKhkJ5//vnNvxNQh1KZ4dNPPz21atUqvfDCC8Vtq1evTn369En77rtvjbVmmOaoVGY1pZRef/31lFJKy5Yta/D2H3nkkVrbbr311hQRaerUqTW2N2Uum/p8e3vhpXb1mD59enTu3DlGjRoVo0ePjunTp9e4fP78+VEoFOKaa66JKVOmxC677BJt27aNwYMHx5NPPlnr+u66667Ya6+9ol27djFgwIC4++6745RTTol+/fpt8lgWLlwYp556anTv3j3atm0b/fv3j1//+tdb5H7ec889sWbNmjj99NOL2wqFQpx22mmxYMGC+Oc//9ng/jNnzozu3bvHcccdV9xWWVkZJ554Ytxzzz3x0UcfbZHjhPqUyqzWp1+/fvHBBx/Exx9/XNw2c+bMGDx4cAwePLi4bc8994zDDjssfve73zV4fStXrozZs2fHuHHjYocddihu/9a3vhXt27ff5P7waZTK/D700EPx3HPPxUUXXRRlZWXxwQcfxLp16+pc+/vf/z6OOuqo2GmnnYrbRowYEbvvvvsm5+/f//53/Pvf/44JEyZEq1b/O6n99NNPj5RSzJw5c4vcH6hWKjP86KOPxj777BN77LFHcVt5eXkcc8wxMXfu3Hj55ZeL280wzVGpzGpENOoYIiKGDRtWa9vXvva1iNjwctlqTZ3Lpj7f3l54qV09pk+fHscdd1y0adMmxo4dGzfeeGM8+eSTNZ7IRUTceeed8f7778d3v/vdKBQKcdVVV8Vxxx0Xr732WrRu3ToiIv70pz/FmDFjYuDAgXHFFVfEu+++G+PHj49evXpt8jjefvvtOOCAA6JQKMSZZ54ZlZWV8cADD8T48eNj5cqV8YMf/KC4dvny5Y26bx06dIi2bdtGRMTTTz8dFRUV8fnPf77GmiFDhhQvP/jgg+u9rqeffjr23XffaNGiZsMcMmRITJkyJV566aUYOHBgo44LNkepzGq1Dz/8MFavXh2rVq2Kv//97zFt2rQ48MADi6cDr1+/Pv71r3/FqaeeWuv6hgwZEg899FC8//770aFDhzpvc968ebF27drYb7/9amxv06ZNDBo0KJ5++ulGHTs0RqnM71/+8peIiGjbtm3st99+8dRTT0WbNm3ia1/7WkyePDm6dOkSERsejC9durTW/EVsmN/777+/wdusns9P7l9VVRW9e/c2v2xxpTLDH330UXTu3LnWmvLy8oiI4ttLmGGaq1KZ1aZasmRJRETsuOOOxW1NncumPt/ebmzlM66apTlz5qSISLNnz04pbTgVrnfv3umss84qrnn99ddTRKSuXbumd955p7j9nnvuSRGR7rvvvuK2gQMHpt69e6f333+/uO1vf/tbiojUt2/fGrcdnzgdcPz48alnz55p+fLlNdZ9/etfTx07dqxxyn5ENOrPtGnTivuMGjUq7bzzzrW+B6tXr04Rkc4777wGv1cVFRXp1FNPrbX9T3/6U4qI9Oc//7nB/aEpSmlWq11xxRU11hx22GHpzTffLF5efVrxJZdcUmvfG264IUVEjZcKfNJdd92VIiL94x//qHXZCSeckHr06FHvvvBplNL8HnPMMcX78Y1vfCPNnDkz/eQnP0mtWrVKBx10UFq/fn1KKaUnn3wyRUS67bbban2/zjnnnBQR6b///W+939Orr746RUSNfxOqDR48OB1wwAH17gufVinN8NFHH506deqUVq5cWeP6DzzwwBQR6ZprrkkpmWGap1Ka1Y1t6qV2dRk/fnxq2bJleumll4rbmjqXTX2+vb1wxlMdpk+fHt27d4/hw4dHxIZT4caMGRN33HFH/PznP4+WLVsW144ZM6bGb0AOOeSQiIjip0ctWrQo5s2bF+eff360b9++uG7o0KExcODAWLlyZb3HkVKK3//+93HiiSdGSqlG9T3iiCNixowZMXfu3PjSl74UERGzZ89u1P3r379/8esPP/ywzkLcrl274uUNaer+0BSlNKvVxo4dG/vtt18sW7Ys/vjHP8bbb79dY86qv97cudzU/maaLaWU5rf6EyEHDx4cd9xxR0REHH/88VFeXh4TJ06Mhx9+OEaMGNHo+a3vN7ub2r+h7wN8WqU0w6eddlrcd999MWbMmJg0aVJUVFTE5MmTY86cORHxv9kzwzRHpTSrTXHnnXfGLbfcEueee26ND8hq6lx6vryB8PQJ69atixkzZsTw4cPj9ddfL27ff//94+c//3k8/PDDMXLkyOL2jV+/HRHFQX333XcjIuKNN96IiKjzUwN23XXXmDt3br3HsmzZsnjvvfdiypQpMWXKlDrXLF26tPj1iBEjNnX3aikrK6vzfZj++9//Fi/PuT9srlKb1Wp9+/aNvn37RsSGCDVhwoQYMWJEvPjii1FWVlacuc2dy03tb6bZEkptfqvnZuzYsTW2n3TSSTFx4sR47LHHYsSIEeaXbUapzfCRRx4Z1113XZx33nmx7777Fo9r0qRJce655xafgJthmptSm9XN9eijj8b48ePjiCOOiEmTJtW4rKlz6fnyBsLTJ/z1r3+NxYsXx4wZM2LGjBm1Lp8+fXqN4dy4EG8spdTkY1m/fn1ERIwbNy5OPvnkOtfsvffexa+rX5O6KR07diz+Be/Zs2c88sgjkVKKQqFQXLN48eKI2PDa1Yb07NmzuHZjjd0fNlepzWp9Ro8eHVOnTo1//OMfccQRR0SXLl2ibdu2mz2XPXv2rLH2k/ubabaEUpvf6rnp3r17jTXdunWLiP89oN/U/FXPd3023r9Pnz619q9+PwloqlKb4YiIM888M7797W/Hv/71r+L7Ht5yyy0REbH77rtHhBmm+SnFWf20nn322TjmmGNiwIABMXPmzBpvIB7R9Lls6vPt7YXw9AnTp0+Pbt26xQ033FDrslmzZsXdd98dN910U6Ovr/rMhFdeeaXWZXVt21hlZWV06NAh1q1b16jiWz0UmzJt2rQ45ZRTIiJi0KBBcfPNN8fzzz8fe+21V3HN448/Xry8IYMGDYpHH3001q9fX+MNxh9//PEoLy8v/iCGLa3UZrU+1afnrlixIiIiWrRoEQMHDiye/r+xxx9/PHbeeed631g8ImLAgAHRqlWrmDNnTpx44onF7R9//HE888wzNbbB5iq1+f3iF78YU6dOjYULF9ZYs2jRouIxRET06tUrKisr65zfJ554olE/kyMi5syZU+OB8KJFi2LBggUxYcKERh07bEqpzXC1ioqKOPDAA4v//5e//CXKysqKLw0ywzQ3pTqrjfXqq6/GV77ylejWrVvcf//9NV4+WK2pc9nU59vbC+FpIx9++GHMmjUrTjjhhBg9enSty6uqquI3v/lN3HvvvbH//vs36jqrqqpiwIABcdttt8XEiROLf5n//ve/x7x584rDW5eWLVvG8ccfH3feeWc899xzMWDAgBqXL1u2rPhgNWLzXgd77LHHxtlnnx2TJ0+O66+/PiI2FO2bbropevXqFQcddFBx7eLFi2PFihWxyy67FD/VYPTo0TFz5syYNWtW8Xu2fPnyuOuuu+Loo4/eYp8wABsrxVn95HVUu+WWW6JQKBRP/Y/YMJfnnXdezJkzp/gJHC+++GL89a9/jR/96Ec19n/hhReivLy8eGp1x44dY8SIEXHHHXfET37yk2Kkuv3222PVqlVxwgknNOrYoT6lOL/HHntsnHXWWcUHx9W/qLn55psjIuLwww8vrj3++OPj1ltvjbfeeqv4m9WHH344XnrppTj77LOL69asWROvvvpqdOzYsfjgvH///rHnnnvGlClT4rvf/W7xN9c33nhjFAqFOr/f8GmV4gzX5bHHHotZs2bFaaedFh07dixuN8M0F2a1YUuWLImRI0dGixYt4sEHH6zzcXb19Td2LlesWBGLFy+Onj17Fv9d+DTPt7drn/GbmTdrM2bMSBGR/vCHP9R5+bp161JlZWU6+uiji+/8f/XVV9daF5949/x77703FQqFtPfee6drr702/fSnP01dunRJAwYMSP369Wtw3yVLlqS+ffum8vLydNZZZ6Vf/epX6YorrkgnnHBC6ty58xa539WfsjFhwoQ0derUNGrUqBQRafr06TXWnXzyySki0uuvv17ctnbt2nTAAQek9u3bp//7v/9LN9xwQ+rfv3/q0KFDg5+cBU1RirN61llnpf322y9deOGFacqUKenKK69MgwcPThGRvve979VYu3LlyrTLLrukbt26pauuuipde+21qU+fPqmqqiotXbq01v0YOnRojW1PPfVUatu2bdpnn33SjTfemC644ILUrl27NHLkyCbfDyjF+U0ppUsuuSRFRDr88MPTDTfckCZMmJAKhUIaO3ZsjXVvvvlm6tq1a9pll13SL3/5y3T55Zenzp07p4EDB9b4NKzq783JJ59cY//77rsvFQqF9OUvfzlNmTIlff/7308tWrRI3/nOd7bI/YBSnOH58+enIUOGpMsuuyzdfPPN6eyzz05lZWVpn332qfVJd2aY5qIUZzWllG677bZ06aWXpokTJ6aISMOHD0+XXnppuvTSS9P8+fOL677whS+kiEjnnntuuv3222v8eeihh2pcZ2Pnctq0aXV+0l5jn29vz4SnjRx99NGpXbt2afXq1fWuOeWUU1Lr1q2LH0vZmOFMacPg77nnnqlt27ZpwIAB6d57703HH3982nPPPTe579tvv53OOOOM1KdPn9S6devUo0ePdNhhh6UpU6Zs9n3d2Lp169Lll1+e+vbtm9q0aZP69++f7rjjjlrr6gpPKaX0zjvvpPHjx6euXbum8vLyNHTo0PTkk09ukWODupTirD700EPpqKOOSlVVVal169apQ4cO6Utf+lKaNm1a8aPYN/bWW2+l0aNHpx122CG1b98+HXXUUenll1+u83vwyfCUUkqPPvpoOuigg1K7du1SZWVlOuOMM2o9uIbNUYrzm9KGj6++7rrr0u67755at26d+vTpky688ML08ccf11r73HPPpZEjR6by8vLUqVOn9I1vfCMtWbKkxpr6nrSmlNLdd9+dBg0alNq2bZt69+5d7+3A5ijFGX7nnXfSsccem3r06JHatGmTPve5z6Uf//jH9f5cNMM0B6U4qymlNHTo0BQRdf555JFHahxbfX/qemzcmLmsLzw19vn29qyQ0hZ4pzA2y6BBg6KysrLRpxECW4dZhW2X+YVtmxmGbYNZpSEtNr2EplqzZk2sXbu2xra//e1v8eyzz8awYcO2zkEBtZhV2HaZX9i2mWHYNphVNocznj4D8+fPjxEjRsS4ceOiqqoqXnjhhbjpppuiY8eO8dxzz0XXrl239iECYVZhW2Z+YdtmhmHbYFbZHD7V7jPQuXPn+OIXvxg333xzLFu2LCoq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",
      "text/plain": [
       "<Figure size 1500x400 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1,5,figsize=(15,4))\n",
    "for i, proj in enumerate([0,5,10,15,20]):\n",
    "    axes[i].pcolormesh(image[0][proj].T, cmap='Greys_r')\n",
    "    axes[i].set_title(f'Angle={image_meta.angles[proj]}')\n",
    "    axes[i].axis('off')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "At angles like 60 degrees, the cube is darkest in the center and lighter on the outside; this is like looking through a semi-transparent cube in real life, it's going to be darkest near the center if you're looking at it from an off angle."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also back project the cube to turn it back into an object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 128, 128, 132])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "object_new = bp_net(image)\n",
    "object_new.shape"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But if we look at the new object:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7ff7f8333eb0>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(5,4))\n",
    "plt.pcolormesh(object_new[0].sum(axis=2).T, cmap='Greys_r')\n",
    "plt.axis('off')\n",
    "plt.colorbar()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that it has been blurred (note: no blurring in the $z$ direction because the voxels at height $z_0$ will only contribute to detector elements at height $z_0$ due to collimation)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Example**: Filtered Back Projection. In this case the image estimate is given by\n",
    "\n",
    "$$\\hat{f}_i = \\pi \\sum_j c_{ij} \\left( \\mathcal{F}^{-1}(|\\omega|\\mathcal{F}(g)) \\right)_j $$\n",
    "\n",
    "where the term in brackets involves applying a 1D convolution (in this case, multiplication in Fourier space with the Ramp filter) to the image along the $r$ axis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "freq_fft = torch.fft.fftfreq(image.shape[-2]) \n",
    "filter = torch.abs(freq_fft).reshape((-1,1))\n",
    "image_fft = torch.fft.fft(image, axis=-2)\n",
    "image_fft = image_fft* filter\n",
    "image_filtered = torch.fft.ifft(image_fft, axis=-2).real"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "object_fbp = bp_net(image_filtered, normalize=True) *np.pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7ff7f8290610>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(5,4))\n",
    "plt.pcolormesh(object_fbp[0][:,:,64].T, cmap='Greys_r')\n",
    "plt.axis('off')\n",
    "plt.colorbar()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The cube is no longer blurred, but artifacts are present. Such artifacts are not present when using algorithms like OSEM for reconstruction."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "torch",
   "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.9.16"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "324f5aa1485c6e81c0125c86ad1340c603dab08bc11babd97bd730cfafa2ec4a"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
