用途
Histolab 是一个用于处理数字病理全切片图像(WSI)的 Python 库。它自动化组织检测、从 gigapixel 级图像中提取信息量较高的瓦片(tile),并为深度学习流程准备数据集。该库能够处理多种 WSI 格式,实现组织分割,并提供灵活的瓦片提取策略。
安装
uv pip install histolab
主要能力
切片管理
加载、检查并处理多种格式的全切片图像,包括 SVS、TIFF、NDPI 等。常见操作包括:加载 WSI 文件;访问切片元数据(尺寸、放大倍率、属性);生成缩略图用于可视化;处理金字塔图像结构;在指定坐标提取区域。关键类为 Slide。
组织检测与掩膜
自动识别组织区域并过滤背景与伪影。常见操作包括:创建二值组织掩膜;检测最大组织区域;排除背景与伪影;自定义组织分割;移除标记(pen)注释。关键类为 TissueMask、BiggestTissueBoxMask、BinaryMask。
TissueMask:使用自动化滤波器分割所有组织区域BiggestTissueBoxMask:返回最大组织区域的边界框(默认)BinaryMask:自定义掩膜实现的基类
选择建议:TissueMask 适用于多个组织切片、需全面分析;BiggestTissueBoxMask 适用于单一主组织切片、需排除伪影(默认);自定义 BinaryMask 适用于特定 ROI、排除注释或自定义分割。
瓦片提取
使用不同策略从大型 WSI 中提取较小区域,提供三种提取器:
RandomTiler:提取固定数量的随机位置瓦片。适用于采样多样区域、探索性分析、训练数据。关键参数为 n_tiles、seed(保证可复现)。GridTiler:按网格模式系统性地在组织上提取瓦片。适用于完整覆盖、空间分析、重建。关键参数为 pixel_overlap(滑动窗口)。ScoreTiler:基于评分函数提取排名靠前的瓦片。适用于最具信息量区域、质量驱动选择。关键参数为 scorer(NucleiScorer、CellularityScorer、自定义)。
通用参数包括:tile_size(瓦片尺寸,如 (512, 512))、level(提取所用的金字塔层级,0 表示最高分辨率)、check_tissue(按组织内容过滤瓦片)、tissue_percent(最小组织覆盖率,默认 80%)、extraction_mask(定义提取区域的掩膜)。
建议在提取前先预览瓦片位置(使用 locate_tiles())。
滤波器与预处理
应用图像处理滤波器用于组织检测、质量控制和预处理,分为三类:
- 图像滤波器:颜色空间转换、阈值化、对比度增强。如 RgbToGrayscale、RgbToHsv、RgbToHed、OtsuThreshold、AdaptiveThreshold、StretchContrast、HistogramEqualization
- 形态学滤波器:对二值图像的结构性操作。如 BinaryDilation、BinaryErosion、BinaryOpening、BinaryClosing、RemoveSmallObjects、RemoveSmallHoles
- 组合:将多个滤波器串联,如 Compose 创建滤波器管线
可视化
可视化切片、掩膜、瓦片位置与提取质量,包括:显示切片缩略图、可视化组织掩膜、预览瓦片位置、评估瓦片质量、生成报告与图表。可结合 matplotlib 在 Jupyter notebook 中交互式可视化,并导出高分辨率图表与 PDF 报告。
使用方式
基本工作流程示例:
from histolab.slide import Slide
from histolab.tiler import RandomTiler
# 加载切片
slide = Slide("slide.svs", processed_path="output/")
# 配置提取器
tiler = RandomTiler(
tile_size=(512, 512),
n_tiles=100,
level=0,
seed=42
)
# 预览瓦片位置
tiler.locate_tiles(slide, n_tiles=20)
# 提取瓦片
tiler.extract(slide)
三种策略的使用示例:
from histolab.tiler import RandomTiler, GridTiler, ScoreTiler
from histolab.scorer import NucleiScorer
# 随机采样(快速、多样)
random_tiler = RandomTiler(
tile_size=(512, 512),
n_tiles=100,
level=0,
seed=42,
check_tissue=True,
tissue_percent=80.0
)
random_tiler.extract(slide)
# 网格覆盖(全面)
grid_tiler = GridTiler(
tile_size=(512, 512),
level=0,
pixel_overlap=0,
check_tissue=True
)
grid_tiler.extract(slide)
# 基于评分的选择(最具信息量)
score_tiler = ScoreTiler(
tile_size=(512, 512),
n_tiles=50,
scorer=NucleiScorer(),
level=0
)
score_tiler.extract(slide, report_path="tiles_report.csv")
自定义组织检测与滤波管线示例:
from histolab.filters.compositions import Compose
from histolab.filters.image_filters import RgbToGrayscale, OtsuThreshold
from histolab.filters.morphological_filters import (
BinaryDilation, RemoveSmallHoles, RemoveSmallObjects
)
# 标准组织检测管线
tissue_detection = Compose([
RgbToGrayscale(),
OtsuThreshold(),
BinaryDilation(disk_size=5),
RemoveSmallHoles(area_threshold=1000),
RemoveSmallObjects(area_threshold=500)
])
from histolab.masks import TissueMask
custom_mask = TissueMask(filters=tissue_detection)
适用场景
- 训练深度学习模型:使用 RandomTiler 跨多个切片提取均衡数据集;使用 ScoreTiler 配合 NucleiScorer 聚焦细胞密集区域;以一致分辨率(level 0 或 level 1)提取;生成 CSV 报告以追踪瓦片元数据。
- 全切片分析:使用 GridTiler 实现完整组织覆盖;在多个金字塔层级提取以进行分层分析;通过网格位置维护空间关系;使用 pixel_overlap 实现滑动窗口方法。
- 组织特征描述:使用 RandomTiler 采样多样区域;用掩膜量化组织覆盖;使用 HED 分解提取染色特定信息;跨切片比较组织模式。
- 质量评估:使用 ScoreTiler 识别最佳聚焦区域;使用自定义掩膜与滤波器检测伪影;评估切片集合的染色质量;标记问题切片供人工复核。
- 数据集整理:使用 ScoreTiler 优先选择信息量高的瓦片;按组织百分比过滤瓦片;生成含瓦片评分与元数据的报告;跨切片与组织类型创建分层数据集。
限制
资料中未明确提供该库的收费、价格、平台支持范围或性能上限等信息。常见问题(如“未提取到瓦片”“提取到大量背景瓦片”)在资料中列有排查方向,但部分内容在资料末尾被截断,未能完整呈现。