{"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":"code","source":"# This code is doing the following tasks:\n# 1. it resize the dicom to 224X224 resolution\n# 2. it take only part of the dicom files, with ~2.5 mm between each other\nimport pydicom\nimport cv2\nimport numpy as np\nimport os\nfrom pydicom.uid import RLELossless\nimport pandas as pd\ndef ConvertFile(input_file,output_file):\n    ds = pydicom.read_file(input_file)\n    resized_image = cv2.resize(ds.pixel_array, (224, 224))\n    ds.PixelSpacing = list(np.array([ds.Rows/224.0,ds.Columns/224.0])*np.array(ds.PixelSpacing))\n    ds.Rows = 224\n    ds.Columns = 224\n    ds.compress(RLELossless, resized_image)\n    pydicom.write_file(dataset=ds,filename=output_file)\ndef convert_folder(input_folder,output_folder):\n    # Get list of files\n    # if output_folder doesn't exist,  create it, include parent folders\n    if not os.path.exists(output_folder):\n        os.makedirs(output_folder)\n\n\n    files = os.listdir(input_folder)\n    # Order files\n    positions = [float(pydicom.dcmread(input_folder+f).ImagePositionPatient[2]) for f in files ]\n    df = pd.DataFrame({'Positions':positions,'Name':files})\n    df = df.sort_values(by='Positions')\n    positions_np = np.array(df.Positions)\n    distance = positions_np[-1]-positions_np[0]\n    distance_between_slices = distance/(len(positions_np)+1)\n    optimalDistance = 2.5 #mm\n    optimalNumberOfSlices = int(np.round(optimalDistance/distance_between_slices))\n    if optimalNumberOfSlices == 0:\n        optimalNumberOfSlices = 1\n    # Choose files\n    fileToUse = list(df.Name[::optimalNumberOfSlices])\n    # now we will use ConvertFile to convert the files and save them to output_folder\n    for f in fileToUse:\n        ConvertFile(input_folder+f,output_folder+f)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-09-27T16:07:25.400044Z","iopub.execute_input":"2023-09-27T16:07:25.40066Z","iopub.status.idle":"2023-09-27T16:07:26.263608Z","shell.execute_reply.started":"2023-09-27T16:07:25.400595Z","shell.execute_reply":"2023-09-27T16:07:26.262414Z"},"trusted":true},"execution_count":null,"outputs":[]}]}