openslide读取全尺寸病理图像方法
全扫描(whole slide image)图像非常的大,处理起来比较麻烦,openslide提供了一个很好的接口,具体参考openslide官网http://openslide.org/api/python/
- 安装openslide-python,过程参考openslide python的安装及遇到的问题(Win10)
import openslide
- opensilde.OpenSlide(filename)——读取图像
slide = openslide.OpenSlide('path/to/img/1.tif')
或者
img_path = 'path/to/img/1.tif'
slide1 = openslide.OpenSlide(img_path)
- 图像的尺寸
print(slide.level_dimensions[0])
level_count是幻灯片中的级别数。级别从0(最高分辨率)到 level_count - 1(最低分辨率)编号。dimensions[0] 就表示在0级别下,也就是最高分辨率的情况下slide的宽和高(元组)
downsamples代表的将原始WSI图像进行缩放的倍数,与level_dimentions是相对应的:
# 原始图像经各个level水平缩放后的长和宽
In [10]: slide.level_dimensions
Out[10]:
((97792, 221184),
(48896, 110592),
(24448, 55296),
(12224, 27648),
(6112, 13824),
(3056, 6912),
(1528, 3456),
(764, 1728),
(382, 864),
(191, 432))
# downsamples,下采样因子,将原始WSI图像进行缩放的倍数,与level_dimentions是相对应的
In [12]: slide.level_downsamples
Out[12]: (1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0)
# level_dimentions图像的长宽乘以对应的level_downsamples的缩放倍数,可以得到原始图像大小
In [16]: np.array(slide.level_dimensions[-1])*slide.level_downsamples[-1]
Out[16]: array([ 97792., 221184.])
get_best_level_for_downsample(downsample) :对给定的下采样因子返回一个下采样级别,参数downsamples必须是浮点数
slide_downsamples = slide.get_best_level_for_downsample(5.0)
print slide_downsamples
上述代码得到 2
- patch = numpy.array(slide.read_region(起始点坐标, 选取的图像等级, 选取的图像等级下的宽高)),
read_region(location, level, size) 返回一个RGBA图像,包含指定区域的内容。
tile = numpy.array(slide.read_region((0,0),6,slide.level_dimensions[6]))
- get_thumbnail(size) 返回一个缩略图的RGB图像,size为(width,height)元组
slide_thumbnail = slide.get_thumbnail(slide.level_dimensions[6])