Skip to content

Instantly share code, notes, and snippets.

@hadim
Created June 18, 2019 18:40
Show Gist options
  • Save hadim/fa89b50bbd240c486c61787d205d28a6 to your computer and use it in GitHub Desktop.
Save hadim/fa89b50bbd240c486c61787d205d28a6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Relevant issue: https://github.com/scikit-image/scikit-image/issues/1103"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"import numpy as np\n",
"from skimage import draw\n",
"from matplotlib import path\n",
"\n",
"\n",
"def get_mask_from_polygon_mpl(image_shape, polygon):\n",
" \"\"\"Get a mask image of pixels inside the polygon.\n",
"\n",
" Args:\n",
" image_shape: tuple of size 2.\n",
" polygon: Numpy array of dimension 2 (2xN).\n",
" \"\"\"\n",
" xx, yy = np.meshgrid(np.arange(image_shape[1]), np.arange(image_shape[0]))\n",
" xx, yy = xx.flatten(), yy.flatten()\n",
" indices = np.vstack((xx, yy)).T\n",
" mask = path.Path(polygon).contains_points(indices)\n",
" mask = mask.reshape(image_shape)\n",
" mask = mask.astype('bool')\n",
" return mask\n",
"\n",
"\n",
"def get_mask_from_polygon_skimage(image_shape, polygon):\n",
" \"\"\"Get a mask image of pixels inside the polygon.\n",
"\n",
" Args:\n",
" image_shape: tuple of size 2.\n",
" polygon: Numpy array of dimension 2 (2xN).\n",
" \"\"\"\n",
" vertex_row_coords = polygon[:, 1]\n",
" vertex_col_coords = polygon[:, 0]\n",
" fill_row_coords, fill_col_coords = draw.polygon(vertex_row_coords, vertex_col_coords, image_shape)\n",
" mask = np.zeros(image_shape, dtype=np.bool)\n",
" mask[fill_row_coords, fill_col_coords] = True\n",
" return mask\n",
"\n",
"image_shape = (2000, 2000)\n",
"polygon = np.array([[80, 111, 146, 234, 407, 300, 187, 45], [465, 438, 499, 380, 450, 287, 210, 167]]).T\n",
"#polygon = np.array([[200, 300, 300, 200], [400, 390, 383, 394]]).T"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fc974846630>"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"# matplotlib\n",
"mask1 = get_mask_from_polygon_mpl(image_shape, polygon).astype('uint')\n",
"plt.imshow(mask1)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fc9747a2748>"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"# scikit-image\n",
"mask2 = get_mask_from_polygon_skimage(image_shape, polygon).astype('uint')\n",
"plt.imshow(mask2)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar at 0x7fc97473a1d0>"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAToAAAD8CAYAAADnhGhBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAYKklEQVR4nO3dfYwd1X3G8e+DAQcSXHAckGOgGLSkMihxsWuo0lBSmmCjNoYqaexWgVAixxRXjdRKMU1VUCtLTVKaFgVsLYkFVCmOy0twIxMCqA2pAsFLYvwCMSyGhsWWLXCUuCEx9u6vf8zZMKzv3Tu7d3bv3NnnI4127plz556xpZ/OmfOmiMDMrM6O6XQBzMwmmgOdmdWeA52Z1Z4DnZnVngOdmdWeA52Z1d6kBzpJiyXtktQvafVk/76ZVZuk9ZL2S9rR5Lok3ZJiyDZJF7S656QGOknTgFuBJcA8YLmkeZNZBjOrvDuAxaNcXwL0pGMFsLbVDSe7RrcI6I+I3RHxBrABWDrJZTCzCouIx4ADo2RZCtwVmSeAkyXNHu2ex5ZZwALmAC/nPg8AF47MJGkFWaRmGtMWnMiMySmd2RT0S37OG3FI7dzjsg++PV47MFgo71PbDu0EfplL6o2I3jH8XKM4MgfY2+wLkx3oGv1jHjUHLT10L8AMzYwLdelEl8tsyvp+PNr2PV47MMiTD51ZKO+02c//MiIWtvFzheJI3mQHugHgjNzn04E9k1wGMytZAEMMTdbPjTmOTPY7ui1Aj6S5ko4HlgGbJrkMZlayIDgcg4WOEmwCrkq9rxcBP42Ips1WmOQaXUQckbQKeAiYBqyPiJ2TWQYzmxhl1egk3Q1cAsySNADcCBwHEBHrgM3A5UA/8DpwTat7TnbTlYjYTFZQM6uJIBgsacm3iFje4noA14/lnpMe6MysnoZG7w/oKAc6M2tbAIMOdGZWd67RmVmtBXC4wtsyONCZWduCcNPVzGouYLC6cc6Bzszal82MqC4HOjMrgRhsOAW1GhzozKxtWWeEA52Z1Vg2js6Bzsxqbsg1OjOrM9fozKz2AjFY4U0FHejMrBRuuppZrQXijZjW6WI05UBnZm3LBgy76WpmNefOCDOrtQgxGNWt0Y27ZJLOkPRfkp6VtFPSX6b0myS9ImlrOi7PfecGSf2Sdkm6rIwHMLNqGEKFjk5op0Z3BPiriPiBpJOApyQ9nK59KSL+KZ9Z0jyyXb/OA94NPCLp3IhytgUys87JOiOq20Acd8nS9mJ70/lBSc+S7ZbdzFJgQ0QcAl6U1A8sAh4fbxnMrBqq3hlRSskknQX8JvD9lLRK0jZJ6yWdktLmAC/nvjbA6IHRzLrIYKjQ0QltBzpJ7wDuBT4TET8D1gLnAPPJanw3D2dt8PWGS/VJWiGpT1LfYQ61W0Qzm2DDMyOKHJ3QVqNa0nFkQe5rEXEfQETsy12/Hfhm+jgAnJH7+unAnkb3jYheoBdghmZWeN1SMxs2VNNeVwFfBZ6NiH/Opc/OZbsS2JHONwHLJE2XNBfoAZ4c7++bWXVkk/rrWaN7P/AJYLukrSntb4DlkuaTPftLwKcBImKnpI3AM2Q9tte7x9WsHgJxuI5TwCLif2j83m3zKN9ZA6wZ72+aWTVFUOkBw9Ud+GJmXaRzg4GLcKAzs7YFrtGZ2RTghTfNrNYCeeFNM6u3bLvD6oaT6pbMzLqIN7A2s5oLqj0zwoHOzEpR5RpddUOwmXWNCDEUxxQ6WpG0OC3O2y9pdYPrvybpPyU9nRb9vabVPV2jM7O2ZZ0R7U8BkzQNuBX4ENlCIFskbYqIZ3LZrgeeiYg/lPQuYJekr0XEG83u60BnZiUobc+IRUB/ROwGkLSBbNHefKAL4KS0sMg7gANk8+ebcqAzs7ZlnRGF39HNktSX+9yblmaDxgv0Xjji+18mWw1pD3AS8PGIGBrtBx3ozKwUY5gZ8WpELGxyrcgCvZcBW4HfI1vk92FJ300L/zbkzggza9vwzIgiRwtFFui9BrgvMv3Ai8BvjHZTBzozK8UQxxQ6WtgC9EiaK+l4sp0DN43I82PgUgBJpwHvAXaPdlM3Xc2sbRFweKj9elNEHJG0CngImAasT4v2rkzX1wH/ANwhaTtZU/ezEfHqaPd1oDOztmVN13IaiBGxmREL+KYAN3y+B/jwWO7pQGdmpajyzAgHOjNr2xiHl0y6tuqakl6StF3S1uFxMZJmSnpY0vPp7ym5/DekaR27JF3WbuHNrCrKmwI2Ecr41Q9GxPzcuJjVwKMR0QM8mj4jaR5ZD8p5wGLgtjTdw8xqYCjtG9Hq6ISJCK9LgTvT+Z3AFbn0DRFxKCJeBPrJpnuYWZfLel2nFTo6od1AF8C3JT0laUVKOy0i9gKkv6em9EZTO+Y0uqmkFZL6JPUd5lCbRTSziVbigOEJ0W5nxPsjYo+kU8mmYfxolLxFpnZkidm8t16AGZrZMI+ZVUtttztM41mIiP2S7idriu6TNDsi9kqaDexP2YtM7TCzLlTbXldJb5d00vA52QC+HWTTNa5O2a4GHkjnm4BlkqZLmgv0AE+O9/fNrFqq3OvaTo3uNOD+bEkojgX+PSK+JWkLsFHStWRz0j4GkKZxbCRbV+oIcH1EDLZVejOrhAhxpI57RqSF8d7XIP010oTbBtfWAGvG+5tmVl1Vbrp6ZoSZta3q7+gc6MysFA50ZlZrw+PoqsqBzsxKUdtxdGZmkE0BO1LCwpsTxYHOzErhpquZ1Zrf0ZnZlBAOdGZWd+6MMLNai/A7OjOrPTHoXlczqzu/ozOzWvNcVzOrv8je01WVA52ZlcK9rmZWa+HOCDObCtx0NbPaq3Kvazub47xH0tbc8TNJn5F0k6RXcumX575zg6R+SbskXVbOI5hZp0Vkga7I0Qnt7BmxC5gPIGka8ApwP3AN8KWI+Kd8fknzgGXAecC7gUcknesNcszqocrDS8p6e3gp8EJE/O8oeZYCGyLiUES8CPST7QNrZjUQUezohLIC3TLg7tznVZK2SVov6ZSUNgd4OZdnIKUdRdIKSX2S+g5zqKQimtlECcTQ0DGFjk5o+1clHQ98BPiPlLQWOIesWbsXuHk4a4OvN4zvEdEbEQsjYuFxTG+3iGY2CaLg0QllhNclwA8iYh9AROyLiMGIGAJu583m6QBwRu57pwN7Svh9M+u0EjsjJC1OHZb9klY3yXNJ6uzcKek7re5ZRqBbTq7ZKml27tqVwI50vglYJmm6pLlAD/BkCb9vZlVQQpUudWzeSlaBmgcsTx2Z+TwnA7cBH4mI84CPtSpaW+PoJJ0IfAj4dC75C5Lmkz3SS8PXImKnpI3AM8AR4Hr3uJrVR0lDRxYB/RGxG0DSBrKOzGdyef4EuC8ifpz9buxvddO2Al1EvA68c0TaJ0bJvwZY085vmln1BDA0VDjQzZLUl/vcGxG96bxRp+WFI75/LnCcpP8GTgL+NSLuGu0HPTPCzNoXQPEa3asRsbDJtSKdlscCC8iGtZ0APC7piYh4rtkPOtCZWSlKGiNXpNNygCxY/hz4uaTHgPcBTQNddZcbMLPuUs74ki1Aj6S5aejaMrKOzLwHgA9IOjb1E1wIPDvaTV2jM7MSlDOPNSKOSFoFPARMA9anjsyV6fq6iHhW0reAbcAQ8JWI2NH8rg50ZlaWkkYDR8RmYPOItHUjPn8R+GLRezrQmVn7AqJ4r+ukc6Azs5I40JlZ3XmFYTOrPQc6M6u1sQ0YnnQOdGZWCm+OY2b1515XM6s7uUZnZrXWyeWDC3CgM7MSyJ0RZjYFuEZnZrU31OkCNOdAZ2btq/g4upbr0aW9WfdL2pFLmynpYUnPp7+n5K7dkHbv2SXpslz6Aknb07VbJFX3X8XMxkxR7OiEIgtv3gEsHpG2Gng0InqAR9Nn0m49y4Dz0nduS7v6QLbf6wqy3b96GtzTzLpZhTd2bRnoIuIx4MCI5KXAnen8TuCKXPqGiDgUES8C/cCitAXijIh4PCICuCv3HTOzCTXed3SnRcRegIjYK+nUlD4HeCKXbyClHU7nI9MbkrSCrPbH2zhxnEU0s8k0lQYMN9vBp8jOPm9eyLY+6wWYoZkV/uczMyDtd1jd1+7j3RxnX2qOkv4ObyDbbAefgXQ+Mt3M6qKb39E1sQm4Op1fTbYrz3D6MknTJc0l63R4MjVzD0q6KPW2XpX7jpnVQJV7XVs2XSXdDVxCtrv2AHAj8I/ARknXAj8GPgaQduvZCDwDHAGuj4jBdKvryHpwTwAeTIeZ1UWFXzK1DHQRsbzJpUub5F8DrGmQ3gecP6bSmVn36OZAZ2bWSiebpUU40JlZOSrc6+pAZ2alcI3OzOrPgc7Mas3v6MxsSnCgM7O6U4UX3hzvzAgzs67hGp2ZlcNNVzOrNXdGmNmU4EBnZrXnQGdmdSbc62pmdVdwLboi7/EkLU67CPZLWj1Kvt+SNCjpo63u6UBnZuUoYYXhtGvgrcASYB6wPO0u2Cjf54GHihTNgc7MylHOUuqLgP6I2B0RbwAbyHYXHOkvgHt5cxuHUTnQmVkpxtB0nSWpL3esyN1mDvBy7vNROwZKmgNcCawrWjZ3RphZOYr3ur4aEQubXCuyY+C/AJ+NiMFsC5rWWtboJK2XtF/SjlzaFyX9SNI2SfdLOjmlnyXpF5K2pmNd7jsLJG1PLxhvUdESmln1RdbrWuRoodlOgnkLgQ2SXgI+Ctwm6YrRblqk6XoHsHhE2sPA+RHxXuA54IbctRciYn46VubS15JtSt2TjpH3NLNuVs47ui1Aj6S5ko4HlpHtLvjmz0TMjYizIuIs4B7gzyPiG6PdtGWgi4jHgAMj0r4dEUfSxyd4656tR0l7v86IiMcjIoC7gFEjsJl1lzKGl6S4soqsN/VZYGPaXXClpJWjf7u5Mt7R/Rnw9dznuZJ+CPwM+NuI+C7Zy8SBXJ6jXjDmpZeTKwDexoklFNHMJlxJMyMiYjOweURaw46HiPhkkXu2FegkfY5s/9avpaS9wJkR8ZqkBcA3JJ1HsReMb16I6AV6AWZoZoUnlpgZULRZ2jHjDnSSrgb+ALg0NUeJiEPAoXT+lKQXgHPJanD55m2jF4xm1qVEtVcvGdc4OkmLgc8CH4mI13Pp70ojlpF0Nlmnw+6I2AsclHRR6m29Cnig7dKbWWWUNQVsIrSs0Um6G7iEbJDfAHAjWS/rdODhNErkidTDejHw95KOAIPAyogY7si4jqwH9wTgwXSYWV1UuEbXMtBFxPIGyV9tkvdesmkZja71AeePqXRm1j26OdCZmbXkFYbNbEpwoDOzuqvywpsOdGZWCjddzaze6jpg2MzsLRzozKzOqj4zwoHOzEqhoepGOgc6M2uf39GZ2VTgpquZ1Z8DnZnVnWt0ZlZ/DnRmVmvhKWBmVnMeR2dmU0NUN9I50JlZKVyjM7N6q/iA4Zab40haL2m/pB25tJskvSJpazouz127QVK/pF2SLsulL5C0PV27JW2SY2Y1oaFiRycU2QXsDmBxg/QvRcT8dGwGkDQPWAacl75z2/CuYMBask2pe9LR6J5m1qW6OtBFxGPAgVb5kqXAhog4FBEvAv3AIkmzgRkR8XjaA/Yu4IrxFtrMKibIOiOKHB0wrn1dk1WStqWm7SkpbQ7wci7PQEqbk85HpjckaYWkPkl9h7P9sM2s4qq8r+t4A91a4BxgPrAXuDmlN3rvFqOkNxQRvRGxMCIWHsf0cRbRzCZVFDw6YFy9rhGxb/hc0u3AN9PHAeCMXNbTgT0p/fQG6WZWA1UfMDyuGl165zbsSmC4R3YTsEzSdElzyTodnoyIvcBBSRel3targAfaKLeZVUkEGip2dELLGp2ku4FLgFmSBoAbgUskzSeriL4EfBogInZK2gg8AxwBro+IwXSr68h6cE8AHkyHmdVFhWt0LQNdRCxvkPzVUfKvAdY0SO8Dzh9T6cysa1S56eqZEWbWvgC8Z4SZ1V5141xb4+jMzH6lrHF0khanKaT9klY3uP6naQzvNknfk/S+Vvd0jc7MSlFGj2qaMnor8CGyYWlbJG2KiGdy2V4EfjcifiJpCdALXDjafV2jM7P2FR0s3DoWLgL6I2J3RLwBbCCbWvrmT0V8LyJ+kj4+wVvH6DbkGp2ZtS0bMFy4RjdLUl/uc29E9KbzRtNIR6utXUuBoWoOdGZWjuIrk7waEQubXCs8XVTSB8kC3e+0+kEHOjMrxRhqdKNpNo30rb8lvRf4CrAkIl5rdVO/ozOz9pX3jm4L0CNprqTjyda33JTPIOlM4D7gExHxXJHiuUZnZiUoZx5rRByRtAp4CJgGrE9TS1em6+uAvwPeSbawL8CRUZrCgAOdmZWlpEU104rlm0ekrcudfwr41Fju6UBnZu3zBtZmNiV4X1czq73qxjkHOjMrh4aq23Z1oDOz9gVjGTA86RzozKxtIsoaMDwhHOjMrBwOdGZWexUOdC2ngKUNqvdL2pFL+7qkrel4SdLWlH6WpF/krq3LfWeBpO1pMb1b0m5gZlYHw+/oihwdUKRGdwfwZeCu4YSI+PjwuaSbgZ/m8r8QEfMb3GctsIJs/ajNwGK8E5hZbVS517VljS4iHgMONLqWamV/DNw92j3SPrAzIuLxiAiyoHnF2ItrZtUUWdO1yNEB7a5e8gFgX0Q8n0ubK+mHkr4j6QMpbQ7Z8ivDBlJaQ5JWSOqT1HeYQ20W0cwmXFDpQNduZ8Ry3lqb2wucGRGvSVoAfEPSeYxhMT2AtNpoL8AMzazuG04ze1N1W67jD3SSjgX+CFgwnBYRhyCrgkXEU5JeAM4lq8Hl13VvuJiemXWvKo+ja6fp+vvAjyLiV01SSe9Ku/gg6WygB9gdEXuBg5IuSu/1rgIeaOO3zaxqKtx0LTK85G7gceA9kgYkXZsuLePoToiLgW2SngbuAVZGxHBHxnVkSx/3Ay/gHlez+oiAwaFiRwe0bLpGxPIm6Z9skHYvcG+T/H3A+WMsn5l1iwo3XT0zwszK4UBnZrUWQAl7RkwUBzozK0FAVHd8iQOdmbUv6FhHQxEOdGZWDr+jM7Pac6Azs3rr3GDgIhzozKx9AVR4mSYHOjMrh2t0ZlZv4V5XM6u5gPA4OjOrPc+MMLPa8zs6M6u1CPe6mtkU4BqdmdVbEIODnS5EUw50ZtY+L9NkZlNChYeXtLuvq5lZtq3rUBQ6WpG0WNIuSf2SVje4Lkm3pOvbJF3Q6p4OdGbWvkgLbxY5RpF2EbwVWALMA5ZLmjci2xKyHQZ7gBXA2lbFc6Azs1LE4GCho4VFQH9E7I6IN4ANwNIReZYCd0XmCeBkSbNHu2nl39Ed5Cf/90jcs6vT5ZgAs4BXO12ICVDX54L6Ptuvt3uDg/zkoUfinlkFs79NUl/uc29E9KbzOcDLuWsDwIUjvt8ozxxgb7MfrHygA3ZFxMJOF6Jskvr8XN2lzs/WrohYXNKt1Oj248jzFm66mlmVDABn5D6fDuwZR563cKAzsyrZAvRImivpeGAZsGlEnk3AVan39SLgpxHRtNkK3dF07W2dpSv5ubpPnZ+tEiLiiKRVwEPANGB9ROyUtDJdXwdsBi4H+oHXgWta3VdR4flpZmZlcNPVzGrPgc7Maq+yga7VNJCqk/SSpO2Stg6PGZI0U9LDkp5Pf0/J5b8hPesuSZd1ruRHk7Re0n5JO3JpY34WSQvSv0l/msLTaJjApGnyXDdJeiX9v22VdHnuWlc8lzUQEZU7yF5CvgCcDRwPPA3M63S5xvgMLwGzRqR9AVidzlcDn0/n89IzTgfmpmef1ulnyJX7YuACYEc7zwI8Cfw22TioB4ElFXyum4C/bpC3a57Lx9FHVWt0RaaBdKOlwJ3p/E7gilz6hog4FBEvkvUmLepA+RqKiMeAAyOSx/QsaYrOjIh4PLLocFfuOx3R5Lma6ZrnsqNVNdA1m+LRTQL4tqSnJK1IaadFGu+T/p6a0rvxecf6LHPS+cj0KlqVVsVYn2uS1+G5pqyqBroxT/GooPdHxAVkKy1cL+niUfLW4XmHNXuWbnnGtcA5wHyyuZM3p/Ruf64praqBbsxTPKomIvakv/uB+8maovuGV1lIf/en7N34vGN9loF0PjK9UiJiX0QMRrZJ6e28+Qqhq59rqqtqoCsyDaSyJL1d0knD58CHgR1kz3B1ynY18EA63wQskzRd0lyydbaenNxSj9mYniU1bw9Kuij1Sl6V+05ljFju50qy/zfo8uea8jrdG9LsIJvi8RxZ79bnOl2eMZb9bLIeuqeBncPlB94JPAo8n/7OzH3nc+lZd1GxXjvgbrJm3GGyGsy143kWYCFZ4HgB+DJpZk7FnuvfgO3ANrLgNrvbnsvH0YengJlZ7VW16WpmVhoHOjOrPQc6M6s9Bzozqz0HOjOrPQc6M6s9Bzozq73/B3cdCO4X4CngAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(mask1 - mask2)\n",
"plt.colorbar()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"283 ms ± 2.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
]
}
],
"source": [
"%%timeit\n",
"# Benchmark matplotlib implementation\n",
"get_mask_from_polygon_mpl(image_shape, polygon)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"15.8 ms ± 334 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"# Benchmark scikit-image implementation\n",
"get_mask_from_polygon_skimage(image_shape, polygon)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:ws]",
"language": "python",
"name": "conda-env-ws-py"
},
"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.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment