{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":99552,"databundleVersionId":13190393,"sourceType":"competition"}],"dockerImageVersionId":31089,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# --- Ayarla: DICOM dosya yolu ---\nDICOM_PATH = \"/kaggle/input/rsna-intracranial-aneurysm-detection/series/1.2.826.0.1.3680043.8.498.10004044428023505108375152878107656647/1.2.826.0.1.3680043.8.498.11145423894464257824946219093727029191.dcm\"\n\n# Kesit seçimi için z değişkeni\nz = 5   # istediğin slice index'i buradan değiştir (0 = ilk slice)\n\nimport numpy as np\nimport pydicom\nimport sys\n\ntry:\n    import matplotlib.pyplot as plt\n    _HAS_MPL = True\nexcept Exception:\n    _HAS_MPL = False\n\n\ndef get_image_array(ds, z_index=0):\n    \"\"\"DICOM'dan piksel matrisini okur, rescale ve window uygular (varsa).\n       Multi-frame ise z_index ile belirlenen slice alınır.\n    \"\"\"\n    arr = ds.pixel_array.astype(np.float32)\n\n    # Multi-frame (stack) ise\n    if arr.ndim == 3 and arr.shape[0] > 1 and (arr.shape[-1] != 3 and arr.shape[-1] != 4):\n        # güvenlik için index clamp\n        z_index = max(0, min(z_index, arr.shape[0]-1))\n        arr = arr[z_index]\n\n    # RGB (SamplesPerPixel=3) ise griye çevir\n    if arr.ndim == 3 and arr.shape[-1] in (3, 4):\n        arr = (0.299*arr[...,0] + 0.587*arr[...,1] + 0.114*arr[...,2]).astype(np.float32)\n\n    # Rescale Slope/Intercept\n    slope = float(getattr(ds, \"RescaleSlope\", 1.0))\n    intercept = float(getattr(ds, \"RescaleIntercept\", 0.0))\n    arr = arr * slope + intercept\n\n    # Windowing (mevcutsa)\n    def to_float(x):\n        try:\n            return float(x)\n        except Exception:\n            return None\n\n    wc = getattr(ds, \"WindowCenter\", None)\n    ww = getattr(ds, \"WindowWidth\", None)\n    if isinstance(wc, pydicom.multival.MultiValue): wc = wc[0]\n    if isinstance(ww, pydicom.multival.MultiValue): ww = ww[0]\n\n    wc, ww = to_float(wc), to_float(ww)\n    if wc is not None and ww not in (None, 0):\n        low, high = wc - ww/2.0, wc + ww/2.0\n    else:\n        low, high = np.percentile(arr, 1), np.percentile(arr, 99)\n\n    arr = np.clip((arr - low) / (high - low + 1e-6), 0, 1)\n    return arr\n\n\ndef main():\n    try:\n        ds = pydicom.dcmread(DICOM_PATH)\n    except Exception as e:\n        print(\"DICOM okunamadı. Sıkıştırılmış olabilir:\", file=sys.stderr)\n        print(\"- 'pylibjpeg' veya 'gdcm' kurmanız gerekebilir.\", file=sys.stderr)\n        raise\n\n    img = get_image_array(ds, z_index=z)\n\n    if _HAS_MPL:\n        plt.figure()\n        plt.imshow(img, cmap=\"gray\")\n        plt.title(f\"DICOM Kesit z={z}\")\n        plt.axis(\"off\")\n        plt.show()\n\n    rows = getattr(ds, \"Rows\", \"?\")\n    cols = getattr(ds, \"Columns\", \"?\")\n    frames = getattr(ds, \"NumberOfFrames\", 1)\n    print(f\"\\nBoyut: {rows} x {cols} | Frame sayısı: {frames}\")\n    print(f\"Gösterilen kesit: {z}\")\n    if hasattr(ds, \"Modality\"):\n        print(f\"Modality: {ds.Modality}\")\n\n\nif __name__ == \"__main__\":\n    main()","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-08-19T18:32:12.405943Z","iopub.execute_input":"2025-08-19T18:32:12.406288Z","iopub.status.idle":"2025-08-19T18:32:12.580705Z","shell.execute_reply.started":"2025-08-19T18:32:12.406264Z","shell.execute_reply":"2025-08-19T18:32:12.57946Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --- Ayarla: NIfTI dosya yolu ---\nNIFTI_PATH = \"/kaggle/input/rsna-intracranial-aneurysm-detection/segmentations/1.2.826.0.1.3680043.8.498.10035643165968342618460849823699311381/1.2.826.0.1.3680043.8.498.10035643165968342618460849823699311381_cowseg.nii\"\n\n# slice seçmek için\nz = 160   # burayı değiştirerek farklı kesitlere bakabilirsin\n\nimport numpy as np\nimport nibabel as nib\nimport sys\n\ntry:\n    import matplotlib.pyplot as plt\n    _HAS_MPL = True\nexcept Exception:\n    _HAS_MPL = False\n\n\ndef main():\n    # NIfTI oku\n    nii = nib.load(NIFTI_PATH)\n    data = nii.get_fdata()  # float64 array döner\n    print(\"Hacim shape:\", data.shape)\n\n    if data.ndim == 3:\n        z_index = max(0, min(z, data.shape[2]-1))\n        slice2d = data[:, :, z_index]\n    elif data.ndim == 4:\n        # örn: fMRI gibi (X,Y,Z,T). İlk zaman noktası alınır\n        z_index = max(0, min(z, data.shape[2]-1))\n        slice2d = data[:, :, z_index, 0]\n    else:\n        print(\"Desteklenmeyen boyut:\", data.shape, file=sys.stderr)\n        return\n\n \n    # (isteğe bağlı) Matplotlib göster\n    if _HAS_MPL:\n        plt.figure()\n        plt.imshow(slice2d.T, cmap=\"gray\", origin=\"lower\")\n        plt.title(f\"NIfTI slice z={z_index}\")\n        plt.axis(\"off\")\n        plt.show()\n\n\nif __name__ == \"__main__\":\n    main()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-08-19T18:35:26.129837Z","iopub.execute_input":"2025-08-19T18:35:26.130189Z","iopub.status.idle":"2025-08-19T18:35:26.412605Z","shell.execute_reply.started":"2025-08-19T18:35:26.130132Z","shell.execute_reply":"2025-08-19T18:35:26.411727Z"}},"outputs":[],"execution_count":null}]}