{"metadata": {"language_info": {"version": "3.6.4", "pygments_lexer": "ipython3", "codemirror_mode": {"version": 3, "name": "ipython"}, "mimetype": "text/x-python", "name": "python", "file_extension": ".py", "nbconvert_exporter": "python"}, "kernelspec": {"language": "python", "name": "python3", "display_name": "Python 3"}}, "cells": [{"metadata": {"_uuid": "f0942370e78c224b205188695ddedb8a9a9dd497", "collapsed": true, "_cell_guid": "94e9f00c-d888-42e7-b4f6-b0391fe46358"}, "outputs": [], "execution_count": null, "source": ["import numpy as np # linear algebra\n", "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", "import cv2\n", "import skimage\n", "from skimage.filters import gaussian\n", "import matplotlib.pyplot as plt\n", "# Input data files are available in the \"../input/\" directory.\n", "# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n", "\n", "from subprocess import check_output\n", "#print(check_output([\"ls\", \"../input/stage1_train/00071198d059ba7f5914a526d124d28e6d010c92466da21d4a04cd5413362552/masks\"]).decode(\"utf8\"))\n", "%matplotlib inline\n", "# Any results you write to the current directory are saved as output."], "cell_type": "code"}, {"metadata": {"_uuid": "c75f550229f539f600ce33841f987371b3da7613", "_cell_guid": "bc750f3a-6948-4644-9a37-bff8ce653640"}, "outputs": [], "execution_count": null, "source": ["stage1_train_labels = pd.read_csv('../input/stage1_train_labels.csv')\n", "stage1_train_labels.loc[0,'ImageId']"], "cell_type": "code"}, {"metadata": {"_uuid": "8b996334e4469eb976ca5bded51eb9bcfd41e1f6", "scrolled": false, "_cell_guid": "e3ff0b8d-15c7-44c5-b8ee-c2452fa06569"}, "outputs": [], "execution_count": null, "source": ["class image():\n", "    def __init__(self, img_code, stage='stage1'):\n", "        self.stage = stage\n", "        self.img_code = img_code\n", "        self.file_path = '../input/' + stage + '_train/' + img_code\n", "        self.images_path = self.file_path + '/images'\n", "        self.mask_path = self.file_path + '/masks'\n", "        \n", "        self.img = cv2.imread(self.images_path + '/' + self.img_code + '.png')\n", "        self._mask_file_names = self.get_mask_file_names()\n", "        self.n_nuclei = len(self._mask_file_names)\n", "        self.masks = self.get_masks()\n", "        self.mask = np.sum(self.masks,axis=0)\n", "        self.mask_with_outline = self.combine_masks_with_outline()\n", "        \n", "    def get_mask_file_names(self):\n", "        file_names_string = check_output([\"ls\", \"../input/\" + self.stage + \"_train/\" + self.img_code + \"/masks\"]).decode(\"utf8\")\n", "        mask_file_names = file_names_string.split('\\n')\n", "        return [mask_file_name for mask_file_name in mask_file_names if len(mask_file_name) > 0]\n", "    \n", "    def get_masks(self):\n", "        masks = []\n", "        for mask_file_name in self._mask_file_names:\n", "            mask = cv2.imread(self.mask_path+'/'+mask_file_name, cv2.IMREAD_GRAYSCALE)\n", "            masks += [(mask > 0).astype(int)]\n", "        return masks\n", "    \n", "    def combine_masks_with_outline(self):\n", "        combined = self.mask.copy()\n", "        for mask in self.masks:\n", "            outline = (np.abs((gaussian(mask,sigma=1,preserve_range=True) - mask))*20).astype(int)\n", "            combined += outline\n", "        return combined\n", "    \n", "im1 = image(stage1_train_labels.loc[13005,'ImageId'])\n", "plt.imshow(im1.img)\n", "plt.figure()\n", "plt.imshow(im1.mask_with_outline)\n", "im1.n_nuclei"], "cell_type": "code"}, {"metadata": {"collapsed": true}, "outputs": [], "execution_count": null, "source": [], "cell_type": "code"}], "nbformat": 4, "nbformat_minor": 1}