(wsi, seg_level, method='otsu')
| 338 | return img |
| 339 | |
| 340 | def create_tissue_mask(wsi, seg_level, method='otsu'): |
| 341 | # Determine the best level to determine the segmentation on |
| 342 | level_dims = wsi.level_dimensions[seg_level] |
| 343 | |
| 344 | img = np.array(wsi.read_region((0, 0), seg_level, level_dims)) |
| 345 | |
| 346 | # Get the total surface area of the slide level that was used |
| 347 | level_area = level_dims[0] * level_dims[1] |
| 348 | |
| 349 | # Minimum surface area of tissue polygons (in pixels) |
| 350 | # Note that this value should be sensible in the context of the chosen tile size |
| 351 | min_area = level_area / 500 |
| 352 | |
| 353 | if method=='stain_deconv': |
| 354 | tissue_mask = segment_tissue_deconv_stain(img) |
| 355 | tissue_mask = mask_to_polygons(tissue_mask, min_area) |
| 356 | else: |
| 357 | contours, hierarchy = segment_tissue(img) |
| 358 | foreground_contours, hole_contours = detect_foreground(contours, hierarchy) |
| 359 | tissue_mask = construct_polygon(foreground_contours, hole_contours, min_area) |
| 360 | |
| 361 | # Scale the tissue mask polygon to be in the coordinate space of the slide's level 0 |
| 362 | scale_factor = wsi.level_downsamples[seg_level] |
| 363 | tissue_mask_scaled = scale( |
| 364 | tissue_mask, xfact=scale_factor, yfact=scale_factor, zfact=1.0, origin=(0, 0) |
| 365 | ) |
| 366 | |
| 367 | return tissue_mask_scaled |
| 368 | |
| 369 | def create_tissue_tiles(wsi, tissue_mask_scaled, tile_size_microns, offsets_micron=None): |
| 370 |
no test coverage detected