随着深度学习在医疗界的发展,病理图像也越来越来重要。但是病理图像大多数在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) #保存图像