histolab by davila7/claude-code-templates
npx skills add https://github.com/davila7/claude-code-templates --skill histolabHistolab 是一个用于处理数字病理学中全玻片图像(WSI)的 Python 库。它自动化组织检测,从千兆像素图像中提取信息丰富的图块,并为深度学习流程准备数据集。该库支持多种 WSI 格式,实现了复杂的组织分割,并提供了灵活的图块提取策略。
uv pip install histolab
从全玻片图像中提取图块的基本工作流程:
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)
加载、检查和处理各种格式的全玻片图像。
常见操作:
关键类: Slide
参考: 包含以下内容的全面文档:
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
references/slide_management.md示例工作流程:
from histolab.slide import Slide
from histolab.data import prostate_tissue
# 加载样本数据
prostate_svs, prostate_path = prostate_tissue()
# 初始化玻片
slide = Slide(prostate_path, processed_path="output/")
# 检查属性
print(f"Dimensions: {slide.dimensions}")
print(f"Levels: {slide.levels}")
print(f"Magnification: {slide.properties.get('openslide.objective-power')}")
# 保存缩略图
slide.save_thumbnail()
自动识别组织区域并过滤背景/伪影。
常见操作:
关键类: TissueMask, BiggestTissueBoxMask, BinaryMask
参考: references/tissue_masks.md 包含以下内容的全面文档:
locate_mask() 可视化掩码示例工作流程:
from histolab.masks import TissueMask, BiggestTissueBoxMask
# 为所有组织区域创建组织掩码
tissue_mask = TissueMask()
# 在玻片上可视化掩码
slide.locate_mask(tissue_mask)
# 获取掩码数组
mask_array = tissue_mask(slide)
# 使用最大组织区域(大多数提取器的默认设置)
biggest_mask = BiggestTissueBoxMask()
何时使用每种掩码:
TissueMask:多个组织切片,全面分析BiggestTissueBoxMask:单个主要组织切片,排除伪影(默认)BinaryMask:特定 ROI,排除标注,自定义分割使用不同策略从大型 WSI 中提取较小区域。
三种提取策略:
RandomTiler: 提取固定数量的随机定位图块
n_tiles,用于可重复性的 seedGridTiler: 以网格模式系统性地提取组织上的图块
pixel_overlapScoreTiler: 基于评分函数提取排名最高的图块
scorer(NucleiScorer, CellularityScorer, 自定义)通用参数:
tile_size:图块尺寸(例如,(512, 512))level:用于提取的金字塔层级(0 = 最高分辨率)check_tissue:按组织内容过滤图块tissue_percent:最小组织覆盖率(默认 80%)extraction_mask:定义提取区域的掩码参考: references/tile_extraction.md 包含以下内容的全面文档:
locate_tiles() 预览图块示例工作流程:
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")
提取前始终预览:
# 在缩略图上预览图块位置
tiler.locate_tiles(slide, n_tiles=20)
应用图像处理过滤器进行组织检测、质量控制和预处理。
过滤器类别:
图像过滤器: 色彩空间转换、阈值处理、对比度增强
RgbToGrayscale, RgbToHsv, RgbToHedOtsuThreshold, AdaptiveThresholdStretchContrast, HistogramEqualization形态学过滤器: 对二值图像进行结构操作
BinaryDilation, BinaryErosionBinaryOpening, BinaryClosingRemoveSmallObjects, RemoveSmallHoles组合: 将多个过滤器链接在一起
Compose:创建过滤器管道参考: references/filters_preprocessing.md 包含以下内容的全面文档:
示例工作流程:
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)
# 对图块应用过滤器
from histolab.tile import Tile
filtered_tile = tile.apply_filters(tissue_detection)
可视化玻片、掩码、图块位置和提取质量。
常见的可视化任务:
参考: references/visualization.md 包含以下内容的全面文档:
locate_mask() 可视化掩码locate_tiles() 预览图块位置示例工作流程:
import matplotlib.pyplot as plt
from histolab.masks import TissueMask
# 显示玻片缩略图
plt.figure(figsize=(10, 10))
plt.imshow(slide.thumbnail)
plt.title(f"Slide: {slide.name}")
plt.axis('off')
plt.show()
# 可视化组织掩码
tissue_mask = TissueMask()
slide.locate_mask(tissue_mask)
# 预览图块位置
tiler = RandomTiler(tile_size=(512, 512), n_tiles=50)
tiler.locate_tiles(slide, n_tiles=20)
# 以网格形式显示提取的图块
from pathlib import Path
from PIL import Image
tile_paths = list(Path("output/tiles/").glob("*.png"))[:16]
fig, axes = plt.subplots(4, 4, figsize=(12, 12))
axes = axes.ravel()
for idx, tile_path in enumerate(tile_paths):
tile_img = Image.open(tile_path)
axes[idx].imshow(tile_img)
axes[idx].set_title(tile_path.stem, fontsize=8)
axes[idx].axis('off')
plt.tight_layout()
plt.show()
快速采样多样化组织区域以进行初步分析。
from histolab.slide import Slide
from histolab.tiler import RandomTiler
import logging
# 启用日志记录以跟踪进度
logging.basicConfig(level=logging.INFO)
# 加载玻片
slide = Slide("slide.svs", processed_path="output/random_tiles/")
# 检查玻片
print(f"Dimensions: {slide.dimensions}")
print(f"Levels: {slide.levels}")
slide.save_thumbnail()
# 配置随机图块提取器
random_tiler = RandomTiler(
tile_size=(512, 512),
n_tiles=100,
level=0,
seed=42,
check_tissue=True,
tissue_percent=80.0
)
# 预览位置
random_tiler.locate_tiles(slide, n_tiles=20)
# 提取图块
random_tiler.extract(slide)
完全覆盖组织以进行全玻片分析。
from histolab.slide import Slide
from histolab.tiler import GridTiler
from histolab.masks import TissueMask
# 加载玻片
slide = Slide("slide.svs", processed_path="output/grid_tiles/")
# 对所有组织切片使用 TissueMask
tissue_mask = TissueMask()
slide.locate_mask(tissue_mask)
# 配置网格图块提取器
grid_tiler = GridTiler(
tile_size=(512, 512),
level=1, # 使用层级 1 以加快提取速度
pixel_overlap=0,
check_tissue=True,
tissue_percent=70.0
)
# 预览网格
grid_tiler.locate_tiles(slide)
# 提取所有图块
grid_tiler.extract(slide, extraction_mask=tissue_mask)
基于细胞核密度提取信息最丰富的图块。
from histolab.slide import Slide
from histolab.tiler import ScoreTiler
from histolab.scorer import NucleiScorer
import pandas as pd
import matplotlib.pyplot as plt
# 加载玻片
slide = Slide("slide.svs", processed_path="output/scored_tiles/")
# 配置评分图块提取器
score_tiler = ScoreTiler(
tile_size=(512, 512),
n_tiles=50,
level=0,
scorer=NucleiScorer(),
check_tissue=True
)
# 预览最高分图块
score_tiler.locate_tiles(slide, n_tiles=15)
# 提取并生成报告
score_tiler.extract(slide, report_path="tiles_report.csv")
# 分析评分
report_df = pd.read_csv("tiles_report.csv")
plt.hist(report_df['score'], bins=20, edgecolor='black')
plt.xlabel('Tile Score')
plt.ylabel('Frequency')
plt.title('Distribution of Tile Scores')
plt.show()
使用一致的参数处理整个玻片集合。
from pathlib import Path
from histolab.slide import Slide
from histolab.tiler import RandomTiler
import logging
logging.basicConfig(level=logging.INFO)
# 一次性配置图块提取器
tiler = RandomTiler(
tile_size=(512, 512),
n_tiles=50,
level=0,
seed=42,
check_tissue=True
)
# 处理所有玻片
slide_dir = Path("slides/")
output_base = Path("output/")
for slide_path in slide_dir.glob("*.svs"):
print(f"\nProcessing: {slide_path.name}")
# 创建玻片特定的输出目录
output_dir = output_base / slide_path.stem
output_dir.mkdir(parents=True, exist_ok=True)
# 加载并处理玻片
slide = Slide(slide_path, processed_path=output_dir)
# 保存缩略图以供审查
slide.save_thumbnail()
# 提取图块
tiler.extract(slide)
print(f"Completed: {slide_path.name}")
处理带有伪影、标注或不寻常染色的玻片。
from histolab.slide import Slide
from histolab.masks import TissueMask
from histolab.tiler import RandomTiler
from histolab.filters.compositions import Compose
from histolab.filters.image_filters import RgbToGrayscale, OtsuThreshold
from histolab.filters.morphological_filters import (
BinaryDilation, RemoveSmallObjects, RemoveSmallHoles
)
# 定义用于激进伪影移除的自定义过滤器管道
aggressive_filters = Compose([
RgbToGrayscale(),
OtsuThreshold(),
BinaryDilation(disk_size=10),
RemoveSmallHoles(area_threshold=5000),
RemoveSmallObjects(area_threshold=3000) # 移除较大的伪影
])
# 创建自定义掩码
custom_mask = TissueMask(filters=aggressive_filters)
# 加载玻片并可视化掩码
slide = Slide("slide.svs", processed_path="output/")
slide.locate_mask(custom_mask)
# 使用自定义掩码提取
tiler = RandomTiler(tile_size=(512, 512), n_tiles=100)
tiler.extract(slide, extraction_mask=custom_mask)
locate_mask() 预览掩码TissueMask,单个切片使用 BiggestTissueBoxMasklocate_tiles() 预览tissue_percent 阈值(通常为 70-90%)BiggestTissueBoxMask 而非 TissueMasktissue_percent 以减少无效图块尝试n_tilespixel_overlap=0pixel_overlap 实现滑动窗口方法tissue_percent 阈值check_tissue=Truetissue_percent 阈值n_tilestissue_percent此技能在 references/ 目录中包含详细的参考文档:
加载、检查和处理全玻片图像的综合指南:
关于组织检测和掩码的完整文档:
图块提取策略的详细说明:
完整的过滤器参考和预处理指南:
全面的可视化指南:
使用模式: 参考文件包含深入信息,以支持本主要技能文档中描述的工作流程。根据需要加载特定的参考文件以获取详细的实施指导、故障排除或高级功能。
每周安装
119
仓库
GitHub Stars
22.6K
首次出现
Jan 21, 2026
安全审计
安装于
claude-code104
opencode94
gemini-cli89
cursor88
antigravity83
codex78
Histolab is a Python library for processing whole slide images (WSI) in digital pathology. It automates tissue detection, extracts informative tiles from gigapixel images, and prepares datasets for deep learning pipelines. The library handles multiple WSI formats, implements sophisticated tissue segmentation, and provides flexible tile extraction strategies.
uv pip install histolab
Basic workflow for extracting tiles from a whole slide image:
from histolab.slide import Slide
from histolab.tiler import RandomTiler
# Load slide
slide = Slide("slide.svs", processed_path="output/")
# Configure tiler
tiler = RandomTiler(
tile_size=(512, 512),
n_tiles=100,
level=0,
seed=42
)
# Preview tile locations
tiler.locate_tiles(slide, n_tiles=20)
# Extract tiles
tiler.extract(slide)
Load, inspect, and work with whole slide images in various formats.
Common operations:
Key classes: Slide
Reference: references/slide_management.md contains comprehensive documentation on:
Example workflow:
from histolab.slide import Slide
from histolab.data import prostate_tissue
# Load sample data
prostate_svs, prostate_path = prostate_tissue()
# Initialize slide
slide = Slide(prostate_path, processed_path="output/")
# Inspect properties
print(f"Dimensions: {slide.dimensions}")
print(f"Levels: {slide.levels}")
print(f"Magnification: {slide.properties.get('openslide.objective-power')}")
# Save thumbnail
slide.save_thumbnail()
Automatically identify tissue regions and filter background/artifacts.
Common operations:
Key classes: TissueMask, BiggestTissueBoxMask, BinaryMask
Reference: references/tissue_masks.md contains comprehensive documentation on:
locate_mask()Example workflow:
from histolab.masks import TissueMask, BiggestTissueBoxMask
# Create tissue mask for all tissue regions
tissue_mask = TissueMask()
# Visualize mask on slide
slide.locate_mask(tissue_mask)
# Get mask array
mask_array = tissue_mask(slide)
# Use largest tissue region (default for most extractors)
biggest_mask = BiggestTissueBoxMask()
When to use each mask:
TissueMask: Multiple tissue sections, comprehensive analysisBiggestTissueBoxMask: Single main tissue section, exclude artifacts (default)BinaryMask: Specific ROI, exclude annotations, custom segmentationExtract smaller regions from large WSI using different strategies.
Three extraction strategies:
RandomTiler: Extract fixed number of randomly positioned tiles
n_tiles, seed for reproducibilityGridTiler: Systematically extract tiles across tissue in grid pattern
pixel_overlap for sliding windowsScoreTiler: Extract top-ranked tiles based on scoring functions
scorer (NucleiScorer, CellularityScorer, custom)Common parameters:
tile_size: Tile dimensions (e.g., (512, 512))level: Pyramid level for extraction (0 = highest resolution)check_tissue: Filter tiles by tissue contenttissue_percent: Minimum tissue coverage (default 80%)extraction_mask: Mask defining extraction regionReference: references/tile_extraction.md contains comprehensive documentation on:
locate_tiles()Example workflows:
from histolab.tiler import RandomTiler, GridTiler, ScoreTiler
from histolab.scorer import NucleiScorer
# Random sampling (fast, diverse)
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 coverage (comprehensive)
grid_tiler = GridTiler(
tile_size=(512, 512),
level=0,
pixel_overlap=0,
check_tissue=True
)
grid_tiler.extract(slide)
# Score-based selection (most informative)
score_tiler = ScoreTiler(
tile_size=(512, 512),
n_tiles=50,
scorer=NucleiScorer(),
level=0
)
score_tiler.extract(slide, report_path="tiles_report.csv")
Always preview before extracting:
# Preview tile locations on thumbnail
tiler.locate_tiles(slide, n_tiles=20)
Apply image processing filters for tissue detection, quality control, and preprocessing.
Filter categories:
Image Filters: Color space conversions, thresholding, contrast enhancement
RgbToGrayscale, RgbToHsv, RgbToHedOtsuThreshold, AdaptiveThresholdStretchContrast, HistogramEqualizationMorphological Filters: Structural operations on binary images
BinaryDilation, BinaryErosionBinaryOpening, BinaryClosingRemoveSmallObjects, RemoveSmallHolesComposition: Chain multiple filters together
Compose: Create filter pipelinesReference: references/filters_preprocessing.md contains comprehensive documentation on:
Example workflows:
from histolab.filters.compositions import Compose
from histolab.filters.image_filters import RgbToGrayscale, OtsuThreshold
from histolab.filters.morphological_filters import (
BinaryDilation, RemoveSmallHoles, RemoveSmallObjects
)
# Standard tissue detection pipeline
tissue_detection = Compose([
RgbToGrayscale(),
OtsuThreshold(),
BinaryDilation(disk_size=5),
RemoveSmallHoles(area_threshold=1000),
RemoveSmallObjects(area_threshold=500)
])
# Use with custom mask
from histolab.masks import TissueMask
custom_mask = TissueMask(filters=tissue_detection)
# Apply filters to tile
from histolab.tile import Tile
filtered_tile = tile.apply_filters(tissue_detection)
Visualize slides, masks, tile locations, and extraction quality.
Common visualization tasks:
Reference: references/visualization.md contains comprehensive documentation on:
locate_mask()locate_tiles()Example workflows:
import matplotlib.pyplot as plt
from histolab.masks import TissueMask
# Display slide thumbnail
plt.figure(figsize=(10, 10))
plt.imshow(slide.thumbnail)
plt.title(f"Slide: {slide.name}")
plt.axis('off')
plt.show()
# Visualize tissue mask
tissue_mask = TissueMask()
slide.locate_mask(tissue_mask)
# Preview tile locations
tiler = RandomTiler(tile_size=(512, 512), n_tiles=50)
tiler.locate_tiles(slide, n_tiles=20)
# Display extracted tiles in grid
from pathlib import Path
from PIL import Image
tile_paths = list(Path("output/tiles/").glob("*.png"))[:16]
fig, axes = plt.subplots(4, 4, figsize=(12, 12))
axes = axes.ravel()
for idx, tile_path in enumerate(tile_paths):
tile_img = Image.open(tile_path)
axes[idx].imshow(tile_img)
axes[idx].set_title(tile_path.stem, fontsize=8)
axes[idx].axis('off')
plt.tight_layout()
plt.show()
Quick sampling of diverse tissue regions for initial analysis.
from histolab.slide import Slide
from histolab.tiler import RandomTiler
import logging
# Enable logging for progress tracking
logging.basicConfig(level=logging.INFO)
# Load slide
slide = Slide("slide.svs", processed_path="output/random_tiles/")
# Inspect slide
print(f"Dimensions: {slide.dimensions}")
print(f"Levels: {slide.levels}")
slide.save_thumbnail()
# Configure random tiler
random_tiler = RandomTiler(
tile_size=(512, 512),
n_tiles=100,
level=0,
seed=42,
check_tissue=True,
tissue_percent=80.0
)
# Preview locations
random_tiler.locate_tiles(slide, n_tiles=20)
# Extract tiles
random_tiler.extract(slide)
Complete tissue coverage for whole-slide analysis.
from histolab.slide import Slide
from histolab.tiler import GridTiler
from histolab.masks import TissueMask
# Load slide
slide = Slide("slide.svs", processed_path="output/grid_tiles/")
# Use TissueMask for all tissue sections
tissue_mask = TissueMask()
slide.locate_mask(tissue_mask)
# Configure grid tiler
grid_tiler = GridTiler(
tile_size=(512, 512),
level=1, # Use level 1 for faster extraction
pixel_overlap=0,
check_tissue=True,
tissue_percent=70.0
)
# Preview grid
grid_tiler.locate_tiles(slide)
# Extract all tiles
grid_tiler.extract(slide, extraction_mask=tissue_mask)
Extract most informative tiles based on nuclei density.
from histolab.slide import Slide
from histolab.tiler import ScoreTiler
from histolab.scorer import NucleiScorer
import pandas as pd
import matplotlib.pyplot as plt
# Load slide
slide = Slide("slide.svs", processed_path="output/scored_tiles/")
# Configure score tiler
score_tiler = ScoreTiler(
tile_size=(512, 512),
n_tiles=50,
level=0,
scorer=NucleiScorer(),
check_tissue=True
)
# Preview top tiles
score_tiler.locate_tiles(slide, n_tiles=15)
# Extract with report
score_tiler.extract(slide, report_path="tiles_report.csv")
# Analyze scores
report_df = pd.read_csv("tiles_report.csv")
plt.hist(report_df['score'], bins=20, edgecolor='black')
plt.xlabel('Tile Score')
plt.ylabel('Frequency')
plt.title('Distribution of Tile Scores')
plt.show()
Process entire slide collection with consistent parameters.
from pathlib import Path
from histolab.slide import Slide
from histolab.tiler import RandomTiler
import logging
logging.basicConfig(level=logging.INFO)
# Configure tiler once
tiler = RandomTiler(
tile_size=(512, 512),
n_tiles=50,
level=0,
seed=42,
check_tissue=True
)
# Process all slides
slide_dir = Path("slides/")
output_base = Path("output/")
for slide_path in slide_dir.glob("*.svs"):
print(f"\nProcessing: {slide_path.name}")
# Create slide-specific output directory
output_dir = output_base / slide_path.stem
output_dir.mkdir(parents=True, exist_ok=True)
# Load and process slide
slide = Slide(slide_path, processed_path=output_dir)
# Save thumbnail for review
slide.save_thumbnail()
# Extract tiles
tiler.extract(slide)
print(f"Completed: {slide_path.name}")
Handle slides with artifacts, annotations, or unusual staining.
from histolab.slide import Slide
from histolab.masks import TissueMask
from histolab.tiler import RandomTiler
from histolab.filters.compositions import Compose
from histolab.filters.image_filters import RgbToGrayscale, OtsuThreshold
from histolab.filters.morphological_filters import (
BinaryDilation, RemoveSmallObjects, RemoveSmallHoles
)
# Define custom filter pipeline for aggressive artifact removal
aggressive_filters = Compose([
RgbToGrayscale(),
OtsuThreshold(),
BinaryDilation(disk_size=10),
RemoveSmallHoles(area_threshold=5000),
RemoveSmallObjects(area_threshold=3000) # Remove larger artifacts
])
# Create custom mask
custom_mask = TissueMask(filters=aggressive_filters)
# Load slide and visualize mask
slide = Slide("slide.svs", processed_path="output/")
slide.locate_mask(custom_mask)
# Extract with custom mask
tiler = RandomTiler(tile_size=(512, 512), n_tiles=100)
tiler.extract(slide, extraction_mask=custom_mask)
locate_mask() before extractionTissueMask for multiple sections, BiggestTissueBoxMask for single sectionslocate_tiles() before extractingtissue_percent threshold (70-90% typical)BiggestTissueBoxMask over TissueMask when appropriatetissue_percent to reduce invalid tile attemptsn_tiles for initial explorationpixel_overlap=0 for non-overlapping gridspixel_overlap for sliding window approachestissue_percent thresholdcheck_tissue=Truetissue_percent thresholdn_tiles for RandomTiler/ScoreTilertissue_percent per staining qualityThis skill includes detailed reference documentation in the references/ directory:
Comprehensive guide to loading, inspecting, and working with whole slide images:
Complete documentation on tissue detection and masking:
Detailed explanation of tile extraction strategies:
Complete filter reference and preprocessing guide:
Comprehensive visualization guide:
Usage pattern: Reference files contain in-depth information to support workflows described in this main skill document. Load specific reference files as needed for detailed implementation guidance, troubleshooting, or advanced features.
Weekly Installs
119
Repository
GitHub Stars
22.6K
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubFailSocketPassSnykPass
Installed on
claude-code104
opencode94
gemini-cli89
cursor88
antigravity83
codex78
Python图像处理技能:Pillow脚本生成,支持调整大小、格式转换、网页优化
827 周安装
Google Ads 账户深度分析与健康度审计工具 - 74项检查,自动生成优化报告
208 周安装
阿里云CDN OpenAPI自动化操作指南 - 域名管理、缓存刷新、HTTPS证书配置
129 周安装
SpriteKit 常见问题诊断指南:物理接触、帧率优化与内存泄漏排查
134 周安装
iOS游戏开发终极指南:SpriteKit、SceneKit、RealityKit架构、性能优化与故障排除
139 周安装
JSON数据处理教程:Python与JavaScript解析、验证与进阶操作指南
133 周安装
Hookify 规则编写指南:创建自定义代码监控与安全提示规则
142 周安装