{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"train_images_10004_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/train_images/10004'","metadata":{"execution":{"iopub.status.busy":"2023-08-22T16:37:00.248616Z","iopub.execute_input":"2023-08-22T16:37:00.249066Z","iopub.status.idle":"2023-08-22T16:37:00.279081Z","shell.execute_reply.started":"2023-08-22T16:37:00.249037Z","shell.execute_reply":"2023-08-22T16:37:00.277973Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\n\npatient_series_ids = []\npatient_series_ids = os.listdir(train_images_10004_path)\n\nprint(f'\\n{30 * \"=\"}\\n')\nprint('patient_series_ids = os.listdir(train_images_10004_path)\\n')\nprint(f'PATIENT_SERIES_IDS:\\n{patient_series_ids}')\nprint(f'\\n{30 * \"=\"}\\n')\n\npatient_id = train_images_10004_path.split('/')[-1]\n\nprint('patient_id = train_images_10004_path.split(\"/\")[-1]\\n')\nprint(f'PATIENT_ID:\\n{patient_id}')","metadata":{"execution":{"iopub.status.busy":"2023-08-22T16:37:00.280765Z","iopub.execute_input":"2023-08-22T16:37:00.281093Z","iopub.status.idle":"2023-08-22T16:37:00.293006Z","shell.execute_reply.started":"2023-08-22T16:37:00.281063Z","shell.execute_reply":"2023-08-22T16:37:00.291824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"patient_series_ids_paths = [\n    os.path.join(train_images_10004_path, patient_series_id) for patient_series_id in patient_series_ids\n]\n\npatient_series_ids_paths","metadata":{"execution":{"iopub.status.busy":"2023-08-22T16:37:00.294691Z","iopub.execute_input":"2023-08-22T16:37:00.295553Z","iopub.status.idle":"2023-08-22T16:37:00.306267Z","shell.execute_reply.started":"2023-08-22T16:37:00.295518Z","shell.execute_reply":"2023-08-22T16:37:00.304744Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_CT_slice(filepath):\n    ds = dcm.dcmread(filepath)\n    image = ds.pixel_array\n    \n    if (\"RescaleIntercept\" in ds) and (\"RescaleSlope\" in ds):\n        intercept = float(ds.RescaleIntercept)\n        slope = float(ds.RescaleSlope)\n        \n    center = int(ds.WindowCenter)\n    width = int(ds.WindowWidth)\n    low = center - width / 2\n    high = center + width / 2    \n\n    image = (image * slope) + intercept\n    image = np.clip(image, low, high)\n    image = image - image.min()\n    image = (image / image.max() * 255).astype(np.int16)\n    print(f'RANDOM DCM IMSHOW')\n    \n    fig, ax = plt.subplots()\n    image = ax.imshow(image)\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-08-22T16:37:00.310297Z","iopub.execute_input":"2023-08-22T16:37:00.311063Z","iopub.status.idle":"2023-08-22T16:37:00.322064Z","shell.execute_reply.started":"2023-08-22T16:37:00.311005Z","shell.execute_reply":"2023-08-22T16:37:00.320897Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pydicom as dcm\nimport matplotlib.pyplot as plt\n\nRANDOM_DCM_INDEX = 66\nfor i, patient_series_ids_path in enumerate(patient_series_ids_paths):\n    \n    print(f'PATIENT_ID: {patient_series_ids_path.split(\"/\")[-2]}')\n    print(f'PATIENT_SERIES_ID: {patient_series_ids_path.split(\"/\")[-1]}')\n\n    dcm_numbers_sorted = os.listdir(patient_series_ids_path)\n    \n    print(f\"FIRST 10 UNSORTED DCMS: {dcm_numbers_sorted[:10]}\")\n    \n    dcm_numbers = []\n    \n    for dirs in dcm_numbers_sorted:\n        dcm_number = int(dirs.split('.')[0])\n        dcm_numbers.append(dcm_number)\n\n    dcm_numbers = np.array(dcm_numbers)\n    dcm_numbers = np.sort(dcm_numbers)\n    \n    for j, dcm_number in enumerate(dcm_numbers):\n        dcm_numbers_sorted[j] = f'{str(dcm_number)}.dcm'\n        \n    dcm_numbers_sorted_len = len(dcm_numbers_sorted)\n    print(f'LEN(DCM_NUMBER_SORTED: {dcm_numbers_sorted_len})')        \n    print(f\"FIRST 10 SORTED DCMS: {dcm_numbers_sorted[:10]}\")\n    \n    if RANDOM_DCM_INDEX < dcm_numbers_sorted_len:\n        filepath = os.path.join(patient_series_ids_path, dcm_numbers_sorted[RANDOM_DCM_INDEX])\n        print(f'RANDOM DCM PATH: {filepath}')\n        \n        load_CT_slice(filepath)\n        \n    print(30 * '=')","metadata":{"execution":{"iopub.status.busy":"2023-08-22T16:37:00.32348Z","iopub.execute_input":"2023-08-22T16:37:00.323999Z","iopub.status.idle":"2023-08-22T16:37:01.294954Z","shell.execute_reply.started":"2023-08-22T16:37:00.32397Z","shell.execute_reply":"2023-08-22T16:37:01.29319Z"},"trusted":true},"execution_count":null,"outputs":[]}]}