{"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":18647,"databundleVersionId":1126921,"sourceType":"competition"}],"dockerImageVersionId":31089,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install openslide-python --quiet\n\nimport os\nimport openslide\nimport matplotlib.pyplot as plt\nfrom PIL import Image\nimport numpy as np\n\nBASE_PATH = \"/kaggle/input/prostate-cancer-grade-assessment/train_images\"\nMASK_PATH = \"/kaggle/input/prostate-cancer-grade-assessment/train_label_masks\"\n\n# Lista todos os arquivos e ordena pelo nome\nall_files = sorted(os.listdir(BASE_PATH))\n\n# Seleciona as imagens do índice 100 até 105\nimage_files = all_files[100:106]  # 106 porque o slice não inclui o último índice\n\ndef show_image_and_mask(file_name, size=(512,512)):\n    # Abre a imagem\n    img_path = os.path.join(BASE_PATH, file_name)\n    slide = openslide.OpenSlide(img_path)\n    thumbnail = slide.get_thumbnail(size).convert(\"RGB\")\n    \n    # Inicializa máscara vazia\n    mask_rgb = np.zeros((size[1], size[0], 3), dtype=np.uint8)\n    \n    # Abre a máscara, se existir\n    mask_file = os.path.join(MASK_PATH, file_name.replace(\".tiff\",\"_mask.tiff\"))\n    if os.path.exists(mask_file):\n        mask_slide = openslide.OpenSlide(mask_file)\n        mask_img = mask_slide.get_thumbnail(size).convert(\"L\")\n        mask_img = mask_img.resize(size, Image.NEAREST)\n        mask_img = np.array(mask_img)\n        mask_slide.close()\n\n        colors = {\n            1: [0,255,0],     # verde\n            2: [0,0,255],     # azul\n            3: [255,0,0],     # vermelho\n            4: [255,165,0],   # laranja\n            5: [128,0,128]    # roxo\n        }\n        for k, v in colors.items():\n            for c in range(3):\n                mask_rgb[:,:,c] = np.where(mask_img==k, v[c], mask_rgb[:,:,c])\n    \n    fig, axes = plt.subplots(1,2, figsize=(12,6))\n    axes[0].imshow(thumbnail)\n    axes[0].set_title(\"Imagem\")\n    axes[0].axis('off')\n    \n    axes[1].imshow(mask_rgb)\n    axes[1].set_title(\"Máscara\")\n    axes[1].axis('off')\n    \n    plt.suptitle(file_name)\n    plt.show()\n    \n    slide.close()\n\nfor file_name in image_files:\n    show_image_and_mask(file_name)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-09-12T06:17:18.948776Z","iopub.execute_input":"2025-09-12T06:17:18.949191Z","iopub.status.idle":"2025-09-12T06:17:26.135205Z","shell.execute_reply.started":"2025-09-12T06:17:18.949161Z","shell.execute_reply":"2025-09-12T06:17:26.134028Z"}},"outputs":[],"execution_count":null}]}