Python,Openslide 自动切 .SVS 格式(WSI)病理图像


随着深度学习在医疗界的发展,病理图像也越来越来重要。但是病理图像大多数在10万×10万分辨率,用平常的图像处理库没有办法读取。开源的 openslide 库提供清洁便利的读取方法。

首先安装 openslide,如果是 ubuntu 用户,直接 

sudo apt install python-openslide

然后,导入库

import openslide

然后导入 DeepZoomGennerator,主要是多层金字塔形式封装

from openslide.deepzoom import DeepZoomGenerator

打开所需要读入的文件,给出文件名,

slide = openslide.open_slide('02.svs')

类别调用

highth = 2000
data_gen = DeepZoomGenerator(slide, tile_size=highth, overlap=0, limit_bounds=False)

  • tile_size 可以设成自己想切的图像大小。
  • limit_bounds 表示的是大图整个边缘可能达不到自己设的长和宽。False,则丢弃边缘图。True,保存
  • overlap 表示的是否边缘 overlap,引入其他信息

输出总共切图个数和一共有多少个金字塔,

print(data_gen.tile_count)
print(data_gen.level_count)
1036
17

  • num_w,图像切片宽度个数
  • num_h, 图像切片长度个数
  • data_gen.get_tite(level, (row, col)),level 范围在 data_gen.level_count,最大的为金字塔底层,最小为 0。row,范围是(0,num_w)。col,范围是(0,num_h)。还有其他的 API 切图,可以看官方文档。

也可以自己实现,不调用 API。

num_w = int(np.floor(w/width))+1
num_h = int(np.floor(h/highth))+1
for i in range(num_w):
    for j in range(num_h):
        img = np.array(data_gen.get_tile(16, (i, j))) #切图
        io.imsave(join(result_path, "02"+str(i)+'_'+str(j)+".png"), img) #保存图像


原文链接:https://blog.csdn.net/Formlsl/article/details/80681488