{ "metadata": { "name": "", "signature": "sha256:5e6c7f1eaceddd0cb690bac5bdffb141ae73546169e0a0475f533bd94f0ff870" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Calculating transformations between images" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In which we discover optimization, cost functions and how to use them." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# - compatibility with Python 3\n", "from __future__ import print_function # print('me') instead of print 'me'\n", "from __future__ import division # 1/2 == 0.5, not 0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# - show figures inside the notebook\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "# - import common modules\n", "import numpy as np # the Python array package\n", "import matplotlib.pyplot as plt # the Python plotting package" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "# - set gray colormap and nearest neighbor interpolation by default\n", "plt.rcParams['image.cmap'] = 'gray'\n", "plt.rcParams['image.interpolation'] = 'nearest'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We often want to work out some set of spatial transformations that will make one image be a better match to another.\n", "\n", "One example is motion correction in FMRI. We know that the subject moves over the course of an FMRI run. To correct for this, we may want to take each volume in the run, and match this volume to the first volume in the run. To do this, we need to work out what the best set of transformations are to match - say - volume 1 to volume 0." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We start with a single slice from the each of the first two volumes in the EPI (BOLD) data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We load the 4D EPI image, and get the data:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import nibabel as nib\n", "img = nib.load('ds107_sub012_t1r2.nii')\n", "data = img.get_data()\n", "data.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "(64, 64, 35, 166)" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to make our data into floating point to make processing easier later" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = data.astype(np.float32)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get the first and second volumes:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "vol0 = data[..., 0]\n", "vol1 = data[..., 1]\n", "vol1.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "(64, 64, 35)" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we get our slices. Here I am getting slice index 17 in z, from the first volume:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mid_vol0 = vol0[:, :, 17]\n", "plt.imshow(mid_vol0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the corresponding slice from volume 1:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mid_vol1 = vol1[:, :, 17]\n", "plt.imshow(mid_vol1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We might want to match these two slices so they are in the same position. We will try and match the slices by moving the voxel values in slice 1 so that they are a better match to the voxel values in slice 0. Our job is to find the best set of transformations to do this." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We would like to have some automatic way to calculate these transformations.\n", "\n", "The rest of this page is about how this automated method could (and does) work." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At the moment it is hard to see any difference between the two images. That is still true even if we put the slices side by side:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig, axes = plt.subplots(1, 2, figsize=(10, 20))\n", "axes[0].imshow(mid_vol0)\n", "axes[0].set_title('slice 0')\n", "axes[1].imshow(mid_vol1)\n", "axes[1].set_title('slice 1')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n4P8Hkjcn9L3ksqYAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The slices are very similar, because the movement between the two volumes is very small - often the movements in an FMRI run are less than a single voxel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to show the automated matching procedure in action, let's start with an image that is obviously badly matched with slice 0. We will do this by pushing slice 0 (`mid_vol1`) 8 voxels down.\n", "\n", "After that we will try to match the shifted version (`shifted_mid_vol1`) to ``mid_vol0``:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Make slice full of zeros like mid_vol1 slice\n", "shifted_mid_vol1 = np.zeros(mid_vol1.shape)\n", "# Fill the lower 54 (of 64) x lines with mid_vol1\n", "shifted_mid_vol1[8:, :] = mid_vol1[:-8, :]\n", "# Now we have something like mid_vol1 but translated in the first dimension\n", "plt.imshow(shifted_mid_vol1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Formulating the matching problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's say we did not know how many voxels the image had been translated. We want a good way to find out.\n", "\n", "Let's put our problem in a more concrete form. We are going to try translating our `shifted_mid_vol1` over the first ($x$) axis. Call this translation $t$, so a movement of -5 voxels in $x$ gives $t=-5$.\n", "\n", "Call the first image $\\mathbf{X}$ (`mid_vol0` in our case). Call the second image $\\mathbf{Y}$ (`shifted_mid_vol1` in our case). $\\mathbf{Y}_t$ is $\\mathbf{Y}$ translated in $x$ by $t$ voxels.\n", "\n", "$t$ is a good translation if the image $\\mathbf{Y}_t$ is a good match for image $\\mathbf{X}$.\n", "\n", "We need to quantify what we mean by good match. That is, we need some measure of quality of match, given two images $\\mathbf{X}$ and $\\mathbf{Y}$. Call this measure $M(\\mathbf{X}, \\mathbf{Y})$, and let us specify that the value of $M(\\mathbf{X}, \\mathbf{Y})$ should be lower when the images match well. We could therefore call $M(\\mathbf{X}, \\mathbf{Y})$ a *mismatch* function.\n", "\n", "Now we can formulate our problem - we want to find the translation $t$ that gives the lowest value of $M(\\mathbf{X}, \\mathbf{Y_t})$.\n", "\n", "Practically, we are going to need the following things:\n", "\n", "* A function to generate $\\mathbf{Y_t}$;\n", "* A function to give the mismatch between two images.\n", "\n", "Here's the function to generate $\\mathbf{Y_t}$ - the image $\\mathbf{Y}$ shifted by $t$ voxels in $x$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def x_trans_slice(img_slice, x_vox_trans):\n", " \"\"\" Make a new copy of `img_slice` translated by `x_vox_trans` voxels\n", " \n", " `x_vox_trans` can be positive or negative\n", " \"\"\"\n", " # Make a 0-filled array of same shape as `img_slice`\n", " trans_slice = np.zeros(img_slice.shape)\n", " # Use slicing to select voxels out of the image and move them\n", " # Up or down on the first (x) axis\n", " if x_vox_trans < 0:\n", " trans_slice[:x_vox_trans, :] = img_slice[-x_vox_trans:, :]\n", " elif x_vox_trans == 0:\n", " trans_slice[:, :] = img_slice\n", " else:\n", " trans_slice[x_vox_trans:, :] = img_slice[:-x_vox_trans, :]\n", " return trans_slice" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing a metric for image mismatch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we need a mismatch function that accepts two images, and returns a scalar value that is low when the images are well matched." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We could imagine a mismatch measure that used the values from subtracting the two images:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(mid_vol0 - shifted_mid_vol1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Can we take the sum of this difference as our scalar measure of mismatch?\n", "\n", "No, because the negative numbers (black) will cancel out the positive numbers (white). We need something better:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def mean_abs_mismatch(slice0, slice1):\n", " \"\"\" Mean absoute difference between images\n", " \"\"\"\n", " return np.mean(np.abs(slice0 - slice1))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can check different values of translation with our mismatch function. We move the image up and down for a range of values of $t$ and recalculate the mismatch measure for every candidate translation:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mismatches = []\n", "translations = range(-25, 15) # Candidate values for t\n", "for t in translations:\n", " # Make the translated image Y_t\n", " unshifted = x_trans_slice(shifted_mid_vol1, t)\n", " # Calculate the mismatch\n", " mismatch = mean_abs_mismatch(unshifted, mid_vol0)\n", " # Store it for later\n", " mismatches.append(mismatch)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(translations, mismatches)\n", "plt.xlabel('translation (t)')\n", "plt.ylabel('mean absolute difference')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can try other measures of mismatch. Another measure of how well the images match might be the correlation of the voxel values at each voxel. When the images are well matched, we expect black values in one image to be matched with black in the other, ditto for white." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Number of voxels in the image\n", "n_voxels = np.prod(mid_vol1.shape)\n", "# Reshape vol0 slice as 1D vector\n", "mid_vol0_as_1d = mid_vol0.reshape(n_voxels)\n", "# Reshape vol1 slice as 1D vector\n", "mid_vol1_as_1d = mid_vol1.reshape(n_voxels)\n", "# These original slices should be very close to each other already\n", "# So - plotting one set of image values against the other should\n", "# be close to a straight line\n", "plt.plot(mid_vol0_as_1d, mid_vol1_as_1d, '.')\n", "plt.xlabel('voxels in vol0 slice')\n", "plt.ylabel('voxels in original vol1 slice')\n", "# Correlation coefficient between them\n", "np.corrcoef(mid_vol0_as_1d, mid_vol1_as_1d)[0, 1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ "0.9981194331127774" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "# The shifted slice will be less well matched\n", "# Therefore the line will be less straight and narrow\n", "plt.plot(mid_vol0_as_1d, shifted_mid_vol1.ravel(), '.')\n", "plt.xlabel('voxels in vol0 slice')\n", "plt.ylabel('voxels in shifted vol1 slice')\n", "# Correlation coefficient between them will be nearer 0\n", "np.corrcoef(mid_vol0_as_1d, shifted_mid_vol1.ravel())[0, 1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "0.44628693638267175" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We expect that the correlation will be high and positive when the images are well matched. Our *mismatch measure*, on the other hand, should be *low* when the images are well-matched. So, we can use the negative correlation as our mismatch measure:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def correl_mismatch(slice0, slice1):\n", " \"\"\" Negative correlation between the two images, flattened to 1D \"\"\"\n", " correl = np.corrcoef(slice0.ravel(), slice1.ravel())[0, 1]\n", " return -correl" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "correl_mismatches = []\n", "translations = range(-25, 15) # Candidate values for t\n", "for t in translations:\n", " unshifted = x_trans_slice(shifted_mid_vol1, t)\n", " mismatch = correl_mismatch(unshifted, mid_vol0)\n", " correl_mismatches.append(mismatch)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(translations, correl_mismatches)\n", "plt.xlabel('translation (t)')\n", "plt.ylabel('correlation mismatch')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nl+EIAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far we have only tried translations of integer numbers of voxels (0, 1, 2, 3...).\n", "\n", "How about non-integer translations? Will these work?\n", "\n", "To do a non-integer translation, we have to think more generally about how to make an image that matches another image, after a transformation." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Resampling in 2D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need a more general resampling algorithm. This is like the interpolation we do for slice timing, but in two dimensions.\n", "\n", "Let's say we want to do a voxel translation of 0.5 voxels in X. The way we might go about this is the following.\n", "\n", "To start, here are some names:\n", "\n", "* `img0` is the image we are trying to match to (in our case `mid_vol0`);\n", "* `img1` is the image we are trying to match by moving (in our case `shifted_mid_vol1`);\n", "* `trans` is the transformation from pixel coordinates in `img1` to pixel coordinates in `img0` (in our case adding 0.5 to the first coordinate value, so that [0, 0] becomes [0.5, 0]);\n", "* `itrans` is the inverse of `trans`, and gives the transformation to go from pixel coordinates in `img0` to pixel coordinates in `img1`. In our case this is *subtracting* 0.5 from the first coordinate value.\n", "\n", "The procedure for resampling is:\n", "\n", "* Make a 2D image the same shape as the image we want to match to (`img0`) - call this `new_img0`;\n", "* For each pixel in `new_img0`;\n", " * call the pixel coordinate for this pixel: `coord_for_img0`;\n", " * transform `coord_for_img0` using `itrans`. In our case this would be to subtract 0.5 from the first coordinate value ([0, 0] becomes [-0.5, 0]). Call the transformed coordinate `coord_for_img1`;\n", " * Estimate the pixel value in `img1` at coordinate `coord_for_img1`. Call this value `img1_value_estimate`;\n", " * Insert `img1_value` into `new_img0` at coordinate `coord_for_img0`.\n", " \n", "The \"Estimate pixel value\" step is called *resampling*. As you can see this is the same general idea as interpolating in one dimension. We saw one dimensional interpolation for slice timing. There are various ways of interpolating in two or three dimensions, but one of the most obvious is the simple extension of linear interpolation to two (or more) dimensions - [bilinear interpolation](http://en.wikipedia.org/wiki/Bilinear_interpolation)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `scipy.ndimage` library has routines for resampling in 2 or 3 dimensions:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import scipy.ndimage as snd" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact the ``affine_transform`` function from `scipy.ndimage` will do the whole process for us." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def fancy_x_trans_slice(img_slice, x_vox_trans):\n", " \"\"\" Make a new copy of `img_slice` translated by `x_vox_trans` voxels\n", " \n", " `x_vox_trans` can be positive or negative, and can be a float.\n", " \"\"\"\n", " # Resample image using bilinear interpolation (order=1)\n", " trans_slice = snd.affine_transform(img_slice, [1, 1], [-x_vox_trans, 0], order=1)\n", " return trans_slice" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "fine_mismatches = []\n", "fine_translations = np.linspace(-25, 15, 100)\n", "for t in fine_translations:\n", " unshifted = fancy_x_trans_slice(shifted_mid_vol1, t)\n", " mismatch = correl_mismatch(unshifted, mid_vol0)\n", " fine_mismatches.append(mismatch)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(fine_translations, fine_mismatches)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nUT75ZOhIquenn2CffWDSJL/3QCSq0jbSN7P6ZjbVzIrMbIqZ1avguoFm9qmZzTOzZ81s23jvKZmn\nd2945RV/vGImGTECjjpKCV+yTyLlnWuBqc65fYE3Y89/w8yaARcBhznnDgRqAmcncE/JMLvtBqed\n5pNoptiwAe6+GwYODB2JSPIlkvQ7A6Nij0cBXcq55kegGNjezGoB2wMrE7inZKA+ffyE7saNoSOp\nmmeegZYt4fDDQ0ciknyJJP0GzrnVscergS2Ok3DOfQcMBb4EvgK+d879K4F7SgY67DB/ytQrr4SO\nZOs2bYIhQzTKl+xVq7JPmtlUoGE5n7q+9BPnnDOzLWZhzWwf4CqgGfAD8KKZ/dU590x59xs0aNAv\nj/Py8sjLhebsOeKKK3z75dNPDx1J5caPh513huOPDx2JSPkKCgooKCiI++vjXr1jZoVAnnNulZk1\nAqY551qVuaYb0M451zv2/BygrXPub+W8nlbvZLHiYthvP7j0UujfP5ptiZ3zJZ3rr/fzECKZIJ3r\n9CcAm/cpngeML+eaQqCtmW1nZgacACxI4J6SoWrXhoIC36Wyf38oKQkd0ZYefxzWrYNTTw0diUjq\nJDLSrw+8AOwJLAPOcs59b2aNgcecc51i112D/6VQAswGejvnist5PY30c8D33/uk2rixX7u/bQQW\n8G7c6A9HeeUVX95p3Tp0RCJVp4ZrEnnr1/va/hFH+P77IX37LXTrBjVrwpgx2dEVVHKL2jBI5NWp\nA9ddB+PGhY4E/vpXP7J/4w0lfMkNGulLEJs2QaNG8OGHsNdeYWJYu9bHsGoV7LBDmBhEEqWRvmSE\nmjWhUyfffjmUadN8iUkJX3KJkr4Ec8opMGFCuPtPmqSWyZJ7VN6RYNau9at4VqzwG6LS7fe/h5df\nhoMOSv+9RZJF5R3JGDvuCMccA5Mnp//eixf7NfkHHpj+e4uEpKQvQXXuHKbEM3kynHhiNHcGi6SS\nkr4EdfLJfrlkujtwTp6ser7kJiV9CapJE38kYTrP0d2wwbeEaNcuffcUiQolfQku3SWeGTOgVSvY\nddf03VMkKpT0JbhTT4WXXvIbttJBpR3JZUr6EtzBB8Pvfgevv56e+02aBO3bp+deIlGjpC/BmUHf\nvnDffam/1+efw5dfwpFHpv5eIlGkpC+RcOaZUFgIc+em9j533gmXXQa1Kj0zTiR7aUeuRMZtt8Gy\n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\niOSQ/w+E409jhQPT0QAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are looking for the best x translation. At the moment we have to sample lots of x translations and then choose the best. Is there a better way?" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Optimization* is a field of mathematics / computer science that solves this exact problem:\n", "\n", "http://en.wikipedia.org/wiki/Mathematical_optimization\n", "\n", "There are many optimization routines in Python, MATLAB and other languages. These routines typically allow you to pass some function, called the *objective* function, or the *cost* function. The optimization routine returns the parameters of the cost function that give the lowest value.\n", "\n", "In our case, the cost function we need to minimize will accept one parameter (the translation), and return the mismatch value for that translation. So, it will need to create the image $\\mathbf{X_t}$ and return $M(\\mathbf{X}, \\mathbf{Y_t})$.\n", "\n", "What does it mean to \"pass\" a function in Python. Remember, in Python, [functions are objects too](functions_are_objects.ipynb).\n", "\n", "The optimization works by running the cost function at some starting value of the parameter (in our case, x translation), and using an algorithm to choose the next value of the parameter to try. It continues trying new values until it finds a parameter value for which very small changes of the parameter up or down only increase the cost function value. At this point the routine stops and returns the parameter value.\n", "\n", "To write our cost function, we will use the fact that Python functions can access variables defined in the [global scope](global_scope.ipynb). In our case the function `cost_function` can access variables `shifted_mid_vol1` and `mid_vol0` that we defined in the top level (global) scope of the notebook:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def cost_function(x_trans):\n", " # Function can use image slices defined in the global (notebook) scope\n", " # Calculate X_t - image translated by x_trans\n", " unshifted = fancy_x_trans_slice(shifted_mid_vol1, x_trans)\n", " # Return mismatch measure for the translated image X_t\n", " return correl_mismatch(unshifted, mid_vol0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "# value of the negative correlation for no translatino\n", "cost_function(0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "-0.44628693638267175" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "# value of the negative correlation for translation of -8 voxels\n", "cost_function(-8)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ "-0.99703080735234673" ] } ], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we get a general optimizing routine from the `scipy` Python library. `fmin_powell` finds the minimum of a function using [Powell's method](https://en.wikipedia.org/wiki/Powell%27s_method) of numerical optimization:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.optimize import fmin_powell" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We pass the ``fmin_powell`` routine our Python cost function, and a starting value of zero for the translation:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fmin_powell(cost_function, [0])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Optimization terminated successfully.\n", " Current function value: -0.997032\n", " Iterations: 2\n", " Function evaluations: 27\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "array(-7.996026691215329)" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function ran, and found that a translation of very nearly -8 gave the smallest value for our cost function." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What actually happened there? Let's track the progress of `fmin_powell` using a callback function:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def my_callback(params):\n", " print(\"Trying parameters \" + str(params))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "`fmin_powell` calls this `my_callback` function when it is testing a new set of parameters." ] }, { "cell_type": "code", "collapsed": false, "input": [ "best_params = fmin_powell(cost_function, [0], callback=my_callback)\n", "best_params" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Trying parameters [-7.99501254]\n", "Trying parameters [-7.99602669]\n", "Optimization terminated successfully.\n", " Current function value: -0.997032\n", " Iterations: 2\n", " Function evaluations: 27\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "array(-7.996026691215329)" ] } ], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The optimization routine `fmin_powell` is trying various different translations, finally coming to the optimimum (minimum) translation of very nearly -8." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "More than one parameter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How about adding y translation as well?\n", "\n", "Our optimization routine could deal with this in a very simple way - by optimizing the x translation, then the y translation, like this:\n", "\n", "* Adjust the x translation until it has reached a minimum, then;\n", "* Adjust the y translation until it has reached a minimum, then;\n", "* Repeat x, y minimization until the minimum for both is stable.\n", "\n", "Although we could do that, in fact `fmin_powell` does something slightly more complicated when looking for the next best set of parameters to try. The details aren't important to the general idea of searching over different parameter values to find the lowest value for the cost function." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def fancy_xy_trans_slice(img_slice, x_y_trans):\n", " \"\"\" Make a new copy of `img_slice` translated by `x_y_trans` voxels\n", " \n", " x_y_trans is a sequence or array length 2, containing the (x, y) translations in voxels.\n", " \n", " Values in `x_y_trans` can be positive or negative, and can be floats.\n", " \"\"\"\n", " x_y_trans = np.array(x_y_trans)\n", " # Resample image using bilinear interpolation (order=1)\n", " trans_slice = snd.affine_transform(img_slice, [1, 1], -x_y_trans, order=1)\n", " return trans_slice" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "def fancy_cost_at_xy(x_y_trans):\n", " \"\"\" Give cost function at xy translation values `x_y_trans`\n", " \"\"\"\n", " unshifted = fancy_xy_trans_slice(shifted_mid_vol1, x_y_trans)\n", " return correl_mismatch(unshifted, mid_vol0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do the optimization of `fancy_cost_at_xy` using `fmin_powell`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "best_params = fmin_powell(fancy_cost_at_xy, [0, 0], callback=my_callback)\n", "best_params" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Trying parameters [-7.99501254 0. ]\n", "Trying parameters [-7.99602669 0. ]\n", "Optimization terminated successfully.\n", " Current function value: -0.997032\n", " Iterations: 2\n", " Function evaluations: 133\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "array([-7.99602669, 0. ])" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "(You probably noticed that `fmin_powell` appears to be sticking to the right answer for y translation (0), without printing out any evidence that it is trying other y values. This is because of the way that the Powell optimization works - it is in effect doing separate 1-parameter minimizations in order to get the final 2-parameter minimization, and it is not reporting the intermediate steps in the 1-parameter minimizations)" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Full 3D estimate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we know how to do two parameters, it's easy to extend this to six parameters.\n", "\n", "The six parameters are:\n", "\n", "* x translation\n", "* y translation\n", "* z translation\n", "* rotation around x axis (pitch)\n", "* rotation around y axis (roll)\n", "* rotation around z axis (yaw)\n", "\n", "Any transformation with these parameters is called a *rigid body* transformation because the transformation cannot make the object change shape (the object is *rigid*).\n", "\n", "Implementing the rotations is just slightly out of scope for this tutorial (we would have to convert between angles and [rotation matrices](http://en.wikipedia.org/wiki/Rotation_matrix)), so here is the 3D optimization with the three translation parameters:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make it a bit more interesting, shift the second volume 8 voxels on the first axis, as we did for the 2D case. We will also push the image 5 voxels forward on the second axis:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "shifted_vol1 = np.zeros(vol1.shape)\n", "shifted_vol1[8:, 5:, :] = vol1[:-8, :-5, :]\n", "plt.imshow(shifted_vol1[:, :, 17])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAAD+CAYAAADxoQNSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXuMXdWV5r/lMo4xEBwHsI2xMUkwyRDeCo8GQoPsThpo\n0kIRTKRMUJQgRemkMxlNhHukJOo/Rh34p2ekUaTRTCdCqJUh6Z7wSI+mbUjcySiKB6ZtYhu/MDbY\nBJd5mxjb2HjPH3Xr8J2PuqtOlevWve7z/STEObXPOftxzvZda6+114pSCowx7WFGvxtgjJlePOmN\naRme9Ma0DE96Y1qGJ70xLcOT3piWcVyTPiI+HRFbImJ7RNwzVY0yxvSOmKydPiKGAGwFsBzACwCe\nAPC5UsrmqWueMWaqOZ5f+isBPFNK2VVKOQLgfwD4zNQ0yxjTK2Yex72LAOym8z0AruILIsLufsb0\niVJKjPX34/ml94Q25gTkeCb9CwAW0/lijPzaG2MGmOOZ9E8COD8ilkbELAB3AnhkappljOkVk9bp\nSylHI+JrAP4RwBCAv/HKvTGDz6RNdo0e7oU8Y/pGLxbyjDEnIJ70xrQMT3pjWoYnvTEtw5PemJbh\nSW9My/CkN6ZleNIb0zI86Y1pGZ70xrQMT3pjWoYnvTEtw5PemJbhSW9My/CkN6ZleNIb0zI86Y1p\nGZ70xrQMT3pjWoYnvTEtw5PemJZxPGmtpoX3ve99tfNjx45VxxH1YJ8zZrz7b9jQ0FCt7J133ula\nRxYRmMu0vqwtfM7XaTu1br5W+8Dn+kw+5+crR48e7fpM7UPWdy6bSERlfc5k0Pq4v9lYa93ZN8HX\n6nhqHU3bmfV95sx3p6K+I74veyb358iRI13r8i+9MS3Dk96YluFJb0zLGHidPtPflEyP7nad1qF6\nNOtXmW6n9Z100kld68/a0lRv13Zm+iLretm6hPYvGxd+JuujWqZMhU6f9WEi74/7N2vWrFoZ9yF7\nD/qes7HmtukYNR0znQ98ns0NZtyrIuIHETEcERvob/MiYnVEbIuIVRExt1Ftxpi+0+Sfhh8C+LT8\nbSWA1aWUZQAe75wbY04AGiWwjIilAB4tpVzUOd8C4IZSynBELACwppTy0THuO+4ElieffHLtnNs7\nERE+IzP5ZKJVdh+jZSwOZ+Ja1gd9poq1TCZyMpM12Wnd3LZszFSknYyoqmSm08zcpeOZmSSbqpiZ\nGqJk39Jk2nL48OEpT2A5v5Qy3DkeBjB/ks8xxkwzx72QV0opTkltTH85duxYY6ehyf7Sj4r1iIiF\nAPZN8jnGmClgxowZmDlzZvVfxmR/6R8BcBeAezv/f2iSzxmXzJSRmWCytQodlMysk+nDmatmpp82\n/Rc5WwtQuJ1NdU6tYyK6K6P3cVsyfV/h+rK6M503699E1laytYfJmob5Wn2X2fearcM0XQNimpjs\nfgTg1wAuiIjdEfFFAN8DsCIitgG4qXNujDkBGPeXvpTyuS5Fy6e4LcaYaWDgPfKUpmJQJopnu5ia\nilJALlI39dpS0ZHF4cwMl+0wzK7NzFb6DN6ppbsdeQy1D5kaku1MbCoqZ1532X0TMeM2/Q4mohZk\nO+my99fUdNoU+94b0zI86Y1pGZ70xrSMRm64k374FDjt6O6npm6kEzEVTdZNtWm0momYwrIdY1kf\nmr7HLLLMREyLTfXaTAedSJSbrH/Z2gevS0xkjSTrX/aOuA8avSarv6m5uWk7jxw5MuVuuMaYExRP\nemNaxsCb7DJxOxOX1CTSVDzMdr1pGZtgJrI7j9uW9SFDzUGZaJwF4pyIOsM03RE3WY+8pl6L412b\n9YHry8y42Y7GzIw7WRUlC+DZNICIA2MaYyo86Y1pGZ70xrSMgdfps91rWeQV1SUzHTRz0c2e2XSX\nXRYgUeF1AnV95WcePny4a1uyhBaZS3DmzpoFv5w/vx5D5dVXX62OVbfkds6ePbvrMzPzYVaWrVlM\nJKBm0/oyd+9srCeyztN0J122I5XxL70xLcOT3piWMfAeeSoiZXHhWQSdSOx1HgMVqVk8VRGX61cx\nlp+jYjN7Gc6ZM6dW9vbbb1fHhw4dqpUtXry4On799de7tiUT77WMA4/qWDfN5/bWW2/Vyvg5+kyu\nX70tsz6wOqPj0q3NQH08J5K3oBe57DKzXFNvPR0XHl8uO3jwoD3yjDEjeNIb0zI86Y1pGQOv06vO\nm0WkaRqVZSJ9Zj1J23LKKadUx2+88UatjPVVTdjB7d6/f3/XurV/Bw8erI4zN1zVlU877bQxnwHU\nx0XLmprQTj311FrZeNFYR1E9lu/TvvOaSVamayuZmZPr//3vf9+ozUD925pIHr/su+M+8TqE1pdF\nWtJxsE5vjAHgSW9M6xh48V5F1SwFNIs3medS5gnGojBQF99UdGRxOBNp1cSUxVufN29edczqAwAs\nWLCgOv7gBz9YK2MT4dKlS2tlfO3LL79cKztw4EDXsmeffbY63rt3b62M+/7+97+/VpaJyixiqxjL\nqpSapvid6bvl/mXfR2ZyZS9CoD4uE4mzz33KAmxk6lIWE79pnjub7IwxFZ70xrQMT3pjWsbA6/Rq\nJsuinbD+r/1iXXLu3Lm1Mta51bzGuqTqqqw/qsmO9bkPfOADtbLPfOYz1fFVV12FbuzYsaN2fuWV\nV475fAB47rnnqmM1A3I71WWW263rGW+++eaY1wH1cdm3r56/lNdIdMyeeeaZ6viss86qlfG75roB\n4LXXXquOVf/m/qqOzWOv60NZpB6+VtdkeAzVDJi59vK6SxaNJyvLIvzwdS+//PLkdfqIWBwRv4iI\nTRGxMSL+vPP3eRGxOiK2RcSqiJg73rOMMf2niXh/BMA3SykXArgawJ9FxMcArASwupSyDMDjnXNj\nzIDTJIHlXgB7O8e/j4jNABYBuA3ADZ3L7gewBj2Y+JnXVhZkgk0uQH2HmnqQsUjP4ieQ7+5iE94Z\nZ5xRK/vsZz9bHa9YsaJWxmL0888/XyvjOjZu3FgrY3Oeqi8sjqpozM9UMZ3HU8eaRfPMFKYqGN+n\nKsP1119fHet7YLFZy1hlUJPWQw+9myldzY7aX4a/HxX9uQ/aFlZLVH1h8TtTC7Q+/l6zIC8TyUXY\njQkt5EXEUgCXAVgLYH4pZbhTNAxgfpfbjDEDRONwWRFxKoC/B/CNUsqb8q9PmYpFO2PM5HjnnXfS\nsNdMo0kfESdhZMI/UEoZlaWGI2JBKWVvRCwEsK/7E4wxvWRoaCjdtMOMa7KLkZ/0+wG8Ukr5Jv39\nvs7f7o2IlQDmllJWyr3H/euv+hST7ThasmRJ1/tefPHF2jnrV5lJ5JJLLqmVffKTn6yOL7zwwlrZ\nJz7xier44YcfrpWxTrhu3bpa2Zlnnlkdq77P7+qaa66plfG1qseyrqc6L7vQ6loA66Cq07Mez+Y0\noD6GakJjPVrLWFffs2dP13aqSYtNsDpmu3btqo51fYHbqZGIXnnllepYv7PTTz+9Otb5w+Okv7y8\nPqSm0yzSUpZ4o9tOyEOHDnU12TX5pb8WwOcB/DYiRr/QvwDwPQA/jogvAdgF4I4GzzLG9Jkmq/f/\nB90X/JZPbXOMMb3mhIt7z+huuUWLFlXHGhCCvbhUfOJzFeHvvPPO6viWW26plbEo95vf/KZWxvXr\nbjnevaZeaezdpp58O3furI5Xr15dK2O1QL0K+ZlqXmMxU8XRzITGZZk4qmIs65pqtuL69T7eYaim\nMFbr9Ju4+eabx3w+kJt4WQXMRH9F281wf1Vl4HM1nTbNR5DtLGXse29My/CkN6ZleNIb0zIGfped\n6mjc3jvuqBsMWFdWd1q+T3dp3XfffdUxu88Cdf14y5YttbKtW7eO+XwAOOecc6pjjTrD6xRsUgLq\nep/uXmNXX23LwoULu7aF+8uuvEDdjVRdSjMXVq5D3WL5nemaDPdPdwOyXsvjB9TNiVof69hqqmU9\nXnVzXndRfZjXEFSH52vVDMgmUX1Hu3fv7tqHbCddZnPvRmay8y+9MS3Dk96YljHwJjs1X7Dnkppu\ntm/fXh2rCYb5/ve/Xzu/++67q+M1a9bUylgEZU8soO6JpmoIB7VQLyo2m6l5jUVOfSarLyrGch3q\nzcappDN1TsVKNTV2Q0V4FqnVNMX91f6xyPvCCy/UyrJ022wm0/pYpFdRnNFviccwC3qq9bHpVO/j\ndqppj7/XrD4d68z7seszGl1ljPkXgye9MS3Dk96YljHwJjt1/zz77LOrY9WndAcZ85WvfKU6/u53\nv1srW7t2bXWsei2bbnRHHK8vqBmQTVOqv7FpTF1ReTeZ7gYcHh6ujrOc8FkCDTXD8c6vLJedrmdk\n3w3vesuSQWh9fK56O+uyakLj8Tz//PNrZfxetM3cFv2Wsrz2/N51TYbXM7I8d7ozkdeONGISo2tc\n3E5e13EuO2NMhSe9MS1j4E12mpeNxdosyKOKebfffnt1/NJLL9XKeDfbpk2bamW/+93vqmMVVbN8\nblymYiV71qkXHHvhqamPzUpq7mKTj5raWHRUMTZL/c3o7rwslj57nqlorDn4GDapqRcj16eqFI+F\nqgysPmV54FRM5z7pO+IxzPIiqnjP55p7gb9XjaW/bdu26li98/i9ZDv8GP/SG9MyPOmNaRme9Ma0\njIHX6XUnFu+2yvKPaZQb1oXUTZVNY7oLjd1B1czCLp7sfgnUd72pHs1rEeouzNeqaYp1Qo0Ck5ns\nVEdkeJ1Cr2PzkK5nZJFzMj2Tz7MIMarzZgEnub/aB14H0eQoWd45NlGqvs9rQvqOuG1s7tVrsyQu\ny5Yt6/pM3ZXJ/dVndsO/9Ma0DE96Y1rGwIv3aoJhMV299VgM0jJWC9TMcsEFF1THbG7S52hbWCRU\n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\nRK5CYII=\n", "text": [ "" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We define resampling for any given x, y, z translation:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def xyz_trans_vol(vol, x_y_z_trans):\n", " \"\"\" Make a new copy of `vol` translated by `x_y_z_trans` voxels\n", " \n", " x_y_z_trans is a sequence or array length 3, containing the (x, y, z) translations in voxels.\n", " \n", " Values in `x_y_z_trans` can be positive or negative, and can be floats.\n", " \"\"\"\n", " x_y_z_trans = np.array(x_y_z_trans)\n", " # [1, 1, 1] says to do no zooming or rotation\n", " # Resample image using trilinear interpolation (order=1)\n", " trans_vol = snd.affine_transform(vol, [1, 1, 1], -x_y_z_trans, order=1)\n", " return trans_vol" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 37 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our cost function (picking up `vol0`, `shifted_vol1` from the global scope):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def cost_at_xyz(x_y_z_trans):\n", " \"\"\" Give cost function value at xyz translation values `x_y_z_trans`\n", " \"\"\"\n", " unshifted = xyz_trans_vol(shifted_vol1, x_y_z_trans)\n", " return correl_mismatch(unshifted, vol0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 38 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do the optimization of `cost_at_xyz` using `fmin_powell`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "best_params = fmin_powell(cost_at_xyz, [0, 0, 0], callback=my_callback)\n", "best_params" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Trying parameters [-7.57216655 -4.96610483 0. ]\n", "Trying parameters [-7.9967514 -4.99966753 0. ]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Trying parameters [-7.99998292 -4.9999992 0. ]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Optimization terminated successfully.\n", " Current function value: -0.995145\n", " Iterations: 3\n", " Function evaluations: 270\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ "array([-7.99998292, -4.9999992 , 0. ])" ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we make a new volume from `shifted_vol1` with these transformations applied:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "unshifted_vol1 = snd.affine_transform(shifted_vol1, [1, 1, 1], -best_params)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, axes = plt.subplots(1, 2, figsize=(10, 20))\n", "axes[0].imshow(vol0[:, :, 17])\n", "axes[0].set_title('vol0')\n", "axes[1].imshow(unshifted_vol1[:, :, 17])\n", "axes[1].set_title('unshifted vol1')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nubPO1p/Nxa42PfPMMzr44IP3GCv2n9fP4Oc59xwTXn/Hjh3V3Gbtyfq7t/mZDB7bW6h719xmY8O2\nZ21jX3j9qV5vV/uyfdTl6aefnvK5M8yU/Nchhxyy13niuHBcOQ9cw3s0KJFEZD4iax/tvusi2zOT\nrbtnn31W8+bNm9L9CH0Kr5/ts+x4KWXK/rXPHpgKbMve/NOu9vE425OtrWyt9vXPHLtsfLLv1r5z\nyf4+++yzeaOHZJhv4QfVyWI6+PceWZt37NixeyLmzJnT+yHCGDO+7Ny5s7ejHROm5L+2b9+unTt3\n7nbu9l/GPDcZ5mHpVkmnRsRSTSTmeof+sW7YbubNm7fXp2M62b6/MWe/iWVP4xGhnTt37r7u3t6e\n7K29rbcp2ZuR7Ld/MuyTd/ZbYzZWPH9X37tfJK37Z9ebrrchvN+u//ftb/ZbOml9ie6tbxGhOXPm\n9H6jkK3T7DdyMpXfwPd2/pw5c6rrZ7/hjhFT8l9z585VKWVKb8azNZSdn+2JvfmbXeuI96O96w3P\nVGH7sj2avXnKxi/zGX19QvZmb9fbuF37p7V2p/vNUta3XW3f9f2Uvbln3w8++ODKZt/6rpXJ5mbX\nf9327u38vm++Mh80E7+07PPDUille0R8QNJXJM2V9Od7+0uScf5tbJzbJrl9wzDObZPcvplktvgv\nabzbN85tk/JfJGaacR6/cW7bKBhKDFNK+bKkL2fnjfOgerMMxzi3b5zbJnntzTSzwX9J472Oxrlt\nkts3DOO+L6ab51ZvjTHGGGN6MtLacBFRDj300N12FpPO4paMq1KrkV0/i7lnOp+MbnsYY870T1lf\nsxh3FmPu+9cPfXUy2Trqe7+svVnMPmtftlb6zn23fX31ZVlf+2pfyFS1L3u7Xp+1/PTTTx8oqQNS\n6L+yPTrJ53vdL1sH2brqu8czfzrMX4ROdv3sLcmwf+3c96/hWt8H2diyrdOtqen73Zh9PwyrAer7\nl5VkWL1y1r7p/ivcyXyY3ywZY4wxxjTww5IxxhhjTAM/LBljjDHGNBh5auiWlqN17mRkOpW+mqeM\nvhltW1lE+2bX7ZtLZ1gNUqbvyu6XaZayPBxTyYnVsvn5LENs1j7OZd88VC366qeytvfViw2bEZxM\ndw6acaKVH6bvOJJsT2c6mb57YliNE8k0T6SvJrSvDmfYqgnd9vXNg8d7Z23J+pL1va/erO9a6qvH\n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\nRxP1CYz/s87SDTfcUNnMmUJ9AzU5jBEzpsyYNGPMjCETjjWvxxgyz2f7GZPm53k+r5etrbPOOqv5\nebafegbqJ6gJ6NpsC23qG9j3LK8SyeoqZcVfOdfZXM3mvEqklc+FujfWJmN+LdYDy9YJNUnveMc7\nKvuyyy6rbOpK/v7v/77ZHuoI77333sqmhom11Jgbbu3atZW9fPnyyqbPo7aP16fGiD6Kupks1xGP\nt3QzPDfbE1lbWEeU/i2r7fnmN7+5eb8sxxe/fzJNE2F/SObPM31f5vPoM7Pvp1HgN0vGGGOMMQ38\nsGSMMcYY08APS8YYY4wxDUaeZ4lx6S5XXHFFZTN30K233tq8PjUAf/RHf1TZrIXEtnz/+9+v7E2b\nNlU2NUonn3xyZVMn1OWBBx6obMZYqb+aP39+Za9atap5PMurwfMZc2aMmpqmTEdDvQP7R/0EY9rU\nT1ATwPZzbTCmz/FkjhtqT6iPyGLyxx9/fLM93f5Qy8F73XHHHZXNnCxZniPOBfUL1ANkteOyGo1s\nTyvnybZt22ZVnqXuOqOvvPLKKyubmh/WduPnh/Vfq1evruy77rqreT+uYfo7rgPm9uEe5rqmrpLt\nW7hwYbN9HA/mVmO9MtpZ/TTejzqY7lxzLNh37n/uCY41c0Lx3vTH9F/c4/T39Kf0x9RM8X5Z7Utq\nNjm3/L7L6vjRh9H/98V5lowxxhhjZhg/LBljjDHGNPDDkjHGGGNMg/2aZ4lxUOaCuOWWWyqbMWlq\nKf7sz/6ssn/5l3+5eT3mzqEGgLoXajVYr4xx5G7/mCOEfWEMnNdmzhbGxBlDZl4njhVjutQoMcbM\nPE2MOTPGzRh0Vvcv0zQxLwjvz7HP1gr1GdRX8HyuTeozSLd/jL/zXqzZxfPZF+oROBbZWLdquUl5\nrTmuvedSnqXuWHNPcE/94Ac/qGyuIfKJT3yisn/pl36psm+66abKpk6G9bzo36jro4/hvNNn0T9y\nHfL61GxRd8P7UatHnWK2zjIdZQZ1SV2fwjXPsWDf6T8ffPDByuaepf+jZpL3p0aJ36WEa5NjzfYS\n3p85svh5tp8290J2f85NVktuf+A3S8YYY4wxDfywZIwxxhjTwA9LxhhjjDENRp5nqRtbzXIFMSbP\n4+9///sr+3d/93cr+zvf+U5lM+66aNGiyqamiZoE6oIYp6ZuppsnhDFuxpipH2COEcaceT3em3WQ\nqEliDJnHOdZHHHFEZTOGzJwmS5curWy2P8uDQT0E544xbuozGBM//fTTK5vjm9UV5HhwvBgz764N\nrhP2jWPLsWFOFrad+cG4hzN9F4+38iZNRuv4E088MavyLHX3Ff1HpiMkv/Irv1LZv/M7v1PZN998\nc2VzDTJXzooVKyqb/ovrhrpA+oRMV8l1S10h887x+tTpcN0yrxJ9DPdg5jOo6cq+67q1PrN6ibw3\nbfaVe4Z5jjj2p556amVzLtkXto9jweNsD9dO9n2T1bekf+Z3+8qVK9WCPortp/9m+4bFeZaMMcYY\nY3rihyVjjDHGmAZ+WDLGGGOMaTDyPEsnnXTS7n8zBs3cEYyRsxbb5ZdfXtnUCDDmTU0SY+yEuhfW\n+Mry4XQ1WYwxM+8GY8a8NmPevBdzimQxasZ4GXNmexgzZq4gwhwzvD7zQFGnw5g5Y/qZZoo6Iep+\nCNca20N9Btcqx7e7djg3nEtqLzjW1LdRD8b4POs0UevC/DnZ/bO8TJmebDbRHXtqcLgGOQ7Unbzt\nbW+rbOZ1o79hDcENGzZUNnU1mTaOxzmv3OP0Ocw1luVy456kf+U+yeqtZTULCdd9ltuoW9+M/ob+\ni3DPMq8b783vh0znSH+V5Uaj5ijTp3Gs2Z5sz9Pu6r+kPfcCfdCaNWsqm/6Vc5nV8hwFfrNkjDHG\nGNPAD0vGGGOMMQ38sGSMMcYY02DkYoNuXJ86EsZZGSf+2Z/92cpmjJ4xfNrUeqxdu7ayqUNhzPy4\n446rbOY5YVy5ez32lW2n3irTtTBmTV0KY7z8PK9P/QBj1LSZQ4UxbOoP2L6+tYGynFxZTJ/ty3K+\nZBoqxuCpG+rOJ+eW+gLmf8lqiFFTdNppp1U2+8Y6UFkOmCwPE8eec3fiiSfu/veqVas0m+j6BO5p\nzivX4GWXXVbZ3KOcJ2oqqcGk7pG5bOjPWM9r4cKFlc09Qg0W1yXPp66Q64LrKsuzRJ9F6EMz7R3P\n5z5pafuyWmfZHqG/yPZcNhaZf+JazHxOVheVc8v28ruQ53N8uDaWLVvWvP66desqO5vr/UH6Ziki\nToiIr0XEHRGxMiI+OPj50RGxPCLWRMT1EXFUdi1jjNmf2H8ZY6aDqYThnpX0L0spZ0p6maRfi4gz\nJF0taXkpZZmkrw5sY4wZJ+y/jDFDkz4slVI2lVJuG/z7cUl3Slos6XJJ1wxOu0bSFaNqpDHG7Av2\nX8aY6aCXZikilko6T9LNkuaXUnYJWTZLmj/ZZ7p6CcYdqYth3JZxWcbQGYdlHJQxfp7P9jBmT00B\nNQHUFHTjqIwZM+9GFqNmvJ3n8/rUE/S9Psean+f5jKEzDwbbk9VxYo4ZXp/nsxYeyWLa1Jdkeauy\n+ejG3Hku9QzUB3AuqdeiXoLx/5e+9KXN48yPw7Hl/akdzOpcZbXkxoVh/Rc1R1yDWb1Gap7o/6hF\n6+b9mex63FOcR2qgmNuH64xrnuuWPozHM10Nx2fYXDn0OVz3WX6w1r7i3GS1NfndQjg2mcaScI9R\nczSMv5JyzRPJ1gL1cszrRJ9y3nnnNe9HHehY51mKiMMk/XdJHyqlVLu+TMzE6CryGmPMENh/GWOG\nYUpvliJiniYczadKKdcNfrw5IhaUUjZFxEJJD0322e4T5c6dO2dExW6MGQ3bt2/f4y8lx41h/Ff3\nbbb9lzHPXaby13Ah6c8lrSql/Gnn0BclXTX491WSruNnpYlXx7v+s6MxZnZx0EEHaf78+bv/GzeG\n9V8veMELdv9n/2XMc5dgLHOPEyJeJekbkr6vf3xV/a8kfUfSZyUtkbRO0pWllEfx2dKtT0Rnw9pF\nb3zjGyv7F37hFyo70xBlcWPGSakh4PUZ42ccuJXbKKvDxLbQ5rWzeHumN2DMmzF56gvY1ywXUN96\nYrxf1n6ODzVGGRwvjkfWfmoEOL/dmDqPZRog6heovcj0Zdlc3XfffZXNdc6xJmw/79/VJ6xevVql\nlLpBM8iw/qubL4fjTH/z+te/vrKvuuqqyuYbOOam4fXoLzkPzAvH6zHvXOb/eD/612wdc91yT1Pn\nQzvT1XCdUsNFn0DdDXUzLR+Z1V7Lamtm+ly2PatVSZtkGlO2l/pcrqUs9xpt9i9rH9cO/SvXJvV7\nzMPEuR2WyXxYGoYrpXxLe38DdcmwjTLGmFFh/2WMmQ4OjD9jMcYYY4yZIfywZIwxxhjTYOS14bpx\nYcaBGbd85zvfWdnU7WS5IRjnZB4OxuB5/azeGu/H87vtY/ycMWf2nXWemHeI8X+2pW/tM8acObZZ\n3ibG2DlWmQYo0zRxbLPPZ3WouBb4ebafGgTqkKgP6c4H9QEca7aN+oJML0EOP/zwyqYeguueY53l\naOFYcG1Ot15gnOjuG44D5/k973lPZVM7xj3INcvz6UOYn4twjXIPZT6E7cvqPdKm/2WunSz3D/uf\n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\n7MpatVnS/D0+ZYwx44F9mDFmKJoPSxHx05IeKqWskDTpb4tl4pGx/XrKGGNmAPswY8x0kKUOeIWk\nyyPizZKeJ+mIiPiUpM0RsaCUsikiFkp6aG8X6L5uK6Wkf4JtjDlw2L59+x6v+MeMoXxYN1xy0EEH\npeFpY8zspLnzSym/Jem3JCkiXivp/yilvDci/kjSVZL+7eD/1+3tGt1Y6Jw5c6pYMB+cvv71r1c2\n45oXX3xxZTOGn8WZN2zYUNnUBLCGFuOsjJvyeEu3kukD+IXDGC5znmS1frIcLaxjleXh6JuzKtO5\ncOwYsyeca7Y3y7nCuc30EH31E637Z1qRrE4gNUtZjpZjjz22su+8887m9TN9GfvaPT537tzq81w3\nM82wPqzb94io5o7jdtNNN1U25+VVr3pVZTMXGdcQ9xBryVHXQX+W+UPOc996W9meY6076iK5jtkf\n+sCWVm4yqAHL6rV1x4t9y/xXpimindVrzDSVmT+iTpG06ppOZhOuraz2KHMScjw498yrxNxwWd6+\nUdA3z9KuFfJvJF0aEWskvW5gG2PMuGMfZozpzZTfKZdSvi7p64N/b5F0yagaZYwx0419mDFmX3EG\nb2OMMcaYBiNXK3bjyozrMk65adOmymbeo7POOquyGVelJon11bJaRIypk0wT0I0DZ3kjqB/gtfj5\nLA8T4/fsK2PiWZ0k3o85W9gfkmmoCDVJjMH3qesk7anxItTWcDwZY6eeg+NBfUTrWswJwrYzPw2P\ncyypfeHccy1l8f5Ms0Q7044cyHTnNatv9dBDtUac9RmZd4nzwFporKXGeb///vsrm2ue88T6X1xX\n3BP0GVk9tExjxD3C/vN6bG/mE/vmCmrVcKSmk99dHCvugUxTmeU5ympZ8v68H30Or5fVsiNc69l3\nJc/Pvg+OOeaYymZ7uRaz/JCjwG+WjDHGGGMa+GHJGGOMMaaBH5aMMcYYYxqMXLPU1aJQq8GYMXND\nrFu3rrJXrVpV2S972csqmzF7ns+4L+Ou1H5kuTGoY+nm5sni6VkeC56f5U2iHiCLQVN/wc/z+tQP\nZBoe3p8x9SxPEWPSjHnzeJarKNPZ8PqM+VN/wf53r3/88cdXxzjXvBa1Lq1rS/laYo4o7gten2OR\n3Z/3o75gNtHVsnGNE/qTe+65p7KZ7+rlL395ZdM/8vPZuHOPcV6Zf4s6EO5B7gH6CGqIstprmW6R\n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\nYxr8/y+WjXzmVzMMAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 41 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting stuck in the wrong place" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far, all our cost function plots are simple, in the sense that they have one single obvious minimum. For example, here is a repeat of our ealier plot of the negative correlation value, as a function of translation in x, for the shifted single slice:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "correl_mismatches = []\n", "translations = range(-25, 15) # Candidate values for t\n", "for t in translations:\n", " unshifted = x_trans_slice(shifted_mid_vol1, t)\n", " mismatch = correl_mismatch(unshifted, mid_vol0)\n", " correl_mismatches.append(mismatch)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(translations, correl_mismatches)\n", "plt.title('Cost as a function of $t$')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 43, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 43 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice the nice single minimum at around $t=-8$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Unfortunately, many cost functions don't have one single minimum, but several. In fact this is so even for our simple correlation measure, if we look at larger translations (values of $t$):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "correl_mismatches = []\n", "translations = range(-60, 50) # Candidate values for t\n", "for t in translations:\n", " unshifted = x_trans_slice(shifted_mid_vol1, t)\n", " mismatch = correl_mismatch(unshifted, mid_vol0)\n", " correl_mismatches.append(mismatch)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(translations, correl_mismatches)\n", "plt.title('Cost as a function of more $t$')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 45, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that a minimum is a value for which the values to the left and right are higher. So, the -8 value of $t$ is minimum (with a negative correlation value of -1), but the value at around $t=44$ is also a minimum, with a negative correlation value of around 0.2. The value at $t=-8$ is a *global minimum* in the sense that it is the minimum with the lowest cost value across all values of $t$. The value at around $t=44$ is a *local minimum*.\n", "\n", "In general, our optimization routines are only able to guarantee that they have found a local minimum. So, if we start our search in the wrong place, then the optimization routine may well find the wrong minimum.\n", "\n", "Here is our original 1 parameter cost function (it is the same as the version above):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def cost_function(x_trans):\n", " # Function can use image slices defined in the global (notebook) scope\n", " # Calculate X_t - image translated by x_trans\n", " unshifted = fancy_x_trans_slice(shifted_mid_vol1, x_trans)\n", " # Return mismatch measure for the translated image X_t\n", " return correl_mismatch(unshifted, mid_vol0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 46 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we minimize this cost function with `fmin_powell`, but starting nearer the local minimum:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fmin_powell(cost_function, [35])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Optimization terminated successfully.\n", " Current function value: 0.241603\n", " Iterations: 2\n", " Function evaluations: 55\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 47, "text": [ "array(43.00000063722926)" ] } ], "prompt_number": 47 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we took a very bad starting value, but we would run the same risk if the images started off much further apart and we gave a starting value of 0." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One major part of using optimization, is being aware that it is possible for the optimization to find a \"best\" value that is a local rather than a global minimum. The art of optimization is finding a minimization algorithm and mismatch metric that are well-adapted to the particular problem." ] } ], "metadata": {} } ] }