Back to Claude Scientific Skills

Slide Management

scientific-skills/histolab/references/slide_management.md

2.38.04.6 KB
Original Source

Slide Management

Overview

The Slide class is the primary interface for working with whole slide images (WSI) in histolab. It provides methods to load, inspect, and process large histopathology images stored in various formats.

Initialization

python
from histolab.slide import Slide

# Initialize a slide with a WSI file and output directory
slide = Slide(processed_path="path/to/processed/output",
              slide_path="path/to/slide.svs")

Parameters:

  • slide_path: Path to the whole slide image file (supports multiple formats: SVS, TIFF, NDPI, etc.)
  • processed_path: Directory where processed outputs (tiles, thumbnails, etc.) will be saved

Loading Sample Data

Histolab provides built-in sample datasets from TCGA for testing and demonstration:

python
from histolab.data import prostate_tissue, ovarian_tissue, breast_tissue, heart_tissue, kidney_tissue

# Load prostate tissue sample
prostate_svs, prostate_path = prostate_tissue()
slide = Slide(prostate_path, processed_path="output/")

Available sample datasets:

  • prostate_tissue(): Prostate tissue sample
  • ovarian_tissue(): Ovarian tissue sample
  • breast_tissue(): Breast tissue sample
  • heart_tissue(): Heart tissue sample
  • kidney_tissue(): Kidney tissue sample

Key Properties

Slide Dimensions

python
# Get slide dimensions at level 0 (highest resolution)
width, height = slide.dimensions

# Get dimensions at specific pyramid level
level_dimensions = slide.level_dimensions
# Returns tuple of (width, height) for each level

Magnification Information

python
# Get base magnification (e.g., 40x, 20x)
base_mag = slide.base_mpp  # Microns per pixel at level 0

# Get all available levels
num_levels = slide.levels  # Number of pyramid levels

Slide Properties

python
# Access OpenSlide properties dictionary
properties = slide.properties

# Common properties include:
# - slide.properties['openslide.objective-power']: Objective power
# - slide.properties['openslide.mpp-x']: Microns per pixel in X
# - slide.properties['openslide.mpp-y']: Microns per pixel in Y
# - slide.properties['openslide.vendor']: Scanner vendor

Thumbnail Generation

python
# Get thumbnail at specific size
thumbnail = slide.thumbnail

# Save thumbnail to disk
slide.save_thumbnail()  # Saves to processed_path

# Get scaled thumbnail
scaled_thumbnail = slide.scaled_image(scale_factor=32)

Slide Visualization

python
# Display slide thumbnail with matplotlib
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 10))
plt.imshow(slide.thumbnail)
plt.title(f"Slide: {slide.name}")
plt.axis('off')
plt.show()

Extracting Regions

python
# Extract region at specific coordinates and level
region = slide.extract_region(
    location=(x, y),  # Top-left coordinates at level 0
    size=(width, height),  # Region size
    level=0  # Pyramid level
)

Working with Pyramid Levels

WSI files use a pyramidal structure with multiple resolution levels:

  • Level 0: Highest resolution (native scan resolution)
  • Level 1+: Progressively lower resolutions for faster access
python
# Check available levels
for level in range(slide.levels):
    dims = slide.level_dimensions[level]
    downsample = slide.level_downsamples[level]
    print(f"Level {level}: {dims}, downsample: {downsample}x")

Slide Name and Path

python
# Get slide filename without extension
slide_name = slide.name

# Get full path to slide file
slide_path = slide.scaled_image

Best Practices

  1. Always specify processed_path: Organize outputs in dedicated directories
  2. Check dimensions before processing: Large slides can exceed memory limits
  3. Use appropriate pyramid levels: Extract tiles at levels matching your analysis resolution
  4. Preview with thumbnails: Use thumbnails for quick visualization before heavy processing
  5. Monitor memory usage: Level 0 operations on large slides require significant RAM

Common Workflows

Slide Inspection Workflow

python
from histolab.slide import Slide

# Load slide
slide = Slide("slide.svs", processed_path="output/")

# Inspect properties
print(f"Dimensions: {slide.dimensions}")
print(f"Levels: {slide.levels}")
print(f"Magnification: {slide.properties.get('openslide.objective-power', 'N/A')}")

# Save thumbnail for review
slide.save_thumbnail()

Multi-Slide Processing

python
import os
from pathlib import Path

slide_dir = Path("slides/")
output_dir = Path("processed/")

for slide_path in slide_dir.glob("*.svs"):
    slide = Slide(slide_path, processed_path=output_dir / slide_path.stem)
    # Process each slide
    print(f"Processing: {slide.name}")