【WSI/QuPath】如何使用QuPath导出切片(Patch)
QuPath是病理领域常用的阅片和标注软件,其具有较好的跨平台性,由JavaFX编写。
很多初入病理领域的人可能会对病理切片如何将高分辨率的slide转换为计算机显存能够容纳的单张patch感到困惑。本教程通过演示一个简单的QuPath支持的Groovy脚本,展示如何将高分辨率全视野切片(WSI,whole slide images)导出为不同分辨倍率下的patch(或称Tile),同时单张slide的导出平均耗时在15s以内。
引言:为什么本教程使用Groovy而非Python
- 简单性:对大部分初学者和病理医生而言,配置Python环境的过程往往是艰难的,网络上也存在很多功能全面的Python导出patch的代码(如DeepPath),但此类代码往往上手难度较大,同时需要安装特定的兼容库
- 高效性:大部分的Python代码往往不兼容多线程、且未对高分辨率图像特别优化,在提取patch的过程中,其速度往往较慢;同时,Python本身的运行效率往往差于经过良好编译/封装的其他语言
1. 代码部分
将下方代码复制到script editor,详细教程见下一部分
extension = '.jpg' // 后缀名,png虽然是无损压缩,但是大小将会是jpg的十倍
def imageData = getCurrentImageData()
def name = GeneralTools.getNameWithoutExtension(imageData.getServer().getMetadata().getName())
def pathOutput = buildFilePath(PROJECT_BASE_DIR, '../tiles-10x', name)
mkdirs(pathOutput)
double downsample = 4 // 如果你的原始分辨率是40倍,那么下采样四倍,导出的patch将是10倍,请确认你的原始分辨率
int outputSize = 512 // 输出分辨率,也可以在输入CNN之前resample
int overLap = 0
new TileExporter(imageData)
.downsample(downsample)
.imageExtension(extension) // often .tif, .jpg, '.png' or '.ome.tif'
.tileSize(outputSize) // Define size of each tile, in pixels
//.annotatedTilesOnly(true) // 如果取消注释, 只会导出具有标注的patch
//.annotatedCentroidTilesOnly(true) // 如果是true,只会导出中心包含批注的(而不是只有一点点批注的tile)
.overlap(overLap)
.writeTiles(pathOutput)
// 重命名,方便后续python处理,运行脚本时不要中断,否则会出现命名错误
def dirOutput = new File(pathOutput)
for (def file in dirOutput.listFiles()) {
if (!file.isFile() || file.isHidden() || !file.getName().endsWith(extension))
continue
def newName = file.getName().replaceAll("=","-").replaceAll("\\[","").replaceAll("\\]","").replaceAll(",","_")
if (file.getName() == newName)
continue
def fileUpdated = new File(file.getParent(), newName)
println("Renaming ${file.getName()} ---> ${fileUpdated.getName()}")
file.renameTo(fileUpdated)
}
println('Done!')
2. 如何在QuPath中使用脚本
- 首先,确保在QuPath中创建project,并导入你的WSI
- 顶部菜单栏依次选择:
Automate > Show script editor
- 在代码编辑区粘贴上述代码,并保存
- 可以选择蓝框内的
Run
直接在当前slide上运行该脚本,也可以选择红色箭头指向的区域,选择Run for project
,对当前项目包含的slides批量运行
3. 编辑你自己的脚本
注意:在Groovy中的注释符号为//
,注释代表该行将不会被执行
参数 | 默认值 | 意义 |
---|---|---|
extension | .jpg | 导出图片的后缀名;选择.jpg将压缩方式选择为有损,更节省存储空间,大小为.png的1/5左右 |
downsample | 4 | 下采样,如果原始扫描倍数为20倍,下采样后将会是5倍 |
outputSize | 512 | 输出单张patch分辨率 |
//.annotatedTilesOnly(true) | 默认注释 | 注释表示将会导出全图,包括空白区域;取消注释将仅导出标注区域 |
//.annotatedCentroidTilesOnly(true) | 默认注释 | 在上一行未标注的基础上,只会导出中心包含批注的(而不是只含部分批注的tile) |
overLap | 0 | 默认所有相邻patch(tile)之间不存在重叠 |
如果有问题,欢迎联系我。
欢迎点赞和收藏,转载请注明出处,谢谢!