{"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":"markdown","source":"### thanks to this person for part of the code\nhttps://www.kaggle.com/dschettler8845/captk-brats-preprocessing-cleaned-commented","metadata":{}},{"cell_type":"code","source":"import os\nimport sys \nfrom tqdm import tqdm\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom PIL import Image\nimport pydicom\nimport glob\nfrom pathlib import Path\nfrom skimage.transform import resize\nimport numpy as np\nimport nibabel as nib\nimport matplotlib.pyplot as plt\nimport SimpleITK as sitk\nimport re\nimport subprocess\nimport multiprocessing\nfrom scipy import ndimage as ndi\nimport shutil\nimport tarfile\nimport skimage.transform as skTrans\ntrain_path = '../input/rsna-miccai-brain-tumor-radiogenomic-classification/train/'","metadata":{"execution":{"iopub.status.busy":"2021-09-06T19:02:52.948914Z","iopub.execute_input":"2021-09-06T19:02:52.949374Z","iopub.status.idle":"2021-09-06T19:02:54.805167Z","shell.execute_reply.started":"2021-09-06T19:02:52.949281Z","shell.execute_reply":"2021-09-06T19:02:54.804009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# installation captk \n# установка captk","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def install_captk(package_input_dir=\"/kaggle/input/captk-181-installerbin\", working_dir=\"/kaggle/working\"):\n    print(\"\\n\\n... INSTALLING BC PACKAGE ...\\n\\n\")\n    os.system('apt install bc')\n    \n    print(\"\\n\\n... MOVING THE BIN PACKAGE TO WORKING DIRECTORY AND MODIFYING PERMISSIONS ...\\n\\n\")\n    !cp {os.path.join(package_input_dir, \"CaPTk_1.8.1_Installer.bin\")} {working_dir}\n    !chmod +x {os.path.join(working_dir, \"CaPTk_1.8.1_Installer.bin\")}\n    \n    print(\"\\n\\n... INSTALLING CAPTK ...\\n\\n\")\n    !echo -e Y | {os.path.join(working_dir, \"CaPTk_1.8.1_Installer.bin\")}\n    \n    print(\"\\n\\n... EXTRACT CONTENTS OF APPIMAGE ONTO HARD DRIVE ...\\n\\n\")\n    subprocess.call([os.path.join(working_dir, \"CaPTk/1.8.1/captk\"), \"--appimage-extract\"])\n    \n    # Add relevant directories to the respective paths\n    print(\"\\n\\n... ADD RELEVANT PATHS TO SYSTEM PATHS ...\\n\\n\")\n    os.environ['PATH'] = os.path.join(working_dir, \"squashfs-root/usr/lib:\") + os.environ['PATH'] \n    os.environ['LD_LIBRARY_PATH'] = os.path.join(working_dir, \"squashfs-root/usr/lib:\") + os.environ['LD_LIBRARY_PATH'] \n    \n    print(\"\\n\\n... SEE CAPTK COMMAND HELP [-h] ...\\n\\n\")\n    !{os.path.join(working_dir, \"squashfs-root/usr/bin/Preprocessing\")} -h\n    \ninstall_captk()","metadata":{"execution":{"iopub.status.busy":"2021-09-10T11:15:57.98735Z","iopub.execute_input":"2021-09-10T11:15:57.987844Z","iopub.status.idle":"2021-09-10T11:18:00.580941Z","shell.execute_reply.started":"2021-09-10T11:15:57.987801Z","shell.execute_reply":"2021-09-10T11:18:00.579335Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# dicom to nifti conversion\n# конвертация dicom в nifti","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dirs = os.listdir(train_path)","metadata":{"execution":{"iopub.status.busy":"2021-09-10T11:22:18.927326Z","iopub.execute_input":"2021-09-10T11:22:18.928121Z","iopub.status.idle":"2021-09-10T11:22:18.986252Z","shell.execute_reply.started":"2021-09-10T11:22:18.928071Z","shell.execute_reply":"2021-09-10T11:22:18.984715Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reader = sitk.ImageSeriesReader()\nreader.LoadPrivateTagsOn()","metadata":{"execution":{"iopub.status.busy":"2021-09-10T11:22:20.377954Z","iopub.execute_input":"2021-09-10T11:22:20.378342Z","iopub.status.idle":"2021-09-10T11:22:20.397411Z","shell.execute_reply.started":"2021-09-10T11:22:20.37831Z","shell.execute_reply":"2021-09-10T11:22:20.396035Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not os.path.isdir('./flair'):\n    os.mkdir('./flair')\nfor i, folder in enumerate(tqdm(train_dirs)): #train_dirs[:100]\n    train_study = train_dirs[i]\n    filenamesDICOM = sorted(reader.GetGDCMSeriesFileNames(f'{train_path}{train_study}/FLAIR'), key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n    reader.SetFileNames(filenamesDICOM)\n    flair = reader.Execute()\n    sitk.WriteImage(flair, f'./flair/test_{train_study}_flair.nii')","metadata":{"execution":{"iopub.status.busy":"2021-09-06T15:57:42.880255Z","iopub.execute_input":"2021-09-06T15:57:42.880624Z","iopub.status.idle":"2021-09-06T15:57:44.317021Z","shell.execute_reply.started":"2021-09-06T15:57:42.88059Z","shell.execute_reply":"2021-09-06T15:57:44.315626Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if not os.path.isdir('./t1w'):\n#     os.mkdir('./t1w')\n# for i, folder in enumerate(tqdm(train_dirs)):\n#     train_study = train_dirs[i]\n#     filenamesDICOM = sorted(reader.GetGDCMSeriesFileNames(f'{train_path}{train_study}/T1w'), key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n#     reader.SetFileNames(filenamesDICOM)\n#     flair = reader.Execute()\n#     sitk.WriteImage(flair, f'./t1w/test_{train_study}_t1.nii.gz')","metadata":{"execution":{"iopub.status.busy":"2021-09-06T15:57:44.318914Z","iopub.execute_input":"2021-09-06T15:57:44.319334Z","iopub.status.idle":"2021-09-06T15:57:44.331124Z","shell.execute_reply.started":"2021-09-06T15:57:44.319274Z","shell.execute_reply":"2021-09-06T15:57:44.330143Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if not os.path.isdir('./t1ce'):\n#     os.mkdir('./t1ce')\n# for i, folder in enumerate(tqdm(train_dirs)):\n#     train_study = train_dirs[i]\n#     filenamesDICOM = sorted(reader.GetGDCMSeriesFileNames(f'{train_path}{train_study}/T1wCE'), key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n#     reader.SetFileNames(filenamesDICOM)\n#     flair = reader.Execute()\n#     sitk.WriteImage(flair, f'./t1ce/test_{train_study}_t1ce.nii.gz')","metadata":{"execution":{"iopub.status.busy":"2021-09-06T15:57:44.3324Z","iopub.execute_input":"2021-09-06T15:57:44.332855Z","iopub.status.idle":"2021-09-06T15:57:44.342997Z","shell.execute_reply.started":"2021-09-06T15:57:44.332824Z","shell.execute_reply":"2021-09-06T15:57:44.341926Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if not os.path.isdir('./t2w'):\n#     os.mkdir('./t2w')\n# for i, folder in enumerate(tqdm(train_dirs)):\n#     train_study = train_dirs[i]\n#     filenamesDICOM = sorted(reader.GetGDCMSeriesFileNames(f'{train_path}{train_study}/T2w'), key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n#     reader.SetFileNames(filenamesDICOM)\n#     flair = reader.Execute()\n#     sitk.WriteImage(flair, f'./t2w/test_{train_study}_t2.nii.gz')","metadata":{"execution":{"iopub.status.busy":"2021-09-06T15:57:44.345842Z","iopub.execute_input":"2021-09-06T15:57:44.346159Z","iopub.status.idle":"2021-09-06T15:57:44.352027Z","shell.execute_reply.started":"2021-09-06T15:57:44.34612Z","shell.execute_reply":"2021-09-06T15:57:44.351127Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# регистрация nifti по образцу  brats 20\n# registration of nifti on the model of brats 20","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"flags={'-rME': 'NMI', '-rIS':'1', '-rNI':'100,50,5', '-reg': 'Affine'}\ncaptk = './squashfs-root/usr/bin/Preprocessing'\nfixed_file = '/kaggle/input/brats20-dataset-training-validation/BraTS2020_TrainingData/MICCAI_BraTS2020_TrainingData/BraTS20_Training_001/BraTS20_Training_001_flair.nii'","metadata":{"execution":{"iopub.status.busy":"2021-09-10T11:25:26.610567Z","iopub.execute_input":"2021-09-10T11:25:26.611217Z","iopub.status.idle":"2021-09-10T11:25:26.6172Z","shell.execute_reply.started":"2021-09-10T11:25:26.611172Z","shell.execute_reply":"2021-09-10T11:25:26.616013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# only flair\n# только flair","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not os.path.isdir('./flairreg'):\n    os.mkdir('./flairreg')\nfor i, file in enumerate(tqdm(os.listdir('./flair'))):\n    out = f'./flairreg/{file}'\n    filepath = f'./flair/{file}'\n    #command = f\"{captk} -i {file} -rFI {fixed_file} -o ./flairreg/{file}.gz -reg Affine -rIS {flags['-rIS']}\"\n    res = subprocess.call([captk, '-i', file, '-rFI', fixed_file, '-o', out,'-rME', flags['-rME'], '-reg', flags['-reg'], '-rIS', flags['-rIS']])\n    print(\"Returned Value: \", res)\n    if res==0:\n        os.remove(filepath)\n    else:\n        print('error')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# only t1ce\n# только t1ce","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not os.path.isdir('./t1cereg'):\n    os.mkdir('./t1cereg')\nfor i, file in enumerate(tqdm(os.listdir('./t1ce'))):\n    out = f'./t1cereg/{file}'\n    filepath = f'./t1ce/{file}'\n    #command = f\"{captk} -i {file} -rFI {fixed_file} -o ./flairreg/{file}.gz -reg Affine -rIS {flags['-rIS']}\"\n    res = subprocess.call([captk, '-i', file, '-rFI', fixed_file, '-o', out,'-rME', flags['-rME'], '-reg', flags['-reg'], '-rIS', flags['-rIS']])\n    print(\"Returned Value: \", res)\n    if res==0:\n        os.remove(filepath)\n    else:\n        print('error')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# convert and register flair at the same time\n# и конвертация и регистрация flair одновременно","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not os.path.isdir('./flair'):\n    os.mkdir('./flair')\nif not os.path.isdir('./flairreg'):\n    os.mkdir('./flairreg')\n#for i, folder in enumerate(tqdm(train_dirs)):\nfor i in range(len(sub_df)):\n    train_study = sub_df.iloc[i]['BraTS21ID']\n    filenamesDICOM = sorted(reader.GetGDCMSeriesFileNames(f'{train_path}{train_study}/FLAIR'), key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n    reader.SetFileNames(filenamesDICOM)\n    flair = reader.Execute()\n    sitk.WriteImage(flair, f'./flair/test_{train_study}_flair.nii.gz')\n    file = f'./flair/test_{train_study}_flair.nii.gz'\n    oup = f'./flairreg/test_{train_study}_flair.nii.gz'\n    res = subprocess.call([captk, '-i', file, '-rFI', fixed_file, '-o', oup,'-rME', flags['-rME'], '-reg', flags['-reg'], '-rIS', flags['-rIS']])\n    print(f\"{i} {file} Returned Value: \", res)\n    if res==0:\n        os.remove(file)\n    else:\n        print('error')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# convert and register t1ce at the same time\n# и конвертация и регистрация t1ce одновременно","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not os.path.isdir('./t1ce'):\n    os.mkdir('./t1ce')\nif not os.path.isdir('./t1cereg'):\n    os.mkdir('./t1cereg')\nfor i, folder in enumerate(tqdm(train_dirs)):\n    train_study = train_dirs[i]\n    filenamesDICOM = sorted(reader.GetGDCMSeriesFileNames(f'{train_path}{train_study}/T1wCE'), key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])\n    reader.SetFileNames(filenamesDICOM)\n    flair = reader.Execute()\n    sitk.WriteImage(flair, f'./t1ce/test_{train_study}_t1ce.nii.gz')\n    file = f'./t1ce/test_{train_study}_t1ce.nii.gz'\n    oup = f'./t1cereg/test_{train_study}_t1ce.nii.gz'\n    res = subprocess.call([captk, '-i', file, '-rFI', fixed_file, '-o', oup,'-rME', flags['-rME'], '-reg', flags['-reg'], '-rIS', flags['-rIS']])\n    print(f\"{file} Returned Value: \", res)\n    if res==0:\n        os.remove(file)\n    else:\n        print('error')","metadata":{"execution":{"iopub.status.busy":"2021-09-10T11:25:38.437241Z","iopub.execute_input":"2021-09-10T11:25:38.437825Z","iopub.status.idle":"2021-09-10T14:31:07.868996Z","shell.execute_reply.started":"2021-09-10T11:25:38.43777Z","shell.execute_reply":"2021-09-10T14:31:07.863803Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!zip -r flairreg.zip ./flairreg","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from IPython.display import FileLink\nFileLink('./flairreg.zip')","metadata":{"execution":{"iopub.status.busy":"2021-09-10T14:43:31.210261Z","iopub.execute_input":"2021-09-10T14:43:31.210712Z","iopub.status.idle":"2021-09-10T14:43:31.232273Z","shell.execute_reply.started":"2021-09-10T14:43:31.210667Z","shell.execute_reply":"2021-09-10T14:43:31.230786Z"},"trusted":true},"execution_count":null,"outputs":[]}]}