医学图像最显著的一个特征就是“大”,如何处理这种“大”,目前常用的一种方法就是切割,将一个大的WSI切割成多个小tile,然后分别对多个tile进行处理,“化大为小”。

WSI 经常用到的一个格式是.svs 。python 中常用来处理 .svs文件的一个包是openslide。对于openslide 中常用到的一些函数方法,许多博主都给出了简单的例子,下面是一些我认为还不错的文章链接,以供参考:https://blog.csdn.net/formlsl/article/details/80681488

https://blog.csdn.net/hjxu2016/article/details/70211198

openslide官网 :https://openslide.org/api/python/

但是,这些博客以及官网上对某些常用的比较重要的方法的使用以及输出结果的含义没有进行介绍,所以实际我在参考这些博客进行学习的时候,也花费了不少的时间,走了不少弯路。这里就对这些函数的使用进行具体介绍,方便后续使用。


1. 读取文件

img_path = 'D:/Server download/test_slide.svs'
result_path = 'D:/result'
slide = openslide.open_slide(img_path)

2. 图像原始大小(获得图像原始大小有多种方法,这只是其中一种)

[w,h] = slide.level_dimensions[0]

3.  切块方法

各参数及其含义,参考官方说明:

class openslide.deepzoom.DeepZoomGenerator(osr, tile_size=a, overlap=1, limit_bounds=False)

  • osr – the slide object
  • tile_size (int) – the width and height of a single tile. For best viewer performance, tile_size + 2 * overlap should be a power of two.
  • overlap (int) – the number of extra pixels to add to each interior edge of a tile
  • limit_bounds (bool) – True to render only the non-empty slide region
data_gen = DeepZoomGenerator(slide, tile_size=50, overlap=0, limit_bounds=False)

(实际上,只需要上方这一行代码,就实现了切割操作,将原始WSI根据不同分辨率分成多层,并在不同分辨率下切割成多个块)

4. 层数(不同分辨率数)(不同图像会生成不同层数,这个具体怎么定义的我也没有具体研究,还望大家不吝赐教)

print('生成的层数:',data_gen.level_count)

结果:

生成的层数: 19

5. 切割的块数

print('切分成的块数:',data_gen.tile_count)

结果:切分成的块数: 2251661

6. 每层尺寸大小

print('每层尺寸大小:',data_gen.level_dimensions)

返回结果:每层尺寸大小: ((1, 1), (2, 1), (3, 1), (5, 1), (9, 2), (17, 4), (34, 8), (67, 16), (133, 31), (265, 61), (529, 122), (1057, 244), (2114, 488), (4227, 975), (8454, 1950), (16907, 3899), (33814, 7797), (67627, 15594), (135253, 31188))

7. 切分后每层的块数(返回参数参照官方文档)

print('切分的每层的块数:',data_gen.level_tiles)

返回结果:切分的每层的块数: ((1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 1), (3, 1), (6, 2), (11, 3), (22, 5), (43, 10), (85, 20), (170, 39), (339, 78), (677, 156), (1353, 312), (2706, 624))

解释:我刚开始就是不能理解这种返回的参数是什么含义,其实很简单,我们要综合 3、6、7这3条语句来看:

对data_gen(切割后的变量)而言,它的每层分辨率是随着层数增加而增加的(参考6)(与第2,slide的顺序刚好相反),我们定义的窗口(名称可能不太严谨,参考2)大小为50*50。以第0层为例,它的尺寸大小为(1,1),小于窗口大小,所以在这一层,切割完只有一块(1,1)(参考7)。同理,对第7层,它的尺寸大小为(67,16),宽大于窗口大小,所以会进行切割,该层的切割结果为(2,1)。

对第7层进行切割的输出结果如下:

第1张切割大小为 50*16

第2张切割大小为(67-50)*16

以上就是个人对图像切割的一些简单理解,如果错误,还请各位不吝赐教!

openslide初印象———— 常用函数介绍相关推荐

  1. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  2. php spl函数,PHP SPL标准库中的常用函数介绍

    这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions().spl_autoload_register().spl_autoload()三 ...

  3. R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal、fa、fa.parallel、factor.plot、fa.diagram、scree

    R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal.fa.fa.parallel.factor.plot.fa.diagram.scree 目录

  4. oracle常用函数number,Oracle 常用函数介绍

    Oracle常用函数介绍,包括日期函数.类型转换函数 常用日期函数 1.add_months()函数可以得到指定日期之前或之后n个月的日期 date_value:=add_months(date_va ...

  5. Pandas入门之常用函数介绍

    一.Pandas简介 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. pan ...

  6. (转)postgis常用函数介绍(一)

    http://blog.csdn.net/gisshixisheng/article/details/47701237 概述: 在进行地理信息系统开发的过程中,常用的空间数据库有esri的sde,po ...

  7. mysql ceil,MySQL常用函数介绍

    前言: MySQL数据库中提供了很丰富的函数,比如我们常用的聚合函数,日期及字符串处理函数等.SELECT语句及其条件表达式都可以使用这些函数,函数可以帮助用户更加方便的处理表中的数据,使MySQL数 ...

  8. (转)postgis常用函数介绍(二)

    http://blog.csdn.net/gisshixisheng/article/details/47903151 概述: 书接上文,本文继续讲解Postgres中常用的空间函数的使用. 常用函数 ...

  9. hive 窗口函数--常用函数介绍

    文章目录 一.窗口函数概念 二.语法及常用函数 2.1语法 2.2窗口函数的特征 2.3窗口函数的分类 2.3.1排序 2.3.2聚合 2.3.3分析 2.3.4窗口定义 一.窗口函数概念 窗口函数是 ...

最新文章

  1. 钉钉接入access_无需开发,IT事件接入钉钉的方法详解
  2. 【Android】Anroid5.0+新控件---酷炫标题栏的简单学习
  3. html=r.text,在R中使用text()
  4. PHP实现文件安全下载
  5. TCP/IP详解卷1中文版勘误表前言
  6. 招几个兄弟和我一起做项目
  7. (王道408考研数据结构)第五章树-第三节3:线索二叉树
  8. mysql导入库指令_mysql数据库指令导入导出
  9. Webpack:代码分割
  10. 【UVALive】3695 Distant Galaxy(......)
  11. 人脸识别的Python库
  12. 在输入文本框中获取值
  13. java程序给输出汉字_java面试题目编写一个java程序,实现拼音转成对应汉字功能。...
  14. apusic6.0需要新项目需要改动文件
  15. 计算机组成原理完整学习笔记(八):控制器设计
  16. 截止今年六月底的s9t9
  17. 谷歌文档_如何比较Google文档中的文档
  18. 【人工智能】2017年中国人工智能技术——智能语音应用报告
  19. php登陆网页版微信代码,几行php代码实现微信自动注册登陆 (微信PC扫码受权登陆注册)...
  20. QGIS基础教程 (入门级)——下载安装、新建工程、加载数据

热门文章

  1. java 输入字符_java中如何输入一个字符
  2. 『叶问』#39,都有哪些情况可能导致MGR服务无法启动
  3. hibernate级联保存报空指针异常
  4. python程序员面试宝典 陈屹_Python 面试宝典
  5. Js之offset属性与style属性的区别
  6. 华为P30发布争议不断,红米总裁发文嘲讽,是实话还是狗急跳墙?
  7. 千万别做老板最不能容忍的三种人[z]
  8. BazarBackdoor 恶意软件经由CSV文件感染 - 该如何预防?
  9. java开发走技术还是管理路线_java程序员的发展路线是怎样的
  10. npm安装Node-red dashboard 报错 与npm卸载模块