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

【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左右
downsample4下采样,如果原始扫描倍数为20倍,下采样后将会是5倍
outputSize512输出单张patch分辨率
//.annotatedTilesOnly(true)默认注释注释表示将会导出全图,包括空白区域;取消注释将仅导出标注区域
//.annotatedCentroidTilesOnly(true)默认注释在上一行未标注的基础上,只会导出中心包含批注的(而不是只含部分批注的tile)
overLap0默认所有相邻patch(tile)之间不存在重叠

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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
1、什么是9Path 它是一个对png图片做处理的一个工具,能够为我们生成一个"*.9.png"的图片 2、什么是"*.9.png" "*.9.png"是Android os里所支持的一种特殊的图片格式,用它可以实现部分拉伸,这种图片是经过9Path进行特殊处理过的,如果不处理的话,直接用PNG图就会有失真,拉伸不正常的现象出现。 3、9Path在哪里呢? 在Android SDK路径下X:/android sdk/tools里你会找到一个【draw9Path.bat】,双击启动9Path,官方名:NinePath 导入一张png图片,然后进入9Path的操作界面 图一: 序列 ① :在拉伸区域周围用红色边框显示可能会对拉伸后的图片产生变形的区域,如果完全消除该内容则图片拉伸后是没有变形的,也就是说,不管如何缩放图片显示都是良 好的。 (实际试 发现NinePatch编辑器是根据图片的颜色值来区分是否为bad patch的,一边来说只要色差不是太大不用考虑这个设置。) 序列 ② :区域是导入的图片,以及可操作区域。 序列 ③ :这里 zoom:的长条bar 是对导入的图放大缩小操作,这里的放大缩小只是为了让使用者更方便操作,毕竟是对像素点操作比较费眼,下面的 patch scale 是序列 ④区域中的三种形态的拉伸后的一个预览操作,可以看到操作后的图片拉伸后的效果。 序列 ④: 区域这里从上到下,依次为:纵向拉伸的效果预览、横向拉伸的效果预览,以及整体拉伸的效果预览 序列 ⑤: 这里如果你勾选上,那么当你鼠标放在 ② 区域内的时候并且当前位置为不可操作区域就会出现lock的一张图,就是显示不可编辑区域 ; 序列 ⑥: 这里勾选上,那么在④ 区域中你就会看到当前操作的像素点在拉伸预览图中的相对位置和效果。 序列 ⑦: 在编辑区域显示图片拉伸的区域; 如何操作 按着鼠标左键是选取需要拉伸的像素点,按着shift+鼠标左键取消当前像素点 操作区域 大家看到导入的png图片默认周围多了一像素点,也就是这一圈一像素点就是咱们的可操作区域。因为下方和右方可操作区域是指定内容的显示区域,属于可选区域,可不予理会;但是要注意内容区域的标记不能有间断,也就是说标记要连续且仅有一处,否则.9.png图片在放入项目下会报错。 主要大家注意Left 和 top 操作区域; Top操作区域的一排像素点,表示横向拉伸的像素点; Left操作区的一排像素点,表示纵向拉伸的像素点; 图二 (图一)然后对比(图二),看到区别了吧!很明显,(图1)我们没有任何操作,默认整体拉伸,那么拉伸的效果很明显的失真了...而(图2)我们指定了拉伸的像素点所以只是中间的被拉伸,图片的花边我们保留不拉伸这样看起来就好太多啦 娃哈哈、 然后通过9Path就可以保存出来一张“*.9.png”图片,我们放在android 项目的res 下的 drawable 下就可以拉!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值