{"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":"This notebook converts the DICOM images in the [rsna-miccai-brain-tumor-radiogenomic-classification](https://www.kaggle.com/c/rsna-miccai-brain-tumor-radiogenomic-classification) dataset to Nifti images using [dcmstack](https://dcmstack.readthedocs.io/en/v0.6.1/).\n\nThen see this [example](https://keras.io/examples/vision/3D_image_classification/) of how to do 3D image classifcation with Nifti images.","metadata":{}},{"cell_type":"code","source":"!pip install --quiet --no-index --find-links ../input/pip-download-dcmstack/ --requirement ../input/pip-download-dcmstack/requirements.txt","metadata":{"execution":{"iopub.status.busy":"2021-09-21T01:34:24.365877Z","iopub.execute_input":"2021-09-21T01:34:24.366236Z","iopub.status.idle":"2021-09-21T01:34:31.631185Z","shell.execute_reply.started":"2021-09-21T01:34:24.366207Z","shell.execute_reply":"2021-09-21T01:34:31.629987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os # directory operations\nimport dcmstack # convert .dcm to .nii.gz\nfrom pathlib import Path # directory operations\n\n# Parameters to limit the processing power needed.\ndemo  = False # if True limits to 10 patients\nscan_types    = ['FLAIR','T1w','T1wCE','T2w'] # uses all scan types","metadata":{"execution":{"iopub.status.busy":"2021-09-21T01:34:31.633694Z","iopub.execute_input":"2021-09-21T01:34:31.634066Z","iopub.status.idle":"2021-09-21T01:34:31.639507Z","shell.execute_reply.started":"2021-09-21T01:34:31.633997Z","shell.execute_reply":"2021-09-21T01:34:31.638416Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Preprocess data \ndata_dir   = '/kaggle/input/rsna-miccai-brain-tumor-radiogenomic-classification/'\nout_dir    = '/kaggle/working/processed'\n\nfor dataset in ['train','test']:\n    dataset_dir = f'{data_dir}{dataset}'\n    patients = os.listdir(dataset_dir)\n    if demo:\n        patients = patients[:10]\n    \n    # Remove cases the competion host said to exclude \n    # https://www.kaggle.com/c/rsna-miccai-brain-tumor-radiogenomic-classification/discussion/262046\n    if '00109' in patients: patients.remove('00109')\n    if '00123' in patients: patients.remove('00123')\n    if '00709' in patients: patients.remove('00709')\n    \n    print(f'Total patients in {dataset} dataset: {len(patients)}')\n\n    count = 0\n    for patient in patients:\n        count = count + 1\n        print(f'{dataset}: {count}/{len(patients)}')\n\n        for scan_type in scan_types:\n            scan_src  = f'{dataset_dir}/{patient}/{scan_type}/'\n            scan_dest = f'{out_dir}/{dataset}/{patient}/{scan_type}/'\n            Path(scan_dest).mkdir(parents=True, exist_ok=True)\n            !dcmstack {scan_src} --dest-dir {scan_dest} -o {scan_type}","metadata":{"execution":{"iopub.status.busy":"2021-09-21T01:34:31.641344Z","iopub.execute_input":"2021-09-21T01:34:31.641671Z"},"trusted":true},"execution_count":null,"outputs":[]}]}