【WSI/QuPath】如何使用QuPath导出切片(Patch)

QuPath是病理领域常用的阅片和标注软件,其具有较好的跨平台性,由JavaFX编写。

很多初入病理领域的人可能会对病理切片如何将高分辨率的slide转换为计算机显存能够容纳的单张patch感到困惑。本教程通过演示一个简单的QuPath支持的Groovy脚本,展示如何将高分辨率全视野切片(WSI,whole slide images)导出为不同分辨倍率下的patch(或称Tile),同时单张slide的导出平均耗时在15s以内。

引言:为什么本教程使用Groovy而非Python

  1. 简单性:对大部分初学者和病理医生而言,配置Python环境的过程往往是艰难的,网络上也存在很多功能全面的Python导出patch的代码(如DeepPath),但此类代码往往上手难度较大,同时需要安装特定的兼容库
  2. 高效性:大部分的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中使用脚本

  1. 首先,确保在QuPath中创建project,并导入你的WSI
  2. 顶部菜单栏依次选择:Automate > Show script editor
    请添加图片描述
  3. 在代码编辑区粘贴上述代码,并保存
  4. 可以选择蓝框内的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)之间不存在重叠

如果有问题,欢迎联系我。
欢迎点赞和收藏,转载请注明出处,谢谢!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐