WSI(Whole slide image)-SDK on Linux 顾名思义,先挖个坑以后再填。
Content
先做一个简单的科普, 这一部分太长只写中文。 You could read introduction by Google Translate.
WSI常作为医疗病理切片图像的保存载体,通常大小在几百MB到十几GB不等。WSI保存的是一个不同尺度下的图像序列,可以理解为用不同放大倍数的显微镜扫描了同时刻下的同一目标,更加直观的可根据下图所示的金字塔结构来理解。
由于设备厂商不同,WSI存在多种格式,常见的SVS和TIF为 Aperio的格式,另外本项目还涉及一种KFB格式是由江丰生物的扫描设备生成的私有格式。本项目处理的主要就是svs和kfb格式的数据。
在进行读取的过程中,主要用到的是Openslide库,我把Openslide的python库都封装在一起,为了较为规范的读取数据,wsi图像被分为header和image两个部分。header中包含wsi的层次结构、尺度以及标签等信息,image为最大分辨率图像,也就是level0图像。一般level0的图像会非常大,尺度常在10000*10000像素以上,长宽超过65000像素的图像,就无法用OpenCV导出为jpg格式了,同理Pillow也是没有办法处理的,而png与tiff格式则没有这一限制。
为了直观的查看图像,可以通过特定的查看器如Image Scope, kfb格式可以通过KViewer打开。
Please see the requirements.txt
You can read svs/tiff file by below codes:
from wsi import WSI
wsifile = WSI('your file path')
image = wsifile.read()
Then you get image as np.ndarry
format, you can save it by cv2.imwrite
if image scale under 65000 pixels.
Codes as below:
import kfb
KFB = kfb.kfb('your file path')
image = KFB.read()
header = KFB.header()
There are some relate information contained by header
, formated as a python dictionary.
Notice: If you use "Mask label method" to extract image, please remember your mask's axises are reversed for wsi image.
最近做了一个基于深度学习的癌细胞检测模型,不过苦于门外汉出身,且没有数据标签,所以一直在忙数据清洗和打标签的工作(老大说的是最好不要做人工标注,用颜色来区分,但是光凭HE染色结果怎么可能分得出来)。模型用的是预训练的SqueezeNet,反而没有花费我太多的时间,短短几天我也从小白变成了一个能看懂胃癌切片的专业人士了(加班时长决定成败与否)。经过多次测试,发现数据标注越好,模型拟合也越顺利。这个项目我打算周末整合一下再放出来,不过出于商业原因数据不会公开的,也敬请原谅。
这部分的代码已经完成了,详情请见tumor-annotation,有什么问题的话欢迎添加issue.