{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30732,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# imports\nimport numpy as np\nimport pandas as pd\nfrom pydicom import dcmread\nimport os\nimport matplotlib.pyplot as plt\nfrom skimage.transform import resize\nimport cv2","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-07-10T21:08:37.487406Z","iopub.execute_input":"2024-07-10T21:08:37.487805Z","iopub.status.idle":"2024-07-10T21:08:40.017402Z","shell.execute_reply.started":"2024-07-10T21:08:37.487768Z","shell.execute_reply":"2024-07-10T21:08:40.015955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# read in training metadata\ntrain = pd.read_csv(\"/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train.csv\")\ntrain_series_descriptions = pd.read_csv(\"/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_series_descriptions.csv\")\ntrain_label_coordinates = pd.read_csv(\"/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv\")\n\nprint(\"Length of train:\", len(train))\nprint(\"Length of train_series_descriptions:\", len(train_series_descriptions))\nprint(\"Length of train_label_coordinates:\", len(train_label_coordinates)) # ONE participant doesn't have any labels. Do not use that\n\ntrain_series_descriptions.head()","metadata":{"execution":{"iopub.status.busy":"2024-07-10T21:09:03.384375Z","iopub.execute_input":"2024-07-10T21:09:03.385090Z","iopub.status.idle":"2024-07-10T21:09:03.649146Z","shell.execute_reply.started":"2024-07-10T21:09:03.385013Z","shell.execute_reply":"2024-07-10T21:09:03.647813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# combine the training label and descriptions such that each row is a data - label pair\ntrain_combined = pd.merge(train_label_coordinates, train, on=\"study_id\", how=\"left\")\ntrain_combined = pd.merge(train_combined, train_series_descriptions, on=[\"series_id\", \"study_id\"], how=\"left\")\nprint(\"Length of Combined:\", len(train_combined))\n\n# then get rid of all the rows with missing values (still have a lot of training data left)\nnull_in_any = train_combined[train_combined.isnull().any(axis=1)]\ntrain_combined.dropna(inplace=True)\nprint(\"Total number of rows with null data:\", len(null_in_any))\n\n# train_combined = train_combined.dropna()\n# print(\"Length of Combined Cleaned:\", len(train_combined))\n\ntrain_combined[train_combined['series_id'] == 2291122880]","metadata":{"execution":{"iopub.status.busy":"2024-07-10T21:09:08.376962Z","iopub.execute_input":"2024-07-10T21:09:08.377446Z","iopub.status.idle":"2024-07-10T21:09:08.708215Z","shell.execute_reply.started":"2024-07-10T21:09:08.377397Z","shell.execute_reply":"2024-07-10T21:09:08.707115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"temp = []\nfor i in range(len(train_combined)):\n    temp.append(train_combined.iloc[i]['instance_number'] / len(os.listdir(f'/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/{train_combined.iloc[i][\"study_id\"]}/{train_combined.iloc[i][\"series_id\"]}')))\ntrain_combined['relative_instance'] = temp","metadata":{"execution":{"iopub.status.busy":"2024-07-10T21:12:32.378167Z","iopub.execute_input":"2024-07-10T21:12:32.378601Z","iopub.status.idle":"2024-07-10T21:13:24.424916Z","shell.execute_reply.started":"2024-07-10T21:12:32.378569Z","shell.execute_reply":"2024-07-10T21:13:24.423565Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# target training images shape\ntarget_shape = (300, 300)\n\nfor study in os.listdir(\"/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images\"):\n    for series in os.listdir(f'/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/{study}'):\n        for image in os.listdir(f'/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/{study}/{series}'):\n            imageNum = image.split(\".\")[0]\n\n            # read the image\n            ds = dcmread(f'/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/{study}/{series}/{image}')\n            ds = ds.pixel_array\n            og_shape = ds.shape\n\n            # get all the training data for this image\n            im_metadata = train_combined[(train_combined['study_id'] == int(study)) & (train_combined['series_id'] == int(series)) & (train_combined['instance_number'] == int(imageNum))]\n\n            if len(im_metadata) > 0: # has labels\n                for row in range(len(im_metadata)):\n                    train_combined.loc[im_metadata.index[row], 'x'] *= (target_shape[0] / og_shape[1]) # update label coordinates\n                    train_combined.loc[im_metadata.index[row], 'y'] *= (target_shape[1] / og_shape[0])\n\n                resized_image = resize(ds, target_shape, anti_aliasing=True) # resize image\n                resized_image = 255 * (resized_image - np.min(resized_image)) / (np.max(resized_image) - np.min(resized_image)) # normalize\n                resized_image = resized_image.astype(np.uint8) # change to int\n\n                plt.imshow(resized_image)\n                cv2.imwrite(f'{study}_{series}_{imageNum}.png', resized_image)\n                print(f'Finished Study {study} Series {series} Image {imageNum}')\n                \ntrain_combined.to_csv(\"all_training_data.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2024-07-08T02:46:12.747295Z","iopub.execute_input":"2024-07-08T02:46:12.747913Z","iopub.status.idle":"2024-07-08T02:46:48.732363Z","shell.execute_reply.started":"2024-07-08T02:46:12.747881Z","shell.execute_reply":"2024-07-08T02:46:48.731278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}