Source code for wsipipe.preprocess.tissue_detection.visualise

import cv2
import numpy as np
from PIL import Image

from wsipipe.load.datasets import Loader
from wsipipe.preprocess.tissue_detection.tissue_detector import TissueDetector


[docs]def visualise_tissue_detection_for_slide( slide_path: str, loader: Loader, vis_level:int, tissue_detector: TissueDetector ) -> Image: """Draws detected tissue as an overlay on a thumbnail of the slide Thumbnail of a slide is created at vis level Tissue detected by tissue detector is outlined in green on the thumbnail Args: slide_path: A path to a whole slide image file loader: the type of loader to use to read the WSI vis_level: the level at which to create the thumbnail tissue_detector: the tissue detector to apply Returns: A PIL Image """ with loader.load_slide(slide_path) as slide: thumb = slide.get_thumbnail(vis_level) tissue_mask = tissue_detector(thumb) tissue_mask = np.array(tissue_mask*255, dtype=np.uint8) findcntrs = cv2.findContours( image=tissue_mask, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE ) # depending on version of cv2, find contours either returns 2 or 3 objects, # with contours the first of 2 or second of 3 contours = findcntrs[-2] # draw contours on the original image outline_img = cv2.drawContours( image=thumb, contours=contours, contourIdx=-1, color=(0, 255, 0), thickness=3, lineType=cv2.LINE_AA ) return Image.fromarray(outline_img)