Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# PSF/OTF Demo\n",
"\n",
"Here we use the cvpr_2022_itt package to do some of the basic Fourier optics things we'll be discussing"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already up-to-date: cvpr_2022_itt_pkg in c:\\users\\nchim\\anaconda3\\lib\\site-packages (0.0.29)\n"
]
}
],
"source": [
"!pip install --upgrade cvpr_2022_itt_pkg"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import cvpr_2022_itt_pkg as ez\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PSF Generation\n",
"\n",
"In these two examples, generate the point spread functions for both square and circular aperture shapes. We use our `phase2psf()` function that evaluates the fraunhofer pattern, takes the magnitude square, and tracks the sample spacing."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"T = 0.3 # the window width (meters)\n",
"N = 1025 # window width (pixels)\n",
"wvl = 550e-9 # wavelength (meters)\n",
"D, f = 0.0033, 0.05 # aperture diameter (meters), focal length (meters)\n",
"\n",
"# Generating the aperture\n",
"ap = ez.shape_mask(ez.linspace(-T/2, T/2, N), shape='square')\n",
"\n",
"# Generating the point spread function and show it\n",
"xx, yy, psf = ez.physics.phase2psf(ap, T, D, f, wvl, mask='square')\n",
"plt.imshow(psf, extent=[xx[N // 2, 0], xx[N // 2, -1], yy[0, N // 2], yy[-1, N // 2]])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"T = 0.3 # the window width (meters)\n",
"N = 1025 # window width (pixels)\n",
"wvl = 550e-9 # wavelength (meters)\n",
"D, f = 0.0033, 0.05 # aperture diameter (meters), focal length (meters)\n",
"\n",
"# Generating the aperture\n",
"ap = ez.shape_mask(ez.linspace(-T / 2, T / 2, N), shape='circle')\n",
"\n",
"# Generating the point spread function and show it\n",
"xx, yy, psf = ez.physics.phase2psf(ap, T, D, f, wvl, mask='circle')\n",
"plt.imshow(psf, extent=[xx[N // 2, 0], xx[N // 2, -1], yy[0, N // 2], yy[-1, N // 2]])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Varying wavelength and PSF size\n",
"\n",
"In this example we show slices of PSFs with varying wavelengths. The most narrow PSF corresponds to a smaller wavelength, and the largest PSF corresponds to the biggest wavelength. Note that we don't give the `phase2psf()` function a propagation distance. This is because we want the sample spacing in the focal plane."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"T = 0.3 # the window width (meters)\n",
"N = 1025 # window width (pixels)\n",
"D, f = 0.0033, 0.05 # aperture diameter (meters), focal length (meters)\n",
"\n",
"wvl_arr = ez.linspace(400e-9, 800e-9, 5) # wavelength array (meters)\n",
"\n",
"# Setting up the for loop to vary the wavelength\n",
"for i in range(len(wvl_arr)):\n",
" color_i = [i/len(wvl_arr), 0.2, i/len(wvl_arr)] # for visualization, plotting the lines as varying colors\n",
" \n",
" wvl = wvl_arr[i]\n",
" \n",
" # Generating the aperture\n",
" ap = ez.shape_mask(ez.linspace(-T / 2, T / 2, N), shape='circle')\n",
" \n",
" # Generating the point spread functions and plotting them\n",
" xx, yy, psf = ez.physics.phase2psf(ap, T, D, f, wvl, mask='circle')\n",
" plt.plot(xx[N//2, :], psf[N//2, :],\n",
" color = color_i, lw = 3, label='wavelength = {:.3E}'.format(wvl))\n",
"plt.xlim(-1.22*np.amax(wvl_arr) * f/D * 3, 1.22*np.amax(wvl_arr) * f/D * 3)\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## OTF Calculation\n",
"\n",
"In this script, we do both circular and square OTF calculations. We do these within the same script for the sake of direct comparison. We then follow this with the full visualizations of the OTF calculation.\n",
"\n",
"Note that the sample spacing for the OTF is divided by the cutoff frequency. This is to normalize the OTF plot so that the point where the OTF vanishes occurs at 1."
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"T = 0.3 # the window width (meters)\n",
"N = 1025 # window width (pixels)\n",
"wvl = 550e-9 # wavelength (meters)\n",
"D, f = 0.0033, 0.0033 # aperture diameter (meters), focal length (meters)\n",
"\n",
"fcutoff = D/2 / (wvl * f) # cutoff frequency\n",
"\n",
"# OTF calculation for a square aperture\n",
"ap = ez.shape_mask(ez.linspace(-T / 2, T / 2, N), r=D/2, shape='square')\n",
"xx, yy, otf = ez.physics.otf_calc(ap, T, D, f, wvl)\n",
"plt.plot(xx[N//2, :] / (2 * fcutoff), otf[N//2, :], lw=3, label='square aperture') # The /2 is intentional!! See Goodman Fig. 6.8\n",
"\n",
"# OTF calculation for a circle aperture\n",
"ap = ez.shape_mask(ez.linspace(-T / 2, T / 2, N), r=D/2, shape='circle')\n",
"xx, yy, otf = ez.physics.otf_calc(ap, T, D, f, wvl)\n",
"plt.plot(xx[N//2, :] / (2 * fcutoff), otf[N//2, :], lw=3, label='circular aperture') # The /2 is intentional!! See Goodman Fig. 6.8\n",
"plt.xlim(-2, 2)\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 648x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"T = 0.3 # the window width (meters)\n",
"N = 1025 # window width (pixels)\n",
"wvl = 550e-9 # wavelength (meters)\n",
"D, f = 0.0033, 0.0033 # aperture diameter (meters), focal length (meters)\n",
"\n",
"fcutoff = D/2 / (wvl * f) # cutoff frequency\n",
"\n",
"# OTF calculation for a square aperture\n",
"ap = ez.shape_mask(ez.linspace(-T / 2, T / 2, N), r=D/2, shape='square')\n",
"xx, yy, otf = ez.physics.otf_calc(ap, T, D, f, wvl)\n",
"\n",
"plt.figure(figsize=(9,6))\n",
"plt.subplot(121)\n",
"plt.imshow(otf[N//11*5: N//11*6, N//11*5: N//11*6])\n",
"plt.title('Square aperture OTF')\n",
"plt.axis('off')\n",
"\n",
"# OTF calculation for a circle aperture\n",
"ap = ez.shape_mask(ez.linspace(-T / 2, T / 2, N), r=D/2, shape='circle')\n",
"xx, yy, otf = ez.physics.otf_calc(ap, T, D, f, wvl)\n",
"\n",
"plt.subplot(122)\n",
"plt.imshow(otf[N//11*5: N//11*6, N//11*5: N//11*6])\n",
"plt.title('Circular aperture OTF')\n",
"plt.axis('off')\n",
"plt.show()"
]
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}