{ "cells": [ { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "## MP 573 Lecture 10: Recap of LSI, Fourier, Sampling\n", "##\n", "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from IPython.display import display, Image\n", "import matplotlib.image as mpimg\n", "from os.path import dirname, join as pjoin\n", "import scipy.io as sio\n", "from ipywidgets import interact, interactive, fixed, interact_manual\n", "import ipywidgets as widgets" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "## Create a spokes pattern\n", "N = 1001\n", "x = np.linspace(-10,10,N)\n", "y = np.linspace(-10,10,N)\n", "X, Y = np.meshgrid(x,y)\n", "RHO = np.sqrt(X**2+Y**2)\n", "THETA = np.arctan2(Y,X)\n", "f = np.greater(np.sin(THETA*100),0)\n", "f[np.less(RHO,0.5)]=0\n", "f[np.greater(RHO,9.5)]=0\n", "fhat = np.fft.fftshift(np.fft.fft2(np.fft.ifftshift(f)))\n", "imgplot = plt.imshow(f,cmap='gray')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def makeOTF(A):\n", " hhat = np.exp(-A*RHO/2)*np.cos(A*RHO) \n", " ghat = fhat*hhat\n", " g = np.fft.fftshift(np.fft.ifft2(np.fft.ifftshift(ghat)))\n", " plt.figure(figsize=(20,10))\n", " plt.subplot(1,2,1)\n", " font = {'weight' : 'normal',\n", " 'size' : 26}\n", " plt.rc('font', **font)\n", " imgplot = plt.plot(x,np.exp(-A*abs(x)/2)*np.cos(A*abs(x)) )\n", "\n", " plt.subplot(1,2,2)\n", " plt.rc('font', **font)\n", " imgplot = plt.imshow(abs(g),cmap='gray')\n", "\n", " return (g)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6000a9db07a845d29198cd6db7fd5b5b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=1.0, description='A', max=3.0, step=0.2), Output()), _dom_classes=('wi…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## Create interactive slide bar\n", "y = interactive(makeOTF,A=(0,3,0.2))\n", "display(y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }