{"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":"gpu","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"isSourceIdPinned":false,"sourceType":"competition"}],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install pydicom Pillow","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-10T17:31:08.383847Z","iopub.execute_input":"2025-03-10T17:31:08.384149Z","iopub.status.idle":"2025-03-10T17:31:12.477147Z","shell.execute_reply.started":"2025-03-10T17:31:08.384123Z","shell.execute_reply":"2025-03-10T17:31:12.476333Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pydicom\nfrom PIL import Image\nimport os\nimport numpy as np\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-10T17:31:12.478536Z","iopub.execute_input":"2025-03-10T17:31:12.478760Z","iopub.status.idle":"2025-03-10T17:31:13.062988Z","shell.execute_reply.started":"2025-03-10T17:31:12.478740Z","shell.execute_reply":"2025-03-10T17:31:13.062371Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def convert_dicom_to_jpg(input_dirs, output_dir):\n    # ایجاد دایرکتوری خروجی در صورت عدم وجود\n    if not os.path.exists(output_dir):\n        os.makedirs(output_dir)\n\n    for input_dir in input_dirs:\n        for root, _, files in os.walk(input_dir):\n            for filename in files:\n                if filename.endswith('.dcm'):\n                    dicom_path = os.path.join(root, filename)\n                    dicom_image = pydicom.dcmread(dicom_path)\n\n                    # تبدیل تصویر DICOM به فرمت مناسب\n                    image_data = dicom_image.pixel_array\n\n                    # بررسی نوع داده تصویر و تبدیل به حالت مناسب\n                    if image_data.dtype == np.uint16:\n                        # نرمال‌سازی 16 بیتی به 8 بیتی (حفظ مقیاس مناسب)\n                        image_data = (image_data - np.min(image_data)) * (255.0 / (np.max(image_data) - np.min(image_data)))\n                        image_data = np.clip(image_data, 0, 255).astype(np.uint8)\n                    elif image_data.dtype == np.int16:\n                        # نرمال‌سازی به 8 بیتی (حفظ مقیاس مناسب)\n                        image_data = (image_data - np.min(image_data)) * (255.0 / (np.max(image_data) - np.min(image_data)))\n                        image_data = np.clip(image_data, 0, 255).astype(np.uint8)\n\n                    # افزایش کنتراست با استفاده از Histogram Equalization (اختیاری)\n                    # در اینجا، از OpenCV برای انجام Equalization استفاده می‌کنیم\n                    # img = cv2.equalizeHist(image_data)  # اگر بخواهید از این روش استفاده کنید\n\n                    img = Image.fromarray(image_data)\n                    img = img.convert('L')  # تبدیل به سیاه و سفید\n\n                    # تبدیل مجدد به RGB برای ذخیره‌سازی\n                    img = img.convert('RGB')\n\n                    # تغییر اندازه تصویر به 224 در 224\n                    img = img.resize((224, 224))\n\n                    # ساخت دایرکتوری مقصد با حفظ ساختار دایرکتوری اصلی\n                    relative_path = os.path.relpath(root, input_dir)\n                    output_subdir = os.path.join(output_dir, relative_path)\n\n                    if not os.path.exists(output_subdir):\n                        os.makedirs(output_subdir)\n\n                    # ذخیره‌سازی تصویر به فرمت JPG\n                    jpg_filename = filename.replace('.dcm', '.jpg')\n                    jpg_path = os.path.join(output_subdir, jpg_filename)\n                    img.save(jpg_path)\n\n# دایرکتوری‌های ورودی و خروجی\ninput_dirs = ['/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_images']\noutput_dir = '/kaggle/working/test_images'\n\nconvert_dicom_to_jpg(input_dirs, output_dir)\nprint(\"تبدیل به اتمام رسید!\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-10T17:31:13.064190Z","iopub.execute_input":"2025-03-10T17:31:13.064435Z","iopub.status.idle":"2025-03-10T17:31:16.095867Z","shell.execute_reply.started":"2025-03-10T17:31:13.064415Z","shell.execute_reply":"2025-03-10T17:31:16.094948Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def convert_dicom_to_jpg(input_dirs, output_dir):\n    # ایجاد دایرکتوری خروجی در صورت عدم وجود\n    if not os.path.exists(output_dir):\n        os.makedirs(output_dir)\n\n    for input_dir in input_dirs:\n        for root, _, files in os.walk(input_dir):\n            for filename in files:\n                if filename.endswith('.dcm'):\n                    dicom_path = os.path.join(root, filename)\n                    dicom_image = pydicom.dcmread(dicom_path)\n\n                    # تبدیل تصویر DICOM به فرمت مناسب\n                    image_data = dicom_image.pixel_array\n\n                    # بررسی نوع داده تصویر و تبدیل به حالت مناسب\n                    if image_data.dtype == np.uint16:\n                        # نرمال‌سازی 16 بیتی به 8 بیتی (حفظ مقیاس مناسب)\n                        image_data = (image_data - np.min(image_data)) * (255.0 / (np.max(image_data) - np.min(image_data)))\n                        image_data = np.clip(image_data, 0, 255).astype(np.uint8)\n                    elif image_data.dtype == np.int16:\n                        # نرمال‌سازی به 8 بیتی (حفظ مقیاس مناسب)\n                        image_data = (image_data - np.min(image_data)) * (255.0 / (np.max(image_data) - np.min(image_data)))\n                        image_data = np.clip(image_data, 0, 255).astype(np.uint8)\n\n                    # افزایش کنتراست با استفاده از Histogram Equalization (اختیاری)\n                    # در اینجا، از OpenCV برای انجام Equalization استفاده می‌کنیم\n                    # img = cv2.equalizeHist(image_data)  # اگر بخواهید از این روش استفاده کنید\n\n                    img = Image.fromarray(image_data)\n                    img = img.convert('L')  # تبدیل به سیاه و سفید\n\n                    # تبدیل مجدد به RGB برای ذخیره‌سازی\n                    img = img.convert('RGB')\n\n                    # تغییر اندازه تصویر به 224 در 224\n                    img = img.resize((224, 224))\n\n                    # ساخت دایرکتوری مقصد با حفظ ساختار دایرکتوری اصلی\n                    relative_path = os.path.relpath(root, input_dir)\n                    output_subdir = os.path.join(output_dir, relative_path)\n\n                    if not os.path.exists(output_subdir):\n                        os.makedirs(output_subdir)\n\n                    # ذخیره‌سازی تصویر به فرمت JPG\n                    jpg_filename = filename.replace('.dcm', '.jpg')\n                    jpg_path = os.path.join(output_subdir, jpg_filename)\n                    img.save(jpg_path)\n                    \n# دایرکتوری‌های ورودی و خروجی\ninput_dirs = ['/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images']\noutput_dir = '/kaggle/working/train_images'\n\nconvert_dicom_to_jpg(input_dirs, output_dir)\nprint(\"تبدیل به اتمام رسید!\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-10T17:31:16.097007Z","iopub.execute_input":"2025-03-10T17:31:16.097358Z","execution_failed":"2025-03-10T18:11:10.502Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import zipfile\nimport os\n\ndef zip_directory(folder_path, output_zip_path):\n    with zipfile.ZipFile(output_zip_path, 'w') as zip_file:\n        for root, _, files in os.walk(folder_path):\n            for file in files:\n                zip_file.write(os.path.join(root, file),\n                               os.path.relpath(os.path.join(root, file), \n                               os.path.join(folder_path, '..')))\n\n# دایرکتوری خروجی\noutput_dir = '/kaggle/working/'\n# مسیر فایل ZIP نهایی\noutput_zip_path = '/kaggle/working/dataset.zip'\n\nzip_directory(output_dir, output_zip_path)\nprint(\"فایل ZIP با موفقیت ایجاد شد!\")","metadata":{"trusted":true,"execution":{"execution_failed":"2025-03-10T18:11:10.503Z"}},"outputs":[],"execution_count":null}]}