{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can read an overview of this Numerical Linear Algebra course in [this blog post](http://www.fast.ai/2017/07/17/num-lin-alg/). The course was originally taught in the [University of San Francisco MS in Analytics](https://www.usfca.edu/arts-sciences/graduate-programs/analytics) graduate program. Course lecture videos are [available on YouTube](https://www.youtube.com/playlist?list=PLtmWHNX-gukIc92m1K0P6bIOnZb-mg0hY) (note that the notebook numbers and video numbers do not line up, since some notebooks took longer than 1 video to cover).\n", "\n", "You can ask questions about the course on [our fast.ai forums](http://forums.fast.ai/c/lin-alg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Compressed Sensing of CT Scans with Robust Regression " ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Broadcasting" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The term **broadcasting** describes how arrays with different shapes are treated during arithmetic operations. The term broadcasting was first used by Numpy, although is now used in other libraries such as [Tensorflow](https://www.tensorflow.org/performance/xla/broadcasting) and Matlab; the rules can vary by library.\n", "\n", "From the [Numpy Documentation](https://docs.scipy.org/doc/numpy-1.10.0/user/basics.broadcasting.html):\n", "\n", " Broadcasting provides a means of vectorizing array operations so that looping \n", " occurs in C instead of Python. It does this without making needless copies of data \n", " and usually leads to efficient algorithm implementations." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The simplest example of broadcasting occurs when multiplying an array by a scalar." ] }, { "cell_type": "code", "execution_count": 718, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([ 2., 4., 6.])" ] }, "execution_count": 718, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.array([1.0, 2.0, 3.0])\n", "b = 2.0\n", "a * b" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3] (3,)\n" ] } ], "source": [ "v=np.array([1,2,3])\n", "print(v, v.shape)" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([[1, 2, 3],\n", " [2, 4, 6],\n", " [3, 6, 9]]), (3, 3))" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m=np.array([v,v*2,v*3]); m, m.shape" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "n = np.array([m*1, m*5])" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 1, 2, 3],\n", " [ 2, 4, 6],\n", " [ 3, 6, 9]],\n", "\n", " [[ 5, 10, 15],\n", " [10, 20, 30],\n", " [15, 30, 45]]])" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "((2, 3, 3), (3, 3))" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n.shape, m.shape" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We can use broadcasting to **add** a matrix and an array:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 4, 6],\n", " [ 3, 6, 9],\n", " [ 4, 8, 12]])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m+v" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Notice what happens if we transpose the array:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([[1],\n", " [2],\n", " [3]]), (3, 1))" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v1=np.expand_dims(v,-1); v1, v1.shape" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 3, 4],\n", " [ 4, 6, 8],\n", " [ 6, 9, 12]])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m+v1" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### General Numpy Broadcasting Rules" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "When operating on two arrays, NumPy compares their shapes element-wise. It starts with the **trailing dimensions**, and works its way forward. Two dimensions are **compatible** when\n", "\n", "- they are equal, or\n", "- one of them is 1" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Arrays do not need to have the same number of dimensions. For example, if you have a $256 \\times 256 \\times 3$ array of RGB values, and you want to scale each color in the image by a different value, you can multiply the image by a one-dimensional array with 3 values. Lining up the sizes of the trailing axes of these arrays according to the broadcast rules, shows that they are compatible:\n", "\n", " Image (3d array): 256 x 256 x 3\n", " Scale (1d array): 3\n", " Result (3d array): 256 x 256 x 3" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "#### Review" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "v = np.array([1,2,3,4])\n", "m = np.array([v,v*2,v*3])\n", "A = np.array([5*m, -1*m])" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "((4,), (3, 4), (2, 3, 4))" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v.shape, m.shape, A.shape" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Will the following operations work?" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 5, 10, 15],\n", " [10, 20, 30],\n", " [15, 30, 45]],\n", "\n", " [[-1, -2, -3],\n", " [-2, -4, -6],\n", " [-3, -6, -9]]])" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 6, 12, 18],\n", " [11, 22, 33],\n", " [16, 32, 48]],\n", "\n", " [[ 0, 0, 0],\n", " [-1, -2, -3],\n", " [-2, -4, -6]]])" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A + v" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 5, 10, 15, 20],\n", " [ 10, 20, 30, 40],\n", " [ 15, 30, 45, 60]],\n", "\n", " [[ -1, -2, -3, -4],\n", " [ -2, -4, -6, -8],\n", " [ -3, -6, -9, -12]]])" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(4, 3, 2)" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.T.shape" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 5, -1],\n", " [ 10, -2],\n", " [ 15, -3]],\n", "\n", " [[ 10, -2],\n", " [ 20, -4],\n", " [ 30, -6]],\n", "\n", " [[ 15, -3],\n", " [ 30, -6],\n", " [ 45, -9]],\n", "\n", " [[ 20, -4],\n", " [ 40, -8],\n", " [ 60, -12]]])" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.T" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "### Sparse Matrices (in Scipy)" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "A matrix with lots of zeros is called **sparse** (the opposite of sparse is **dense**). For sparse matrices, you can save a lot of memory by only storing the non-zero values.\n", "\n", "\"floating\n", "\n", "Another example of a large, sparse matrix:\n", "\n", "\"floating\n", "[Source](https://commons.wikimedia.org/w/index.php?curid=2245335)\n", "\n", "There are the most common sparse storage formats:\n", "- coordinate-wise (scipy calls COO)\n", "- compressed sparse row (CSR)\n", "- compressed sparse column (CSC)\n", "\n", "Let's walk through [these examples](http://www.mathcs.emory.edu/~cheung/Courses/561/Syllabus/3-C/sparse.html)\n", "\n", "There are actually [many more formats](http://www.cs.colostate.edu/~mcrob/toolbox/c++/sparseMatrix/sparse_matrix_compression.html) as well.\n", "\n", "A class of matrices (e.g, diagonal) is generally called sparse if the number of non-zero elements is proportional to the number of rows (or columns) instead of being proportional to the product rows x columns.\n", "\n", "**Scipy Implementation**\n", "\n", "From the [Scipy Sparse Matrix Documentation](https://docs.scipy.org/doc/scipy-0.18.1/reference/sparse.html)\n", "\n", "- To construct a matrix efficiently, use either dok_matrix or lil_matrix. The lil_matrix class supports basic slicing and fancy indexing with a similar syntax to NumPy arrays. As illustrated below, the COO format may also be used to efficiently construct matrices\n", "- To perform manipulations such as multiplication or inversion, first convert the matrix to either CSC or CSR format.\n", "- All conversions among the CSR, CSC, and COO formats are efficient, linear-time operations." ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "## Today: CT scans" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "[\"Can Maths really save your life? Of course it can!!\"](https://plus.maths.org/content/saving-lives-mathematics-tomography) (lovely article)\n", "\n", "\"Computed\n", "\n", "(CAT and CT scan refer to the [same procedure](http://blog.cincinnatichildrens.org/radiology/whats-the-difference-between-a-cat-scan-and-a-ct-scan/). CT scan is the more modern term)\n", "\n", "This lesson is based off the Scikit-Learn example [Compressive sensing: tomography reconstruction with L1 prior (Lasso)](http://scikit-learn.org/stable/auto_examples/applications/plot_tomography_l1_reconstruction.html)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Our goal today" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Take the readings from a CT scan and construct what the original looks like.\n", "\n", "\"Projections\"" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "For each x-ray (at a particular position and particular angle), we get a single measurement. We need to construct the original picture just from these measurements. Also, we don't want the patient to experience a ton of radiation, so we are gathering less data than the area of the picture.\n", "\n", "\"Projections\"" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Review" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "In the previous lesson, we used Robust PCA for background removal of a surveillance video. We saw that this could be written as the optimization problem:\n", "\n", "$$ minimize\\; \\lVert L \\rVert_* + \\lambda\\lVert S \\rVert_1 \\\\ subject\\;to\\; L + S = M$$\n", "\n", "**Question**: Do you remember what is special about the L1 norm?" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### Today" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We will see that:\n", "\n", "\"Computed\n" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Resources:\n", "[Compressed Sensing](https://people.csail.mit.edu/indyk/princeton.pdf)\n", "\n", "\"Computed\n", "\n", "[Source](https://www.fields.utoronto.ca/programs/scientific/10-11/medimaging/presentations/Plenary_Sidky.pdf)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np, matplotlib.pyplot as plt, math\n", "from scipy import ndimage, sparse" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "np.set_printoptions(suppress=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate Data" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Intro" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "hidden": true }, "source": [ "We will use generated data today (not real CT scans). There is some interesting numpy and linear algebra involved in generating the data, and we will return to that later.\n", "\n", "Code is from this Scikit-Learn example [Compressive sensing: tomography reconstruction with L1 prior (Lasso)](http://scikit-learn.org/stable/auto_examples/applications/plot_tomography_l1_reconstruction.html)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Generate pictures" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def generate_synthetic_data():\n", " rs = np.random.RandomState(0)\n", " n_pts = 36\n", " x, y = np.ogrid[0:l, 0:l]\n", " mask_outer = (x - l / 2) ** 2 + (y - l / 2) ** 2 < (l / 2) ** 2\n", " mx,my = rs.randint(0, l, (2,n_pts))\n", " mask = np.zeros((l, l))\n", " mask[mx,my] = 1\n", " mask = ndimage.gaussian_filter(mask, sigma=l / n_pts)\n", " res = (mask > mask.mean()) & mask_outer\n", " return res ^ ndimage.binary_erosion(res)" ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "l = 128\n", "data = generate_synthetic_data()" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.imshow(data, cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true, "hidden": true }, "source": [ "#### What generate_synthetic_data() is doing" ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "l=8; n_pts=5\n", "rs = np.random.RandomState(0)" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(array([[0],\n", " [1],\n", " [2],\n", " [3],\n", " [4],\n", " [5],\n", " [6],\n", " [7]]), array([[0, 1, 2, 3, 4, 5, 6, 7]]))" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, y = np.ogrid[0:l, 0:l]; x,y" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3, 4, 5, 6, 7],\n", " [ 1, 2, 3, 4, 5, 6, 7, 8],\n", " [ 2, 3, 4, 5, 6, 7, 8, 9],\n", " [ 3, 4, 5, 6, 7, 8, 9, 10],\n", " [ 4, 5, 6, 7, 8, 9, 10, 11],\n", " [ 5, 6, 7, 8, 9, 10, 11, 12],\n", " [ 6, 7, 8, 9, 10, 11, 12, 13],\n", " [ 7, 8, 9, 10, 11, 12, 13, 14]])" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x + y" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 16.],\n", " [ 9.],\n", " [ 4.],\n", " [ 1.],\n", " [ 0.],\n", " [ 1.],\n", " [ 4.],\n", " [ 9.]])" ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(x - l/2) ** 2 " ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 32., 25., 20., 17., 16., 17., 20., 25.],\n", " [ 25., 18., 13., 10., 9., 10., 13., 18.],\n", " [ 20., 13., 8., 5., 4., 5., 8., 13.],\n", " [ 17., 10., 5., 2., 1., 2., 5., 10.],\n", " [ 16., 9., 4., 1., 0., 1., 4., 9.],\n", " [ 17., 10., 5., 2., 1., 2., 5., 10.],\n", " [ 20., 13., 8., 5., 4., 5., 8., 13.],\n", " [ 25., 18., 13., 10., 9., 10., 13., 18.]])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(x - l/2) ** 2 + (y - l/2) ** 2" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[False, False, False, False, False, False, False, False],\n", " [False, False, True, True, True, True, True, False],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, True, True, True, True, True, True, True],\n", " [False, False, True, True, True, True, True, False]], dtype=bool)" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask_outer = (x - l/2) ** 2 + (y - l/2) ** 2 < (l/2) ** 2; mask_outer" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngQOF/Rf3BIPnGnrH8wAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(mask_outer, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 1., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 1., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 1.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 1., 0., 0., 0., 0.]])" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask = np.zeros((l, l))\n", "mx,my = rs.randint(0, l, (2,n_pts))\n", "mask[mx,my] = 1; mask" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ntAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(mask, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "mask = ndimage.gaussian_filter(mask, sigma=l / n_pts)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(mask, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nFsEhqI8yLQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res = np.logical_and(mask > mask.mean(), mask_outer)\n", "plt.imshow(res, cmap='gray');" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(ndimage.binary_erosion(res), cmap='gray');" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "hidden": true, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(res ^ ndimage.binary_erosion(res), cmap='gray');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate Projections" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Code" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def _weights(x, dx=1, orig=0):\n", " x = np.ravel(x)\n", " floor_x = np.floor((x - orig) / dx)\n", " alpha = (x - orig - floor_x * dx) / dx\n", " return np.hstack((floor_x, floor_x + 1)), np.hstack((1 - alpha, alpha))\n", "\n", "\n", "def _generate_center_coordinates(l_x):\n", " X, Y = np.mgrid[:l_x, :l_x].astype(np.float64)\n", " center = l_x / 2.\n", " X += 0.5 - center\n", " Y += 0.5 - center\n", " return X, Y" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "def build_projection_operator(l_x, n_dir):\n", " X, Y = _generate_center_coordinates(l_x)\n", " angles = np.linspace(0, np.pi, n_dir, endpoint=False)\n", " data_inds, weights, camera_inds = [], [], []\n", " data_unravel_indices = np.arange(l_x ** 2)\n", " data_unravel_indices = np.hstack((data_unravel_indices,\n", " data_unravel_indices))\n", " for i, angle in enumerate(angles):\n", " Xrot = np.cos(angle) * X - np.sin(angle) * Y\n", " inds, w = _weights(Xrot, dx=1, orig=X.min())\n", " mask = (inds >= 0) & (inds < l_x)\n", " weights += list(w[mask])\n", " camera_inds += list(inds[mask] + i * l_x)\n", " data_inds += list(data_unravel_indices[mask])\n", " proj_operator = sparse.coo_matrix((weights, (camera_inds, data_inds)))\n", " return proj_operator" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Projection operator" ] }, { "cell_type": "code", "execution_count": 210, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "l = 128" ] }, { "cell_type": "code", "execution_count": 211, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj_operator = build_projection_operator(l, l // 7)" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "<2304x16384 sparse matrix of type ''\n", "\twith 555378 stored elements in COOrdinate format>" ] }, "execution_count": 212, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proj_operator" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "dimensions: angles (l//7), positions (l), image for each (l x l)" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj_t = np.reshape(proj_operator.todense().A, (l//7,l,l,l))" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The first coordinate refers to the angle of the line, and the second coordinate refers to the location of the line." ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The lines for the angle indexed with 3:" ] }, { "cell_type": "code", "execution_count": 214, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,0], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,1], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 216, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,2], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 217, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[3,40], cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Other lines at vertical location 40:" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nP+kAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[4,40], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[15,40], cmap='gray');" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(proj_t[17,40], cmap='gray');" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Intersection between x-rays and data" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Next, we want to see how the line intersects with our data. Remember, this is what the data looks like:" ] }, { "cell_type": "code", "execution_count": 221, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nNo8tAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.imshow(data, cmap=plt.cm.gray)\n", "plt.axis('off')\n", "plt.savefig(\"images/data.png\")" ] }, { "cell_type": "code", "execution_count": 222, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj = proj_operator @ data.ravel()[:, np.newaxis]" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "An x-ray at angle 17, location 40 passing through the data:" ] }, { "cell_type": "code", "execution_count": 223, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nIIX/ATGQOHfWpmE5AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.imshow(data + proj_t[17,40], cmap=plt.cm.gray)\n", "plt.axis('off')\n", "plt.savefig(\"images/data_xray.png\")" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Where they intersect:" ] }, { "cell_type": "code", "execution_count": 224, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "both = data + proj_t[17,40]\n", "plt.imshow((both > 1.1).astype(int), cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The intensity of an x-ray at angle 17, location 40 passing through the data:" ] }, { "cell_type": "code", "execution_count": 225, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "6.4384498372605989" ] }, "execution_count": 225, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.resize(proj, (l//7,l))[17,40]" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The intensity of an x-ray at angle 3, location 14 passing through the data:" ] }, { "cell_type": "code", "execution_count": 226, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(data + proj_t[3,14], cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Where they intersect:" ] }, { "cell_type": "code", "execution_count": 227, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAD8CAYAAAB+fLH0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADTxJREFUeJzt3X+o3fV9x/Hna0nVqawmc1zSxM0MQksq6yxBtO0fUnW1\nToz7R1ImZJsQBm61pVCS+UfZf4WV0v6xdlysNayiBOuWIKw1u+3o/qk1qaXLD9NkdWpcfliEdnRQ\nTPveH+ebeT4x6b3ec77feyPPB4Rzvp/v95zPO8nhlc/3e76571QVknTWbyx1AZKWF0NBUsNQkNQw\nFCQ1DAVJDUNBUsNQkNToLRSS3J7kSJJjSbb3NY+k6UofNy8lWQH8CLgNOA48C3ysqg5NfTJJU7Wy\np/e9AThWVT8GSPI4sBk4bygk8bZKqX8/qarfme+gvk4f1gIvj20f78b+X5JtSfYl2ddTDZJaLy7k\noL5WCvOqqllgFlwpSMtJXyuFV4BrxrbXdWOSlrm+QuFZYEOS9UkuAbYAe3qaS9IU9XL6UFVnkvwV\n8E1gBfBwVR3sYy5J09XLV5JvuQivKUhD2F9Vm+Y7yDsaJTUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FS\nw1CQ1DAUJDUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FSw1CQ1DAUJDUMBUkN\nQ0FSw1CQ1DAUJDUWHQpJrkny7SSHkhxM8kA3vjrJ3iRHu8dV0ytXUt8mWSmcAT5VVRuBG4H7k2wE\ntgNzVbUBmOu2JV0kFh0KVXWiqr7fPf8f4DCwFtgM7OwO2wncPWmRkoYzla7TSa4FrgeeAWaq6kS3\n6yQwc4HXbAO2TWN+SdMz8YXGJFcCXwc+UVU/G99Xo5bW5+0oXVWzVbVpIV1wJQ1nolBI8g5GgfBo\nVT3ZDZ9KsqbbvwY4PVmJkoY0ybcPAb4CHK6qz4/t2gNs7Z5vBXYvvjxJQ8tohb+IFyYfAv4d+A/g\nV93w3zC6rrAL+F3gReCeqnptnvdaXBGS3or9CzldX3QoTJOhIA1iQaHgHY2SGoaCpIahIKlhKEhq\nGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlh\nKEhqGAqSGoaCpIahIKlhKEhqTKPB7IokzyV5qttenWRvkqPd46rJy5Q0lGmsFB4ADo9tbwfmqmoD\nMNdtS7pITNp1eh3wx8BDY8ObgZ3d853A3ZPMIWlYk64UvgB8mjcazALMVNWJ7vlJYGbCOSSdR1Vx\nthfs+PNJTdKK/k7gdFXtv9AxNaryvJUm2ZZkX5J9i61B0vStnOC1HwTuSnIHcBnwW0m+BpxKsqaq\nTiRZA5w+34urahaYBbtOS4uRpJf3XfRKoap2VNW6qroW2AJ8q6ruBfYAW7vDtgK7J65S0mD6uE/h\ns8BtSY4Ct3bbknqUhCRTubaQaV2cmKgITx+kIeyvqk3zHeQdjZIahoKkhqEgqWEoSGoYCpIahoKk\nhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIa\nhoKkhqEgqWEoSGoYCpIaE4VCkquSPJHk+SSHk9yUZHWSvUmOdo+rplWspP5NulL4IvCNqnoP8D7g\nMLAdmKuqDcBcty3pIrHoXpJJ3gn8APj9GnuTJEeAm8da0f9bVb17nveyl6TUv957Sa4HXgW+muS5\nJA8luQKYqaoT3TEngZkJ5pA0sElCYSXwfuDLVXU98HPOOVXoVhDnXQUk2ZZkX5J9E9QgacomCYXj\nwPGqeqbbfoJRSJzqThvoHk+f78VVNVtVmxaynJE0nEWHQlWdBF5OcvZ6wS3AIWAPsLUb2wrsnqhC\nSYNaOeHr/xp4NMklwI+BP2cUNLuS3Ae8CNwz4RySBrTobx+mWoTfPkhD6P3bB0lvQ4aCpIahIKlh\nKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIah\nIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGhOFQpJPJjmY5ECSx5JclmR1kr1JjnaPq6ZVrKT+LToU\nkqwFPg5sqqrrgBXAFkbt6OeqagMwxznt6SUtb5OePqwEfjPJSuBy4L+BzcDObv9O4O4J55A0oEla\n0b8CfA54CTgB/LSqngZmqupEd9hJYGbiKiUNZpLTh1WMVgXrgXcBVyS5d/yYGrW0Pm9H6STbkuxL\nsm+xNUiavklOH24FXqiqV6vqdeBJ4APAqSRrALrH0+d7cVXNVtWmhbTGljScSULhJeDGJJcnCXAL\ncBjYA2ztjtkK7J6sRElDWrnYF1bVM0meAL4PnAGeA2aBK4FdSe4DXgTumUahkoaR0Wn/EheRLH0R\n0tvf/oWcrntHo6SGoSCpYShIahgKkhqGgqSGoSCpYShIahgKkhqGgqSGoSCpYShIahgKkhqGgqSG\noSCpYShIahgKkhqGgqSGoSCpYShIahgKkhqGgqSGoSCpYShIahgKkhqGgqTGvKGQ5OEkp5McGBtb\nnWRvkqPd46qxfTuSHEtyJMlH+ipcUj8WslJ4BLj9nLHtwFxVbQDmum2SbAS2AO/tXvOlJCumVq2k\n3s0bClX1HeC1c4Y3Azu75zuBu8fGH6+qX1TVC8Ax4IYp1SppAIu9pjBTVSe65yeBme75WuDlseOO\nd2OSLhKLbkV/VlXVYrpGJ9kGbJt0fknTtdiVwqkkawC6x9Pd+CvANWPHrevG3qSqZqtq00JaY0sa\nzmJDYQ+wtXu+Fdg9Nr4lyaVJ1gMbgO9NVqKkIc17+pDkMeBm4Ookx4HPAJ8FdiW5D3gRuAegqg4m\n2QUcAs4A91fVL3uqXVIPUvWWLwdMv4hFXJOQ9JbtX8jpunc0SmoYCpIahoKkhqEgqWEoSGoYCpIa\nhoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoY\nCpIahoKkhqEgqWEoSGrMGwpJHk5yOsmBsbG/S/J8kh8m+ackV43t25HkWJIjST7SV+GS+rGQlcIj\nwO3njO0FrquqPwB+BOwASLIR2AK8t3vNl5KsmFq1kno3byhU1XeA184Ze7qqznSb32XUch5gM/B4\nVf2iql4AjgE3TLFeST2bxjWFvwD+pXu+Fnh5bN/xbkzSRWLeVvS/TpIHGbWcf3QRr90GbJtkfknT\nt+hQSPJnwJ3ALfVGP/tXgGvGDlvXjb1JVc0Cs9172YpeWiYWdfqQ5Hbg08BdVfW/Y7v2AFuSXJpk\nPbAB+N7kZUoayrwrhSSPATcDVyc5DnyG0bcNlwJ7kwB8t6r+sqoOJtkFHGJ0WnF/Vf2yr+IlTV/e\nWPkvYRGePkhD2F9Vm+Y7yDsaJTUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FSw1CQ1JjoP0RN0U+An3eP\nS+1qrGOcdbQu5jp+byEHLYs7GgGS7FvI3VbWYR3W0W8dnj5IahgKkhrLKRRml7qAjnW0rKP1tq9j\n2VxTkLQ8LKeVgqRlYFmEQpLbuz4Rx5JsH3Dea5J8O8mhJAeTPNCNr06yN8nR7nHVALWsSPJckqeW\nsIarkjzR9fQ4nOSmJarjk93fx4EkjyW5bKg6LtDn5IJz99XnZCn7rSx5KHR9If4e+CiwEfhY1z9i\nCGeAT1XVRuBG4P5u7u3AXFVtAOa67b49ABwe216KGr4IfKOq3gO8r6tn0DqSrAU+DmyqquuAFYx6\niQxVxyO8uc/Jeefuuc/J+eoYpt9KVS3pL+Am4Jtj2zuAHUtUy27gNuAIsKYbWwMc6XnedYw+bB8G\nnurGhq7hncALdNeZxsaHruNsm4DVjG6uewr4oyHrAK4FDsz3Z3DuZxX4JnBTX3Wcs+9PgEf7qGPJ\nVwosk14RSa4FrgeeAWaq6kS36yQw0/P0X2D0g3B/NTY2dA3rgVeBr3anMQ8luWLoOqrqFeBzwEvA\nCeCnVfX00HWc40JzL+Vnt7d+K8shFJZckiuBrwOfqKqfje+rUfT29hVNkjuB01W1/0LH9F1DZyXw\nfuDLVXU9o9vOmyX6EHV05+ubGYXUu4Arktw7dB0XspRznzVJv5WFWA6hsOBeEX1I8g5GgfBoVT3Z\nDZ9KsqbbvwY43WMJHwTuSvJfwOPAh5N8beAaYPSvy/GqeqbbfoJRSAxdx63AC1X1alW9DjwJfGAJ\n6hh3obkH/+yO9Vv50y6gpl7HcgiFZ4ENSdYnuYTRBZM9Q0yc0c+n/wpwuKo+P7ZrD7C1e76V0bWG\nXlTVjqpaV1XXMvq9f6uq7h2yhq6Ok8DLSd7dDd3C6Ef1D1oHo9OGG5Nc3v393MLogufQdYy70NyD\n9jkZrN9KnxeN3sIFlTsYXU39T+DBAef9EKOl4A+BH3S/7gB+m9GFv6PAvwKrB6rnZt640Dh4DcAf\nAvu6P49/BlYtUR1/CzwPHAD+kVGPkUHqAB5jdC3jdUarp/t+3dzAg93n9gjw0Z7rOMbo2sHZz+o/\n9FGHdzRKaiyH0wdJy4ihIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGv8Hr5WZT5/5p7YAAAAASUVO\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "both = data + proj_t[3,14]\n", "plt.imshow((both > 1.1).astype(int), cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The measurement from the CT scan would be a small number here:" ] }, { "cell_type": "code", "execution_count": 228, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "2.1374953737965541" ] }, "execution_count": 228, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.resize(proj, (l//7,l))[3,14]" ] }, { "cell_type": "code", "execution_count": 229, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "proj += 0.15 * np.random.randn(*proj.shape)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### About *args" ] }, { "cell_type": "code", "execution_count": 230, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "a = [1,2,3]\n", "b= [4,5,6]" ] }, { "cell_type": "code", "execution_count": 231, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "c = list(zip(a, b))" ] }, { "cell_type": "code", "execution_count": 232, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "[(1, 4), (2, 5), (3, 6)]" ] }, "execution_count": 232, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c" ] }, { "cell_type": "code", "execution_count": 233, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "[(1, 2, 3), (4, 5, 6)]" ] }, "execution_count": 233, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(zip(*c))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### The Projection (CT readings)" ] }, { "cell_type": "code", "execution_count": 234, "metadata": { "hidden": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAABZCAYAAABi4BCyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFwhJREFUeJzt3UmsJ1XZx/EDCg0CMgjKPIOAILTKPM9BGUKCIZK4IBJg\nASSEhB0YF2wgrAkQwgqahGHDTDPTzJMyI4OigAzKrDTN5KqffKryP7zkXdz3rZvfd/X07XurzlRV\nOd96zqkVvv766xZCCCH8f2fF/+sChBBCCN+GPLBCCCFMgjywQgghTII8sEIIIUyCPLBCCCFMgjyw\nQgghTII8sEIIIUyCPLBCCCFMgjywQgghTILvzuXJVlpppdpWY4UVVqiff/XVVxWvuOKKM38up556\nasUffPBBxS+//HLFa6yxxuBvPN9HH31UsTt9eO4NNtig4tVWW63iF154oeINN9yw4jXXXLPie+65\np+Lvfe97Fa+11loz69PD+luG8XHefPPNmX9/xBFHVLzXXntVfM4551T8xRdfVPyd73yn4l4/9PrE\nMm2zzTYVf/nllxWvvPLKFb/++uszf+e73x0OSc/n/33++ef/4+9stNFGFW+99dYVP/744xUvWbJk\n5nEcF8YHHnhgxcccc0zFn376acWfffbZzHMdddRRFf/5z39uYv8++uijFS9YsKDiZcuWVez43nXX\nXSu23zzODjvsUPFhhx1W8c0331zx9ddfX7HXi/3jGFl99dVnxmeddVaTN954o+JFixa1WdjG9qHn\ns/6WTzbeeOOKf/rTn1b88ccfV3zeeedV7PjfY489Kv7www8r/sc//jGznK0N27tHbzch62b/n3TS\nSRVfeOGFFdsuvetwlVVWqfitt96q+JNPPpl5nK222qri73//+xV7X22ttXfeeafiXr97vV155ZUz\nz+dYkmXLls3u0BGZYYUQQpgEeWCFEEKYBCvM5ea3CxYsqJP1VFxPxYg6wGn1vvvuW/FYky1durTi\nH/3oRxWrqdZZZ52KnXKvtNJKM8/XUyUeR0Xx17/+tWJVkdrwb3/7W8U9BTLWAU7lFy5cWPHaa69d\n8d///veKbW/r79Rd5fTPf/6z4v/85z8VW09/X13373//u2LbSIUmq6666uDfqoxtt912ZjlUvD/+\n8Y8rtv3uv//+mT+3jeyfAw44oGLHzs9+9rOZZVMDv/vuu20WP/nJTypWn7Q27MPXXnutYpXVuuuu\n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\nfEuWLKnYbMjeJ2l8HeG4H+2BGSUYQghh/pAHVgghhEkwp0pwwYIFdTLPa/aXysk9q8wQMlPLbCsX\nkzptba2fAejUdbxodRbqDafJHsdptlNgFZ9ZN+OMxuWcdNJJM485Votmxqn+1GD+vfrBfRxvvPHG\nintZPocddljF7nNm5pVt1Ms8VBOoBsafb1A5+CVa2WuvvSpW5dn2Hscy2Q+qpSeffLLis88+u2I/\nTbJ48eKZ57IMKk4zSV002dqwLdVJllX9ZGy2lW2hvlJf259mpdrnZrq66LSX0Wt5VK6tDRWk41B9\n5f6JXtNmcY4X7S7HNrIPXQhsn6hcR1+9nXn83l6drQ01svePni72GrD+3gMtk5rObF31W+9662lA\ndbxjwYXtXi+tDcekGzd4TZr16XVlZqkKfqRHowRDCCHMH/LACiGEMAnmVAmGEEII/1sywwohhDAJ\n8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAny\nwAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCfLA\nCiGEMAnywAohhDAJ8sAKIYQwCfLACiGEMAnywAohhDAJ8sAKIYQwCf4LclFXLDARjdEAAAAASUVO\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(7,7))\n", "plt.imshow(np.resize(proj, (l//7,l)), cmap='gray')\n", "plt.axis('off')\n", "plt.savefig(\"images/proj.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regresssion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will try to recover the data just from the projections (the measurements of the CT scan)" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Linear Regression: $Ax = b$" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Our matrix $A$ is the projection operator. This was our 4d matrix above (angle, location, x, y) of the different x-rays:" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,12))\n", "plt.title(\"A: Projection Operator\")\n", "plt.imshow(proj_operator.todense().A, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We are solving for $x$, the original data. We (un)ravel the 2D data into a single column." ] }, { "cell_type": "code", "execution_count": 202, "metadata": { "hidden": true, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 202, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nLUfOEcG+gdsAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,5))\n", "plt.title(\"x: Image\")\n", "plt.imshow(data, cmap='gray')\n", "\n", "plt.figure(figsize=(4,12))\n", "# I am tiling the column so that it's easier to see\n", "plt.imshow(np.tile(data.ravel(), (80,1)).T, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Our vector $b$ is the (un)raveled matrix of measurements: " ] }, { "cell_type": "code", "execution_count": 238, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 238, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngrW3r33ta1ndo48+WpVL4TbaFj6mLuNnLU61Il5Kr5pWKXWmamoMt1vbwq81dIVRm7FeX9pdSnVA\n1pFUm2ItWFM/cho+Db/h8CnViUs72tTpr0CuRatGzlof9w8g1xYnTJiQ1fH6Bz1fXUo+INcatQ/U\npSlV7YuvXcNmePypBs/9c+rUqVkd9zlNdTp37tyqrGFIbHcNIbvyyiursoabjR49uiovXrw4q5sz\nZ05V1v7IuqquhWCtnUP5AODZZ5+tytzfgXzNgaY6Zb1StXVuy49//OOsjse+arO8lkbXsvD5dC0E\nv9aQtqVLl1ZlDQXldRI/+9nPsrqbbrqpKmuYFacz1p3lWKvV9T+s7asmz6FbY8eOzermzZtXlTXd\nKI8HnbtL8yX3EQ1P5P7C88L06dOr8qpVq7Bx40ZryMYYY8yugh/IxhhjTAvQVJf1oEGD0i233AJg\nW9ceu+zUxcShJJo9h5fEqxvpiiuuqMrqEmE3nbrJOIxGXYJ8HHW/ciYfdWuyO0hdhCU3eClzVsm9\nzJ/TOr5ezXzG6PnY5XP22WdndexiZakAyN2l6iIsuYlL2cbY/ashGtwnNLsTu9BK2av0fKXNzdlN\npmFIpSxeI0aMqMq6IxHbU9vJ9uRzA7k9uaz3i938J510UlbHbtXrr78+q+MQGw4RAvL717mrWycs\nUWm2Iw5z1HHD4ZEawsOZ+ErzmLpYORxGM1Lx9Wm4DY8VzggFAHfeeWdV5vsK5K52db9yu1VCqQuj\nAfIMd6effnpWx6GMHB4F5BLcjTfemNXdcccdVfmCCy7I6h5//PGqfPvtt2d1Rx11VFXWEDqWW3Qs\n8H248MILszqeLzVrHvczlblY0tT5i/uPSgfsBtf+yfdFQ6l4jLG0OmXKlKq8ZcsWbN261S5rY4wx\nZlfhUx/IEfGriFgbEUvob/tHxOyIWN74v2/pGMYYY4wpsz2/kH8N4Dz527UA5qSUBgKY03htjDHG\nmB1kuzTkiDgCwL0ppaGN10sBnJVSeiMiDgbwaErp2MIhAACHHHJImjx5MoBtU5dxOAWHFzTOV5V1\nKTvrthr+MnLkyKqsugBrbxpmxeEonC4PyJf/q1bK2rCGL6nuyLC2ojoq64V6r7hten28PF9T5LEm\nr/oyvy5pz6NGjcrqOC2kauulPsZ1pbZoWEIpJGt7tVPeGQnINSbV1lmze+utt7I61ho1JSxT6vNn\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nku9OoAhR+70AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(8,8))\n", "plt.imshow(np.resize(proj, (l//7,l)), cmap='gray')\n", "\n", "plt.figure(figsize=(10,10))\n", "plt.imshow(np.tile(proj.ravel(), (20,1)).T, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "#### Scikit Learn Linear Regression" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "from sklearn.linear_model import Lasso\n", "from sklearn.linear_model import Ridge" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Reconstruction with L2 (Ridge) penalization\n", "rgr_ridge = Ridge(alpha=0.2)\n", "rgr_ridge.fit(proj_operator, proj.ravel())\n", "rec_l2 = rgr_ridge.coef_.reshape(l, l)\n", "plt.imshow(rec_l2, cmap='gray')" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "2304" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "18*128" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "18 x 128 x 128 x 128" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "(2304, 16384)" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proj_operator.shape" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n/B8DgYMcgRCkOgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Reconstruction with L1 (Lasso) penalization\n", "# the best value of alpha was determined using cross validation\n", "# with LassoCV\n", "rgr_lasso = Lasso(alpha=0.001)\n", "rgr_lasso.fit(proj_operator, proj.ravel())\n", "rec_l1 = rgr_lasso.coef_.reshape(l, l)\n", "plt.imshow(rec_l1, cmap='gray')" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "The L1 penalty works significantly better than the L2 penalty here!" ] } ], "metadata": { "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }