Skip to content

Instantly share code, notes, and snippets.

@Kirill888
Created November 22, 2017 04:32
Show Gist options
  • Save Kirill888/0861c2508d41766a0145682e330ff8f5 to your computer and use it in GitHub Desktop.
Save Kirill888/0861c2508d41766a0145682e330ff8f5 to your computer and use it in GitHub Desktop.
Sub-pixel coordinates in CV2 remap function
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import cv2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11bd23908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"src = np.zeros((5,5), dtype='float32')\n",
"src[2,2] = 1.0\n",
"\n",
"plt.imshow(src)\n",
"plt.title('Source image')\n",
"plt.gca().set_axis_off()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0., 1., 2., 3., 4.],\n",
" [ 0., 1., 2., 3., 4.],\n",
" [ 0., 1., 2., 3., 4.],\n",
" [ 0., 1., 2., 3., 4.],\n",
" [ 0., 1., 2., 3., 4.]], dtype=float32)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[ 0., 0., 0., 0., 0.],\n",
" [ 1., 1., 1., 1., 1.],\n",
" [ 2., 2., 2., 2., 2.],\n",
" [ 3., 3., 3., 3., 3.],\n",
" [ 4., 4., 4., 4., 4.]], dtype=float32)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x,y = [a.astype('float32') for a in np.meshgrid(np.arange(5),np.arange(5))]\n",
"display(x,y)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAFeCAYAAAB5F/zkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3X+0ZXdZ5/n3hzKhCBDodGiEVAS6\nDS7SEcFOB5eZUX6pBaQJM207REFpma6ZbmlxRFmh7UalZ6YdZpaCrqhdDXRoUNJMBI0YDKhEGltC\nEgQkhLjSiKQI3ZkIgUQkP6qe+eOcCjfFrbq36tzvPfc5+/1a66zcc86+Zz8nSX3q2d/9/e6dqkKS\nJEnq5kHLLkCSJEk6ETaykiRJaslGVpIkSS3ZyEqSJKklG1lJkiS1ZCMrSZKklmxkJbWV5E1Jbkvy\n8aO8nyS/mOTmJB9L8q3bXaMkaWZEZtvISursUmDvMd5/DnDW/LEP+JVtqEmStL5L2eLMtpGV1FZV\nvR/4/DE2uRD4DzXzQeCRSR6zPdVJktYakdk2spJW2RnALWueH5i/JknaeY47s79uaDmSJut7nvHQ\n+svPH1zoM67/2N03AF9Z89L+qtp/HB+RdV7zvtyStI5Fc3sZmW0jK2mI2z9/kGuu2rPQZ5z0mP/y\nlao6d4GPOACcueb5HuDWhYqSpBW1aG4vI7OdWiBplV0B/OB8Jey3AV+sqs8tuyhJ0rqOO7MdkZU0\nSHGwDg3dQ5K3AU8HTk9yAPhp4CSAqvpV4ErgucDNwJeBfzy0IElqbWxuj8hsG1lJQxRwaPB01Kq6\naIP3C/iRoUVI0ooYndsjMttGVtIwhxg7IitJ2lrdcts5spIkSWrJEVlJQxTFwfJKV5LURcfctpGV\nNMzoObKSpK3VLbdtZCUNUcDBZoEoSVPWMbdtZCUN0+3IXpKmrltuu9hLkiRJLTkiK2mIgnaLBiRp\nyjrmto2spGF6XY1QktQtt21kJQ1RVLtFA5I0ZR1z20ZW0hgFB3vloSRNW8PcdrGXJEmSWnJEVtIQ\nRb+5VpI0ZR1z20ZW0iDhIFl2EZKkTeuX2zaykoYo4FCzuVaSNGUdc9s5spIkSWrJEVlJw3Q7RSVJ\nU9ctt21kJQ1R9AtESZqyjrltIytpmEPVKxAlaeq65baNrKQhOh7ZS9KUdcxtF3tJkiSpJRtZPUCS\nxyepJFs6Wp/k3Ul+aCs/UztbEQ7yoIUe0lSYvdoJFs3tZfBvih0gyaeTPPuI116S5APL2PcIVfWc\nqnrzop+T5ClJrk/y5fk/n3KMbU9L8s4kf5XkL5J8/6L71/E5VFnoIY1k9m5ekv1JbkpyKMlLjrLN\ne5J8d5Ifmufzl5IcSPLazTboSU5Ocvn8308lefpRtvuzJE9M8pNJPp7kziR/nuQnT/xbChbL7WWw\nkVUbSU4Gfgt4K/A3gDcDvzV/fT2XAPcAjwZ+APiVJH93O2rVV+daLfKQtGN8FPhnwIfXezPJQ4G/\nB/whcArwY8DpwNOAZwE/cRz7+gDwIuC/HmVffwd4UFX9GRDgB5n9nbAXeFmSFx7HvrTGorm9DDay\nDcyPOH/jiNd+Kcnr5j9fneTfJPlQki8m+a0kp63Z9vlJbkhyx3zbJ81ffwvwDcBvJ7krySvX7OIH\nknwmye1JfmrNZz0oycVJ/kuSv0zy9sP7SrI7yVvnr9+R5Nokj15T4/88//kbk/zhvNbbk/zHTf6r\neDqzBYqvq6q7q+oXmYXYM9f5d/ZQ4B8C/6qq7qqqDwBXAC/e5L60sHCwHrTQQ1oms/erquqSqvp9\n4CtH2eRZwB/Ns/lXquo/VdU9VfVZ4NeA8ze5n3uq6nXzzD54lM2eB1w53/61VfXhqrqvqm5iNtix\nqX1pPYvl9jL4N0UPbwX2JnkkwPwUzf8EvGXNNj8I/DDwWOA+4Bfn2z4ReBuzo+NHMfvD/9tJTq6q\nFwOfAf5BVT2sql675vP+O+CbmIXTqw8HMPCjwAuA75zv6wvMRj4Bfgh4BHAm8DeB/xX463W+z78G\n3sPsCHoP8EuH30jyriQXH+Xfw98FPlZVa2+g97H560d6InBwfsR+2EePsq0krcfs3bznAr9zlPe+\nA7hhgc/e1L6SBPjvt3hf2uFsZHeO35wfSd+R5A7glw+/UVWfA94P/KP5S3uB26vq+jW//5aq+nhV\n/RXwr4DvS7KLWej+TlW9t6ruBf4f4CHAt29Qz89W1V9X1UeZNYDfMn/9fwF+qqoOVNXdwM8A3zsP\n+HuZheg3VtXBqrq+qr60zmffCzwOeGxVfWV+5H34u15QVT93lJoeBnzxiNe+CDx8wW01QAGHeNBC\nD2kbmL1smL2b8Rzmo6RrJfnHwLnMvv/CkpwC/H1mUxiO9DPM+pp/vxX7mqJFc3sZ/Jti53hBVT3y\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10a5fd908>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[ 0., 0., 0., 0., 0.],\n",
" [ 0., 0., 0., 0., 0.],\n",
" [ 0., 0., 1., 0., 0.],\n",
" [ 0., 0., 0., 0., 0.],\n",
" [ 0., 0., 0., 0., 0.]], dtype=float32)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[ 0. , 0. , 0. , 0. , 0. ],\n",
" [ 0. , 0.25, 0.25, 0. , 0. ],\n",
" [ 0. , 0.25, 0.25, 0. , 0. ],\n",
" [ 0. , 0. , 0. , 0. , 0. ],\n",
" [ 0. , 0. , 0. , 0. , 0. ]], dtype=float32)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dst = cv2.remap(src, x, y, cv2.INTER_AREA)\n",
"dst_ = cv2.remap(src, x+0.5, y+0.5, cv2.INTER_AREA)\n",
"\n",
"plt.figure(figsize=(12,6))\n",
"plt.subplot(121)\n",
"plt.title('Hypothesis: 0,0')\n",
"plt.imshow(dst, extent=[-0.5, 4.5, 4.5, -0.5], vmin=0, vmax=1)\n",
"plt.colorbar()\n",
"plt.scatter(2,2, color='r', marker='+');\n",
"\n",
"\n",
"plt.subplot(122)\n",
"plt.title('Hypothesis: 1/2, 1/2')\n",
"plt.imshow(dst_, extent=[0, 5, 5, 0], vmin=0, vmax=1)\n",
"plt.colorbar()\n",
"plt.scatter(2.5,2.5, color='r', marker='+');\n",
"plt.show()\n",
"\n",
"\n",
"display(dst, dst_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"According to results above it seems that `cv2.remap` uses coordinate system with pixel centers aligned to their integer indexes. That means that top-left pixel center coordinate is `0,0`, top left pixel spans from `-0.5,-0.5` to `+0.5,+0.5`. And whole image spans from `-0.5,-0.5` to `W-0.5, H-0.5`"
]
}
],
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment