Diff of /eda/dicom_metadata.ipynb [000000] .. [fb2ce2]

Switch to side-by-side view

--- a
+++ b/eda/dicom_metadata.ipynb
@@ -0,0 +1,292 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "You can read the DICOM metadata - especially \"Window Center\", \"Window Width\", \"Rescale Intercept\" and \"Rescale Slope\" - for data pre-processing.\n",
+    "Head CT are a center of 40 and a width of 80"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 135,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import sys\n",
+    "import os\n",
+    "import ast\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "from tqdm import tqdm\n",
+    "from tqdm import tqdm_notebook as tqdm\n",
+    "import pydicom\n",
+    "import re\n",
+    "import PIL\n",
+    "from PIL import Image\n",
+    "from random import randrange\n",
+    "import matplotlib.pyplot as plt\n",
+    "%matplotlib inline\n",
+    "# import seaborn as sns\n",
+    "\n",
+    "train_csv_path = '../src/training.csv'\n",
+    "validate_csv_path = '../src/validation.csv'\n",
+    "test_csv_path = '../src/testing.csv'\n",
+    "\n",
+    "tony_data_path = ''\n",
+    "chris_data_path = ''\n",
+    "kyle_data_path = '/media/keil/baltar/intracranial-hemorrhage-detection-data/stage_1_train_images/'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bad_actors = []"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def window_image(img, window_center, window_width, intercept, slope):\n",
+    "    \"\"\"\n",
+    "    Given a CT scan img apply a windowing to the image\n",
+    "    Arguments:\n",
+    "        img {np.array} -- array of a dicom img processed by pydicom.dcmread()\n",
+    "        window_center,window_width,intercept,slope {floats} -- values provided by dicom file metadata\n",
+    "    \"\"\"\n",
+    "    img = (img * slope + intercept)\n",
+    "    img_min = window_center - window_width // 2\n",
+    "    img_max = window_center + window_width // 2\n",
+    "    img[img < img_min] = img_min\n",
+    "    img[img > img_max] = img_max\n",
+    "    return img "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 129,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_first_of_dicom_field_as_int(x):\n",
+    "    #get x[0] as in int is x is a 'pydicom.multival.MultiValue', otherwise get int(x)\n",
+    "    if type(x) == pydicom.multival.MultiValue:\n",
+    "        return int(x[0])\n",
+    "    else:\n",
+    "        return int(x)\n",
+    "\n",
+    "def get_windowing(data):\n",
+    "    dicom_fields = [data.WindowCenter,\n",
+    "                    data.WindowWidth,\n",
+    "                    data.RescaleIntercept,\n",
+    "                    data.RescaleSlope]\n",
+    "    return (get_first_of_dicom_field_as_int(x) for x in dicom_fields)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 130,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def translate_dicom(filename, path=kyle_data_path, apply_window=True):\n",
+    "    \"\"\"\n",
+    "    Transform a medical DICOM file to a standardized pixel based array\n",
+    "    Arguments:\n",
+    "        filename {string}\n",
+    "        path {string} -- file path to data, set in config.ini\n",
+    "        apply_window {bool} -- if True (default) then windowed png of dicom data is returned\n",
+    "    \"\"\"\n",
+    "    \n",
+    "    data = pydicom.dcmread(path + filename)\n",
+    "    \n",
+    "    if apply_window:\n",
+    "        window_center, window_width, intercept, slope = get_windowing(data)\n",
+    "        img = window_image(data.pixel_array, window_center, window_width, intercept, slope)\n",
+    "        return np.array(img, dtype=float)\n",
+    "\n",
+    "    img = np.array(data.pixel_array, dtype=float)\n",
+    "    standardized_array = np.divide(np.subtract(img,img.mean()),img.std())\n",
+    "    return standardized_array"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 134,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "ed099ebbae5147eebbde363e453a73f1",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "HBox(children=(IntProgress(value=1, bar_style='info', max=1), HTML(value='')))"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(512, 512)\n",
+      "(512, 512)\n",
+      "(512, 512)\n",
+      "(512, 512)\n",
+      "(512, 512)\n",
+      "(512, 512)\n",
+      "\n"
+     ]
+    },
+    {
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "for idx, dicom in tqdm(enumerate(os.listdir(kyle_data_path))):\n",
+    "    if dicom in bad_actors:\n",
+    "        continue\n",
+    "        \n",
+    "    img = translate_dicom(dicom, apply_window=True) \n",
+    "    \n",
+    "    print(img.shape)\n",
+    "    \n",
+    "\n",
+    "    plt.imshow(img, cmap=plt.cm.bone)\n",
+    "\n",
+    "    \n",
+    "    if idx == 5:\n",
+    "        break\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "case = 5\n",
+    "\n",
+    "data = pydicom.dcmread(train[case])\n",
+    "\n",
+    "#print(data)\n",
+    "window_center , window_width, intercept, slope = get_windowing(data)\n",
+    "\n",
+    "\n",
+    "#displaying the image\n",
+    "img = pydicom.read_file(train[case]).pixel_array\n",
+    "\n",
+    "img = window_image(img, window_center, window_width, intercept, slope)\n",
+    "plt.imshow(img, cmap=plt.cm.bone)\n",
+    "plt.grid(False)\n",
+    "\n",
+    "print(data)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "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.6.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}