Skip to content

Instantly share code, notes, and snippets.

@RichieSams
Created March 2, 2016 22:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RichieSams/aa7e71a0fb4720c8cb41 to your computer and use it in GitHub Desktop.
Save RichieSams/aa7e71a0fb4720c8cb41 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 244,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 245,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import math\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 246,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class ReconstructionFilter:\n",
" def __init__(self, filterType):\n",
" self.filterType = filterType\n",
" self.width = 0.0\n",
" self.binSize = 0.0\n",
" self.invBinSize = 0.0\n",
" self.filterResolution = 32\n",
" self.cdf = np.empty(self.filterResolution + 1)\n",
" self.negativeIndices = []\n",
" \n",
" self.precompute()\n",
" \n",
" # Public\n",
" \n",
" def sample(self, x):\n",
" if (self.filterType == \"Dirac\"):\n",
" return (0.0, False)\n",
" \n",
" negative = x < 0.5;\n",
" x = x * 2.0 if negative else (x - 0.5) * 2.0;\n",
" \n",
" index = self.filterResolution;\n",
" for i in range(1, self.filterResolution):\n",
" if (x < self.cdf[i]):\n",
" index = i - 1\n",
" break\n",
" \n",
" pdf = self.cdf[index + 1] - self.cdf[index]\n",
" u = self.binSize * ((index) + ((x - self.cdf[index]) / pdf))\n",
" \n",
" isNegative = index in self.negativeIndices\n",
" return (-u, isNegative) if negative else (u, isNegative)\n",
" \n",
" # Private \n",
" \n",
" def precompute(self):\n",
" self.width = self.filterWidth()\n",
" \n",
" if (self.filterType == \"Dirac\"):\n",
" return\n",
" \n",
" self.binSize = self.width / (self.filterResolution - 1);\n",
" self.invBinSize = (self.filterResolution - 1) / self.width;\n",
"\n",
" normalizationFactor = 0.0\n",
" pdf = np.empty(self.filterResolution)\n",
" for i in range(self.filterResolution - 1):\n",
" temp = self.eval(i * self.binSize)\n",
" if temp <= 0.0:\n",
" self.negativeIndices.append(i)\n",
" temp = -temp\n",
" pdf[i] = temp\n",
" normalizationFactor += temp\n",
" \n",
" pdf[self.filterResolution - 1] = 0.0\n",
" \n",
" # Normalize. Aka, we want the area under the curve to equal 1.0\n",
" for i in range(self.filterResolution - 1):\n",
" pdf[i] /= normalizationFactor\n",
" \n",
" self.cdf[0] = 0.0\n",
" for i in range(1, self.filterResolution):\n",
" self.cdf[i] = self.cdf[i - 1] + (pdf[i - 1])\n",
" self.cdf[self.filterResolution] = 1.0\n",
" \n",
" def eval(self, x):\n",
" if (self.filterType == \"Dirac\"):\n",
" return 0.0\n",
" elif (self.filterType == \"Box\"):\n",
" return 1.0 if (x >= -self.width and x <= self.width) else 0.0\n",
" elif (self.filterType == \"Tent\"):\n",
" return self.width - abs(x)\n",
" elif (self.filterType == \"Gaussian\"):\n",
" alpha = 2.0\n",
" return max(math.exp(-alpha * x * x) - math.exp(-alpha * 4.0), 0.0)\n",
" elif (self.filterType == \"MitchellNetravali\"):\n",
" return self.mitchellNetravali(abs(x))\n",
" elif (self.filterType == \"CatmullRom\"):\n",
" return self.catmullRom(abs(x))\n",
" elif (self.filterType == \"Lanczos\"):\n",
" return self.lanczos(abs(x))\n",
" else:\n",
" return 0.0\n",
" \n",
" def filterWidth(self):\n",
" if (self.filterType == \"Dirac\"):\n",
" return 0.0\n",
" elif (self.filterType == \"Box\"):\n",
" return 0.5\n",
" elif (self.filterType == \"Tent\"):\n",
" return 1.0\n",
" elif (self.filterType == \"Gaussian\" or \n",
" self.filterType == \"MitchellNetravali\" or\n",
" self.filterType == \"CatmullRom\" or \n",
" self.filterType == \"Lanczos\"):\n",
" return 2.0\n",
" else:\n",
" return 0.0\n",
" \n",
" def mitchellNetravali(self, x):\n",
" B = 1.0 / 3.0\n",
" C = 1.0 / 3.0\n",
" if (x < 1.0):\n",
" return 1.0 / 6.0 * \\\n",
" ((12.0 - 9.0 * B - 6.0 * C) * x * x * x + \\\n",
" (-18.0 + 12.0 * B + 6.0 * C) * x * x + \\\n",
" (6.0 - 2.0 * B))\n",
" elif (x < 2.0):\n",
" return 1.0 / 6.0 * \\\n",
" ((-B - 6.0 * C) * x * x * x + \\\n",
" (6.0 * B + 30.0 * C) * x * x + \\\n",
" (-12.0 * B - 48.0 * C) * x + \\\n",
" (8.0 * B + 24.0 * C))\n",
" else:\n",
" return 0.0\n",
"\n",
" def catmullRom(self, x):\n",
" if (x < 1.0):\n",
" return 1.0 / 6.0 * \\\n",
" ((12.0 - 3.0) * x * x * x + \\\n",
" (-18.0 + 3.0) * x * x + \\\n",
" 6.0)\n",
" elif (x < 2.0):\n",
" return 1.0 / 6.0 * \\\n",
" (-3.0 * x * x * x + \\\n",
" 15.0 * x * x - \\\n",
" 24.0 * x + \\\n",
" 12.0)\n",
" else:\n",
" return 0.0;\n",
"\n",
" def lanczos(self, x):\n",
" if (x == 0.0):\n",
" return 1.0;\n",
" elif (x < 2.0):\n",
" return math.sin(math.pi * x) * \\\n",
" math.sin(math.pi * x * 0.5) / \\\n",
" (math.pi * math.pi * x * x * 0.5);\n",
" else:\n",
" return 0.0"
]
},
{
"cell_type": "code",
"execution_count": 247,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"randNumbers = np.random.rand(100000)"
]
},
{
"cell_type": "code",
"execution_count": 248,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x944b668>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"diracFilter = ReconstructionFilter(\"Dirac\")\n",
"\n",
"diracSamples = np.empty(100000)\n",
"for i in range(100000):\n",
" diracSamples[i], isNegative = diracFilter.sample(randNumbers[i])\n",
"\n",
"plt.hist(diracSamples, 50)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 249,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAh8fCngMVAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x80ba1d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"boxFilter = ReconstructionFilter(\"Box\")\n",
"\n",
"boxSamples = np.empty(100000)\n",
"for i in range(100000):\n",
" boxSamples[i], isNegative = boxFilter.sample(randNumbers[i])\n",
"\n",
"plt.hist(boxSamples, 50)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 250,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x8015358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tentFilter = ReconstructionFilter(\"Tent\")\n",
"\n",
"tentSamples = np.empty(100000)\n",
"for i in range(100000):\n",
" tentSamples[i], isNegative = tentFilter.sample(randNumbers[i])\n",
"\n",
"plt.hist(tentSamples, 50)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 251,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7e9c2b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gaussianFilter = ReconstructionFilter(\"Gaussian\")\n",
"\n",
"gaussianSamples = np.empty(100000)\n",
"for i in range(100000):\n",
" gaussianSamples[i], isNegative = gaussianFilter.sample(randNumbers[i])\n",
"\n",
"plt.hist(gaussianSamples, 50)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 257,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x919a828>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x947b1d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mitchellNetravaliFilter = ReconstructionFilter(\"MitchellNetravali\")\n",
"\n",
"mitchellNetravaliSamplesPos = np.zeros(100000)\n",
"mitchellNetravaliSamplesNeg = np.zeros(100000)\n",
"\n",
"for i in range(100000):\n",
" sample, isNegative = mitchellNetravaliFilter.sample(randNumbers[i])\n",
" if isNegative:\n",
" mitchellNetravaliSamplesNeg[i] = sample\n",
" else:\n",
" mitchellNetravaliSamplesPos[i] = sample\n",
"\n",
"mitchellNetravaliSamplesPos = mitchellNetravaliSamplesPos[mitchellNetravaliSamplesPos != 0.0]\n",
"mitchellNetravaliSamplesNeg = mitchellNetravaliSamplesNeg[mitchellNetravaliSamplesNeg != 0.0]\n",
"\n",
"plt.hist(mitchellNetravaliSamplesPos, 50)\n",
"plt.axis([-2.0, 2.0, 0, 4000])\n",
"plt.show()\n",
"\n",
"plt.hist(mitchellNetravaliSamplesNeg, 50)\n",
"plt.axis([-2.0, 2.0, 0, 4000])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 253,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7e7ae48>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nJKlx/x/bW57gsZXEEgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7e7a898>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"catmullRomFilter = ReconstructionFilter(\"CatmullRom\")\n",
"\n",
"catmullRomSamplesPos = np.zeros(100000)\n",
"catmullRomSamplesNeg = np.zeros(100000)\n",
"\n",
"for i in range(100000):\n",
" sample, isNegative = catmullRomFilter.sample(randNumbers[i])\n",
" if isNegative:\n",
" catmullRomSamplesNeg[i] = sample\n",
" else:\n",
" catmullRomSamplesPos[i] = sample\n",
"\n",
"catmullRomSamplesPos = catmullRomSamplesPos[catmullRomSamplesPos != 0.0]\n",
"catmullRomSamplesNeg = catmullRomSamplesNeg[catmullRomSamplesNeg != 0.0]\n",
"\n",
"plt.hist(catmullRomSamplesPos, 50)\n",
"plt.axis([-2.0, 2.0, 0, 3500])\n",
"plt.show()\n",
"\n",
"plt.hist(catmullRomSamplesNeg, 50)\n",
"plt.axis([-2.0, 2.0, 0, 3500])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 254,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f932b0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f93ba8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"lanczosFilter = ReconstructionFilter(\"Lanczos\")\n",
"\n",
"lanczosSamplesPos = np.zeros(100000)\n",
"lanczosSamplesNeg = np.zeros(100000)\n",
"\n",
"for i in range(100000):\n",
" sample, isNegative = lanczosFilter.sample(randNumbers[i])\n",
" if isNegative:\n",
" lanczosSamplesNeg[i] = sample\n",
" else:\n",
" lanczosSamplesPos[i] = sample\n",
"\n",
"lanczosSamplesPos = lanczosSamplesPos[lanczosSamplesPos != 0.0]\n",
"lanczosSamplesNeg = lanczosSamplesNeg[lanczosSamplesNeg != 0.0]\n",
"\n",
"plt.hist(lanczosSamplesPos, 50)\n",
"plt.axis([-2.0, 2.0, 0, 3500])\n",
"plt.show()\n",
"\n",
"plt.hist(lanczosSamplesNeg, 50)\n",
"plt.axis([-2.0, 2.0, 0, 3500])\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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment