DynaSlum/satsense

View on GitHub
notebooks/Performance/Conversions_binary_mask_multipolygon.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Conversions between binary mask and multipolygon \n",
    "## Simple example"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook illustrates via a simle example the conversions between a binary mask and a multipolygonal shape and the loading and saving to image and shape files using `satsense` python library.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Generate a toy shape as multipolygon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Multipolygon is valid?:  True\n"
     ]
    }
   ],
   "source": [
    "# Python package imports\n",
    "from shapely.geometry import MultiPolygon # for multipolygon data structure\n",
    "\n",
    "# Create a multipolygon\n",
    "a = [(2,6), (4,6), (4,9), (2,9), (2,6)]\n",
    "b = [(6,9), (7,6), (9,4),(9,8), (7,9),(6,9)]\n",
    "c = [(1,1), (5,1),(5,4),(3,4),(1,1)]\n",
    "d = [(6,1), (10,1),(7,3),(6,1)]\n",
    "\n",
    "multi = MultiPolygon([[a, []], [b, []] ,[c, []], [d, []]])\n",
    "\n",
    "print('Multipolygon is valid?: ', multi.is_valid)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Display the mulipolygon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f01bc5df0f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The area of the multi-polygon is 27.5\n"
     ]
    }
   ],
   "source": [
    "# Python package imports\n",
    "from matplotlib import pyplot # for plots\n",
    "from satsense.util.shapefile import show_multipolygon as shmp # visualization of multipolygons\n",
    "\n",
    "# Visualization parameters\n",
    "ORANGE = '#FF6600'\n",
    "al = 0.8\n",
    "show_verticies = True\n",
    "extent = [0, 0, 10, 10] # format of extent is [xmin, ymin, xmax, ymax]\n",
    "\n",
    "# Display the multipolygon\n",
    "fig = pyplot.figure(1, dpi=90)\n",
    "ax = fig.add_subplot(111)\n",
    "\n",
    "shmp(multi, ax, show_verticies, extent, ORANGE, al, 'multipolygon')\n",
    "\n",
    "pyplot.show()\n",
    "\n",
    "# area\n",
    "area = multi.area\n",
    "print(\"The area of the multi-polygon is\", area)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### Convert the multipolygon to a binary mask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[  0   0   0   0   0   0   0   0   0   0]\n",
      " [  0 255 255 255 255   0 255 255 255   0]\n",
      " [  0   0 255 255 255   0   0 255   0   0]\n",
      " [  0   0   0 255 255   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0 255   0]\n",
      " [  0   0 255 255   0   0   0 255 255   0]\n",
      " [  0   0 255 255   0   0   0 255 255   0]\n",
      " [  0   0 255 255   0   0 255 255   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0]]\n",
      "(10, 10)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPkAAAEICAYAAACd9lKYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEatJREFUeJzt3Xu0HWV9xvHvQxIuCZfQhVVIQAIoiFIKTTFciiwSCnJ3\n1baAtJDKyqKIgkWxUmnRqlBLFaq2NI2VW4BKYLEUBLFCIlRIDYSKIdAiQi4EwjUJN7n9+se8B4dD\n9t5zTmayz7x9Pmudtfbsuf32zDz7fWf2PrMVEZhZvjbodwFm1iyH3CxzDrlZ5hxys8w55GaZc8jN\nMrdeQi7pIklnr491jQSSzpF0ec3LvFHSCV3GXyzpizWt641lSTpA0rI6llsHSXMlnVTTsmrfT8Ml\naSdJjXyeXUvIJT0s6UVJz0l6RtINkrYdGB8RJ0fE39axrv+vIuKDEXEJgKQTJd3e75rK0jEwrd91\n9FvaN6+lLAz8faOfNdXZkh8REZsCWwOPA1+vcdlrJWl00+swG4Y7ImLT0t+p/Sym9u56RLwEzAF2\nHXhubd0/SWdIWilphaTppWkPk7RQ0mpJSyWdUxq3vaSQ9FFJS4BbUq/h4+UaJP1M0ocG11aaf3pa\n9jOSTpb0u2meZ8vvupJ2lHSLpKckPSlptqTxpfGfkbRc0hpJD0iaupZ1jpF0paRrJG04aNyktM4N\n0vC/SlpZGn+ZpNPT47mSTpL0HuAiYO/USjxbWuSWaXuskTRf0o6d9pOkqyU9JmmVpB9Lem+naXuR\ndBmwHfC9VNOZ6fkjJS1Kr3Fuqn1gnpC0U2n4Tacbko6SdE86Dn4h6ZDSKt8p6T/T67xZ0lal+aZI\n+kla539LOqA0bpKkeWm+HwJbsR6l7THwmpaoyylsOsYfTrU+JOmY0riTJN2fjt8by73mtYqIdf4D\nHgampcdjgUuAS0vjLwa+mB4fALwKfAEYAxwKvABsWRq/G8Ub0G9R9AqOTuO2BwK4FBgHbAL8ETC/\ntK7dgaeADddS58D8FwEbA78PvARcB/wmMAFYCXwgTb8TcBCwEfA24MfABWnczsBSYJvSsndMj88B\nLk/13ZBe/6gO224J8Dvp8QPAQ8B7SuP2SI/nAielxycCtw9azsXpde8FjAZmA1d12Wd/BmyWXtsF\nwD1d9teyoRwDafjdwPNp+40BzgQeHNgvaT/s1GGdewGr0rwbpP2yS2k7/CItf5M0fF4aNyFtg0PT\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0186e529b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Python package imports\n",
    "from satsense.util.conversions import multipolygon2mask as mp2m # conversion from multipolygon to mask\n",
    "\n",
    "# parameters\n",
    "rows = 10\n",
    "cols = 10\n",
    "default_val = 255\n",
    "all_touched = False\n",
    "binary_mask1 = mp2m(multi, rows, cols, default_val, all_touched)\n",
    "\n",
    "# print and display mask\n",
    "print(binary_mask1)\n",
    "print(binary_mask1.shape)\n",
    "pyplot.imshow(binary_mask1, cmap='gray', origin='lower')\n",
    "pyplot.title('Binary mask with all_touched = False')\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[  0   0   0   0   0   0   0   0   0   0]\n",
      " [  0 255 255 255 255 255 255 255 255 255]\n",
      " [  0 255 255 255 255 255 255 255 255   0]\n",
      " [  0   0 255 255 255 255   0 255   0   0]\n",
      " [  0   0   0 255 255 255   0   0 255 255]\n",
      " [  0   0   0   0   0   0   0 255 255 255]\n",
      " [  0   0 255 255 255   0 255 255 255 255]\n",
      " [  0   0 255 255 255   0 255 255 255 255]\n",
      " [  0   0 255 255 255   0 255 255 255 255]\n",
      " [  0   0 255 255 255   0 255 255   0   0]]\n",
      "(10, 10)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f01bc5dac18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# parameters\n",
    "all_touched = True\n",
    "binary_mask2 = mp2m(multi, rows, cols, default_val, all_touched)\n",
    "\n",
    "# print and display mask\n",
    "print(binary_mask2)\n",
    "print(binary_mask2.shape)\n",
    "pyplot.imshow(binary_mask2, cmap='gray', origin='lower')\n",
    "pyplot.title('Binary mask with all_touched = True')\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Saving binary mask to file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Binary mask 1 is saved at  /home/elena/DynaSlum/Data/misc/simple_example_multipolygon_mask1.tif\n",
      "Binary mask 2 is saved at  /home/elena/DynaSlum/Data/misc/simple_example_multipolygon_mask2.tif\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/elena/anaconda3/envs/satelite/lib/python3.5/site-packages/rasterio/__init__.py:193: UserWarning: Dataset has no geotransform set.  Default transform will be applied (Affine.identity())\n",
      "  s.start()\n"
     ]
    }
   ],
   "source": [
    "# Python and satsense imports\n",
    "import os.path\n",
    "from satsense.util.mask import save_mask2file\n",
    "\n",
    "# raster filenames\n",
    "path = '/home/elena/DynaSlum/Data/misc/'\n",
    "ext = 'tif'\n",
    "fname1 = 'simple_example_multipolygon_mask1' + '.' + ext\n",
    "mask_fullfname1 = os.path.join(path, fname1)\n",
    "\n",
    "fname2 = 'simple_example_multipolygon_mask2' + '.' + ext\n",
    "mask_fullfname2 = os.path.join(path, fname2)\n",
    "\n",
    "# save\n",
    "save_mask2file(binary_mask1, mask_fullfname1)\n",
    "print(\"Binary mask 1 is saved at \", mask_fullfname1)\n",
    "save_mask2file(binary_mask2, mask_fullfname2)\n",
    "print(\"Binary mask 2 is saved at \", mask_fullfname2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Loading binary mask from file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nUg+nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0186d4a7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# satsense import\n",
    "from satsense.util.mask import load_mask_from_file\n",
    "\n",
    "saved_mask1 = load_mask_from_file(mask_fullfname1)\n",
    "\n",
    "f, (ax1, ax2) = pyplot.subplots(1, 2, sharey=True)\n",
    "\n",
    "ax1.imshow(saved_mask1, cmap='gray', origin = 'lower')\n",
    "ax1.set_title('Saved binary mask1')\n",
    "\n",
    "saved_mask2 = load_mask_from_file(mask_fullfname2)\n",
    "\n",
    "ax2.imshow(saved_mask2, cmap='gray', origin = 'lower')\n",
    "ax2.set_title('Saved binary mask2')\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Conversion of binary mask to multipolygon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Ring Self-intersection at or near point 8 4\n",
      "Ring Self-intersection at or near point 8 4\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Valid multi-polygon1 with connectivity 4? True\n",
      "Valid multi-polygon1 with connectivity 8? True\n",
      "Not a valid polygon!\n",
      "Valid multi-polygon2 with connectivity 4? True\n",
      "Valid multi-polygon2 with connectivity 8? False\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0186a2a630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nwgXdzCwR/x+7XSyOMFMNrQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f01868a69e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The area of the multi-polygon1 is 26.0\n",
      "The area of the multi-polygon2 is 56.0\n",
      "The difference of areas for multi-polygon1 with the original multipolygon is -1.5\n",
      "The difference of areas for multi-polygon2 with the original multipolygon is 28.5\n"
     ]
    }
   ],
   "source": [
    "# satsense import\n",
    "from satsense.util.conversions import mask2multipolygon as m2m\n",
    "\n",
    "# parameters\n",
    "t=(1.0, 0.0, 0.0, 0.0, 1.0, 0.0)\n",
    "conn8 = 8\n",
    "conn4 = 4\n",
    "\n",
    "# convert \n",
    "multi1_4 = m2m(saved_mask1, saved_mask1 ,t, conn4);\n",
    "multi1_8 = m2m(saved_mask1, saved_mask1 ,t, conn8);\n",
    "\n",
    "print(\"Valid multi-polygon1 with connectivity 4?\", multi1_4.is_valid)\n",
    "print(\"Valid multi-polygon1 with connectivity 8?\", multi1_8.is_valid)\n",
    "\n",
    "multi2_4 = m2m(saved_mask2, saved_mask2 ,t, conn4);\n",
    "multi2_8 = m2m(saved_mask2, saved_mask2 ,t, conn8);\n",
    "\n",
    "print(\"Valid multi-polygon2 with connectivity 4?\", multi2_4.is_valid)\n",
    "print(\"Valid multi-polygon2 with connectivity 8?\", multi2_8.is_valid)\n",
    "\n",
    "# display the multipolygons\n",
    "_, (ax1, ax2) = pyplot.subplots(1, 2, sharey=True)\n",
    "\n",
    "shmp(multi1_4, ax1, show_verticies, extent, ORANGE, al, 'multipolygon1 \\n connectivity 4')\n",
    "shmp(multi1_8, ax2, show_verticies, extent, ORANGE, al, 'multipolygon1 \\n connectivity 8')\n",
    "\n",
    "pyplot.show()\n",
    "\n",
    "_, (ax1, ax2) = pyplot.subplots(1, 2, sharey=True)\n",
    "\n",
    "shmp(multi2_4, ax1, show_verticies, extent, ORANGE, al, 'multipolygon 2 \\n connectivity 4')\n",
    "shmp(multi2_8, ax2, show_verticies, extent, ORANGE, al, 'multipolygon 2 \\n connectivity 8')\n",
    "\n",
    "pyplot.show()\n",
    "\n",
    "# areas\n",
    "print(\"The area of the multi-polygon1 is\", multi1_4.area)\n",
    "print(\"The area of the multi-polygon2 is\", multi2_4.area)\n",
    "\n",
    "print(\"The difference of areas for multi-polygon1 with the original multipolygon is\", multi1_8.area - area)\n",
    "print(\"The difference of areas for multi-polygon2 with the original multipolygon is\", multi2_8.area - area)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Saving multipolygons to a shapefile\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Please, check with a GIS weather this file contains a valid polygon! \n",
      " /home/elena/DynaSlum/Data/misc/simple_example_multipolygon.shp\n"
     ]
    }
   ],
   "source": [
    "# satsense import\n",
    "from satsense.util.shapefile import save_multipolygon2shapefile as sm2sh # saving of multipolygon to shapefile\n",
    "\n",
    "# parameters\n",
    "# filename\n",
    "ext = 'shp'\n",
    "fname = 'simple_example_multipolygon' + '.' + ext\n",
    "\n",
    "# full filename\n",
    "shapefname = os.path.join(path, fname)\n",
    "# saving\n",
    "sm2sh(multi1_4, shapefname)\n",
    "\n",
    "print(\"Please, check with a GIS weather this file contains a valid polygon! \\n\", shapefname)"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda env:satelite]",
   "language": "python",
   "name": "conda-env-satelite-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.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}