{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.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":99552,"databundleVersionId":13851420,"sourceType":"competition"},{"sourceId":13253657,"sourceType":"datasetVersion","datasetId":8398519}],"dockerImageVersionId":31089,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Reduced dataset containing ROIs of 4346 DICOM","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-10-03T19:07:44.300634Z","iopub.execute_input":"2025-10-03T19:07:44.301393Z","iopub.status.idle":"2025-10-03T19:07:44.306519Z","shell.execute_reply.started":"2025-10-03T19:07:44.301351Z","shell.execute_reply":"2025-10-03T19:07:44.305554Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nfrom tqdm import tqdm\nimport matplotlib.pyplot as plt","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-03T19:07:44.308053Z","iopub.execute_input":"2025-10-03T19:07:44.308361Z","iopub.status.idle":"2025-10-03T19:07:44.692361Z","shell.execute_reply.started":"2025-10-03T19:07:44.308331Z","shell.execute_reply":"2025-10-03T19:07:44.691323Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"roi_df = pd.read_csv('/kaggle/input/rsna-raw-roi/rsna_roi.csv')\nroi_df.tail()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-03T19:07:44.693345Z","iopub.execute_input":"2025-10-03T19:07:44.69381Z","iopub.status.idle":"2025-10-03T19:07:44.75341Z","shell.execute_reply.started":"2025-10-03T19:07:44.693784Z","shell.execute_reply":"2025-10-03T19:07:44.752388Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"N = 50\nsource_path = '/kaggle/input/rsna-raw-roi/NPZ/'\nvolumes = roi_df.case\nsamples =  np.random.permutation(np.arange(len(volumes)))[:N]\nv = [volumes[k] for k in samples]\nplt.imshow(np.arange(14).reshape(1,14),cmap='turbo')\nplt.gca().get_yaxis().set_visible(False)\nplt.xticks(ticks=np.arange(14), labels=np.arange(14))\nplt.show() \nfor k in range(len(v)):\n    print(v[k])\n    npz = np.load(source_path + v[k] + '.npz')\n    print(pd.DataFrame({\n        'AP':npz['AP'],\n        'loc':npz['loc'],\n        'z':npz['t'][:,0],\n        'y':npz['t'][:,1],\n        'x':npz['t'][:,2]\n    }).sort_values('loc').reset_index(drop=True))\n#   ROI\n    volume = npz['volume']\n#   Segmentation quality checks\n    YX = npz['YX']\n    ZY = npz['ZY']\n    ZX = npz['ZX']\n#   Legend and cmap sanity check\n    YX[0,:14] = ZY[0,:14] = ZX[0,:14] = np.arange(14)\n#   Visualization\n    _, axs = plt.subplots(2, 3)\n    axs[0,0].imshow(volume.max(0))\n    axs[0,1].imshow(volume.max(1))\n    axs[0,2].imshow(volume.max(2))\n    axs[1,0].imshow(YX,cmap='turbo')\n    axs[1,1].imshow(ZX,cmap='turbo')\n    axs[1,2].imshow(ZY,cmap='turbo')\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-03T19:07:44.755298Z","iopub.execute_input":"2025-10-03T19:07:44.755656Z","execution_failed":"2025-10-03T19:08:26.335Z"}},"outputs":[],"execution_count":null}]}