Skip to content

Instantly share code, notes, and snippets.

@bamford
Last active March 23, 2021 23:09
Show Gist options
  • Save bamford/4ccc4da519bba5216f58d12070865fc3 to your computer and use it in GitHub Desktop.
Save bamford/4ccc4da519bba5216f58d12070865fc3 to your computer and use it in GitHub Desktop.
Test how to rebin contents of an image, without changing the image size
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# Test how to rebin contents of an image, without changing the image size"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import numpy as np\nfrom matplotlib import pyplot as plt",
"execution_count": 2,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from scipy.ndimage import zoom\nfrom scipy.interpolate import interpn\nfrom astropy import convolution as conv",
"execution_count": 3,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Make an image to test with..."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "blob = conv.Gaussian2DKernel(3.0, 2.0).array\nscale = 0.65",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.imshow(blob)\nblob.shape, blob.sum()",
"execution_count": 5,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 5,
"data": {
"text/plain": "((25, 25), 0.9999715872705071)"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Let's try using zoom..."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "zoomed_blob = zoom(blob, scale)",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.imshow(zoomed_blob)\nzoomed_blob.shape, zoomed_blob.sum()",
"execution_count": 7,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 7,
"data": {
"text/plain": "((16, 16), 0.3906231307948497)"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The whole image has been resized (also total flux has changed). In principle we could pad the edges to get back to the original size. However, we have a problem when `zoom` changes the image size from odd to even, or vice versa. In such cases we cannot pad the zoomed image back up to the original size in such a way that it will remain centred. We need a more sophisticated solution: interpolate the pixels from the original grid to a rescaled grid (but with the same number of pixels. This took some working out, but a solution is below."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Zooming *contents* of an image"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def zoom_contents(image, scale, method='linear', conserve_flux=True, fill_value=0):\n # Resize contents of image relative to fixed image size using interpolation\n in_coords = [np.arange(s) - (s - 1) / 2 for s in image.shape]\n out_coords = np.transpose(np.meshgrid(*in_coords, indexing='ij')) / scale\n output = interpn(in_coords, image, out_coords,\n method=method, bounds_error=False, fill_value=fill_value)\n if conserve_flux:\n output /= scale**2\n return output.T",
"execution_count": 8,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "new_blob = zoom_contents(blob, scale)",
"execution_count": 9,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.imshow(new_blob)\nnew_blob.shape, new_blob.sum()",
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 10,
"data": {
"text/plain": "((25, 25), 1.0038564100938578)"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Above uses linear interpolation, but an alternative would be to take the nearest pixel value, although differences are fairly small..."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "new_blob_nearest = zoom_contents(blob, scale, method='nearest')",
"execution_count": 11,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.imshow(new_blob_nearest)\nnew_blob_nearest.shape",
"execution_count": 12,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 12,
"data": {
"text/plain": "(25, 25)"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.imshow(new_blob - new_blob_nearest, vmin=-0.01, vmax=0.01);",
"execution_count": 13,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Can we adapt this to work with a multi-channel image?"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def zoom_contents(image, scale, image_axes=[0, 1], method='linear', conserve_flux=True, fill_value=0):\n # Resize contents of image relative to fixed image size using interpolation\n in_coords = [np.arange(s) - (s - 1) / 2 for s in image.shape]\n out_coords = np.array(np.meshgrid(*in_coords, indexing='ij'))\n # match shape of input scale to allow broadcasting\n scale = np.atleast_1d(scale)\n scale = scale.reshape(scale.shape + (1,) * (image.ndim - scale.ndim))\n out_coords[image_axes] /= scale\n out_coords = np.transpose(out_coords)\n output = interpn(in_coords, image, out_coords,\n method=method, bounds_error=False, fill_value=fill_value)\n output = output.T\n if conserve_flux:\n output /= scale**2\n return output",
"execution_count": 14,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "colour_blob = blob[..., None] * np.array([[[0.6, 0.8, 1.0]]])",
"execution_count": 15,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.imshow(colour_blob / colour_blob.max())\ncolour_blob.shape, colour_blob.sum(axis=(0, 1))",
"execution_count": 16,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 16,
"data": {
"text/plain": "((25, 25, 3), array([0.59998295, 0.79997727, 0.99997159]))"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "new_colour_blob = zoom_contents(colour_blob, scale)",
"execution_count": 17,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.imshow(new_colour_blob / new_colour_blob.max())\nnew_colour_blob.shape, new_colour_blob.sum(axis=(0, 1))",
"execution_count": 18,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 18,
"data": {
"text/plain": "((25, 25, 3), array([0.60231385, 0.80308513, 1.00385641]))"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Another check: try scaling down, then up, and check results match original"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "identity_colour_blob = zoom_contents(zoom_contents(colour_blob, scale), 1/scale)",
"execution_count": 19,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "fig, ax = plt.subplots(1, 2, figsize=(10, 5))\ncmax = colour_blob.max()\nax[0].imshow(colour_blob / cmax)\nax[1].imshow(identity_colour_blob / cmax)\ndiff = identity_colour_blob - colour_blob\nidentity_colour_blob.shape, identity_colour_blob.sum(axis=(0, 1)), abs(diff).max()",
"execution_count": 20,
"outputs": [
{
"output_type": "stream",
"text": "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"name": "stderr"
},
{
"output_type": "execute_result",
"execution_count": 20,
"data": {
"text/plain": "((25, 25, 3),\n array([0.60491411, 0.80655215, 1.00819019]),\n 0.002091786824308533)"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x360 with 2 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### And now scaling up, then down..."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "identity_colour_blob = zoom_contents(zoom_contents(colour_blob, 1/scale), scale)",
"execution_count": 21,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "fig, ax = plt.subplots(1, 2, figsize=(10, 5))\nax[0].imshow(colour_blob / colour_blob.max())\nax[1].imshow(identity_colour_blob / identity_colour_blob.max())\ndiff = identity_colour_blob - colour_blob\nidentity_colour_blob.shape, identity_colour_blob.sum(axis=(0, 1)), abs(diff).max()",
"execution_count": 22,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 22,
"data": {
"text/plain": "((25, 25, 3),\n array([0.59485559, 0.79314079, 0.99142598]),\n 0.0009771082421849674)"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x360 with 2 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### What about a stack of multi-channel images?"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "stack_blob = np.ones((5,) + colour_blob.shape)\nfor i in range(len(stack_blob)):\n b = conv.Gaussian2DKernel(3.0, 2.0 + i, x_size=blob.shape[0]).array\n cb = b[..., None] * np.array([[[0.6 + 0.1*i, 0.8, 1.0 - 0.1*i]]])\n stack_blob[i] = cb",
"execution_count": 23,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "new_stack_blob = zoom_contents(stack_blob, scale, image_axes=[1, 2])\nidentity_stack_blob = zoom_contents(new_stack_blob, 1/scale, image_axes=[1, 2])",
"execution_count": 24,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "fig, axarr = plt.subplots(3, 5, figsize=(15, 10))\nsmax = stack_blob.max()\nnsmax = new_stack_blob.max()\nfor i, ax in enumerate(axarr.T):\n ax[0].imshow(stack_blob[i] / smax)\n ax[1].imshow(new_stack_blob[i] / nsmax)\n ax[2].imshow(identity_stack_blob[i] / smax)\n print(stack_blob[i].sum(axis=(0, 1)), new_stack_blob[i].sum(axis=(0, 1)))\nplt.tight_layout()\nprint('Maximum identity error:', abs(stack_blob - identity_stack_blob).max())\nprint('Same result whether in stack or not?', np.allclose(new_stack_blob[0], new_colour_blob))",
"execution_count": 25,
"outputs": [
{
"output_type": "stream",
"text": "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"name": "stderr"
},
{
"output_type": "stream",
"text": "[0.59998295 0.79997727 0.99997159] [0.60231385 0.80308513 1.00385641]\n[0.69996022 0.79995454 0.89994886] [0.70157564 0.80180074 0.90202583]\n[0.79859374 0.79859374 0.79859374] [0.79834244 0.79834244 0.79834244]\n[0.88892831 0.7901585 0.69138868] [0.88249199 0.78443732 0.68638266]\n[0.96297119 0.77037695 0.57778271] [0.94690706 0.75752565 0.56814424]\nMaximum identity error: 0.002091786824308533\nSame result whether in stack or not? True\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1080x720 with 15 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### This also works with a different scaling factor for each image in the stack"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "scales = np.array([0.65, 1.0, 2.0, 0.25, 0.75])",
"execution_count": 26,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "multiscale_stack_blob = zoom_contents(stack_blob, scales, image_axes=[1, 2])\nidentity_multiscale_stack_blob = zoom_contents(multiscale_stack_blob, 1/scales, image_axes=[1, 2])",
"execution_count": 27,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "fig, axarr = plt.subplots(3, 5, figsize=(15, 10))\nfor i, ax in enumerate(axarr.T):\n ax[0].imshow(stack_blob[i] / stack_blob[i].max())\n ax[1].imshow(multiscale_stack_blob[i] / multiscale_stack_blob[i].max())\n ax[2].imshow(identity_multiscale_stack_blob[i] / stack_blob[i].max())\n print(stack_blob[i].sum(axis=(0, 1)), multiscale_stack_blob[i].sum(axis=(0, 1)))\nplt.tight_layout()\nprint('Maximum identity error:', abs(stack_blob - identity_multiscale_stack_blob).max())\nprint('Same result whether in stack or not?', np.allclose(multiscale_stack_blob[0], new_colour_blob))",
"execution_count": 28,
"outputs": [
{
"output_type": "stream",
"text": "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
"name": "stderr"
},
{
"output_type": "stream",
"text": "[0.59998295 0.79997727 0.99997159] [0.60231385 0.80308513 1.00385641]\n[0.69996022 0.79995454 0.89994886] [0.69996022 0.79995454 0.89994886]\n[0.79859374 0.79859374 0.79859374] [0.67732073 0.67732073 0.67732073]\n[0.88892831 0.7901585 0.69138868] [0.89639477 0.79679535 0.69719593]\n[0.96297119 0.77037695 0.57778271] [0.96515085 0.77212068 0.57909051]\nMaximum identity error: 0.002294644687971331\nSame result whether in stack or not? True\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1080x720 with 15 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
}
],
"metadata": {
"kernelspec": {
"name": "conda-env-ARG-py",
"display_name": "Python [conda env:ARG]",
"language": "python"
},
"hide_input": false,
"language_info": {
"name": "python",
"version": "3.8.5",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"gist": {
"id": "4ccc4da519bba5216f58d12070865fc3",
"data": {
"description": "Test how to rebin contents of an image, without changing the image size",
"public": true
}
},
"_draft": {
"nbviewer_url": "https://gist.github.com/4ccc4da519bba5216f58d12070865fc3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment