{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":false},"cell_type":"markdown","source":"This code converts the external nuclei segmentation data available [here](https://zenodo.org/record/1175282#.WssuWvluZhE) to the DSB18 folder structure and format. To run this code, please put this notebook inside the \"TNBC_NucleiSegmentation\" directory, where the Slide_# and GT_# directories are located."},{"metadata":{"collapsed":true,"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"code","source":"import numpy as np\nimport os\nfrom os.path import splitext\nimport shutil\nimport itertools\n\nfolders = next(os.walk(\".\"))[1]\npaths = [p for p in folders if p.startswith(\"Slide\")]\nimg_paths = []\nfor p in paths:\n    pw = next(os.walk(p))\n    img_paths.extend([[pw[0],pwl] for pwl in pw[2]])\nprint(img_paths)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"233b138cb199f5f8c7ff8957c4400a4a43bbe37f"},"cell_type":"code","source":"paths = [p for p in folders if p.startswith(\"GT\")]\ngt_paths = []\nfor p in paths:\n    pw = next(os.walk(p))\n    gt_paths.extend([[pw[0],pwl] for pwl in pw[2]])\nprint(gt_paths)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"b1fd4dbbf2277b4c66cc99d8b046600d30aba1db"},"cell_type":"code","source":"make_folders = []\nmake_folders.extend([splitext(f[1])[0] for f in img_paths])\nprint(make_folders)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"8b005cb8c15b3058e1111263b68f8c957e7d3bc9"},"cell_type":"code","source":"for img, gt, f in zip(img_paths, gt_paths, make_folders):\n    path_images = os.path.join(f, \"images\")\n    path_masks = os.path.join(f, \"masks\")\n    os.makedirs(path_images)\n    os.makedirs(path_masks)\n    shutil.copy(os.path.join(img[0], img[1]), path_images)\n    shutil.copy(os.path.join(gt[0], gt[1]), path_masks)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"a06fb21219dde47ca60d1927c9e14f02c151c27d"},"cell_type":"code","source":"from skimage.morphology import label\nfrom skimage.io import imread, imsave\n\nfor gt,f in zip(gt_paths, make_folders):\n    path_mask = os.path.join(f, \"masks\", gt[1])\n    img = imread(path_mask)\n    labels, n = label(img, connectivity=1, return_num=True)\n    for i in range(1,n):\n        mask = np.where(labels==i, True, False)\n        imsave(os.path.join(f, \"masks\", \"mask_{0}.png\".format(i)), mask * 255)\n    print(n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"a11120d29b4560ce246216131d4bf6d25aefced5"},"cell_type":"code","source":"# remove original masks\nfor gt,f in zip(gt_paths, make_folders):\n    path_mask = os.path.join(f, \"masks\", gt[1])\n    os.remove(path_mask)","execution_count":null,"outputs":[]}],"metadata":{"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":1}