{"cells":[{"metadata":{},"cell_type":"markdown","source":"## DICOM multi-window view\n    * Default\n    * Brain\n    * Subdural\n    * Tissue\n    * Bone\n    * White-Grey"},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport pydicom\nimport random","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_window_image(ds, window='default', rescale=True):\n    ''' Return image for particular window_type'''\n\n    if window == 'default':\n        if type(ds.WindowCenter) == pydicom.multival.MultiValue:\n            window_center = ds.WindowCenter[0]\n        else:\n            window_center = ds.WindowCenter\n\n        if type(ds.WindowWidth) == pydicom.multival.MultiValue:\n            window_width = ds.WindowWidth[0]\n        else:\n            window_width = ds.WindowWidth\n    elif window == 'brain':\n        window_center, window_width = 40, 80\n    elif window == 'subdural-min':\n        window_center, window_width = 50, 130\n    elif window == 'subdural-mid':\n        window_center, window_width = 75, 215\n    elif window == 'subdural-max':\n        window_center, window_width = 100, 300\n    elif window == 'tissue-min':\n        window_center, window_width = 20, 350\n    elif window == 'tissue-mid':\n        window_center, window_width = 40, 375\n    elif window == 'tissue-max':\n        window_center, window_width = 60, 400\n    elif window == 'bone':\n        window_center, window_width = 600, 2800\n    elif window == 'grey_white':\n        window_center, window_width = 32, 8\n    else:\n        raise ValueError(f'{window} is not a valid window.')\n\n    img = ds.pixel_array*ds.RescaleSlope + ds.RescaleIntercept\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\n    if rescale:\n        img = (img - img_min) / (img_max - img_min)\n\n    return img","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def show_image(images, file_ID):\n    ''' Plot the image using imshow '''\n\n    fig, ax = plt.subplots(5, 2, figsize = (10, 24), gridspec_kw = {'hspace': 0.2, 'wspace': 0.1})\n\n    titles = [['Default Window', 'Brain Window'],\n                ['Subdural Window (Min)', 'Subdural Window (Max)'],\n                ['Subdural Window (Mid)', 'Tissue Window (Mid)'],\n                ['Tissue Window (Min)', 'Tissue Window (Max)'],\n                ['Bone Window', 'Grey-White Window']]\n    \n    fig.suptitle(f'\"ID_{file_ID}.dcm\" multi-window view', fontsize='14')\n\n    i = 0\n    for x in range(5):\n        for y in range(2):\n            ax[x, y].set_title(titles[x][y])\n            ax[x, y].imshow(images[i], cmap=plt.cm.bone)\n            i += 1\n\n    plt.subplots_adjust(top=0.95)\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def display_image_in_diff_windows(file_ID):\n\n    stage_2_dir = '/kaggle/input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_train'\n    filename = stage_2_dir + '/ID_' + file_ID + '.dcm'\n    dicom_data = pydicom.dcmread(filename)\n\n    windows = ['default', 'brain', 'subdural-min', 'subdural-max', 'subdural-mid',\n                'tissue-mid', 'tissue-min', 'tissue-max', 'bone', 'grey_white']\n    images = []\n\n    for window in windows:\n        img = get_window_image(dicom_data, window)\n        images.append(img)\n\n    show_image(images, file_ID)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"interesting_cases = ['00c4d3226', '00ad28f0c', '00c7b2578', '00c2f083a']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"display_image_in_diff_windows(interesting_cases[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"display_image_in_diff_windows(interesting_cases[1])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"display_image_in_diff_windows(interesting_cases[2])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"display_image_in_diff_windows(interesting_cases[3])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}