{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport os \nimport glob\nimport pydicom\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import StratifiedKFold\npd.set_option('display.max_columns', None)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Reference to https://www.kaggle.com/seraphwedd18/pe-detection-with-keras-model-creation#Check-Targets-and-Input-Image\nimport vtk\nfrom vtk.util import numpy_support\nimport cv2\nreader = vtk.vtkDICOMImageReader()\n\ndef read_dicom(path):\n    reader.SetFileName(path)\n    reader.Update()\n    _extent = reader.GetDataExtent()\n    # ConstPixelDims = [_extent[1]-_extent[0]+1, _extent[3]-_extent[2]+1, _extent[5]-_extent[4]+1]\n    ConstPixelDims = [_extent[1]-_extent[0]+1, _extent[3]-_extent[2]+1]\n\n    imageData = reader.GetOutput()\n    pointData = imageData.GetPointData()\n    arrayData = pointData.GetArray(0)\n    ArrayDicom = numpy_support.vtk_to_numpy(arrayData)\n    ArrayDicom = ArrayDicom.reshape(ConstPixelDims, order='F')\n    ArrayDicom = np.rot90(ArrayDicom)  # rotate then equal to pydicom.read_file\n    return ArrayDicom","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv(\"../input/rsna-ped-dicom-metadata/train_with_dcm_metadata.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df[df[\"StudyInstanceUID\"]==\"6d306dd47c57\"][\"dcm_InstanceNumber\"].nunique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df[df[\"StudyInstanceUID\"]==\"6d306dd47c57\"].sort_values(by=\"dcm_InstanceNumber\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import math\nimport random\ndef show_exam_dcm(df, exam_id=None, window_center=None, window_width=None):\n    if exam_id is None:\n        exam_id = random.sample( list(df[\"StudyInstanceUID\"].unique()), 1)[0]\n    \n    df_exam = df[df[\"StudyInstanceUID\"]==exam_id].sort_values(by=\"dcm_InstanceNumber\",ascending=False).reset_index(drop=True)\n \n    dcm_dir = \"../input/rsna-str-pulmonary-embolism-detection/train\"\n    cols_window = [\"dcm_WindowCenter_0\", \"dcm_WindowWidth_0\", \"dcm_RescaleIntercept\", \"dcm_RescaleSlope\"]\n    dcm_num = df_exam.shape[0]\n    cols = 6\n    rows = math.ceil(dcm_num/cols)\n\n    fig,ax = plt.subplots(rows,cols,figsize=[18,3*rows])\n    for i in range( min( rows*cols, dcm_num )):\n        StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, dcm_InstanceNumber = \\\n            df_exam.loc[i, [\"StudyInstanceUID\", \"SeriesInstanceUID\", \"SOPInstanceUID\", \"dcm_InstanceNumber\"]].values\n        \n        default_center, default_width, intercept, slope = df_exam.loc[i, cols_window].values\n    \n        path = f\"{dcm_dir}/{StudyInstanceUID}/{SeriesInstanceUID}/{SOPInstanceUID}.dcm\"\n        \n        dcm = read_dicom(path).astype(np.float32)\n#         dcm = pydicom.read_file(path).pixel_array.astype(np.float32)\n        \n#         dcm =  dcm * slope + intercept\n        \n        if window_center==\"default\":\n            window_center = default_center\n        if window_width==\"default\":\n            window_width = default_width\n        if  window_center is not None and window_width is not None:\n            window_min = window_center - window_width//2\n            window_max = window_center + window_width//2\n            dcm[dcm < window_min] = window_min\n            dcm[dcm > window_max] = window_max\n        \n        img = ( (dcm - np.min(dcm)) / (np.max(dcm) - np.min(dcm)) )*255\n      \n        ax[int(i/cols),int(i % cols)].set_title(f'{exam_id} {dcm_InstanceNumber}')\n        ax[int(i/cols),int(i % cols)].imshow(img  ,cmap='gray')\n        ax[int(i/cols),int(i % cols)].axis('off')\n        \n#     plt.tight_layout()\n    plt.show()\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, \"6d306dd47c57\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=50, window_width=450)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=50, window_width=450)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=50, window_width=450)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=50, window_width=450)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=50, window_width=450)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=50, window_width=450)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=\"default\", window_width=\"default\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=\"default\", window_width=\"default\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=\"default\", window_width=\"default\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=\"default\", window_width=\"default\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"show_exam_dcm(df, window_center=\"default\", window_width=\"default\")","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":4}