{"cells":[{"metadata":{"_uuid":"d27d4a96f07e3736b68ab94644d2976c0f017c2f"},"cell_type":"markdown","source":"# Playing with the images of the Protein Altas\n\n## Introduction\n\nIn this notebook, several image processing techniques are experimented. \nThe objective is just see the result of them when applied to the images of this dataset.\n\nThis is largely based on the tutorials of the correspoding python library.\n\nThe images are [fluorescence microscope](https://en.wikipedia.org/wiki/Fluorescence_microscope) images with four channels. The protein of interest is visualized in green, while reference markers for microtubules (red),\nendoplasmic reticulum (yellow) and nucleus (blue) outline the cell. This is why the images are suffixed the the\ncolor even though they are grayscale PNG images. For more information about the images \nof the Protein Atlas dataset see https://www.proteinatlas.org/humancell/organelle"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"7b7e0b338422f1da7dc272462ec2bb28350276ba"},"cell_type":"code","source":"import numpy as np\n\nimport matplotlib.pyplot as plt\nimport matplotlib\n%matplotlib inline\n\nplt.gray()\n\nimport skimage.filters\n\nimport scipy.ndimage\n\nimport sklearn.feature_extraction\nimport sklearn.cluster\n\nimport skimage.feature\nimport skimage.transform\n\nimport PIL\n\nimport sys\nfor name, module in sorted(sys.modules.items()):\n    if name in ['numpy', 'matplotlib', 'skimage', 'scipy', 'sklearn', 'PIL']:\n        if hasattr(module, '__version__'): \n            print(name, module.__version__)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a56a66abd0d9940cb1b2ad29e7c8b49e358bce14"},"cell_type":"markdown","source":"## Plotting the image with the histogram\n\nThe histogram is centered in the mean to be more meaningful."},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"92fb72da69a1216a38d9c689c8889d3a3c2c7ec7"},"cell_type":"code","source":"def plot_file(filename):\n    image = plt.imread(filename)\n    hist = np.histogram(image - image.mean(),\n                        bins=np.arange(image.min(),\n                                       image.max(),\n                                       1/256))\n\n    fig, axes = plt.subplots(1, 2, figsize=(8, 3))\n    \n    axes[0].imshow(image, interpolation='nearest')\n    axes[0].axis('off')\n    axes[0].set_title(filename[-20:])\n    \n    axes[1].plot(hist[1][:-1], hist[0], lw=2)\n    axes[1].set_title('histogram of gray values')\n    \n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"931de193fe7a98f16a58d5afbfd0b019dfde46ee"},"cell_type":"code","source":"plot_file('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_red.png')\nplot_file('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_green.png')\nplot_file('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\nplot_file('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_yellow.png')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"270dc97f487adf68f6d24a91873002c1cfc84472"},"cell_type":"markdown","source":"## Cutting\n\nThe images are generated by marking the proteins with a fluorescent molecule.\nWhen the pixel have more intensity, then we see that in that point of the image\nthere are more protein of that kind.\n\nThis competition have the target of classify the images by guessing\nwhere is the main occurrence of the protein whose intensity is illustrated by the green image.\n\nThe image with uuid '002daad6-bbc9-11e8-b2bc-ac1f6b6435d0' used throughout the notebook is\nclassified by a human and supported by scientific evidence that the protein marked in the green image \nhave the main occurrence in the [Golgi apparatus](https://en.wikipedia.org/wiki/Golgi_apparatus)\n\nAs you can see in the plotting above, it occurs in other organelles but there are hot spots around\nthe nucclei. Maybe we can use some threashold to cut off the noise."},{"metadata":{"trusted":true,"_uuid":"f7306be5140ef8ae15dd89f45bb4b73552786f9f"},"cell_type":"code","source":"def plot_cut(uuid, title, threashold_function):\n    \"\"\"Takes an uuid, a title for the plot and a function to apply on the image and obtain a threashold\n    and plot the black and white image generated by the binary result of the inequality image > threashold\"\"\"\n    \n    def set_title(title, threashold):\n        if np.shape(threashold) != ():\n            plt.title('%s threashold=[%s]' % (title, str(np.shape(threashold))))\n        else:\n            plt.title('%s threashold=%0.3f' % (title, threashold))\n\n    red    = f'../input/train/{uuid}_red.png'\n    green  = f'../input/train/{uuid}_green.png'\n    blue   = f'../input/train/{uuid}_blue.png'\n    yellow = f'../input/train/{uuid}_yellow.png'\n    \n    fig = plt.figure(figsize=(15, 4))\n    fig.suptitle(title, fontsize=24)\n    \n    plt.subplot(1,4,1)\n    image = plt.imread(red)\n    threashold = threashold_function(image)\n    plt.imshow(image > threashold)\n    set_title('red', threashold)\n\n    plt.subplot(1,4,2)\n    image = plt.imread(green)\n    threashold = threashold_function(image)\n    plt.imshow(image > threashold)\n    set_title('green', threashold)\n\n    plt.subplot(1,4,3)\n    image = plt.imread(blue)\n    threashold = threashold_function(image)\n    plt.imshow(image > threashold)\n    set_title('blue', threashold)\n\n    plt.subplot(1,4,4)\n    image = plt.imread(yellow)\n    threashold = threashold_function(image)\n    plt.imshow(image > threashold)\n    set_title('yellow', threashold)\n\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a724a690d67c685ad6487d210dd7c53d6e4c8f6a"},"cell_type":"markdown","source":"### Starting with simple threasholds"},{"metadata":{"trusted":true,"_uuid":"a17cb270106c739bb36382e4e6af9289c5e27aa1"},"cell_type":"code","source":"plot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"zero\", lambda image: 0)\n\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"%5 percentile\", lambda image: np.percentile(image, 5))\n\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"mean\", lambda image: image.mean())\n\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"%95 percentile\", lambda image: np.percentile(image, 95))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"72821fcc056d700c1de2c98782d00ab2020583c0"},"cell_type":"markdown","source":"In the plots above, we see that the mean value of intensity is a robust choice to outline locations \n(red, blue and yellow channels). The nucleus is outlined with few artfacts.\n\nTo the green channel, the 95% percentile is a better choice. With this threashold\nwe can see the Golgi apparatus outlined."},{"metadata":{"_uuid":"2ac3e4253230ebead65ebd1724034c06e1e45172"},"cell_type":"markdown","source":"### Using skimage.filters thresholds"},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"700262866caba2f63b9f3a595cbfe252ab284216"},"cell_type":"code","source":"plot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_otsu\", skimage.filters.threshold_otsu)\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_yen\", skimage.filters.threshold_yen)\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_isodata\", skimage.filters.threshold_isodata)\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_li\", skimage.filters.threshold_li)\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \n         \"skimage.filters.threshold_local(image, block_size=3)\", \n         lambda image: skimage.filters.threshold_local(image, block_size=3))\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \n         \"skimage.filters.threshold_local(image, block_size=7)\", \n         lambda image: skimage.filters.threshold_local(image, block_size=7))\ntry:\n    plot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_minimum\", skimage.filters.threshold_minimum)\nexcept:\n    pass\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_niblack\", skimage.filters.threshold_niblack)\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_sauvola\", skimage.filters.threshold_sauvola)\nplot_cut('002daad6-bbc9-11e8-b2bc-ac1f6b6435d0', \"skimage.filters.threshold_triangle\", skimage.filters.threshold_triangle)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"600b194b93e3cb1cbab473c7478ecbcd3ae676ec"},"cell_type":"markdown","source":"Each threashold function makes a different black and white representation of the grayscale (intensity level) image.\n\n(Maybe) We can use this as a compressed input (I sweare that I am not doing [early optimization](http://wiki.c2.com/?PrematureOptimization):) or a feature [engeeneared](https://en.wikipedia.org/wiki/Feature_engineering)\nwith our knowledge of the meaning of the data. What do you think? Comments are welcomed."},{"metadata":{"_uuid":"0478e250a502ab2da1834c3995ea3e36cfc41cb6"},"cell_type":"markdown","source":"## Converting grayscale into a bitmap (boolean array) packet in 64bit words\n\nTake the yellow channel with the Li's threashold"},{"metadata":{"trusted":true,"_uuid":"47e1230d06eb463aa0123641f9868ab4681cb9f8"},"cell_type":"code","source":"image = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_yellow.png')\n\ncutted = np.array(image > skimage.filters.threshold_li(image))","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"9a02149277f9f5d452945cb9046de0a32aabd972"},"cell_type":"code","source":"cutted.shape, cutted.dtype","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"468de36cf7d83400bc86dd8af28923d2ac20f4e9"},"cell_type":"code","source":"cutted.shape[0] * cutted.shape[1]","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"010ce390394592c2a7f0764a5398bdc88e3596a8"},"cell_type":"markdown","source":"We have got 512x512 matrix of boolean values. That is 262144 bits."},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"dfddaa6f49ee76a740fab7651e0f477d226949f6"},"cell_type":"code","source":"(cutted.shape[0] * cutted.shape[1]) / 8","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"552652688ff5d651a1238bdafdc6b72c08e3867b"},"cell_type":"code","source":"(cutted.shape[0] * cutted.shape[1]) / 8 / 8","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9464eb59139a6bf1ed7deb39b54a45413a562d7a"},"cell_type":"markdown","source":"We can represent this information with 32768 bytes or 4096 [64bit](https://en.wikipedia.org/wiki/64-bit_computing) words."},{"metadata":{"trusted":true,"_uuid":"c1d1f41a4fb135d4febda7622f6e06c6e891caa6"},"cell_type":"code","source":"packed = np.zeros((int(cutted.shape[0] / 8), int(cutted.shape[1] / 8)),\n                  dtype=np.uint64)\n\nfor x in range(cutted.shape[0]):\n    for y in range(cutted.shape[1]):\n        new_bit = np.uint64(int(cutted[x][y]) << (x % 8) << ((y % 8) * 8))\n        packed[int(x/8)][int(y/8)] = np.bitwise_or(packed[int(x/8)][int(y/8)], new_bit)\n\nplt.figure(figsize=(15, 4))\n\nplt.subplot(1,3,1)\nplt.title(f'original {str(image.nbytes)} bytes')\nplt.imshow(image)\n\nplt.subplot(1,3,2)\nplt.title(f'cutted {str(cutted.nbytes)} bytes')\nplt.imshow(cutted)\n\nplt.subplot(1,3,3)\nplt.title(f'packed {str(packed.nbytes)} bytes')\nplt.imshow(packed)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"39bdf2c77cce5300a0299598aca83db5f81d327e"},"cell_type":"markdown","source":"To show that the information was not lost we can recreate the boolean typed array from the one packed in 64bit integers"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"516001eff872132b45c35ec3ba63445d76110aac"},"cell_type":"code","source":"re = np.zeros((cutted.shape[0],cutted.shape[1]), dtype=bool)\n\nfor x in range(cutted.shape[0]):\n    for y in range(cutted.shape[1]):\n        re[x][y] = np.bitwise_and(np.uint64(1 << (x % 8) + (y % 8) * 8 ), packed[int(x/8)][int(y/8)])\n\nplt.figure(figsize=(15, 4))\n\nplt.subplot(1,3,1)\nplt.title('original')\nplt.imshow(image)\n\nplt.subplot(1,3,2)\nplt.title('cutted')\nplt.imshow(cutted)\n\nplt.subplot(1,3,3)\nplt.title('decompressed')\nplt.imshow(re)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"39434da3158613cd812f06b14b82a80da159c091"},"cell_type":"markdown","source":"With this approach, we can have taken an 1 Magabyte image and converted into a meaningful 32 Kilobyte one.\n\nThis 64x64 grayscale image below does not looks like the 28x26 images from the [n-mnist](https://www.garrickorchard.com/datasets/n-mnist) dataset:"},{"metadata":{"trusted":true,"_uuid":"1a6148976e6de6cfa267fccae3310c925dc543d9"},"cell_type":"code","source":"plt.imshow(packed)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"4458681ae0d6cd20a0358b4e7bea66352d9993cb"},"cell_type":"markdown","source":"![notmnist.png](attachment:notmnist.png)","attachments":{"notmnist.png":{"image/png":"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rq/vv/9exHqM7uGHH552m37jTl1c69x8880Zb9NV+6bbrWvM3n33Xc86p556qojzWVeTOuZYv34vvPCCZ3ldB6PHLP/8888i1nNe6HqyPffcM22bAGD//fcXce3atUX8yiuviFi/Z1u3bvXsY/z48SJetWqViPfee28Rf/755yI+5JBDPNv84YcfRKzz7ZRTThFx3bp1RXzBBReIuGHDhp596Nwp9DqhMPO/FCL9PvnlpK5DmzlzpojPPfdcEU+YMEHEOidvueUWzz50fUBq3x3XuH4ioiRL1+/51Zzpc4758+en3X4SasHDzPepz+X189A1y4D3nO6ll15KG7/66qsiPuecc0Sszxn92hV2LlN+c0ZERERERJQAvDgjIiIiIiJKAF6cERERERERJUDR15xpQepGZs+eLWJdc5YNepyvHlvs125X3Zpr3jM9XvbCCy/0bCPdXFX5rCHSc3fp+jLAO9Z3xowZIh46dKiIJ0+eLGJdk/fee+959jF8+PC07QpS8+jSp08fEbty+IQTThCxrnPza8egQYNEPHHiRBHrmqCddtpJxLpGDfDWId1www2VtLgwFHrNXJx0HZr+rLz55psifvDBB0V82WWXiXjw4MGefTz33HMi1vNREhFVZXpOMz+LFy9O+3gSas7CcNVy+Z0n6eOUPic89NBDRaxrzlLn+QW8tfuA9zxRn6cHrZfmN2dEREREREQJwIszIiIiIiKiBODFGRERERERUQJUuZqzINavX5/1fbjG9eqxsUHGAbvqm/TY45EjR4pY15cB4cfLxq169epiLq3u3buLxzds2OBZR8/Ntfvuu4t40qRJIi4tLRXxl19+KeK3337bsw9dW/PBBx+IWI9hdtXq+I2T1nPL6TmmdO3gokWLRHzXXXd5ttmzZ08R77HHHmn3oel8XLNmjWeZHj16iFi/H37vGRUm1/j/O++8U8RnnHGGiJs2bepZ54orrhAxa86IqKpJV2Ner1495/rr1q0Lvf1C5nfO7DqXWrp0qYgHDBggYj0H8m233ebZhz7n8zuvDoLfnBERERERESUAL86IiIiIiIgSgBdnRERERERECcCLMyIiIiIiogTgDUF8dOrUKfZt6uJEXYSpb+Lw/fffi/jAAw/0bLNmzZoi1jcA0UX67dq1E/F1110n4iFDhnj2kZQJCbdt24aff/65ItYTg7ds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TXFZv349Pv3004r4888/F48feeSRnnV0HdoTTzwh4jvuuEPEP/74o4hLS0tF7Nc363xu0qSJiJs1aybi5s2bizjI/SWmT58uYl1DpufG1Mv7cdVqJumcj9+cERERERERJQAvzoiIiIiIiBKAF2dEREREREQJwIszIiIiIiKiBDDZmPS0MnXr1rWdO3euiMeMGSMe7969u2cd3b44ilSTQBf46kl/v/rqKxH/+9//9mxjwoQJIl61apWIXTcdieNmBNbanLwh1atXt6mTAn/88cfi8dQbzfxmyJAhItavT5ImHEwa12ujC3wfeughzzb0pJEHH3ywiDdv3vy5tVbOZp0lxhjRkegbWOgY8PZPp5xyioj1a6JfszfffFPE48aN8+zjyy+/FPHy5ctFrG/is3nzZs82UumJswFvcXZqHwwAhx12mIiPOOIIEdetW9ezzdGjR4v4gQceELGeqDUbn7Vc9T06d6go5Kzv6d69u33//fcr4nr16onHi+WcJil037No0SIRf/LJJyLWN64CvOdWGzduFHG++p4DDjhAPK6fC+C9oYe+MZrrZkz69du0aZNnH/p3P//8c9p9zp49W8QzZswQsd/NPPQ2XILcRC8h53iB+h5+c0ZERERERJQAvDgjIiIiIiJKAF6cERERERERJUBOa870+FldH9G3b1/POsccc4yId9ttNxG3adNGxE2bNhWxnpDPb/I7PcZWjy/WdR66DmTx4sUi1mOcAWDevHki/u9//ytiXXuia9D8xs/q904/N11Tlo33Oldjrxs3bmxTJ56uWbOmeFxPSAi4xyAnZPxxQdC5pXPJr36xf//+ItZj4V955ZWc1X3oelddI9W2bVvPOrqu7qeffhLxunXrRKzH7rds2VLEui/yW0e/Rrov2rp1q4iDvA/6d3of33zzjYhffvllEU+aNMmzTd3ufHzWWHNGEeSs76lTp47t2LFjRaxrQNu3b+9ZR9frdujQQcTt2rUTse6rdF2bX9+jf6fPx/TjtWrVErHue/xqkzZs2JBRvHr1ahHPnz/fs01dv6TrzfUk0T/88IOI16xZ49mmS2r/9uuvv+at79GTPV977bWedV544QUR63NL3Rfr89+kcE0ero9rcdxDIUdYc0ZERERERFQoeHFGRERERESUALw4IyIiIiIiSoBc15ytALAAQDMAKx2LJ0EhtDOf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2bIlhg8fXhnrGrMgxy3XPpuLY4zreOBHt8v1tORc0J+332dXVlYm4ieffFLEQfp2IOIg1ERERERERBQPnpwRERERERElAE/OiIiIiIiIEoAnZ0RERERERAkQ6YEglD1Bijr1QKWaHlhXFy/u3LlTxH4Fl2+88YaIly5dmnadSeZ6AIguth0zZoyI27Zt61mm/gw1PWC0Hpj5vffeE7FfgamreFbPs2nTJhF/+umnnnmmTp0q4meffTZt3KxZMxHrhw/UqFHDsw49uOxnn33mmSZX5s+fjzPOOKMy/vnPfy5ev/baaz3znHjiiSJ2De7pKqz22456v9YP4HnppZdEPH/+fBGvX79exH75mOmAvPp9pD5I5SetW7cW8dFHHy1i/cAYTQ/C7Nf39O3bV8RxPhAkCr3N/IrymzZtKuL77rtPxAMHDky7jiADyerf+e2D2ZbpwweCLMM1YPldd90lYt3fAcBDDz0k4jgfCBJGar7r3Kf88ssFnS9ZHNQ8rYYNG6J///6VcRz7Wz4k4WEecQjyPvTxoF27dqHWVRhbloiIiIiIqMjx5IyIiIiIiCgBeHJGRERERESUAKw5SwjXPfHNmzf3zHPwwQdntMxMXweASZMmOadJKleNma77GDVqlIhLSkpErOusAG+dh66rOuGEE0S8bNkyEeu6QL/73/U9zK6BXoMMPqt/98EHH4h40KBBIp44caKIXYNtA976RF1PlU8fffSRiIcNG+aZ5le/+pWIa9asKWLX5663m992mDVrloh79eolYl1Pk+/amV21489//rOI9SDLjz76qIiDtNtv8PR8Sd12eru2atXKM/3YsWNFrPtqV12VHqx+ypQpnnW8+eabIv7yyy9FvHLlShG72r3//vt71pFapwkA++67r2eaqFyDzbpy5fLLL/f87rXXXhPxokWLQrYuut122w316tXL2/opuoYNG1b+nMv6qWrVqolB2nMxYHQYrmOhrq3XNe3btm3zLFPXfGdaA54v+jgf9hjNK2dEREREREQJwJMzIiIiIiKiBODJGRERERERUQKw5iwhXLUk+n5bIPNxbXTNga530mMoAcDnn3+e0TryRb8XwDuezIABA0T85JNPilhvAz2/3+e9evVqEZ955pkidtWYZWPMG9e4QX6/0+165513RPzwww+L+De/+Y2zHX7jq+WT33hUP9mwYYPn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pl3njh07RLx48WIRv//++555Jk6cKGI9Jt7s2bPTrjOPY0uG6nu6detm//Of/1S+pvdHyi+/vkfnWGqd2bHHHht2VRn3PT179sx735MvrmNCMY2V6Sfsn3ReBjCk4uchAF6KpzlURTB/KCzmDkXB/KGwmDsUBfOHAgvyKP2nAEwG0NEYs8QYcwGAOwAcbYyZA+DoipjIg/lDYTF3KArmD4XF3KEomD8UlfO2RmvtoF281CfmtlARYv5QWMwdioL5Q2ExdygK5g9FlfUHglA5V83AQQcdlPH81atXF7G+R1ffNz1r1iwRu+7t91tmvjRo0AB9+vyvX2vbtq1zHlddi3592bJlIl66dKlzHUn5fHIth3UeeRP1nvYgYz7dfvvtIh42bFikdfrVnOl2NGrUSMS6Xsy1n/gJM74V7ZquS+rVq5dnGl1DpmM9Xp2uNQyynbdv3y7ikpISEev6sbPOOkvE69ev9yzTVX+tX9e5pffLpPdF1apVwx577FEZ16hRI4+toTBS9w32dbnhOu7o7VBs24WPESIiIiIiIkoAnpwRERERERElAE/OiIiIiIiIEqC4btJMCL97ZfX9/U2bNhVx37590y5Tj2Hjx1VD8MILL4i4kMaJqFOnDnr37r3L1/1q8vRnpqfRr+uavNWrV2faTCoQQeqocrF/1K5dW8QdOnTI+jo1/T6D9DWaa8zAMHVsVdltt90m4ssvv9wzTabjXOraLL1N/Jana8y0I444QsSfffaZiOfPn++ZZ/LkySLWY6HpZaxZsyZtG/zard9bPmuDrbViH9O14pRfQcY5S/3uUFXrzHNN16v+4Q9/EPG2bdtEXGyDvRfXuyEiIiIiIipQPDkjIiIiIiJKAJ6cERERERERJQBrzrIgSM2ZHqerS5cuInbVR/lx3Qs9fvz4tK/73bOblDFkateujR49euzy9SA1LK7P59tvv037epI/H0qeIHVW+r76zz//PO0yXPzWoeuGdL1rWVmZcxkurnEcWWOWmebNm4s4SN/jyjdXLgWpvdH0eGw6l3QMQIxX6bdeXaf20ksvifif//yniOfOnetZh6veONdS15/vtpDEmrNk0vvJkiVLRKzHYGTNGREREREREcWOJ2dEREREREQJwJMzIiIiIiKiBODJGRERERERUQLwgSBZEOQhEf369Uv7epACer0eXQT91VdfiXjhwoVpl5fkQteSkhK0b99+l6/H8cCBjRs3pn2dDwQpHkFyPWqBsS5o3n13b3d70003ifiBBx4QcRwPNtD7ho4vvPBCET/00EMZryPTAbuT3NckwSeffCLizp07e6Zp1qyZiBs3biziOPpEnW+uXAqyXV3TtGvXTsS///3vRXz++eeLWA/YDQB//etfRZzPh3DstttuqFevXt7WT9E1atSo8me/fpzip/uzp556SsT6mFMo2yVov8wrZ0RERERERAnAkzMiIiIiIqIE4MkZERERERFRAhTGTZpFQN8Pe+qpp6adPsh9qfo+el0j85///EfEK1asSLuOJNeBVK9eHaWlpbt8PY76iiS/f8q9XNzDvnTp0qy3wTVY8YgRI0Q8ZMgQER988MHOdaxbty7t67pv4kC86d13330i9qsDrF27toibNGki4n333VfE3bp1E/GBBx6Y9nXAO2C5pnPLVZMWhF6mjnX91t133+1ZRps2bUSs69YyrZGMYu3atRg9enRlXKNGjZytm9yCDEK9bdu2yp/XrFmT9TaR+/uYqx620PHKGRERERERUQLw5IyIiIiIiCgBeHJGRERERESUAKw5i0GQ2q1OnTqljcMs0zUO0+TJk9O+rsdQyuV9+GFkuwaobt26aV9nTVrVovePfND31cdRq6X3I73fv//++yIOUnM2b968tK+76gH8Xteff2rtUVUbXzC15mVXv1u7dq2IZ82aJeIXXngh7Tpat27t+d3hhx8u4t/+9rci1rkRZLu4csF1XNP9sN8+cemll4r4gw8+EPHYsWPTriNOCxcuxLnnnpuz9REVA1c/oY8PSThex4lXzoiIiIiIiBKAJ2dEREREREQJwJMzIiIiIiKiBGDNWQyC1Ifpcc0yrZ/yu5df32Oraww+++yzjJeZVD/88APWr19fGesxz4KMVeK6h7l58+YiDjI2UyGNFZcJ/b6q4jhVrtqXOORjbBbXfv/kk0+K+PTTT/dMo8c1e+SRR9IuM0y+6Fq4pI5jE6TWIWo/4Te9axk6f3UbdB4sWbLEs4wxY8aI+OmnnxbxsGHDRHzzzTeLuH79+p5l6nZnul1dfZMfXYOWy5ozIDdjJlJuJL02n4oDr5wRERERERElAE/OiIiIiIiIEoAnZ0RERERERAnAG6FjEOSe+X79+qV9Xd//r++jD1Kj8Pnnn4t4/vz5InaN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TzxRxC+88IKI9dhEuqbIbx1NmzYVsa7nOfLII0XcvXt3EfvVZGzevFnEerw21zhUSa11Sie1zV27dhWv6e0IAO3bt9/l/ID7Pvsgn5muyfnyyy9FPGXKFBHrsQ2//fZbEfvVbvn9Lh2dL371To0aNRJxly5dRKxzUPdnQeqGtH//+9+VP+tazmzSYyxedtll4nW/OhBXX+OqHQlSW6L3YU33Ja5xzvzWqXNWH/t+//vfi/iKK65Iuw6/drm4PjtdzwIAw4cPF3E+j4U//vgjNm3aVBnXqlUrb20hryDjnG3cuLHy5zjGC8xEaluCjH+bD65j4cCBA9PGYSTlvWu6rwk73iuvnBERERERESUAT86IiIiIiIgSgCdnRERERERECZDXmrOWLVuKuHXr1p5pMr2/t0aNGiIuKSkRsV9tQ7169dK2S9dTHHPMMSJu1aqViP3uMXXVXOgxG3SNWf/+/T3LXL9+vYgLZQyksFI/M/1edY0B4M0FXVelPx8dB6lT0Nta58Kll16aNs6FV1991fM7PfbZjBkzROwa863QcqusrEzUJZ555pni9SBjPGlx1LHoZeharr59+0ZeRz646p2C1O999dVXIk7N4+3bt0dtYmCbNm0S42RddNFF4vW77rrLM0/9+vVF7KoVcdUk+30+559/vojbtGkj4jlz5oh43bp1advUsGFDzzr0sU/XtzZr1kzEur7Rbx9xjU+k2zVt2jQR61piXX/st458HxtTj//6uwDlV5Cas9Rtlstap++//x6rV6+ujJs0aSJe99u/XH2NK84GfTwIsv+5ngGQD/p9+H12up2vv/56qHXl/90SERERERERT86IiIiIiIiSgCdnRERERERECcCTMyIiIiIiogTIaWVqjRo1RAHx+++/L17XBc2At+AxCUWBLn4Fz/p9zJ07V8RPPfWUiB988EERr1mzxrNM/VkU26DTWmoRqS7E9PvMr776ahG/8847Ir7llltErAd3dhWuu9oIuPM3TDGuHoB3/PjxIn744YdF/O6773qW4XogTaE/AEQzxogHxOzYsUO87tevuAr3kzoIZhK49p0gfZXuA7/77rtIbYoidVuPGDFCvDZx4kTP9PrBP/369RNx27ZtRRxkEG5NHy/1A0LyQb8Pv+28ZMkSEX/22Wci1v2X7rf14Nt++26x9V9UNS1cuBC//vWvK2O9b+y55565blIoYb5LJVGQ72+6P/vtb38bbl2h5iIiIiIiIqJY8eSMiIiIiIgoAXhyRkRERERElAAml/di161b13bt2rUynjRpknjdb8DpqDVmrsFQAe+Aphs3bhSxrvFZu3atiBcsWCDiL7/80rOOyZMni3j69Oki3rp1q4iDDBSYhBoza21OCm+MMWkTNchggDoX9CDVffr0EfHJJ58s4h49enjWoWtH9thjj7Tt2rRpk4h1/YXOCwB46623RKxrXBYuXOiZJ1WQfShPufSptbane7LojDE29XNo166deL1p06aeeXR+aIVQ/5oruj5PD8Ks95NevXqJWA84DQA333xz2nXmsu9J3Y+DDGisf9egQQMR6/evB3vef//9RVxWVuZZR/PmzUWsB5EuKSlJG+s26louANiyZYuIde2zHuhax59//rlnmR999JGIly9f7pkmletYGLLvylnf06NHD5v6XadWrVq5WC0FFGQQ6tTvhIcddhimTZuWl+89us504MCBnnkOPfRQEbuOdXXr1hWxrhst5uOc3vb6XGDlypUinjlzpohffvllzzJHjRol4m3btulJAvU9xfupExERERERFRCenBERERERESUAT86IiIiIiIgSIKc1Z8aY1QAWASgF4B24K3kKoZ35bONe1tomuVgRcydrmD/JUwhtBJg7ScV2ujF//BVCGwHmTlKxnW6B8ienJ2eVKzVmaq6KcaMohHYWQhvjVCjvl+1MpkJ4v4XQRqBw2hmXQnm/bGcyFcL7LYQ2AoXTzrgUyvtlO+PD2xqJiIiIiIgSgCdnRERERERECZCvk7OReVpvpgqhnYXQxjgVyvtlO5OpEN5vIbQRKJx2xqVQ3i/bmUyF8H4LoY1A4bQzLoXyftnOmOSl5oyIiIiIiIgk3tZIRERERESUADw5IyIiIiIiSoCcnpwZY/oaY2YbY+YaY67J5brTMcY8aoxZZYz5KuV3jYwxE4wxcyr+b5jPNla0qbUx5m1jzExjzAxjzOVJbWs2MH8itZG5w9wJjfnD/InQRuYOcydsG6t07gDMn4htLNj8ydnJmTGmGoC/A+gHYD8Ag4wx++Vq/Q6jAPRVv7sGwERrbQcAEyvifPsewJXW2n0BHARgWMVnmMS2xor5Exlzh7kTBfOH+RMWc4e5E1aVzR2A+RODws0fa21O/gE4GMAbKfG1AK7N1foDtK8tgK9S4tkAmlf83BzAbMf8m9W/HwD8LcttfgnA0Zm2tRD/VYH8uQTAVADbAYzKQXuZOwloWxy5w/xh/kTNn4ppOwD4DsATzB3mTgZ9T1sA4wGsA7ACwIMAdmfuMH8CfO9pBOAFAFsALAJwZpbbWzD5k8vbGlsCWJwSL6n4XVI1tdYuB4CK//dMN7G1tu5P/wA0BbANwLPZapwxpi2A7gA+zrStBaqo8wfAMgC3Ang02w1j7hRd7gDMn2yqCvkDlP+FfkrWWgXmDoozd/4BYBXKv+R2A3AYgIvjblgVzB2g+PPn7wB2oPw781kA/mmM2T8bDSu0/MnlyZnx+V2xPsd/AMo7q/ezsXBjTF0AzwO4wlq7MRvrSKCizh9r7Thr7YsA1mZzPcydSkWTOwDzJ8uKPn+MMQMBrEf5LT7ZWgdzp1xR5Q6AMgBjrbXfWWtXAHgdQKxfsKto7gBFnD/GmDoATgUw3Fq72Vr7AYCXAQzOwroKLn9yeXK2BEDrlLgVyv/am1QrjTHNAaDi/1UZzDsEwOO24pppnIwx1VGeZE9aa8dV/DpKWwtFVcqfrGDuVGLuhMD8qVRU+WOMqQ/gFgBXZqtBzJ1KRZU7FR4AMNAYU9sY0xLl9VGvx9WgKpw7QHHnzz4AfrDW/jfld18g/hP7gsyfXJ6cTQHQwRhTZoypAWAgys+Sk+pllJ9koeL/l4LMZIxpg/LL+qPjbpAxxgB4BMBMa+29KS+FamuBqRL5ky3MHeZOFMyfos6f/wfgEWvtYsd0oTB3ijp3AOBdlH+h3ojyk4mpAF6MozFVPHeA4s6fugA2qN9tAFAvrsYUdP7kssANwLEA/gtgHoDr811wl9KupwAsB7AT5Z3LBQAao/wWjzkV/zcKuKwbALybpXYegvJL2tMBfF7x79iwbS20f1Ukf25FFh7owNwp/txh/jB/Ms0flNcIzQBQoyK+CTE/EIS5U5y5U7GM3QB8A+B6ACUV878E4C7mDvPH0fd0B7BV/e5KAK/E2MaCzR9T8QYoJsaY/wK4w1qb9cJ8Kj7GmFsBtLLWnpvvtlDhYf5QJowxVwC4DcCmil/VBVAN5X9p7pG3hlFBMMaUAlgNYA9r7YaK350M4FZrbee8No4SraLmbB2A/a21cyp+9ziAZdba5D3aPsdyOgh1sTPG9Eb5k3Sy9pRGKk7GmN2NMTVR/sWomjGmpjFm93y3iwoD84dCGgmgPcqvoHUD8BCAfwM4Jp+NosJgrV0DYAGA31b0QXug/DaxL/LbMko6a+0WAOMA3GKMqWOM+QWAkwCMyW/LkoEnZ/EaAmCctXaTc0oi6QaUD79wDYCzK36+Ia8tokLC/KGMWWu3WmtX/PQP5WN0fmetXZ3vtlHB6I/ywYhXA5iL8oF/f5fXFlGhuBhALZQ/kOMpAL+11s7Ib5OSgbc1EhERERERJQCvnBERERERESUAT86IiIiIiIgSgCdnRERERERECRDp5MwY09cYM9sYM9cYU+UffUmZYf5QWMwdioL5Q2ExdygK5g8FEfqBIMaYaigfGO9olA9ANwXAIGvt17uap7S01LZt2zbU+sLS72/atGnOaZKofKBzqXv37s5psmnhwoVYs2ZNqJVmmj/GmKxvpCZNmoi4VatWznl22y3/F591/gbJAz3Pd999lzbevHmziNevXy/iHTt2ONfpY421tol7MilM3xNH/ui+q3HjxlEXmROu/u2HH35IG3///feeefT23rp1q4h1vujXf/zxx7RtCsJam5O+p169era0tLQyLpTtXqyC9HerVq0S8eLFi/UkBdX35MPuu8uROBo0aJD29ZKSEs8yUvcbIPffUfzo/NF9FZD+eLhx40Zs27ataL735EPr1q1FXKdOHc80s2bNylVzci1Q3xNlHJxeAOZaa+cDgDHmaZSPUbDLTqpt27Y7/yyJAAAgAElEQVSYOnVqhFVmbvv27SLWHYzfNElUo0YNz+8+/PBDEft1jtnUs2fPKLNnnD9R6YOJ/tJ56qmnivjee+91LrNWrVrRGxaRfh/6hNHvBFJ/uZ45c6aI58yZI2Kday+88IKIFy5c6FmHXq8+KFprF3lmCib23KlWrZrnd/ok5aabbhLxkCFD0k7vt8x80PmhY33ipE+8V6/2PlV90SK56aZPny7iSZMmiXjKlCki3rJli4j9vrTp38VxQlcho/wpLS3FzTffXBmfc845znYl4Y82SeD3hwH9eent7Prsdu7cKeLq1at7pnnggQdEfMUVV+hJEtP35Iv+3PW20n+EOPbYY0WsT7zKyso867jgggtE7Pc9Jtd0/rz33nueafTxL/X4+PTTT0dZfdHkTzr62KePjX/84x9FfOCBB3qW0atXLxG78rWABOp7ohxBWgJI/XPUkorfCcaYocaYqcaYqX4HeaqynPmTmjs5bRklXcZ9T85aRoUgo75n0yYOW0mV2PdQFPzeQ4FEuXLmd1nXcyprrR0JYCQA9OzZs2BPdSl2zvxJzZ04Lu/73Z6V6pFHHhHxSy+9JGK/25n69u0r4ltuuUXE+sqa6689flcQ7r//fhHrq1b6yoe+gur3F019lfDEE08UcdeuXUU8YMAAEeurSPqzA4Abb7xRxH63j4SUcd/jyp8gf4Vr165dwOYli75irOOaNWuKuFGjRiL2e9/6L52nn366iPXVkQULFoj42WefFfHf/vY3zzqWLVsm4tQrKhGvomXU95SUlNjUK2e//OUvxYx+t+rr9mV6JU1f2fa74yQJt4jpKyF169YVcZs2bTzzuO420J9dwv5CHnvfky+uz3XlypUiHjVqVNr569Wr51mG7hf0MTTMLflapsu45JJLRDxy5EjPNHp/jfGqfc6/9+SC/sz1lTK9z/fr10/EfseYvffeW8Rz584VcRa3USJEuXK2BEDqjaOtACzbxbREGvOHwmLuUBTMHwqLuUNRMH8okCgnZ1MAdDDGlBljagAYCODleJpFVQDzh8Ji7lAUzB8Ki7lDUTB/KJDQtzVaa783xlwC4A0A1QA8aq2dEVvLqKgxfygs5g5FwfyhsJg7FAXzh4IK/Sj9MHr27Gn5tMZw/J7EuGHDBuc02dSzZ09MnTo1J4UPSbj3OsgT/SZOnCjiI488UsS6lkTXbLz//vuedRx++OEidj3tLMg9+HoafQ/4M888I2JdTxDkyYQTJkwQ8QknnCDi7du3f2qtjfTIz6B0/gR58pPuKz799FMRt2/fXsRR64z82uGqk9TC1GzoecIMxZDpMvTr69at80wzcOBAEf/nP//RbchL35NafwZ4aysB9/7h+vyWLFkiYv3oab95klCbpZ+cuNdee3mmOf7440U8bNgwEetaE/2+9PFa10wC3jrd3/3ud3qSvPU9hULnlz5W6e1w3nnneZbx6KOPxt8wxbWvvfrqqyLWx6Eg/XTqZ/HDDz/kre9JKl3HrLfJcccdJ+JXXnnFuUzdz+o6d9fTtxMsUN/D5/0SERERERElAE/OiIiIiIiIEoAnZ0RERERERAnAkzMiIiIiIqIEiDIINVFRC/NwBb+BODPx2muveX6nHzShC+D1Q0Z0gbPf+9C/0+v905/+JOJ7771XxLpIf+fOnZ51HH300SK+6qqrRHzbbbd55smVIA9TaNq0qYhbtWqV0TLjaJd+wEIu6M/C77PxewBMOjqHdfF2w4YNPfOMGTNGxIceemjlz4sWLcpo/XHSD/3ReQ0AtWvXFnE2Htah9/N8PBDE1Q/MmzfPM49+WMfDDz8s4kGDBon48ssvF/F+++3nbFcSBuguNn59fKrTTjvNuQy93+uHOoSh+yLd1zz44IMZL7PYBjTONtfA8UOGDMl4mWeccYaIb7/9dhHrfEziA5Ki4JUzIiIiIiKiBODJGRERERERUQLw5IyIiIiIiCgBWHNGtAv6HmY9sCLgrUPyGyw2lese+ylTpjjbpe+1DnN/vGvgzXHjxon4+uuvF3Hjxo1F7PfZaPoe8iTVnPlp0aKFiPUg75kOOu13D7xux8KFC0U8YsSItNPrdeqBYgGgbt26Im7WrJmIO3bsKGJd01OrVi3PMoMMdJ6unTr2G0B0zz33FPHw4cMrf/Yb+DlXvvrqKxF/++23nmlcNWdx1ES56jzyIchg5Hrbb926VcT/+te/RKxrD/Ugwvfdd59zHZQ5/RnqPr53794iPuKII5zLzLRW1Y9rX/rwww9FrAev11hfljmdG/oz1N+DjjnmGBEHqWvu1KmTiA877DART5gwQcQ6t4J8J0ky9mBEREREREQJwJMzIiIiIiKiBODJGRERERERUQKw5oxoF4LUhXTo0EHEup5H3/es74vesGGDiKdNm+ZcZxz3yLuWoceRWrt2rYh1zVmQz6p9+/YBW5cM+p53LdMaH7/PXOfD+++/L+I77rhDxK57/ePQtm1bEd95552eaU4//fS07ci05idILUpqjUudOnUyWn6cdI2ZHmewKgtSS6LpvkPngv58n3vuORG//vrrnmXq/oky59p2xx13nIj1+JtAdsY1032NzpcHHnhAxPp95KIPLXau4/2AAQNErMd/1d+L/HJNb6fBgweLWNecJaHmNk68ckZERERERJQAPDkjIiIiIiJKAJ6cERERERERJQBrzogi6NGjR9rXXTVn06dPF7Gu7coX3c44xg3avn175GXEJUiN3L777hvrOoPcEz937ty0r+txzPzGB8u0HTrWY62df/75nmV06dJFxLo+L9MatCDbo2XLlpU/+43nlk2p7dfvLcw2oP/R+af7TFdN2pYtWzzL3Lx5c0ytqzr056zzvGHDhiI+77zznMuMOq6Z31hVepmffPKJiN988820yyy22qR80LmhawnPPvtsEbvGpgvy/eL4448XcdOmTUW8cuXKtOvwa0eS8coZERERERFRAvDkjIiIiIiIKAF4ckZERERERJQArDkj2oUg9yf/8pe/jLSMjz/+2LkOfY+93334mXKN9VJWVibi0tLStMvzGytGryPIe82VINu2Xbt2sa4zSF3V/Pnz076u65uyUe9UUlIiYr+ang8//FDEUWvO/LaH/rzWrVtX+TPrvKoOV02aH507hVRrki+uz0yPXdW8efO00/stMxueeuopEa9fv17E1atXF/HOnTuz3qZi4lc3qPfBXr16ibh79+4i1nkQJC/0OnTN48knnyziESNGiNiv3YV03OCVMyIiIiIiogTgyRkREREREVEC8OSMiIiIiIgoAVhzRlTBNc5LzZo1PfMccMABaZfpGufliy++yLhdcdDt0u/12GOPFfEee+whYn3ffpBxSh566KFMmhi71M9R38+u66wAoE2bNoGX50fXYPjlgp7GVXMWpnbG1U697YLU9LRu3TrSOjW/mkX9eU2aNKnyZ45jVbz0dtc575crGmvMMuf6zIYOHZrx/FH7Ab8+c9GiRSIePXp02mUWUp1RoTrnnHNErLe77q/r1KmT8Tp0fumx1EaOHCniOGrz84lXzoiIiIiIiBKAJ2dEREREREQJwJMzIiIiIiKiBODJGRERERERUQJUuQeC7L679y3v2LFDxK6HOOSCLmb0azfFy/VghC5dunjmadWqVdpl6u22detWEU+dOtXZLl0k7RrQMciAj/qBHu3btxfxtddem7ZNepl++8ytt94q4pdeeintMrMttc26uNhvkO2oDwQJYtOmTSJesGBBRvMHGWzXVejvGuT3pJNO8sxz9NFHp12mqw8N88CGZ555pvLn1AGpKbn89hHdz4YZZJqi08cm/eCME088UcR6YGEtFwNOA8DYsWNFrPsCnV9BHiBD/6O3o9/+qB8QdsYZZ4hYP7TlH//4h4jvvPNOEfsdD1wPGTvooINE3LVrVxF//vnnnnn0cSnJfQ2vnBERERERESUAT86IiIiIiIgSwHlyZox51BizyhjzVcrvGhljJhhj5lT83zC7zaRCxfyhsJg7FAXzh8Ji7lAUzB+KKkgh0ygADwJ4POV31wCYaK29wxhzTUV8dfzNi5/fgIT6ftckDlqYxDYFNAoFkj+ue+b9BpyuXr26iHX9Yo0aNUS8bNkyEc+dO9fZBp2frjhIHVLPnj1F/Pjjj4u4WbNmnnlS6dq5G264wTPN3/72t4zbpYxCjLmTbvs2bdrU8zt9X73rc9aCTL906VIRr1q1Ku0ydf1EkNqtWrVqibhRo0YiLisrE3H//v1FfOGFFzrX4Xqvut36Xn+9HwHAqFGjRPzss88626EXgQLpe8Jw1W7lgmsf8KvpcNV5nHDCCSLW9bD333+/iP3qG2OoJRmFIsodv+3kqsU69dRTRaw/Z/2dJI66eJ3T27dv90yjBxvWEjIA+SgUaP64tjMA9OvXT8T6WPnEE0+IWO+zf/zjH0XcuHFjzzp0fupY59ugQYNE7FdzVkicV86ste8B+Fb9+iQAPw3LPhrAyTG3i4oE84fCYu5QFMwfCou5Q1EwfyiqsH/qaGqtXQ4A1trlxpg9dzWhMWYogKGA++lnVGUEyp/U3CGqEKrvIarAvofCYt9DUbDvocCy/kAQa+1Ia21Pa23PJk2aZHt1VERScyffbaHCw/yhsJg7FAXzh8Ji7hAQ/srZSmNM84qz/+YA0hdK5JG+h/nMM8/0TKPrhFzjK+SCvr9W1y4ByWhnSInMH9c9+L169XIuw3W/+7vvvitifT+33zbV7dL1OS1atBBx586dRTxkyBDPMvXYVTq/lixZImI9tszf//53Ec+fP9+zjiyNKZKV3OnYsaNzmkxrzoKM+9OyZUsRf/jhhxktQ+eLX+1WnTp1RKz/SFa/fv206/DbLzL9LDTdzueff94zzSWXXJLRMgNKZN8TRpj6w1wrKSnx/O7YY48Vsd7ORx55pIhfffVVEev6Fb8+M0vjFxVs7gSpOevUqZOIBwwYkHaZcYwHq7eTXub//d//eebRddpaEveDCgWRP0HGhbvgggvSvp46JiXg/Y6t+/uhQ70XCnU7XN93Tz/9dBHfcsstnmm2bNki4hB18DkT9tv9ywB++sY3BEB+R5elQsP8obCYOxQF84fCYu5QFMwfCizIo/SfAjAZQEdjzBJjzAUA7gBwtDFmDoCjK2IiD+YPhcXcoSiYPxQWc4eiYP5QVM7bGq21g3bxUp+Y20JFiPlDYTF3KArmD4XF3KEomD8UVfSBKRJO1zY8+uijeWoJJZ3rXuvevXs7l+FX85PqtNNOE7Gur/C7r1ovU8cNGjQQsa4f27Ztm2eZegypxx57TMRTpkwRsa4N0PdqZ2msoVilq4vad999nfNnej96kDosXe8VpK4xbvp9uepAgMxrzHQN43333SfiBx54wLmM1HUmqTYgG/QYPrquFPD2A7n4THTfoscg69NHfvfUY5YB3tom1xiexb6tcyHIZzhw4EAR165dW8RB+oVM2+GqI9K1S370vlLAY8Lmhd4GrlpEADjssMNErMcU++ijj9KuU3/f+PWvf+2ZxpVfup1t27YV8VFHHeWZ56WX5J2k+r0n6TtLwT5RgoiIiIiIqJjw5IyIiIiIiCgBeHJGRERERESUAEVfc6b51d8Uqlq1auW7CQXNda91u3btRLzXXns5l+kaN+PNN98U8eLFi0Xst011nUdpaamI99lnHxHrOhC/MfL0/ditW7cW8YQJE0T87LPPiljXEPnVNCR5DBFt7733dk6Tjfbre9yj3vPuVwumf6fzXse6hsOPawyar776SsSnnHKKiPVYRX45unPnThEnOX8y5arZa9asmYiXLl2azebklB7zSOeSzr9M6xvJy2/fqVu3rohdY1fFMa6q3ta6rkiPA/rGG294lqHzIUl1QoXItX8NGuR9toneR3UNma7709PrmvapU6d61qHrr/V2do21OXjwYM8ydc1ZkvHKGRERERERUQLw5IyIiIiIiCgBeHJGRERERESUAFWu5ox1WvQTV83Zz3/+cxHXq1fPswzX2C+rVq0S8aWXXiriZcuWidjv/m9XrY2+n7tLly4ivuqqqzzz6PvIy8rKRNyvXz8R33jjjSL+85//LGI9bhXgve883zVo6ca/CVNPGAedL2HGDorKNYadX62Jq/6kc+fOIn7//fdFfOutt4r473//u3MdxVRz5qJro1955RXPNHHUAGVK9zUlJSUi1mMNdezY0bMMXV/Icc7ip/sRv7qs8847T8StWrUSsaumJ4w4xjVL8thUhcBVs1ezZk0Rn3POOZ5lbN++XcTPP/982nXobabrTseMGeNZh2vMT53jep3HHHOMZx5dW69r/l3fCXOJV86IiIiIiIgSgCdnRERERERECcCTMyIiIiIiogTgyRkREREREVECFP0DQXSx45133umZxvXggnzQxbh+A8NeffXVIs7HwwQKmavQvFu3bs5l6NzR22DhwoUi1g8A0QX1fgWoup16Gt2GadOmifjMM8/0LPOtt94S8cMPP5x2mfphKHo/6tmzp2cdehBIXUScTw0bNhSxfpCBn6gPYPDbth9//LGIN27cKGI9ELNrcM/atWt71tGkSRMR64e/6MFodb4FGWDcpWnTpiJ+8MEHRdyiRQvPPNdff/0u11noD4lwPWxh7dq1Ij7jjDM8y8j3A3b86IcJ6IcTAcDAgQNFfNppp4lYP5giCcfjpHM95MHv+4PeDpprwOggXHm+fPlyET/xxBPOZfIBING4Hnpx+OGHi9jv2Pj000+LeOnSpSLW21kfx7SxY8d6fnfLLbeIWB+zdW7pY6M+rgHAgAEDRKwfZMYHghAREREREZHAkzMiIiIiIqIE4MkZERERERFRAhR9zZm+D1XfxwokqxZmV3RtEgBceeWVImbNWXqu+/K1Aw88MONlah999FHa1/W92GHucXYN+OhXK/Wvf/1LxPq9/vrXv86onbpuBADmzZsn4muvvdYzTb40btxYxH41T5prW2daRwQAffv2FbGuOYujrkjXm5SWlor4l7/8pYiHDx8uYj2gtF87Mv1s9L533XXXeeb54IMPRPzaa6+lXUdVo7drPmrOdD/w3XffiXjKlCmeeT755BMR/+lPfxLxRRddJOL69etn1IaqSB/79feefv36eebp3bu3iPXnGMcg565+4rHHHhPxpk2b0k7vt0zKjKum+NxzzxWx3/6lt5veTq5B0PXrq1at8qzjhRdeEPH555+ftl1BalPPOussEf/1r39N28584pUzIiIiIiKiBODJGRERERERUQLw5IyIiIiIiCgBir7mTKtevbrnd7qeJgm1W/reV792U7z0OBpBxjlz3ec8efLkSPMH4arnCWL06NEi1vd36/wLUucxdOhQEY8YMULEegy4XOrQoYNzmqh1VXr6+fPne+bZvHmziF31gq56C7/Xdf3JypUrRazHmHnvvfdE7JfDeuwbV71KmPFjLrnkEhGz5kzS2zUJtTiu+lc/us7o7rvvzmidSaoTyRX9ObvGaj377LOdy9T5k2nNmV/+6WXo71rPPPNM2mWy5iw6V9/bunVrER933HFp5we83xeywW/MzlS6XUHqs7t37y7in//85yLWzwjI57hnvHJGRERERESUADw5IyIiIiIiSgCenBERERERESVAlas50/c8A977SJM4bopf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ROMsBjv2qBsVvfbaayq2++LTTz9dxTNnzlTxyy+/nPW4fOeOvm04KhdtQ+j27dvHrsM2xo7iO9e38Xvvvafip59+2ruOQuE3ZwAAAACQAlycAQAAAEAKcHEGAAAAAClQ8iKjzLmndp79wQcfHHr+/PnzVbxw4UIVt27dWsW2OaqtF5s2bVpoHXb+tm0Ibee+2gbRVtT8cjun1q5jw4YNKl6yZImKf/jDH8auUyQ8d3j16tWxz7fzhMs5l7oUKqUhOdLJ1+Dezonv06ePd5m2ia+tn5k1a1bs6229RLa1TklE1TVs3rxZxY8//riKd9hhh9hlFmOcxbJlyxb56quvauJcas5877cQzZrzFVV746vHsccQW9MxefLk0GtszVmSOpps2XHb76jUDZjjvn97zhLFN973338/5/XXNkceeWTs4zbfouql1q1bp+Lnn3++5t++86pSSvK9+j4PW0e1detWFdtjVNRzsj238tWqioTPu20dpm32bBuxR7Hr8e3ffPvxqFo533eS9LPiN2cAAAAAkAJcnAEAAABACnBxBgAAAAApUNKas3r16qm+Zccdd5x63NYtiIRrryw7v9POQ/3666+947J9IOyc91122UXFto7NrjNJT5EBAwao+K233ood41577RX7uIjIs88+G/u4fZ+tWrVS8cqVK0OvSTI3GEii0usefP11bI2Zran99ttvQ8u09Q4ff/yxim3fFfsZ2rn/xRA1bmvs2LFZLbOSeixt3LhRPvzww5p4t912U48n2Sf6ahuGDBmi4m7duql43rx53mXmW1Mb9XrfMtO6TaetvjguR5LUnNm6H/v+MvMzSto+j6SSnEvtvPPOKj7qqKPyXu8rr7yiYl/P2FKx21uSY8o+++wTu8xx48bFPl6ufbV9r/a83N4jIarfoVWK2tNCLZPfnAEAAABACnBxBgAAAAApwMUZAAAAAKRASWvOmjZtKvvvv39NbOfxNmjQIPSac845R8WPPfaYiocOHapi2wshsz+NiMj48eND6+jVq5eKP/nkk9jYV4MRNUe3RYsWKrZ9gF588UUV23nUUX1w1q5dq+JJkybFjsvWMdjXR6lNNWeVPPZSsz1GonqdZMvWatY2Bx54YOzjUfsFWx/w6quvxi7DV/dWLr7ao0re9tasWSMvvfRSTXzKKaeox331ZCL+/jj2uHXJJZeo+KKL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"}}},{"metadata":{"_uuid":"61c64791fb28f771dece7a7d24cd1be4529bd78b"},"cell_type":"markdown","source":"The bitwise operations keeps the information but another options is use simple image reduction that are more efficient."},{"metadata":{"trusted":true,"_uuid":"17f93a754fd5afe5f10a2b23b9ce7f6f5ea5681d"},"cell_type":"code","source":"def pack_image(cutted):\n    packed = np.zeros((int(cutted.shape[0] / 8), int(cutted.shape[1] / 8)),\n                      dtype=np.uint64)\n    for x in range(cutted.shape[0]):\n        for y in range(cutted.shape[1]):\n            new_bit = np.uint64(int(cutted[x][y]) << (x % 8) << ((y % 8) * 8))\n            packed[int(x/8)][int(y/8)] = np.bitwise_or(packed[int(x/8)][int(y/8)], new_bit)\n    return packed\n%timeit pack_image(cutted)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1a31482ffc977806dc2881231119c1a12a4c1cc1"},"cell_type":"code","source":"%timeit skimage.transform.resize(cutted, (cutted.shape[0]/8,cutted.shape[1]/8), mode='reflect')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ae69b82bc1218effb006d054f63681ba3a3857a8"},"cell_type":"code","source":"re = skimage.transform.resize(cutted, (cutted.shape[0]/8,cutted.shape[1]/8), mode='reflect')\nplt.imshow(re)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"70622b157944fcc102b7a76755101f7080ab99be"},"cell_type":"markdown","source":"The following is a bit more optimized."},{"metadata":{"trusted":true,"_uuid":"9f9ed82ed9678b0ac22fb5ffba679131c2b041af"},"cell_type":"code","source":"def pack_image2(img):\n    xres, yres = np.shape(img)\n    xres = int(xres / 8)\n    yres = int(yres / 8)\n    p = np.empty((xres,yres))\n    for x in range(xres):\n        for y in range(yres):\n            p[x][y] = int(\"\".join(img[x*8:(x*8)+8,y*8:(y*8)+8].flatten().astype(int).astype(str)), 2)\n    return p\n\n%timeit pack_image2(cutted)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6bdcb9c5f83ba2a7a25aeba7e2b13bc57a1371e0"},"cell_type":"markdown","source":"## Adding noise to image"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"6e32a6b2eae4d6243a411e4979266d046340c83d"},"cell_type":"code","source":"packed.shape, packed.dtype","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1df10dbae46c3d3ee6814381ef3223f19ccab09e"},"cell_type":"code","source":"packed.flatten().shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8832a06f29884e9b4e4cc82fb956f7e44f55b2f4"},"cell_type":"code","source":"im_noise = cutted + 0.2 * np.random.randn(*cutted.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0d8814e96db6f9d67dd4e53c0aca63a1657d74c0"},"cell_type":"code","source":"plt.title('cutted with noise')\nplt.imshow(im_noise)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ffa122d9ee6942fbf718e809d6e6687315cfda2c"},"cell_type":"code","source":"im_noise.dtype","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"311bd9499bd2ece47fdebc4ed4743f1c1c54c64f"},"cell_type":"code","source":"cutted.dtype","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b8e9b2a8f6959a8d32a5e51a5aafe41e6500427b"},"cell_type":"code","source":"hist = np.histogram(im_noise - im_noise.mean(),\n                    bins=np.arange(im_noise.min(),\n                                   im_noise.max(),\n                                   1/256))\nplt.plot(hist[1][:-1], hist[0], lw=2)\nplt.title('histogram of gray values \"cutted with noise\" image')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a68830b2abfebf9d01ac1e8c888c443a702c90fa"},"cell_type":"code","source":"hist = np.histogram(image - image.mean(),\n                    bins=np.arange(image.min(),\n                                   image.max(),\n                                   1/256))\nplt.plot(hist[1][:-1], hist[0], lw=2)\nplt.title('original image histogram of gray values')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1cdb33127d3cc4752a71d7043bf577532e542520"},"cell_type":"markdown","source":"## Using scipy.ndimage to remove artifacts\n\nVisual artifacts (also artefacts) are anomalies apparent during visual representation \nas in digital graphics and other forms of imagery, particularly microscopy. \n[1](https://en.wikipedia.org/wiki/Visual_artifact)\n\nWe start with the 'cutted' image and try to remove artifacts using the functions\nprovided by the scipy.ndimage python library."},{"metadata":{"trusted":true,"_uuid":"0c7a18111fe1e4e0c903cc75cbc8ae153188ccf1"},"cell_type":"code","source":"plt.figure(figsize=(15,15))\nplt.subplot(1,3,1)\nplt.title('cutted')\nplt.imshow(cutted)\n\nplt.subplot(1,3,2)\nplt.title('binary_opening(cutted)')\nopen_img = scipy.ndimage.binary_opening(cutted)\nplt.imshow(open_img)\n\nplt.subplot(1,3,3)\nplt.title('binary_closing(binary_opening(cutted))')\nclose_img = scipy.ndimage.binary_closing(open_img)\nplt.imshow(close_img)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9d53450b4a6369dcfec5e3d7b2a748f038bc76bf"},"cell_type":"code","source":"eroded_img = scipy.ndimage.binary_erosion(cutted)\nreconstruct_img = scipy.ndimage.binary_propagation(eroded_img, mask=cutted)\ntmp = np.logical_not(reconstruct_img)\neroded_tmp = scipy.ndimage.binary_erosion(tmp)\nreconstruct_final = np.logical_not(scipy.ndimage.binary_propagation(eroded_tmp, mask=tmp))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b6d0129e7b151cf096b497e5a658b8b2dc59c43d"},"cell_type":"code","source":"plt.imshow(reconstruct_final)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3b13133cf61fb2faceacb5b7bcd92e79b38c9ce7"},"cell_type":"markdown","source":"## Using sklearn to do spectral clustering\n\nWell, we know that the 'blue' images are from nucleus and that the 'mean' theashold is the simplest and gives enclosed surfaces. Can we count it?"},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"542f9af867b674c8c33ed8c514deeae4385413b5"},"cell_type":"code","source":"%%time\nimage = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\ncutted = image > image.mean()\n\ngraph = sklearn.feature_extraction.image.img_to_graph(image, mask=cutted)\ngraph.data = np.exp(-graph.data/graph.data.std())\n\nlabels = sklearn.cluster.spectral_clustering(graph, n_clusters=20, eigen_solver='arpack')\nlabel_im = -np.ones(cutted.shape)\nlabel_im[cutted] = labels","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ff60a4e11560b159eba8f45470698b04a7efedc3"},"cell_type":"code","source":"plt.imshow(label_im, cmap='nipy_spectral')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1e452b5f9f1ab4c9c00e7ce67a9a8a9da4b4d1cd"},"cell_type":"markdown","source":"Well may be i have used the wrong functions and/or parameters."},{"metadata":{"_uuid":"460d7c9f5a84c924e293b022c5a9cd12987a82d5"},"cell_type":"markdown","source":"## Using scipy.ndimage to do segmentation\n\n(An easier way to count nucleos)"},{"metadata":{"trusted":true,"_uuid":"f13de286928fa551b66515303634f19826953759"},"cell_type":"code","source":"%%time\nlabel_im, nb_labels = scipy.ndimage.label(image > image.mean())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ba94376bbd0cd6654805120b65ffa845c35f1dc2"},"cell_type":"code","source":"plt.imshow(label_im, cmap='nipy_spectral')","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"e74c7257cc3cf0d86764a7183baee13f57e7ba26"},"cell_type":"code","source":"np.unique(label_im).size","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6d0fcbdf80bedb68fbd547044d36e2fcf96941f5"},"cell_type":"markdown","source":"Simple, fast and acceptable result.."},{"metadata":{"_uuid":"ba42f865ba80652bf2551c1e115e8061fadd8574"},"cell_type":"markdown","source":"## Doing granulometry with scipy.ndimage\n\nOptical granulometry is the process of measuring the different grain sizes in a granular material.\n[1](https://en.wikipedia.org/wiki/Optical_granulometry)"},{"metadata":{"trusted":true,"_uuid":"4ed79f7daf896d08ade178d98594ad8df7b07ab6"},"cell_type":"code","source":"def disk_structure(n):\n    struct = np.zeros((2 * n + 1, 2 * n + 1))\n    x, y = np.indices((2 * n + 1, 2 * n + 1))\n    mask = (x - n)**2 + (y - n)**2 <= n**2\n    struct[mask] = 1\n    return struct.astype(np.bool)\n\ndef granulometry(data, sizes=None):\n    s = max(data.shape)\n    if sizes is None:\n        sizes = range(1, int(s/2), 2)\n    granulo = [scipy.ndimage.binary_opening(data, \\\n        structure=disk_structure(n)).sum() for n in sizes]\n    return granulo","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4be61b41de377e73d7a4a256fec2be4e8d05817f"},"cell_type":"code","source":"im = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\nmask = im > im.mean()\ngranulo = granulometry(mask, sizes=np.arange(1, 10, 1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2cbbc63f798ecba497ca277cb626fbfd2c18a3f9"},"cell_type":"code","source":"granulo","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2d615c6a275a6cf257f1b9f1df8e5653bad008f2"},"cell_type":"code","source":"plt.figure(figsize=(12, 4.4))\n\nplt.subplot(121)\nplt.imshow(mask, cmap=plt.cm.gray)\nopened = scipy.ndimage.binary_opening(mask, structure=disk_structure(10))\nopened_more = scipy.ndimage.binary_opening(mask, structure=disk_structure(14))\nplt.contour(opened, [0.5], colors='b', linewidths=1)\nplt.contour(opened_more, [0.5], colors='r', linewidths=1)\nplt.axis('off')\nplt.subplot(122)\nplt.plot(np.arange(1, 10, 1), granulo, 'ok', ms=8)\n\nplt.subplots_adjust(wspace=0.02, hspace=0.15, top=0.95, bottom=0.15, left=0, right=0.95)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"48549fa3ad4dacfa9923b26536b60dc6ef7f65ca"},"cell_type":"code","source":"def plot_granulos(filename, sizes=np.arange(1, 10, 1)):\n    im = plt.imread(filename)\n    mask = im > skimage.filters.threshold_li(im)\n    granulo = granulometry(mask, sizes=sizes)\n\n    plt.figure(figsize=(12, 4.4))\n\n    plt.subplot(121)\n    plt.imshow(mask, cmap=plt.cm.gray)\n    opened = scipy.ndimage.binary_opening(mask, structure=disk_structure(1))\n    opened_more = scipy.ndimage.binary_opening(mask, structure=disk_structure(4))\n    plt.contour(opened, [0.5], colors='b', linewidths=1)\n    plt.contour(opened_more, [0.5], colors='r', linewidths=1)\n    plt.axis('off')\n    plt.subplot(122)\n    plt.plot(sizes, granulo, 'ok', ms=8)\n\n    plt.subplots_adjust(wspace=0.02, hspace=0.15, top=0.95, bottom=0.15, left=0, right=0.95)\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"434e8b20d3071fc7c9403f4112a0c452c3c8054a"},"cell_type":"code","source":"plot_granulos('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_red.png')\nplot_granulos('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_green.png')\nplot_granulos('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\nplot_granulos('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_yellow.png')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"74d71dc4dcd77f86653572b3b7cbd8784aa99746"},"cell_type":"markdown","source":"## Selecting the contour using skimage"},{"metadata":{"trusted":true,"_uuid":"0c63d87c4dd36535f338ba7fc322bc20ed017306"},"cell_type":"code","source":"image = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\n\ns = np.linspace(0, 2*np.pi, 400)\nx = 150 + 50*np.cos(s)\ny = 150 + 50*np.sin(s)\ninit = np.array([x, y]).T\n\nfiltered = skimage.filters.gaussian(image, 2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"40aac329ad597100a6021d3ad23e2e4bdc8c9dbf"},"cell_type":"code","source":"plt.subplot(1,2,1)\nplt.imshow(image)\n\nplt.subplot(1,2,2)\nplt.imshow(filtered)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"410690e1ccf7ea82e481d243081b8e6d4df21e82"},"cell_type":"code","source":"snake = skimage.segmentation.active_contour(filtered,\n                                            init,\n                                            alpha=0.002,\n                                            beta=10,\n                                            gamma=0.01)\n\nfig, ax = plt.subplots(figsize=(7, 7))\nax.imshow(image)\nax.plot(init[:, 0], init[:, 1], '--r', lw=3)\nax.plot(snake[:, 0], snake[:, 1], '-b', lw=3)\nax.set_xticks([]), ax.set_yticks([])\nax.axis([0, image.shape[1], image.shape[0], 0])\n\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f0c976c6b12ff9941e761a425189297e2a2843a7"},"cell_type":"markdown","source":"## Doing blob detection with skimage\n\nSee https://en.wikipedia.org/wiki/Blob_detection"},{"metadata":{"trusted":true,"_uuid":"ca7920d6d78023e1824f816145e3066119c1169b"},"cell_type":"code","source":"image = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_green.png')\n\nblobs_log = skimage.feature.blob_log(image, max_sigma=30, num_sigma=10, threshold=.1)\n\n# Compute radii in the 3rd column.\nblobs_log[:, 2] = blobs_log[:, 2] * (2 ** .5)\n\nblobs_dog = skimage.feature.blob_dog(image, max_sigma=30, threshold=.1)\nblobs_dog[:, 2] = blobs_dog[:, 2] * (2 ** .5)\n\nblobs_doh = skimage.feature.blob_doh(image, max_sigma=30, threshold=.01)\n\nblobs_list = [blobs_log, blobs_dog, blobs_doh]\ncolors = ['yellow', 'lime', 'red']\ntitles = ['Laplacian of Gaussian', 'Difference of Gaussian',\n          'Determinant of Hessian']\nsequence = zip(blobs_list, colors, titles)\n\nfig, axes = plt.subplots(1, 3, figsize=(9, 3), sharex=True, sharey=True)\nax = axes.ravel()\n\nfor idx, (blobs, color, title) in enumerate(sequence):\n    ax[idx].set_title(title)\n    ax[idx].imshow(image, interpolation='nearest')\n    for blob in blobs:\n        y, x, r = blob\n        c = plt.Circle((x, y), r, color=color, linewidth=2, fill=False)\n        ax[idx].add_patch(c)\n\nplt.tight_layout()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d9f35dae5b2001005321e6f79545ef7bcc4af9b9"},"cell_type":"markdown","source":"May be the patterns of the blobs could be used as a feature"},{"metadata":{"_uuid":"b7f68b424efd0714001d9c181d70ccec4958d689"},"cell_type":"markdown","source":"## Canny edge detector with skimage.feature\n\nThe Canny edge detector is an edge detection operator that uses a multi-stage algorithm to detect a wide range of edges in images. [1](https://en.wikipedia.org/wiki/Canny_edge_detector)"},{"metadata":{"trusted":true,"_uuid":"9ebe56d626d5d1c93db919a1f4e4a8326074f9b6"},"cell_type":"code","source":"image = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_red.png')\nedges = skimage.feature.canny(image)\n\nplt.imshow(edges)\nplt.title('Canny detector');","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"cd776aaaccbf6bee25486cea231814d235e08c98"},"cell_type":"code","source":"fill_image = scipy.ndimage.binary_fill_holes(edges)\n\nplt.imshow(fill_image)\nplt.title('filling the holes');","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1a29223556f846d8eb99bca0c45492c111e5f292"},"cell_type":"markdown","source":"## Color visualization of the Protein Atlas images"},{"metadata":{"trusted":true,"_uuid":"890f85bc0d9fb9fa8fe439965443e7f321cc2f7c"},"cell_type":"code","source":"red    = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_red.png')\ngreen  = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_green.png')\nblue   = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\nyellow = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_yellow.png')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8adf07ce0720c8ca7b6b25ecaa736e451364d8fd"},"cell_type":"markdown","source":"### A first approach for creating an RGBA (Red, Green, Blue and Alpha)"},{"metadata":{"trusted":true,"_uuid":"1cdf01d5846e36a359a16eba81898d202272ddeb"},"cell_type":"code","source":"def to_rgba(img):\n    (nro_channels, resolutionx, resolutiony) = np.shape(img)\n    r = [[[1, 0, 0, img[0][i][j]] for i in range(resolutionx)] for j in range(resolutiony)]\n    g = [[[0, 1, 0, img[1][i][j]] for i in range(resolutionx)] for j in range(resolutiony)]\n    b = [[[0, 0, 1, img[2][i][j]] for i in range(resolutionx)] for j in range(resolutiony)]\n    y = [[[1, 1, 0, img[3][i][j]] for i in range(resolutionx)] for j in range(resolutiony)]\n    return np.array([r,g,b,y])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f544d1785809d1f799f1a71321ef8ad4f324c366"},"cell_type":"code","source":"%time r = to_rgba([red, green, blue, yellow])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b4ac1401f0d4772276b700264bb42113382373ee"},"cell_type":"code","source":"plt.figure(figsize=(15,15))\nfor i in range(4):\n    plt.imshow(r[i])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"11969fd5fe59b0dca0feed00c7487f9979daeeef"},"cell_type":"markdown","source":"### Using numpy array to convert 4 grayscale imagens into 4 red-green-blue-yellow images"},{"metadata":{"trusted":true,"_uuid":"e0ce5a882279268dd49e96840142bc991eea18f2"},"cell_type":"code","source":"def to_rgba2(img):\n    r = np.transpose(np.vectorize(lambda x: (1,0,0,x))(img[0]))\n    g = np.transpose(np.vectorize(lambda x: (0,1,0,x))(img[1]))\n    b = np.transpose(np.vectorize(lambda x: (0,0,1,x))(img[2]))\n    y = np.transpose(np.vectorize(lambda x: (1,1,0,x))(img[3]))\n    return np.array([r,g,b,y])","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"714524003e1ae7f976941b8d4a30db1af53193e7"},"cell_type":"code","source":"%time r = to_rgba2([red, green, blue, yellow])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a62d6d50a6e8df0a370b9b4618994a9c975824be"},"cell_type":"code","source":"plt.figure(figsize=(15,15))\nfor i in range(4):\n    plt.imshow(r[i])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9ba62611dd529bde83cc397b861974f9e5c46183"},"cell_type":"markdown","source":"There are several ways of doing this. The result is the same.\nI left here only the naive approach and the one with the best speedup I have found.\nMay be you can use it to learn how to use np.vectorize.\n\nBut there are specialized functions to image conversion in the libraries like PIL."},{"metadata":{"_uuid":"61bd8ebce94bdf73c17ff94f606dff3d5109b0cf"},"cell_type":"markdown","source":"## Using PIL.Image to convert the 4 grayscale images into 1 RGB image"},{"metadata":{"trusted":true,"_uuid":"7866c7298f1a8e641ad3341d55ab691741be9139"},"cell_type":"code","source":"red     = PIL.Image.open('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_red.png')\ngreen   = PIL.Image.open('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_green.png')\nblue    = PIL.Image.open('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\nyellow  = PIL.Image.open('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_yellow.png')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e386609bc115f8bcdcabeaaf69970b32e1ed50ef"},"cell_type":"code","source":"type(red)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"16381833310ca1cce3fb14a8b03942a571eb8dfc"},"cell_type":"code","source":"red.format","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e813ba52cf0f2ea6463c20a741f7ae507fa7e0f0"},"cell_type":"code","source":"red.mode","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"02456d0fe56c8c916b02887c1f97f999b2a6a316"},"cell_type":"code","source":"S1 = PIL.ImageChops.blend(red,green,0.5)\nS2 = PIL.ImageChops.blend(blue,yellow,0.5)\nS3 = PIL.ImageChops.blend(S1,S2,0.5)\nS3","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"25dd54170cc1b9e47c5bf11d19fe5dbc27cb8874"},"cell_type":"code","source":"plt.imshow(np.asarray(S3))","execution_count":null,"outputs":[]},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"fd391ecdeac736b15f4feb037641f96ae63ea180"},"cell_type":"code","source":"red.convert('RGB')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"542c5192c3dd1ffc7d5db36bbfe546d1d73ae21f"},"cell_type":"code","source":"red.mode","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1e334625ebee2b245acc6d777179d61aaa03a7f6"},"cell_type":"code","source":"rgb = PIL.Image.merge('RGB', (red, green, blue))\nrgb","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4dfaeb12971d741c5cf2e711d0ae0cadc2eea139"},"cell_type":"code","source":"y = PIL.Image.merge('RGB', (yellow, yellow, PIL.Image.new('L', (yellow.width, yellow.height))))\ny","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"786228040d3b54fe45e02c19e83898c8b72107b5"},"cell_type":"code","source":"rgby = PIL.ImageChops.add(rgb, y)\nrgby","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"417ade4b42cde8986ebe8a5f99c203a44a347c5c"},"cell_type":"markdown","source":"# Using skimage to do region based segmentation"},{"metadata":{"trusted":true,"_uuid":"47c4aacc4020d8e56a4f2c3f383b874dde82c551"},"cell_type":"code","source":"image = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')*255\nimage = image.astype(int)\nelevation_map = skimage.filters.sobel(image/255)\n\nplt.imshow(elevation_map)\nplt.title('elevation map')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"693bdb556c617a13272a4a0a315b50494b1a6f5c"},"cell_type":"code","source":"markers = np.zeros_like(image)\nmarkers[image > 0] = 1\nmarkers[image > 25] = 2\nmarkers[image > 30] = 3\nmarkers[image > 35] = 4\n\nplt.imshow(markers, cmap='nipy_spectral')\nplt.title('markers')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b06301ca89c8522fa26672f6ec36033d9b386012"},"cell_type":"code","source":"segmentation = skimage.morphology.watershed(elevation_map, markers)\n\nplt.imshow(segmentation)\nplt.title('segmentation')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"236c1945dca3bdc310d55c2bb8857af14a388fc4"},"cell_type":"code","source":"segmentation = scipy.ndimage.binary_fill_holes(segmentation - 1)\nlabeled, _ = scipy.ndimage.label(segmentation)\nimage_label_overlay = skimage.color.label2rgb(labeled, image=image/255)\n\nfig, axes = plt.subplots(1, 2, figsize=(8, 3))\naxes[0].imshow(image, cmap=plt.cm.gray, interpolation='nearest')\naxes[0].contour(segmentation, [0.5], linewidths=1.2, colors='y')\naxes[1].imshow(image_label_overlay, interpolation='nearest')\n\nplt.tight_layout()\n\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0214f02886767b98584c5fadcec79062e4e2c42c"},"cell_type":"code","source":"np.unique(labeled).size","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"5e855b99d20490578d6c9d8580832a7177f37138"},"cell_type":"markdown","source":"### A more complex example"},{"metadata":{"trusted":true,"_uuid":"d9ae7008b822515018e82962522cecdef5a128a2"},"cell_type":"code","source":"image = plt.imread('../input/train/002daad6-bbc9-11e8-b2bc-ac1f6b6435d0_blue.png')\n\nfig = plt.figure(figsize=(10, 6))\nax1 = plt.subplot2grid((2, 4), (0, 0), colspan=4)\nax1.imshow(image)\n\nax2 = plt.subplot2grid((2, 4), (1, 0))\nax3 = plt.subplot2grid((2, 4), (1, 1))\nax4 = plt.subplot2grid((2, 4), (1, 2))\nax5 = plt.subplot2grid((2, 4), (1, 3))\n\n# apply threshold\nthresh = skimage.filters.threshold_otsu(image)\nbw = skimage.morphology.closing(image > thresh, skimage.morphology.square(2))\nax2.imshow(bw)\n\n# remove artifacts connected to image border\ncleared = skimage.segmentation.clear_border(bw)\nax3.imshow(cleared)\n\n# label image regions\nlabel_image = skimage.measure.label(cleared)\nax4.imshow(label_image)\nimage_label_overlay = skimage.color.label2rgb(label_image, image=image)\n\n\n#fig, ax = plt.subplots(figsize=(10, 6))\nax5.imshow(image_label_overlay)\n\nfor region in skimage.measure.regionprops(label_image):\n    # take regions with large enough areas\n    if region.area >= 100:\n        # draw rectangle around segmented coins\n        ax1.text(int(region.centroid[1]), int(region.centroid[0]), region.label)\n        minr, minc, maxr, maxc = region.bbox\n        rect = matplotlib.patches.Rectangle((minc, minr), maxc - minc, maxr - minr,\n                                            fill=False, edgecolor='red', linewidth=2)\n        ax1.add_patch(rect)\n\nax1.set_axis_off()\nplt.tight_layout()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"623a3cf1b08af455a414fa471e20b7ddd3700648"},"cell_type":"markdown","source":"## Conclusion\n\nWe explored some image processing techniques like segmentation and worked with the image encoding.\nMaybe they are not all useful for this competition but their use with microscope image was very interesting.\nI have got some insights and a better understanding of the images and of the techniques.\n\nSend your comments and if you fork the notebook or use some function/code/idea somewhere else,\nI will be glad to see your improvements."}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}