Created
November 10, 2016 14:24
-
-
Save lhk/f05ee20b5a826e4c8b9bb3e528348688 to your computer and use it in GitHub Desktop.
transform 3D volume with scipy/numpy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "transformations.py:1900: UserWarning: failed to import module _transformations\n", | |
| " warnings.warn(\"failed to import module %s\" % name)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import scipy\n", | |
| "from scipy.ndimage import map_coordinates\n", | |
| "\n", | |
| "# this is code from here: http://www.lfd.uci.edu/~gohlke/code/transformations.py.html\n", | |
| "from transformations import rotation_matrix, translation_matrix" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "First in 2D:\n", | |
| "\n", | |
| "Create a meshgrid for the coordinates, stack it to create \"position vectors\", transform them" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f8298b4fb90>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "dim=100\n", | |
| "\n", | |
| "img=np.zeros((dim,dim))\n", | |
| "img[dim/5:dim/4,dim/4:dim*3/4]=1\n", | |
| "\n", | |
| "%matplotlib inline\n", | |
| "plt.figure(\"2d before trafo\")\n", | |
| "plt.imshow(img, interpolation=\"none\")\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# create a meshgrid for the coordinates\n", | |
| "line=np.arange(dim)\n", | |
| "coords=np.meshgrid(line, line)\n", | |
| "xy_coords=np.vstack([coords[0].reshape(-1), coords[1].reshape(-1)])\n", | |
| "\n", | |
| "# create a transformation matrix\n", | |
| "angle=30./180.*np.pi\n", | |
| "c=np.cos(angle)\n", | |
| "s=np.sin(angle)\n", | |
| "mat=np.array([[c,s],[-s,c]])\n", | |
| "\n", | |
| "# apply the transformation matrix\n", | |
| "# please note: the coordinates are not homogeneous.\n", | |
| "# for the 3D case, I've added code for homogeneous coordinates, you might want to look at that\n", | |
| "# please also note: rotation is always around the origin:\n", | |
| "# since I want the origin to be in the image center, I had to substract dim/2, rotate, then add it again\n", | |
| "xy_coords=np.dot(mat, xy_coords-dim/2)+dim/2\n", | |
| "\n", | |
| "# undo the stacking and reshaping\n", | |
| "x=xy_coords[0,:]\n", | |
| "y=xy_coords[1,:]\n", | |
| "x=x.reshape((dim,dim))\n", | |
| "y=y.reshape((dim,dim))\n", | |
| "\n", | |
| "# create a list for map_coordinates\n", | |
| "# ATTENTION: the coordinate system for map_coordinates seems messed up\n", | |
| "# it is necessary to reorder the dimensions like this\n", | |
| "# probably my fault, but I haven't figured out why, yet\n", | |
| "new_coords=[y,x]\n", | |
| "\n", | |
| "# use map_coordinates to sample values for the new image\n", | |
| "new_img=scipy.ndimage.map_coordinates(img,new_coords, order=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\nRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f8298b4f8d0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plt.figure(\"2d after trafo\")\n", | |
| "plt.imshow(new_img, interpolation=\"none\")\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Now the 3D case" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\nRK5CYII=\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f829683b610>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "dim=40\n", | |
| "\n", | |
| "vol=np.zeros((dim,dim,dim))\n", | |
| "vol[:,dim/5:dim/4,dim/4:dim*3/4]=1\n", | |
| "\n", | |
| "plt.figure(\"2d slice of 3d volume, before trafo\")\n", | |
| "plt.imshow(vol[0,:], interpolation=\"none\")\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "ax=np.arange(dim)\n", | |
| "coords=np.meshgrid(ax,ax,ax)\n", | |
| "\n", | |
| "# stack the meshgrid to position vectors, center them around 0 by substracting dim/2\n", | |
| "xyz=np.vstack([coords[0].reshape(-1)-float(dim)/2, # x coordinate, centered\n", | |
| " coords[1].reshape(-1)-float(dim)/2, # y coordinate, centered\n", | |
| " coords[2].reshape(-1)-float(dim)/2, # z coordinate, centered\n", | |
| " np.ones((dim,dim,dim)).reshape(-1)]) # 1 for homogeneous coordinates\n", | |
| "\n", | |
| "# create transformation matrix\n", | |
| "mat=rotation_matrix(0.1*np.pi,(0,1,0))\n", | |
| "#mat=translation_matrix(np.array([1,0,0]).transpose(1,0,2))\n", | |
| "\n", | |
| "# apply transformation\n", | |
| "transformed_xyz=np.dot(mat, xyz)\n", | |
| "\n", | |
| "# extract coordinates, don't use transformed_xyz[3,:] that's the homogeneous coordinate, always 1\n", | |
| "x=transformed_xyz[0,:]+float(dim)/2\n", | |
| "y=transformed_xyz[1,:]+float(dim)/2\n", | |
| "z=transformed_xyz[2,:]+float(dim)/2\n", | |
| "\n", | |
| "x=x.reshape((dim,dim,dim))\n", | |
| "y=y.reshape((dim,dim,dim))\n", | |
| "z=z.reshape((dim,dim,dim))\n", | |
| "\n", | |
| "# the coordinate system seems to be strange, it has to be ordered like this\n", | |
| "new_xyz=[y,x,z]\n", | |
| "\n", | |
| "# sample\n", | |
| "new_vol=scipy.ndimage.map_coordinates(vol,new_xyz, order=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f829699fe10>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plt.figure(\"2d slice of 3d volume, after trafo\")\n", | |
| "plt.imshow(new_vol[20,:,:], interpolation=\"none\")\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 2", | |
| "language": "python", | |
| "name": "python2" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 2 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython2", | |
| "version": "2.7.6" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 1 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment