{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":29653,"databundleVersionId":2420395,"sourceType":"competition"}],"dockerImageVersionId":30918,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## Trials","metadata":{}},{"cell_type":"code","source":"pip install dicom2nifti","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:21.924381Z","iopub.execute_input":"2025-04-14T04:13:21.924593Z","iopub.status.idle":"2025-04-14T04:13:28.192185Z","shell.execute_reply.started":"2025-04-14T04:13:21.924569Z","shell.execute_reply":"2025-04-14T04:13:28.191303Z"}},"outputs":[{"name":"stdout","text":"Collecting dicom2nifti\n  Downloading dicom2nifti-2.6.0-py3-none-any.whl.metadata (1.5 kB)\nRequirement already satisfied: nibabel in /usr/local/lib/python3.10/dist-packages (from dicom2nifti) (5.3.2)\nRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from dicom2nifti) (1.26.4)\nRequirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from dicom2nifti) (1.13.1)\nRequirement already satisfied: pydicom>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from dicom2nifti) (3.0.1)\nCollecting python-gdcm (from dicom2nifti)\n  Downloading python_gdcm-3.0.24.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.7 kB)\nRequirement already satisfied: importlib-resources>=5.12 in /usr/local/lib/python3.10/dist-packages (from nibabel->dicom2nifti) (5.13.0)\nRequirement already satisfied: packaging>=20 in /usr/local/lib/python3.10/dist-packages (from nibabel->dicom2nifti) (24.2)\nRequirement already satisfied: typing-extensions>=4.6 in /usr/local/lib/python3.10/dist-packages (from nibabel->dicom2nifti) (4.12.2)\nRequirement already satisfied: mkl_fft in /usr/local/lib/python3.10/dist-packages (from numpy->dicom2nifti) (1.3.8)\nRequirement already satisfied: mkl_random in /usr/local/lib/python3.10/dist-packages (from numpy->dicom2nifti) (1.2.4)\nRequirement already satisfied: mkl_umath in /usr/local/lib/python3.10/dist-packages (from numpy->dicom2nifti) (0.1.1)\nRequirement already satisfied: mkl in /usr/local/lib/python3.10/dist-packages (from numpy->dicom2nifti) (2025.0.1)\nRequirement already satisfied: tbb4py in /usr/local/lib/python3.10/dist-packages (from numpy->dicom2nifti) (2022.0.0)\nRequirement already satisfied: mkl-service in /usr/local/lib/python3.10/dist-packages (from numpy->dicom2nifti) (2.4.1)\nRequirement already satisfied: intel-openmp>=2024 in /usr/local/lib/python3.10/dist-packages (from mkl->numpy->dicom2nifti) (2024.2.0)\nRequirement already satisfied: tbb==2022.* in /usr/local/lib/python3.10/dist-packages (from mkl->numpy->dicom2nifti) (2022.0.0)\nRequirement already satisfied: tcmlib==1.* in /usr/local/lib/python3.10/dist-packages (from tbb==2022.*->mkl->numpy->dicom2nifti) (1.2.0)\nRequirement already satisfied: intel-cmplr-lib-rt in /usr/local/lib/python3.10/dist-packages (from mkl_umath->numpy->dicom2nifti) (2024.2.0)\nRequirement already satisfied: intel-cmplr-lib-ur==2024.2.0 in /usr/local/lib/python3.10/dist-packages (from intel-openmp>=2024->mkl->numpy->dicom2nifti) (2024.2.0)\nDownloading dicom2nifti-2.6.0-py3-none-any.whl (43 kB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.6/43.6 kB\u001b[0m \u001b[31m1.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hDownloading python_gdcm-3.0.24.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.1 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.1/13.1 MB\u001b[0m \u001b[31m56.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m0:01\u001b[0m\n\u001b[?25hInstalling collected packages: python-gdcm, dicom2nifti\nSuccessfully installed dicom2nifti-2.6.0 python-gdcm-3.0.24.1\nNote: you may need to restart the kernel to use updated packages.\n","output_type":"stream"}],"execution_count":1},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport pydicom\nimport nibabel as nib\nimport dicom2nifti\nimport glob\n\nfrom nilearn.image import resample_img\nfrom nilearn import plotting\nfrom nilearn.masking import compute_brain_mask\nfrom scipy.ndimage import gaussian_filter\n\nfrom sklearn import model_selection as sk_model_selection\n\nimport SimpleITK as sitk","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:28.192864Z","iopub.execute_input":"2025-04-14T04:13:28.193146Z","iopub.status.idle":"2025-04-14T04:13:31.431072Z","shell.execute_reply.started":"2025-04-14T04:13:28.193107Z","shell.execute_reply":"2025-04-14T04:13:31.429974Z"}},"outputs":[],"execution_count":2},{"cell_type":"code","source":"input_dir = '/kaggle/input/rsna-miccai-brain-tumor-radiogenomic-classification/'\noutput_dir = '/kaggle/working/'\n\ndf = pd.read_csv(input_dir + 'train_labels.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:31.647899Z","iopub.execute_input":"2025-04-14T04:13:31.648223Z","iopub.status.idle":"2025-04-14T04:13:31.658841Z","shell.execute_reply.started":"2025-04-14T04:13:31.648198Z","shell.execute_reply":"2025-04-14T04:13:31.657799Z"}},"outputs":[],"execution_count":4},{"cell_type":"code","source":"df_train, df_valid = sk_model_selection.train_test_split (\n    df,\n    test_size = 0.3,\n    random_state = 6,\n    stratify = df['MGMT_value'],\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:39.050283Z","iopub.execute_input":"2025-04-14T04:13:39.050607Z","iopub.status.idle":"2025-04-14T04:13:39.064196Z","shell.execute_reply.started":"2025-04-14T04:13:39.050579Z","shell.execute_reply":"2025-04-14T04:13:39.06341Z"}},"outputs":[],"execution_count":5},{"cell_type":"code","source":"plt.figure(figsize=(10, 5))\n\nplt.subplot(1, 2, 1)\nplt.title(\"... df_train ...\")\nsns.countplot(data=df_train, x=\"MGMT_value\");\n\nplt.subplot(1, 2, 2)\nplt.title(\"... df_valid ...\")\nsns.countplot(data=df_valid, x=\"MGMT_value\");","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:41.50762Z","iopub.execute_input":"2025-04-14T04:13:41.508007Z","iopub.status.idle":"2025-04-14T04:13:41.889016Z","shell.execute_reply.started":"2025-04-14T04:13:41.50798Z","shell.execute_reply":"2025-04-14T04:13:41.888064Z"}},"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1000x500 with 2 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAAA1IAAAHWCAYAAAB9mLjgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0eUlEQVR4nO3de5RXdb0//ucHkIHkJggzoKh4SdHMGx5EzbxwQjOPHFneosLLV0vRUo5pnBQVU76aJUdFzVaAnSN56Zt2vIR6UDALb1imKahFSumANxhBGRDm94c/P6cJFfbwGWaAx2OtvRaf93t/9ue1WYMvn7P3fn9KDQ0NDQEAAGCNtWnpAgAAANY3ghQAAEBBghQAAEBBghQAAEBBghQAAEBBghQAAEBBghQAAEBBghQAAEBBghQAAEBBghQ0s4suuiilUqnR2Pvvv59zzz03ffv2TZs2bTJ06NCWKe7v/OUvf0mpVMrkyZNbuhQAmlFr7ksnnHBCttlmm0ZjpVIpF1100Wrf+1HnBc2pXUsXABujiRMn5vvf/37OOuus7Lnnntlqq63W6H1TpkzJggULctZZZzVvgQBsVJral2BjJkhBC3jwwQezxRZb5Kqrrir0vilTpuTZZ59tliC19dZb57333ssmm2xS8WMD0Lo1tS+tC++9917atfO/rLQ+fiqhBSxYsCDdunVr1s9YunRp2rdvnzZt1uwO3lKplA4dOjRrTQC0TuuiLzWV3kRr5RkpqKBHHnkke++9dzp06JDtttsuP/rRjxrNf/gc0kMPPZQ//vGPKZVKKZVKmT59+mqPfeCBB+aee+7Jyy+/XH7fh/eRT58+PaVSKbfcckvOP//8bLHFFvnUpz6Vurq6vPXWWznnnHOy6667plOnTunSpUsOO+ywPP300x9Z298/I3XCCSekU6dO+dvf/pahQ4emU6dO6dmzZ84555ysWLFibf+6AGhmzdmXzjjjjHTq1CnvvvvuKnPHH398ampqyr3il7/8ZQ4//PD06dMnVVVV2W677XLJJZesUS/5qGekVndesC64IgUV8swzz+QLX/hCevbsmYsuuijvv/9+LrzwwlRXV5f36dmzZ/7zP/8zl156aRYvXpxx48YlSfr377/a43/3u9/NokWL8te//rV860WnTp0a7XPJJZekffv2Oeecc1JfX5/27dvnueeey5133pmjjz46/fr1y/z58/OjH/0on//85/Pcc8+lT58+n/i5K1asyJAhQzJw4MBceeWV+Z//+Z/84Ac/yHbbbZfTTjut6F8TAOtIc/elY489NhMmTMg999yTo48+ujz+7rvv5q677soJJ5yQtm3bJkkmT56cTp06ZdSoUenUqVMefPDBjBkzJnV1dfn+979f8fOCdaIBqIihQ4c2dOjQoeHll18ujz333HMNbdu2bfjHf2qf//znG3bZZZfCn3H44Yc3bL311quMP/TQQw1JGrbddtuGd999t9Hc0qVLG1asWNFobO7cuQ1VVVUNY8eObTSWpGHSpEnlsREjRjQkabRfQ0NDwx577NGw1157Fa4fgHWnufvSypUrG7bYYouGYcOGNRq/7bbbGpI0PPzww+Wxf+xNDQ0NDV//+tcbPvWpTzUsXbq0PDZixIhV+lyShgsvvLBJ5wXNya19UAErVqzIfffdl6FDhzZa6ah///4ZMmTIOqtjxIgR6dixY6Oxqqqq8nNSK1asyJtvvplOnTplxx13zFNPPbVGx/3GN77R6PXnPve5/PnPf65M0QBU3LroS6VSKUcffXTuvffeLF68uDx+6623Zosttsj+++9fHvv73vTOO+/kjTfeyOc+97m8++67mT179hp/Zmvpt5B4Rgoq4vXXX897772XHXbYYZW5HXfccZ3V0a9fv1XGVq5cmauuuio77LBDqqqqsvnmm6dnz575wx/+kEWLFq32mB06dEjPnj0bjW222WZ5++23K1Y3AJW1rvrSsccem/feey///d//nSRZvHhx7r333hx99NGNvtPpj3/8Y/71X/81Xbt2TZcuXdKzZ8985StfSZI16kUfai39FhJBCjYo/3g1Kkkuu+yyjBo1KgcccED+67/+K/fdd18eeOCB7LLLLlm5cuVqj/nh/e0A8I/22WefbLPNNrntttuSJHfddVfee++9HHvsseV9Fi5cmM9//vN5+umnM3bs2Nx111154IEHcvnllyfJGvUiaI0sNgEV0LNnz3Ts2DEvvvjiKnNz5syp2Oc05Rvbf/7zn+eggw7KT37yk0bjCxcuzOabb16p0gBoRdZVX0qSY445Jv/xH/+Rurq63Hrrrdlmm22yzz77lOenT5+eN998M7/4xS9ywAEHlMfnzp1b+LPW5XnB6rgixUbpw3uy33jjjUbjs2fPziuvvNJo7JVXXlnt/dtt27bNkCFDcueddzZ6//PPP5/77ruvYnVvuummhW6B+LC2hoaGRmO33357/va3v1Wsro/z2muvZfbs2Vm+fHl5bNGiRZk9e3aj81i+fHlmz56d1157rdlrAmiN1te+lHxwe199fX1uuummTJ06Ncccc8wqtSRp1IuWLVuW6667rvBnVeK83njjjcyePbvRsu1F/v7hQ4IUG6XHH388/fv3z7XXXttovH///vna177WaOxrX/vaGi0De/HFFyf5YCGGyy+/PJdeemkOOuig7LLLLhWre6+99srChQszatSo/OxnP8tdd9212vd86UtfyvTp03PiiSfmxz/+cb75zW/mG9/4RrbddtuK1fVxRo8enf79+zcKbXfccUf69++fO+64ozz2t7/9Lf3798/o0aObvSaA1mh97UtJsueee2b77bfPd7/73dTX1ze6rS9J9t1332y22WYZMWJEfvjDH+aqq67KPvvss8ov+dbU2p7Xtddem/79++fxxx8vjxX5+4cPCVJQIZ/97Gdz3333pWfPnhkzZkwmTpyYiy++OP/6r/9asc84/fTT8+UvfzmTJk3Kl7/85Zx55pmrfc+///u/59/+7d9y33335Vvf+laeeuqp3HPPPenbt2/F6gKg9VkXfelDxx57bN55551sv/322XPPPRvN9ejRI3fffXd69+6d888/P1deeWX++Z//OVdccUWTPmtdnhd8klJDU38dAAAAsJFyRQoAAKAgq/ZBK/DWW29l2bJlHzvftm3bVb7LCQCai74Eq+fWPmgFDjzwwMyYMeNj57feeuv85S9/WXcFAbBR05dg9QQpaAVmzZqVt99++2PnO3bsmP32228dVgTAxkxfgtUTpAAAAAqy2AQAAEBBFptIsnLlyrz66qvp3LlzSqVSS5cDsNFoaGjIO++8kz59+qRNG7/b+5C+BNBy1rQ3CVJJXn31VV9OCtCC5s2bly233LKly2g19CWAlre63iRIJencuXOSD/6yunTp0sLVAGw86urq0rdv3/J/h/mAvgTQcta0NwlSSfm2iS5dumhYAC3A7WuN6UsALW91vckN6QAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAUJUgAAAAW1a+kCgNbhlbG7tnQJrGe2GvNMS5cAbOD0Jopal73JFSkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCBCkAAICCWjRIjRs3LnvvvXc6d+6cXr16ZejQoZkzZ06jfZYuXZqRI0emR48e6dSpU4YNG5b58+c32ueVV17J4Ycfnk996lPp1atXvv3tb+f9999fl6cCAABsRFo0SM2YMSMjR47Mo48+mgceeCDLly/PF77whSxZsqS8z9lnn5277rort99+e2bMmJFXX301Rx11VHl+xYoVOfzww7Ns2bL89re/zU033ZTJkydnzJgxLXFKAADARqBdS3741KlTG72ePHlyevXqlVmzZuWAAw7IokWL8pOf/CRTpkzJwQcfnCSZNGlS+vfvn0cffTT77LNP7r///jz33HP5n//5n1RXV2f33XfPJZdckvPOOy8XXXRR2rdvv8rn1tfXp76+vvy6rq6ueU8UAADYoLSqZ6QWLVqUJOnevXuSZNasWVm+fHkGDx5c3mennXbKVlttlZkzZyZJZs6cmV133TXV1dXlfYYMGZK6urr88Y9//MjPGTduXLp27Vre+vbt21ynBAAAbIBaTZBauXJlzjrrrOy33375zGc+kySpra1N+/bt061bt0b7VldXp7a2trzP34eoD+c/nPsoo0ePzqJFi8rbvHnzKnw2AADAhqxFb+37eyNHjsyzzz6bRx55pNk/q6qqKlVVVc3+OQAAwIapVVyROuOMM3L33XfnoYceypZbblker6mpybJly7Jw4cJG+8+fPz81NTXlff5xFb8PX3+4DwAAQCW1aJBqaGjIGWeckTvuuCMPPvhg+vXr12h+r732yiabbJJp06aVx+bMmZNXXnklgwYNSpIMGjQozzzzTBYsWFDe54EHHkiXLl2y8847r5sTAQAANiotemvfyJEjM2XKlPzyl79M586dy880de3aNR07dkzXrl1z8sknZ9SoUenevXu6dOmSM888M4MGDco+++yTJPnCF76QnXfeOV/96ldzxRVXpLa2Nueff35Gjhzp9j0AAKBZtGiQuv7665MkBx54YKPxSZMm5YQTTkiSXHXVVWnTpk2GDRuW+vr6DBkyJNddd11537Zt2+buu+/OaaedlkGDBmXTTTfNiBEjMnbs2HV1GgAAwEamRYNUQ0PDavfp0KFDJkyYkAkTJnzsPltvvXXuvffeSpYGABuEvb7905YugfXMrO9/raVLgPVCq1hsAgAAYH0iSAEAABQkSAEAABTUar6Qd0PgPnSKch86AMD6yRUpAACAggQpAACAggQpAACAggQpAACAggQpAACAggQpAACAggQpAACAggQpAChgxYoVueCCC9KvX7907Ngx2223XS655JI0NDSU92loaMiYMWPSu3fvdOzYMYMHD86LL77YglUDUGmCFAAUcPnll+f666/Ptddem+effz6XX355rrjiilxzzTXlfa644opcffXVueGGG/LYY49l0003zZAhQ7J06dIWrByASmrX0gUAwPrkt7/9bY488sgcfvjhSZJtttkmP/vZz/L4448n+eBq1Pjx43P++efnyCOPTJL89Kc/TXV1de68884cd9xxLVY7AJXjihQAFLDvvvtm2rRpeeGFF5IkTz/9dB555JEcdthhSZK5c+emtrY2gwcPLr+na9euGThwYGbOnPmRx6yvr09dXV2jDYDWzRUpACjgO9/5Turq6rLTTjulbdu2WbFiRS699NIMHz48SVJbW5skqa6ubvS+6urq8tw/GjduXC6++OLmLRyAinJFCgAKuO2223LzzTdnypQpeeqpp3LTTTflyiuvzE033dTkY44ePTqLFi0qb/PmzatgxQA0B1ekAKCAb3/72/nOd75TftZp1113zcsvv5xx48ZlxIgRqampSZLMnz8/vXv3Lr9v/vz52X333T/ymFVVVamqqmr22gGoHFekAKCAd999N23aNG6fbdu2zcqVK5Mk/fr1S01NTaZNm1aer6ury2OPPZZBgwat01oBaD6uSAFAAUcccUQuvfTSbLXVVtlll13yu9/9Lj/84Q9z0kknJUlKpVLOOuusfO9738sOO+yQfv365YILLkifPn0ydOjQli0egIoRpACggGuuuSYXXHBBTj/99CxYsCB9+vTJ17/+9YwZM6a8z7nnnpslS5bk1FNPzcKFC7P//vtn6tSp6dChQwtWDkAlCVIAUEDnzp0zfvz4jB8//mP3KZVKGTt2bMaOHbvuCgNgnfKMFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEGCFAAAQEEtGqQefvjhHHHEEenTp09KpVLuvPPORvMnnHBCSqVSo+3QQw9ttM9bb72V4cOHp0uXLunWrVtOPvnkLF68eB2eBQAAsLFp0SC1ZMmS7LbbbpkwYcLH7nPooYfmtddeK28/+9nPGs0PHz48f/zjH/PAAw/k7rvvzsMPP5xTTz21uUsHAAA2Yu1a8sMPO+ywHHbYYZ+4T1VVVWpqaj5y7vnnn8/UqVPzxBNPZMCAAUmSa665Jl/84hdz5ZVXpk+fPhWvGQAAoNU/IzV9+vT06tUrO+64Y0477bS8+eab5bmZM2emW7du5RCVJIMHD06bNm3y2GOPfewx6+vrU1dX12gDAABYU606SB166KH56U9/mmnTpuXyyy/PjBkzcthhh2XFihVJktra2vTq1avRe9q1a5fu3buntrb2Y487bty4dO3atbz17du3Wc8DAADYsLTorX2rc9xxx5X/vOuuu+azn/1stttuu0yfPj2HHHJIk487evTojBo1qvy6rq5OmAIAANZYq74i9Y+23XbbbL755nnppZeSJDU1NVmwYEGjfd5///289dZbH/tcVfLBc1ddunRptAEAAKyp9SpI/fWvf82bb76Z3r17J0kGDRqUhQsXZtasWeV9HnzwwaxcuTIDBw5sqTIBAIANXIve2rd48eLy1aUkmTt3bn7/+9+ne/fu6d69ey6++OIMGzYsNTU1+dOf/pRzzz0322+/fYYMGZIk6d+/fw499NCccsopueGGG7J8+fKcccYZOe6446zYBwAANJsWvSL15JNPZo899sgee+yRJBk1alT22GOPjBkzJm3bts0f/vCH/Mu//Es+/elP5+STT85ee+2VX//616mqqiof4+abb85OO+2UQw45JF/84hez//7758Ybb2ypUwIAADYCLXpF6sADD0xDQ8PHzt93332rPUb37t0zZcqUSpYFAADwidarZ6QAAABaA0EKAACgIEEKAACgIEEKAACgIEEKAACgIEEKAACgIEEKAAr629/+lq985Svp0aNHOnbsmF133TVPPvlkeb6hoSFjxoxJ796907FjxwwePDgvvvhiC1YMQKUJUgBQwNtvv5399tsvm2yySX71q1/lueeeyw9+8INsttlm5X2uuOKKXH311bnhhhvy2GOPZdNNN82QIUOydOnSFqwcgEpq0S/kBYD1zeWXX56+fftm0qRJ5bF+/fqV/9zQ0JDx48fn/PPPz5FHHpkk+elPf5rq6urceeedOe6441Y5Zn19ferr68uv6+rqmvEMAKgEV6QAoID//u//zoABA3L00UenV69e2WOPPfLjH/+4PD937tzU1tZm8ODB5bGuXbtm4MCBmTlz5kcec9y4cenatWt569u3b7OfBwBrR5ACgAL+/Oc/5/rrr88OO+yQ++67L6eddlq++c1v5qabbkqS1NbWJkmqq6sbva+6uro8949Gjx6dRYsWlbd58+Y170kAsNbc2gcABaxcuTIDBgzIZZddliTZY4898uyzz+aGG27IiBEjmnTMqqqqVFVVVbJMAJqZK1IAUEDv3r2z8847Nxrr379/XnnllSRJTU1NkmT+/PmN9pk/f355DoD1nyAFAAXst99+mTNnTqOxF154IVtvvXWSDxaeqKmpybRp08rzdXV1eeyxxzJo0KB1WisAzcetfQBQwNlnn5199903l112WY455pg8/vjjufHGG3PjjTcmSUqlUs4666x873vfyw477JB+/frlggsuSJ8+fTJ06NCWLR6AihGkAKCAvffeO3fccUdGjx6dsWPHpl+/fhk/fnyGDx9e3ufcc8/NkiVLcuqpp2bhwoXZf//9M3Xq1HTo0KEFKwegkgQpACjoS1/6Ur70pS997HypVMrYsWMzduzYdVgVAOuSZ6QAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKalKQOvjgg7Nw4cJVxuvq6nLwwQevbU0AUHF6FwCV1KQgNX369CxbtmyV8aVLl+bXv/71WhcFAJWmdwFQSe2K7PyHP/yh/OfnnnsutbW15dcrVqzI1KlTs8UWW1SuOgBYS3oXAM2hUJDafffdUyqVUiqVPvI2iI4dO+aaa66pWHEAsLb0LgCaQ6EgNXfu3DQ0NGTbbbfN448/np49e5bn2rdvn169eqVt27YVLxIAmkrvAqA5FApSW2+9dZJk5cqVzVIMAFSa3gVAcygUpP7eiy++mIceeigLFixYpTmNGTNmrQsDgErTuwColCYFqR//+Mc57bTTsvnmm6empialUqk8VyqVNCMAWh29C4BKalKQ+t73vpdLL7005513XqXrAYBmoXcBUElN+h6pt99+O0cffXSlawGAZqN3AVBJTQpSRx99dO6///5K1wIAzUbvAqCSmnRr3/bbb58LLrggjz76aHbddddssskmjea/+c1vVqQ4AKgUvQuASmpSkLrxxhvTqVOnzJgxIzNmzGg0VyqVNCMAWh29C4BKalKQmjt3bqXrAIBmpXcBUElNekYKAABgY9akK1InnXTSJ85PnDixScUAQHPRuwCopCYFqbfffrvR6+XLl+fZZ5/NwoULc/DBB1ekMACoJL0LgEpqUpC64447VhlbuXJlTjvttGy33XZrXRQAVJreBUAlVewZqTZt2mTUqFG56qqrKnVIAGhWehcATVXRxSb+9Kc/5f3336/kIQGgWeldADRFk27tGzVqVKPXDQ0Nee2113LPPfdkxIgRFSkMACpJ7wKgkpoUpH73u981et2mTZv07NkzP/jBD1a7KhIAtAS9C4BKalKQeuihhypdBwA0K70LgEpqUpD60Ouvv545c+YkSXbcccf07NmzIkUBQHPRuwCohCYtNrFkyZKcdNJJ6d27dw444IAccMAB6dOnT04++eS8++67la4RANaa3gVAJTUpSI0aNSozZszIXXfdlYULF2bhwoX55S9/mRkzZuTf/u3fKl0jAKw1vQuASmrSrX3/7//9v/z85z/PgQceWB774he/mI4dO+aYY47J9ddfX6n6AKAi9C4AKqlJV6TefffdVFdXrzLeq1cvt0cA0CrpXQBUUpOC1KBBg3LhhRdm6dKl5bH33nsvF198cQYNGlSx4gCgUvQuACqpSbf2jR8/Poceemi23HLL7LbbbkmSp59+OlVVVbn//vsrWiAAVILeBUAlNSlI7brrrnnxxRdz8803Z/bs2UmS448/PsOHD0/Hjh0rWiAAVILeBUAlNSlIjRs3LtXV1TnllFMajU+cODGvv/56zjvvvIoUBwCVoncBUElNekbqRz/6UXbaaadVxnfZZZfccMMNa10UAFSa3gVAJTUpSNXW1qZ3796rjPfs2TOvvfbaWhcFAJWmdwFQSU0KUn379s1vfvObVcZ/85vfpE+fPmtdFABUmt4FQCU1KUidcsopOeusszJp0qS8/PLLefnllzNx4sScffbZq9x7/kkefvjhHHHEEenTp09KpVLuvPPORvMNDQ0ZM2ZMevfunY4dO2bw4MF58cUXG+3z1ltvZfjw4enSpUu6deuWk08+OYsXL27KaQGwAatU7wKApImLTXz729/Om2++mdNPPz3Lli1LknTo0CHnnXdeRo8evcbHWbJkSXbbbbecdNJJOeqoo1aZv+KKK3L11VfnpptuSr9+/XLBBRdkyJAhee6559KhQ4ckyfDhw/Paa6/lgQceyPLly3PiiSfm1FNPzZQpU5pyagBsoCrVuwAgaWKQKpVKufzyy3PBBRfk+eefT8eOHbPDDjukqqqq0HEOO+ywHHbYYR8519DQkPHjx+f888/PkUcemST56U9/murq6tx555057rjj8vzzz2fq1Kl54oknMmDAgCTJNddcky9+8Yu58sor3aoBQFmlehcAJE28te9DnTp1yt57753PfOYzFW9Ec+fOTW1tbQYPHlwe69q1awYOHJiZM2cmSWbOnJlu3bqVQ1SSDB48OG3atMljjz32sceur69PXV1dow2AjUNz9i4ANh5rFaSaU21tbZKkurq60Xh1dXV5rra2Nr169Wo0365du3Tv3r28z0cZN25cunbtWt769u1b4eoBAIANWasNUs1p9OjRWbRoUXmbN29eS5cEAACsR1ptkKqpqUmSzJ8/v9H4/Pnzy3M1NTVZsGBBo/n3338/b731Vnmfj1JVVZUuXbo02gAAANZUqw1S/fr1S01NTaZNm1Yeq6ury2OPPZZBgwYlSQYNGpSFCxdm1qxZ5X0efPDBrFy5MgMHDlznNQMAABuHJq3aVymLFy/O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0LDWx2pNivam5upLid5EcXoT67N12ZvW+yD1xhtvZMWKFamurm40Xl1dndmzZ3/ke8aNG5eLL754lfG+ffs2S43wcbpe842WLgGablzXih3qnXfeSdeulTteSyvam/QlWhO9ifXaOuxN632QaorRo0dn1KhR5dcrV67MW2+9lR49eqRUKrVgZRumurq69O3bN/PmzUuXLl1auhwoxM9v82poaMg777yTPn36tHQpLUpfWrf8u2Z952e4ea1pb1rvg9Tmm2+etm3bZv78+Y3G58+fn5qamo98T1VVVaqqqhqNdevWrblK5P/XpUsX/9hZb/n5bT4b0pWoDxXtTfpSy/DvmvWdn+Hmsya9ab1fbKJ9+/bZa6+9Mm3atPLYypUrM23atAwaNKgFKwNgY6U3AWz41vsrUkkyatSojBgxIgMGDMg//dM/Zfz48VmyZElOPPHEli4NgI2U3gSwYdsggtSxxx6b119/PWPGjEltbW123333TJ06dZWHfGkZVVVVufDCC1e5bQXWB35+aSq9qfXy75r1nZ/h1qHUsKGtOQsAANDM1vtnpAAAANY1QQoAAKAgQQoAAKAgQQoAAKAgQYpmNWHChGyzzTbp0KFDBg4cmMcff7ylS4I18vDDD+eII45Inz59UiqVcuedd7Z0SUCF6E2sr/Sm1kWQotnceuutGTVqVC688MI89dRT2W233TJkyJAsWLCgpUuD1VqyZEl22223TJgwoaVLASpIb2J9pje1LpY/p9kMHDgwe++9d6699tokycqVK9O3b9+ceeaZ+c53vtPC1cGaK5VKueOOOzJ06NCWLgVYS3oTGwq9qeW5IkWzWLZsWWbNmpXBgweXx9q0aZPBgwdn5syZLVgZABsrvQmoJEGKZvHGG29kxYoVqa6ubjReXV2d2traFqoKgI2Z3gRUkiAFAABQkCBFs9h8883Ttm3bzJ8/v9H4/PnzU1NT00JVAbAx05uAShKkaBbt27fPXnvtlWnTppXHVq5cmWnTpmXQoEEtWBkAGyu9Caikdi1dABuuUaNGZcSIERkwYED+6Z/+KePHj8+SJUty4okntnRpsFqLFy/OSy+9VH49d+7c/P73v0/37t2z1VZbtWBlwNrQm1if6U2ti+XPaVbXXnttvv/976e2tja77757rr766gwcOLCly4LVmj59eg466KBVxkeMGJHJkyev+4KAitGbWF/pTa2LIAUAAFCQZ6QAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqQAAAAKEqSAT3TCCSdk6NChLV0GAJTpTbQGghR8jBNOOCGlUinf+MY3VpkbOXJkSqVSTjjhhPJYbW1tvvWtb2X77bdPhw4dUl1dnf322y/XX3993n333fJ+22yzTUqlUm655ZZVjrvLLrukVCpl8uTJmT59ekql0idu06dPb45TB6CV0pug9WjX0gVAa9a3b9/ccsstueqqq9KxY8ckydKlSzNlypRstdVW5f3+/Oc/Z7/99ku3bt1y2WWXZdddd01VVVWeeeaZ3Hjjjdliiy3yL//yL42OO2nSpBx33HHlsUcffTS1tbXZdNNNkyT77rtvXnvttfL8t771rdTV1WXSpEnlse7duzfbuQPQOulN0Dq4IgWfYM8990zfvn3zi1/8ojz2i1/8IltttVX22GOP8tjpp5+edu3a5cknn8wxxxyT/v37Z9ttt82RRx6Ze+65J0cccUSj4w4fPjwzZszIvHnzymMTJ07M8OHD067dB7/faN++fWpqaspbx44dU1VV1Wisffv2H1v7Cy+8kFKplNmzZzcav+qqq7LddtslSVasWJGTTz45/fr1S8eOHbPjjjvmP/7jPz7x72SbbbbJ+PHjG43tvvvuueiii8qvFy5cmP/zf/5PevbsmS5duuTggw/O008//YnHBWDN6E2r0ptoCYIUrMZJJ53U6DdtEydOzIknnlh+/eabb+b+++/PyJEjy7+x+0elUqnR6+rq6gwZMiQ33XRTkuTdd9/NrbfempNOOqlidX/605/OgAEDcvPNNzcav/nmm/PlL385SbJy5cpsueWWuf322/Pcc89lzJgx+fd///fcdttta/XZRx99dBYsWJBf/epXmTVrVvbcc88ccsgheeutt9bquAB8QG8qTm+i0gQpWI2vfOUreeSRR/Lyyy/n5Zdfzm9+85t85StfKc+/9NJLaWhoyI477tjofZtvvnk6deqUTp065bzzzlvluCeddFImT56choaG/PznP892222X3XffvaK1Dx8+PD/72c/Kr1944YXMmjUrw4cPT5JssskmufjiizNgwID069cvw4cPz4knnrhWzeqRRx7J448/nttvvz0DBgzIDjvskCuvvDLdunXLz3/+87U+JwD0pqL0JpqDIAWr0bNnzxx++OGZPHlyJk2alMMPPzybb775at/3+OOP5/e//3122WWX1NfXrzJ/+OGHZ/HixXn44YczceLEiv7G70PHHXdc/vKXv+TRRx9N8sFv/Pbcc8/stNNO5X0mTJiQvfbaKz179kynTp1y44035pVXXmnyZz799NNZvHhxevToUW7WnTp1yty5c/OnP/1prc8JAL2pKL2J5mCxCVgDJ510Us4444wkH/zH/e9tv/32KZVKmTNnTqPxbbfdNknKDwL/o3bt2uWrX/1qLrzwwjz22GO54447Kl53TU1NDj744EyZMiX77LNPpkyZktNOO608f8stt+Scc87JD37wgwwaNCidO3fO97///Tz22GMfe8w2bdqkoaGh0djy5cvLf168eHF69+79kas2devWba3PCYAP6E3/S2+iJbgiBWvg0EMPzbJly7J8+fIMGTKk0VyPHj3yz//8z7n22muzZMmSQsc96aSTMmPGjBx55JHZbLPNKlly2fDhw3Prrbdm5syZ+fOf/9xoNabf/OY32XfffXP66adnjz32yPbbb7/a38z17Nmz0YpNdXV1mTt3bvn1nnvumdra2rRr1y7bb799o21NflsKwJrRm/6X3kRLEKRgDbRt2zbPP/98nnvuubRt23aV+euuuy7vv/9+BgwYkFtvvTXPP/985syZk//6r//K7NmzP/I9SdK/f/+88cYbjR4YrrSjjjoq77zzTk477bQcdNBB6dOnT3luhx12yJNPPpn77rsvL7zwQi644II88cQTn3i8gw8+OP/5n/+ZX//613nmmWcyYsSIRuc3ePDgDBo0KEOHDs3999+fv/zlL/ntb3+b7373u3nyySeb7TwBNjZ60//Sm2gJbu2DNdSlS5ePndtuu+3yu9/9LpdddllGjx6dv/71r6mqqsrOO++cc845J6effvrHvrdHjx7NUW5Z586dc8QRR+S2227LxIkTG819/etfz+9+97sce+yxKZVKOf7443P66afnV7/61cceb/To0Zk7d26+9KUvpWvXrrnkkksa/davVCrl3nvvzXe/+92ceOKJef3111NTU5MDDjgg1dXVzXaeABsjvekDehMtodTwjzeUAgAA8Inc2gcAAFCQIAXrsV122aXRMq5/v/3jlx0CwLqgN7GxcGsfrMdefvnlRsu7/r3q6up07tx5HVcEwMZOb2JjIUgBAAAU5NY+AACAggQpAACAggQpAACAggQpAACAggQpAACAggQpAACAggQpAACAgv4/RI2uwSW0+uMAAAAASUVORK5CYII=\n"},"metadata":{}}],"execution_count":6},{"cell_type":"code","source":"mri_types = ['FLAIR', 'T1w', 'T1wCE', 'T2w']\n\ndef refine(dataframe):\n    dataframe['BraTS21ID_full'] = [str(dataframe['BraTS21ID'][index]).zfill(5) for index in dataframe.index]\n    for i in range(len(mri_types)):\n        mri = mri_types[i]\n        dataframe[mri] = dataframe['BraTS21ID_full'].apply(lambda file_id: input_dir+'train/'+file_id+'/'+mri+'/')\n    dataframe = dataframe.set_index(\"BraTS21ID\")\n    return dataframe\n\ndf_train = refine(df_train)\ndf_valid = refine(df_valid)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:43.725924Z","iopub.execute_input":"2025-04-14T04:13:43.726295Z","iopub.status.idle":"2025-04-14T04:13:43.740991Z","shell.execute_reply.started":"2025-04-14T04:13:43.72627Z","shell.execute_reply":"2025-04-14T04:13:43.739959Z"}},"outputs":[],"execution_count":7},{"cell_type":"code","source":"df_train.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:47.286213Z","iopub.execute_input":"2025-04-14T04:13:47.286517Z","iopub.status.idle":"2025-04-14T04:13:47.306376Z","shell.execute_reply.started":"2025-04-14T04:13:47.286496Z","shell.execute_reply":"2025-04-14T04:13:47.305113Z"}},"outputs":[{"execution_count":8,"output_type":"execute_result","data":{"text/plain":"           MGMT_value BraTS21ID_full  \\\nBraTS21ID                              \n704                 1          00704   \n310                 0          00310   \n0                   1          00000   \n750                 1          00750   \n406                 1          00406   \n\n                                                       FLAIR  \\\nBraTS21ID                                                      \n704        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n310        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n0          /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n750        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n406        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n\n                                                         T1w  \\\nBraTS21ID                                                      \n704        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n310        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n0          /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n750        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n406        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n\n                                                       T1wCE  \\\nBraTS21ID                                                      \n704        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n310        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n0          /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n750        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n406        /kaggle/input/rsna-miccai-brain-tumor-radiogen...   \n\n                                                         T2w  \nBraTS21ID                                                     \n704        /kaggle/input/rsna-miccai-brain-tumor-radiogen...  \n310        /kaggle/input/rsna-miccai-brain-tumor-radiogen...  \n0          /kaggle/input/rsna-miccai-brain-tumor-radiogen...  \n750        /kaggle/input/rsna-miccai-brain-tumor-radiogen...  \n406        /kaggle/input/rsna-miccai-brain-tumor-radiogen...  ","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>MGMT_value</th>\n      <th>BraTS21ID_full</th>\n      <th>FLAIR</th>\n      <th>T1w</th>\n      <th>T1wCE</th>\n      <th>T2w</th>\n    </tr>\n    <tr>\n      <th>BraTS21ID</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>704</th>\n      <td>1</td>\n      <td>00704</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n    </tr>\n    <tr>\n      <th>310</th>\n      <td>0</td>\n      <td>00310</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n    </tr>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>00000</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n    </tr>\n    <tr>\n      <th>750</th>\n      <td>1</td>\n      <td>00750</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n    </tr>\n    <tr>\n      <th>406</th>\n      <td>1</td>\n      <td>00406</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n      <td>/kaggle/input/rsna-miccai-brain-tumor-radiogen...</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":8},{"cell_type":"code","source":"def stack_dicom(scan_id, mri=\"FLAIR\", dataframe=df_train, rotate=0):\n    \n    dicom_folder = dataframe[mri][int(scan_id)]\n    z_values = []\n    \n    for file in sorted(os.listdir(dicom_folder)):\n        if file.endswith(\".dcm\"):\n            ds = pydicom.dcmread(os.path.join(dicom_folder, file))\n            z_values.append(ds.ImagePositionPatient[2])\n            \n    print(\"Number of slices:\", len(z_values))\n\n    tags = ['InstanceNumber', 'AcquisitionTime', 'TriggerTime', 'SeriesTime',\n        'TemporalPositionIdentifier', 'ImageType', 'ImagePositionPatient']\n    \n    for file in sorted(os.listdir(dicom_folder))[:10]:\n        ds = pydicom.dcmread(os.path.join(dicom_folder, file))\n        print(f\"{file}:\")\n        for tag in tags:\n            print(f\"  {tag}: {getattr(ds, tag, 'NA')}\")\n        break\n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:56.510656Z","iopub.execute_input":"2025-04-14T04:13:56.51093Z","iopub.status.idle":"2025-04-14T04:13:56.516759Z","shell.execute_reply.started":"2025-04-14T04:13:56.510908Z","shell.execute_reply":"2025-04-14T04:13:56.515714Z"}},"outputs":[],"execution_count":9},{"cell_type":"code","source":"stack_dicom(\"00481\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:13:59.964836Z","iopub.execute_input":"2025-04-14T04:13:59.965196Z","iopub.status.idle":"2025-04-14T04:14:02.604594Z","shell.execute_reply.started":"2025-04-14T04:13:59.965169Z","shell.execute_reply":"2025-04-14T04:14:02.603495Z"}},"outputs":[{"name":"stdout","text":"Number of slices: 216\nImage-1.dcm:\n  InstanceNumber: 1\n  AcquisitionTime: NA\n  TriggerTime: NA\n  SeriesTime: NA\n  TemporalPositionIdentifier: NA\n  ImageType: ['DERIVED', 'SECONDARY']\n  ImagePositionPatient: [-126.308, 97.3057, 146.275]\n","output_type":"stream"}],"execution_count":10},{"cell_type":"code","source":"dicom_folder = df_train['FLAIR'][int('00481')]\nprint(dicom_folder)\noutput_nifti = '/kaggle/working/'\n\n# dicom2nifti.convert_directory(dicom_folder, \"/kaggle/working/481_flair.nii.gz\", compression=True)\n\n# dicom_files = glob.glob(os.path.join(dicom_folder, '*'))\nnifti_image = dicom2nifti.dicom_series_to_nifti(dicom_folder, reorient_nifti=True)\n\n# print(f\"NIfTI created in: {type(temp)}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-14T04:14:16.553983Z","iopub.execute_input":"2025-04-14T04:14:16.554343Z","iopub.status.idle":"2025-04-14T04:14:18.081077Z","shell.execute_reply.started":"2025-04-14T04:14:16.554304Z","shell.execute_reply":"2025-04-14T04:14:18.079729Z"}},"outputs":[{"name":"stdout","text":"/kaggle/input/rsna-miccai-brain-tumor-radiogenomic-classification/train/00481/FLAIR/\n","output_type":"stream"},{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)","\u001b[0;32m<ipython-input-11-14d720d76fb1>\u001b[0m in \u001b[0;36m<cell line: 8>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;31m# dicom_files = glob.glob(os.path.join(dicom_folder, '*'))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mnifti_image\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdicom2nifti\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdicom_series_to_nifti\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdicom_folder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreorient_nifti\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;31m# print(f\"NIfTI created in: {type(temp)}\")\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/dicom2nifti/convert_dicom.py\u001b[0m in \u001b[0;36mdicom_series_to_nifti\u001b[0;34m(original_dicom_directory, output_file, reorient_nifti)\u001b[0m\n\u001b[1;32m     77\u001b[0m         \u001b[0mdicom_input\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcommon\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_dicom_directory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdicom_directory\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     78\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 79\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mdicom_array_to_nifti\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdicom_input\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput_file\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreorient_nifti\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     80\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     81\u001b[0m     \u001b[0;32mexcept\u001b[0m \u001b[0mAttributeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mexception\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/dicom2nifti/convert_dicom.py\u001b[0m in \u001b[0;36mdicom_array_to_nifti\u001b[0;34m(dicom_list, output_file, reorient_nifti)\u001b[0m\n\u001b[1;32m    132\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mreorient_nifti\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0msettings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresample\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    133\u001b[0m         \u001b[0mgc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 134\u001b[0;31m         \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'NII'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimage_reorientation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreorient_image\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'NII'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'NII_FILE'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    135\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    136\u001b[0m     \u001b[0;31m# resampling needs to be after reorientation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/dicom2nifti/image_reorientation.py\u001b[0m in \u001b[0;36mreorient_image\u001b[0;34m(input_image, output_image)\u001b[0m\n\u001b[1;32m     83\u001b[0m     \u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_slope_inter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     84\u001b[0m     \u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_xyzt_units\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# set units for xyz (leave t as unknown)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 85\u001b[0;31m     \u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_filename\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput_image\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     86\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     87\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/nibabel/filebasedimages.py\u001b[0m in \u001b[0;36mto_filename\u001b[0;34m(self, filename, **kwargs)\u001b[0m\n\u001b[1;32m    305\u001b[0m         \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    306\u001b[0m         \"\"\"\n\u001b[0;32m--> 307\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfile_map\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilespec_to_file_map\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    308\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_file_map\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    309\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/nibabel/filebasedimages.py\u001b[0m in \u001b[0;36mfilespec_to_file_map\u001b[0;34m(klass, filespec)\u001b[0m\n\u001b[1;32m    279\u001b[0m         \"\"\"\n\u001b[1;32m    280\u001b[0m         \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 281\u001b[0;31m             filenames = types_filenames(\n\u001b[0m\u001b[1;32m    282\u001b[0m                 \u001b[0mfilespec\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfiles_types\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrailing_suffixes\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mklass\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compressed_suffixes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    283\u001b[0m             )\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/nibabel/filename_parser.py\u001b[0m in \u001b[0;36mtypes_filenames\u001b[0;34m(template_fname, types_exts, trailing_suffixes, enforce_extensions, match_case)\u001b[0m\n\u001b[1;32m    109\u001b[0m     \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    110\u001b[0m     \"\"\"\n\u001b[0;32m--> 111\u001b[0;31m     \u001b[0mtemplate_fname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_stringify_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtemplate_fname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    112\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtemplate_fname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    113\u001b[0m         \u001b[0;32mraise\u001b[0m \u001b[0mTypesFilenamesError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Need file name as input to set_filenames'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/nibabel/filename_parser.py\u001b[0m in \u001b[0;36m_stringify_path\u001b[0;34m(filepath_or_buffer)\u001b[0m\n\u001b[1;32m     40\u001b[0m     \u001b[0mhttps\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m//\u001b[0m\u001b[0mgithub\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcom\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mpandas\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mdev\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mpandas\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mblob\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m325\u001b[0m\u001b[0mdd68\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mpandas\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mcommon\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpy\u001b[0m\u001b[0;31m#L131-L160\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     41\u001b[0m     \"\"\"\n\u001b[0;32m---> 42\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mpathlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mPath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpanduser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_posix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     44\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/lib/python3.10/pathlib.py\u001b[0m in \u001b[0;36m__new__\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m    958\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mcls\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mPath\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    959\u001b[0m             \u001b[0mcls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mWindowsPath\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'nt'\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mPosixPath\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 960\u001b[0;31m         \u001b[0mself\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_from_parts\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    961\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_flavour\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_supported\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    962\u001b[0m             raise NotImplementedError(\"cannot instantiate %r on your system\"\n","\u001b[0;32m/usr/lib/python3.10/pathlib.py\u001b[0m in \u001b[0;36m_from_parts\u001b[0;34m(cls, args)\u001b[0m\n\u001b[1;32m    592\u001b[0m         \u001b[0;31m# right flavour.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    593\u001b[0m         \u001b[0mself\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__new__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 594\u001b[0;31m         \u001b[0mdrv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mroot\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparts\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parse_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    595\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_drv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdrv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    596\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_root\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mroot\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/lib/python3.10/pathlib.py\u001b[0m in \u001b[0;36m_parse_args\u001b[0;34m(cls, args)\u001b[0m\n\u001b[1;32m    576\u001b[0m                 \u001b[0mparts\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parts\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    577\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 578\u001b[0;31m                 \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfspath\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    579\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    580\u001b[0m                     \u001b[0;31m# Force-cast str subclasses to str (issue #21127)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mTypeError\u001b[0m: expected str, bytes or os.PathLike object, not NoneType"],"ename":"TypeError","evalue":"expected str, bytes or os.PathLike object, not NoneType","output_type":"error"}],"execution_count":11},{"cell_type":"code","source":"nifti_path = \"/kaggle/working/6_flair.nii.gz\"\n\nimg = nib.load(nifti_path)\n\ntarget_affine = np.diag([1.0, 1.0, 1.0])\nresampled_img = resample_img(img, target_affine=target_affine)\n\nresampled_img.to_filename(\"resampled_image.nii.gz\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"nifti_path = \"/kaggle/working/resampled_image.nii.gz\"\nplotting.view_img(nifti_path, bg_img=None, cmap='ocean')","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Gaussian Filter","metadata":{}},{"cell_type":"code","source":"nifti_img = nib.load(nifti_path)\ndata = nifti_img.get_fdata()\n\nsmoothed_data = gaussian_filter(data, sigma=1) ","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Skull Stripping","metadata":{}},{"cell_type":"code","source":"brain_mask = compute_brain_mask(nifti_img)\nmasked_data = smoothed_data * brain_mask.get_fdata()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Intensity Normalization","metadata":{}},{"cell_type":"code","source":"normalized_data = (masked_data - masked_data.min()) / (masked_data.max() - masked_data.min())","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\n\nnormalized_img = nib.Nifti1Image(normalized_data, affine=nifti_img.affine)\nplotting.view_img(normalized_img, bg_img=None, cmap='ocean')\n\nnormalized_img.to_filename(\"normalized_image.nii.gz\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport nibabel as nib\n\ndef pad_or_crop(img, target_shape=(240, 240, 155)):\n    current_shape = img.shape\n    result = np.zeros(target_shape, dtype=img.dtype)\n\n    # Compute crop or pad for each axis\n    for i in range(3):\n        if current_shape[i] < target_shape[i]:\n            # Padding\n            pad_total = target_shape[i] - current_shape[i]\n            pad_before = pad_total // 2\n            pad_after = pad_total - pad_before\n            img = np.pad(img,\n                         pad_width=[(pad_before, pad_after) if j == i else (0, 0) for j in range(3)],\n                         mode='constant')\n        elif current_shape[i] > target_shape[i]:\n            # Cropping\n            crop_total = current_shape[i] - target_shape[i]\n            crop_before = crop_total // 2\n            crop_after = crop_before + target_shape[i]\n            img = img.take(indices=range(crop_before, crop_after), axis=i)\n\n    return img\n\ndef preprocess_and_save(nifti_path, out_path, target_shape=(240, 240, 155)):\n    img = nib.load(nifti_path)\n    data = img.get_fdata()\n    \n    processed = pad_or_crop(data, target_shape)\n    \n    new_img = nib.Nifti1Image(processed, affine=img.affine, header=img.header)\n    nib.save(new_img, out_path)\n\n# Example usage\npreprocess_and_save(\"normalized_image.nii.gz\", \"final_image.nii.gz\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plotting.view_img(\"final_image.nii.gz\", bg_img=None, cmap='ocean')","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"img = nib.load(\"final_image.nii.gz\")\nshape = img.shape\n\nprint(\"Image dimensions:\", shape)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}