Last active
January 31, 2020 12:09
-
-
Save jeanpat/2b95e3ca23a983316dc0d3fa4c064c50 to your computer and use it in GitHub Desktop.
This jupyter notebook can be used to clean the groundtruth images from the following dataset: https://github.com/jeanpat/DeepFISH/blob/master/dataset/LowRes_13434_overlapping_pairs.h5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "!pip install git+git://github.com/waspinator/[email protected]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import h5py\n", | |
| "import numpy as np\n", | |
| "import os\n", | |
| "#import skimage as sk\n", | |
| "#print sk.__version__\n", | |
| "#from skimage import io\n", | |
| "from matplotlib import pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import json\n", | |
| "from pycocotools import mask\n", | |
| "from skimage import measure" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#from skimage import filters\n", | |
| "#from skimage import feature\n", | |
| "#from skimage import io\n", | |
| "#from scipy import ndimage as nd\n", | |
| "#from scipy import misc" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def load_dataset(path):\n", | |
| " if os.path.exists(path):\n", | |
| " print('found ' + path)\n", | |
| " h5f = h5py.File(path,'r')\n", | |
| " #h5f = h5py.File('../dataset/overlapping_subset_pairs.h5','r')\n", | |
| " pairs = h5f['dataset_1'][:]\n", | |
| " h5f.close()\n", | |
| " return pairs\n", | |
| " else:\n", | |
| " print(path +' not found')\n", | |
| " return None" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "total 116560\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 48208 janv. 1 21:12 'Clean Dataset from their spurious pixels.ipynb'\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 12514746 janv. 1 19:38 Cleaned_FullRes_2854_overlapping_pairs.h5\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 19019811 janv. 1 19:35 Cleaned_FullRes_2854_overlapping_pairs.npz\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 0 déc. 20 21:46 Cleaned_LowRes_13434_overlapping_pairs.h5\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 8911800 déc. 20 16:23 Cleaned_LowRes_13434_overlapping_pairs.tar.xz\r\n", | |
| "lrwxrwxrwx 1 jeanpat jeanpat 51 janv. 15 17:20 dataset -> '/home/jeanpat/Developpement/DeepFISH master/dataset'\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 15409078 janv. 15 18:14 Detectron2_Tutorial.ipynb\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 209222 juil. 11 2018 input.jpg\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 14283 déc. 30 19:20 LoadingDataset.ipynb\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 24203163 déc. 20 16:48 LowRes_13434_overlapping_pairs.h5\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 66386 déc. 20 17:57 LowRes_13434_overlapping_pairs.h5.1\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 23797936 déc. 20 14:06 old_Cleaned_LowRes_13434_overlapping_pairs.h5\r\n", | |
| "-rw-r--r-- 1 jeanpat jeanpat 8911800 déc. 20 13:54 ori_Cleaned_LowRes_13434_overlapping_pairs.tar.xz\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 5862281 déc. 30 18:53 overlapping_chromosomes_examples.h5\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 103203 déc. 20 10:38 plot_compact_watershed.ipynb\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 20357 déc. 20 16:44 Register_ChromDataSet.ipynb\r\n", | |
| "-rw-rw-r-- 1 jeanpat jeanpat 230105 déc. 20 16:54 Tinkering_with_OverlapSegmentationNet-01.ipynb\r\n", | |
| "drwxrwxr-x 2 jeanpat jeanpat 4096 janv. 16 17:37 To_COCO\r\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "!ls -l" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## load some datasets in hdf5 format" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "fullres_data_path = './dataset/overlapping_chromosomes_examples.h5'\n", | |
| "#fullres_data_path = './overlapping_chromosomes_examples.h5'\n", | |
| "\n", | |
| "lowres_data_path = './dataset/lowres_82146_overlapping_pairs_grey_DAPI-GroundTruth.h5'\n", | |
| "midres_data_path = './LowRes_13434_overlapping_pairs.h5'\n", | |
| "cleaned_midres_data_path = './Cleaned_LowRes_13434_overlapping_pairs.h5'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "found ./dataset/overlapping_chromosomes_examples.h5\n", | |
| "(2853, 190, 189, 2)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "pairs = load_dataset(fullres_data_path)\n", | |
| "print(pairs.shape)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "(2853, 190, 189, 2)\n", | |
| "int8\n", | |
| "95\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "print(pairs.shape)\n", | |
| "print(pairs[0,:,:,1].dtype)\n", | |
| "print(pairs[0,:,:,0].max())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(1427, 190, 189, 2)" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "subset = pairs[::2,:,:,:]\n", | |
| "subset.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Display some pair" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.image.AxesImage at 0x7f00cdb092e8>" | |
| ] | |
| }, | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "N = 150\n", | |
| "grey = pairs[N,:,:,0]\n", | |
| "grd_truth = pairs[N,:,:,1]\n", | |
| "\n", | |
| "plt.subplot(121,xticks=[],yticks=[])\n", | |
| "plt.imshow(grey, cmap=plt.cm.gray)\n", | |
| "plt.subplot(122,xticks=[],yticks=[])\n", | |
| "plt.imshow(grd_truth.astype(np.uint8), cmap=plt.cm.flag_r)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[0, 0, 0, ..., 0, 0, 0],\n", | |
| " [0, 0, 0, ..., 0, 0, 0],\n", | |
| " [0, 0, 0, ..., 0, 0, 0],\n", | |
| " ...,\n", | |
| " [0, 0, 0, ..., 0, 0, 0],\n", | |
| " [0, 0, 0, ..., 0, 0, 0],\n", | |
| " [0, 0, 0, ..., 0, 0, 0]], dtype=int8)" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "INFO = {\n", | |
| " \"description\": \"Example Dataset\",\n", | |
| " \"url\": \"https://github.com/waspinator/pycococreator\",\n", | |
| " \"version\": \"0.1.0\",\n", | |
| " \"year\": 2018,\n", | |
| " \"contributor\": \"waspinator\",\n", | |
| " \"date_created\": datetime.datetime.utcnow().isoformat(' ')\n", | |
| "}\n", | |
| "\n", | |
| "LICENSES = [\n", | |
| " {\n", | |
| " \"id\": 1,\n", | |
| " \"name\": \"Attribution-NonCommercial-ShareAlike License\",\n", | |
| " \"url\": \"http://creativecommons.org/licenses/by-nc-sa/2.0/\"\n", | |
| " }\n", | |
| "]\n", | |
| "\n", | |
| "CATEGORIES = [\n", | |
| " {\n", | |
| " 'id': 1,\n", | |
| " 'name': 'square',\n", | |
| " 'supercategory': 'shape',\n", | |
| " },\n", | |
| " {\n", | |
| " 'id': 2,\n", | |
| " 'name': 'circle',\n", | |
| " 'supercategory': 'shape',\n", | |
| " },\n", | |
| " {\n", | |
| " 'id': 3,\n", | |
| " 'name': 'triangle',\n", | |
| " 'supercategory': 'shape',\n", | |
| " },\n", | |
| "]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "import json\n", | |
| "import numpy as np\n", | |
| "from pycocotools import mask\n", | |
| "from skimage import measure\n", | |
| "\n", | |
| "ground_truth_binary_mask = np.array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", | |
| " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", | |
| " [ 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],\n", | |
| " [ 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],\n", | |
| " [ 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],\n", | |
| " [ 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],\n", | |
| " [ 1, 0, 0, 0, 0, 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, 0, 0]], dtype=np.uint8)\n", | |
| "\n", | |
| "fortran_ground_truth_binary_mask = np.asfortranarray(ground_truth_binary_mask)\n", | |
| "encoded_ground_truth = mask.encode(fortran_ground_truth_binary_mask)\n", | |
| "ground_truth_area = mask.area(encoded_ground_truth)\n", | |
| "ground_truth_bounding_box = mask.toBbox(encoded_ground_truth)\n", | |
| "contours = measure.find_contours(ground_truth_binary_mask, 0.5)\n", | |
| "\n", | |
| "annotation = {\n", | |
| " \"segmentation\": [],\n", | |
| " \"area\": ground_truth_area.tolist(),\n", | |
| " \"iscrowd\": 0,\n", | |
| " \"image_id\": 123,\n", | |
| " \"bbox\": ground_truth_bounding_box.tolist(),\n", | |
| " \"category_id\": 1,\n", | |
| " \"id\": 1\n", | |
| " }\n", | |
| "\n", | |
| "for contour in contours:\n", | |
| " contour = np.flip(contour, axis=1)\n", | |
| " segmentation = contour.ravel().tolist()\n", | |
| " annotation[\"segmentation\"].append(segmentation)\n", | |
| " \n", | |
| "print(json.dumps(annotation, indent=4))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "source": [ | |
| "# Create a directory suitable to create a COCO dataset\n", | |
| " * first try to convert a multilevel mask into coordinates of contour points according to https://github.com/cocodataset/cocoapi/issues/131" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 28, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "grd_1 = grd_truth == 1\n", | |
| "grd_2 = grd_truth == 2\n", | |
| "grd_3 = grd_truth == 3\n", | |
| "\n", | |
| "fortran_ground_truth_binary_mask = np.asfortranarray(grd_3.astype(np.uint8))\n", | |
| "encoded_ground_truth = mask.encode(fortran_ground_truth_binary_mask)\n", | |
| "ground_truth_area = mask.area(encoded_ground_truth)\n", | |
| "ground_truth_bounding_box = mask.toBbox(encoded_ground_truth)\n", | |
| "contours = measure.find_contours(ground_truth_binary_mask, 0.5)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "{\n", | |
| " \"segmentation\": [\n", | |
| " [\n", | |
| " 7.0,\n", | |
| " 5.5,\n", | |
| " 6.0,\n", | |
| " 5.5,\n", | |
| " 5.0,\n", | |
| " 5.5,\n", | |
| " 4.5,\n", | |
| " 5.0,\n", | |
| " 4.5,\n", | |
| " 4.0,\n", | |
| " 4.5,\n", | |
| " 3.0,\n", | |
| " 4.5,\n", | |
| " 2.0,\n", | |
| " 5.0,\n", | |
| " 1.5,\n", | |
| " 6.0,\n", | |
| " 1.5,\n", | |
| " 7.0,\n", | |
| " 1.5,\n", | |
| " 7.5,\n", | |
| " 2.0,\n", | |
| " 7.5,\n", | |
| " 3.0,\n", | |
| " 7.5,\n", | |
| " 4.0,\n", | |
| " 7.5,\n", | |
| " 5.0,\n", | |
| " 7.0,\n", | |
| " 5.5\n", | |
| " ],\n", | |
| " [\n", | |
| " 0.0,\n", | |
| " 5.5,\n", | |
| " 0.5,\n", | |
| " 6.0,\n", | |
| " 0.0,\n", | |
| " 6.5\n", | |
| " ]\n", | |
| " ],\n", | |
| " \"area\": 575,\n", | |
| " \"iscrowd\": 0,\n", | |
| " \"image_id\": 123,\n", | |
| " \"bbox\": [\n", | |
| " 77.0,\n", | |
| " 92.0,\n", | |
| " 29.0,\n", | |
| " 28.0\n", | |
| " ],\n", | |
| " \"category_id\": 1,\n", | |
| " \"id\": 1\n", | |
| "}\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "annotation = {\n", | |
| " \"segmentation\": [],\n", | |
| " \"area\": ground_truth_area.tolist(),\n", | |
| " \"iscrowd\": 0,\n", | |
| " \"image_id\": 123,\n", | |
| " \"bbox\": ground_truth_bounding_box.tolist(),\n", | |
| " \"category_id\": 1,\n", | |
| " \"id\": 1\n", | |
| " }\n", | |
| "\n", | |
| "for contour in contours:\n", | |
| " contour = np.flip(contour, axis=1)\n", | |
| " segmentation = contour.ravel().tolist()\n", | |
| " annotation[\"segmentation\"].append(segmentation)\n", | |
| " \n", | |
| "print(json.dumps(annotation, indent=4))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "dict_keys(['segmentation', 'area', 'iscrowd', 'image_id', 'bbox', 'category_id', 'id'])" | |
| ] | |
| }, | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "annotation.keys()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[7.0,\n", | |
| " 5.5,\n", | |
| " 6.0,\n", | |
| " 5.5,\n", | |
| " 5.0,\n", | |
| " 5.5,\n", | |
| " 4.5,\n", | |
| " 5.0,\n", | |
| " 4.5,\n", | |
| " 4.0,\n", | |
| " 4.5,\n", | |
| " 3.0,\n", | |
| " 4.5,\n", | |
| " 2.0,\n", | |
| " 5.0,\n", | |
| " 1.5,\n", | |
| " 6.0,\n", | |
| " 1.5,\n", | |
| " 7.0,\n", | |
| " 1.5,\n", | |
| " 7.5,\n", | |
| " 2.0,\n", | |
| " 7.5,\n", | |
| " 3.0,\n", | |
| " 7.5,\n", | |
| " 4.0,\n", | |
| " 7.5,\n", | |
| " 5.0,\n", | |
| " 7.0,\n", | |
| " 5.5]" | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "annotation['segmentation'][0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "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.7.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 1 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment