Tissue detection and tiling#
How do I choose a tissue detection method?#
Start with the fast default method:
zs.pp.find_tissues(wsi, method="otsu")
For faint or texturally distinct tissue, compare entropy-based detection:
zs.pp.find_tissues(wsi, method="entropy", key_added="tissues_entropy")
For learned tissue segmentation, use:
zs.seg.tissue(wsi, model="grandqc", key_added="tissues_dl")
Always visualize the result and choose based on the tissue and stain being analyzed.
How do I fix missing or poor tissue detection?#
Try these checks in order:
Confirm that the slide opens correctly and is not inverted or multi-channel data interpreted as RGB.
Run at a fixed level so results are reproducible:
level=-1is the lowest-resolution level.Compare
method="otsu"andmethod="entropy".For Otsu, adjust
threshold,filter_artifacts, orto_hsv.Reduce
min_tissue_areawhen legitimate fragments are removed.Use
refine_level="auto"when coarse boundaries need refinement.Compare a learned tissue model.
zs.pp.find_tissues(
wsi,
level=-1,
method="entropy",
min_tissue_area=1e-4,
key_added="tissues_relaxed",
)
zs.pl.tissue(wsi, tissue_key="tissues_relaxed")
How do I control holes and small fragments?#
zs.pp.find_tissues(
wsi,
detect_holes=True,
min_tissue_area=1e-3,
min_hole_area=1e-5,
)
Areas are proportions of the slide area. Increase a threshold to remove smaller objects; decrease it to preserve them.
How do I choose tile size and MPP?#
Follow the model’s documented input first. Otherwise decide the biological field of view you need:
field of view (µm) = tile_px * mpp
For example, tile_px=256, mpp=0.5 covers 128 µm. See Resolution and tiling for a comparison table.
How do I create overlapping tiles?#
Use either an overlap ratio or an explicit stride:
zs.pp.tile_tissues(wsi, 256, mpp=0.5, overlap=0.25)
# or
zs.pp.tile_tissues(wsi, 256, mpp=0.5, stride_px=192)
Do not specify both overlap and stride_px.
How do I make several tile sets?#
zs.pp.tile_tissues(wsi, 256, mpp=0.5, key_added="tiles_20x")
zs.pp.tile_tissues(wsi, 256, mpp=1.0, key_added="tiles_10x")
Pass the selected key to every downstream operation:
zs.tl.feature_extraction(wsi, "uni", tile_key="tiles_20x")
Why are no tiles generated?#
Common causes are:
the tile is larger than every detected tissue region;
tissue detection produced no contours;
background_fractionrejects border tiles;the requested MPP and slide metadata imply an unexpectedly large level-0 footprint.
Inspect tissue polygons, lower tile_px, relax background_fraction, or temporarily set background_filter=False to isolate the cause.
zs.pp.tile_tissues(
wsi,
256,
mpp=0.5,
background_filter=True,
background_fraction=0.5,
)
How do I tile the whole slide or an annotation?#
To tile the full slide, set tissue_key=None. To tile an imported annotation layer, use its shape key:
zs.pp.tile_tissues(wsi, 256, mpp=0.5, tissue_key=None, key_added="all_tiles")
zs.pp.tile_tissues(
wsi, 256, mpp=0.5, tissue_key="annotations", key_added="roi_tiles"
)