Skip to content

Instantly share code, notes, and snippets.

@gvtulder
Created August 5, 2019 10:37
Show Gist options
  • Save gvtulder/33bce7e87082d5eb1fbeb8bcd1e2b1fa to your computer and use it in GitHub Desktop.
Save gvtulder/33bce7e87082d5eb1fbeb8bcd1e2b1fa to your computer and use it in GitHub Desktop.
elasticdeform deformation grid
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import elasticdeform"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f95de4e9780>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X = np.ones((10, 10), dtype=float)\n",
"X[::2] = 0\n",
"X[:, ::2] = 1 - X[:, ::2]\n",
"X = X.repeat(10, axis=0).repeat(10, axis=1)\n",
"plt.imshow(X, cmap='gray')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f95de4db518>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# shape of displacement matrix:\n",
"# [target dimension, grid points dim 1, grid points dim 2, ...]\n",
"displacement = np.array([[[-10, -1], [10, 1]],\n",
" [[-5, 5], [-5, 5]]])\n",
"Y = elasticdeform.deform_grid(X=X, displacement=displacement, order=0)\n",
"plt.imshow(Y, cmap='gray')"
]
},
{
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment