如何在WSI幻灯片的特定放大倍数下创建特定大小的面片?

2024-05-12 21:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从WSI幻灯片(Available Here)以特定的放大率创建面片。我正在Python中使用OpenSlide。我可以使用以下代码将所需的放大率转换为特定级别的幻灯片:

mag = 20 #required magnification
slide = openslide.open_slide(slide_path)
base_mag = 10.0 / float(slide.properties['openslide.mpp-x'])
level = slide.get_best_level_for_downsample(base_mag / mag)

因此,问题归结为仅仅在特定的幻灯片级别上寻找补丁

首先,我使用Otsu进行组织分割,代码如下:

slide = openslide.open_slide(slide_path)
thumbnail = slide.get_thumbnail((slide.dimensions[0] / 256, slide.dimensions[1] / 256))

thumbnail_grey = np.array(thumbnail.convert('L')) # convert to grayscale
thresh = threshold_otsu(thumbnail_grey)
binary = thumbnail_grey > thresh

二进制是np.array,0:组织,1:非组织

此外,我还有一张掩模图像(WSI幻灯片),它告诉我肿瘤的部位

为了生成补丁,我在Python中遇到了对带有OpenSlide的DeepZoom的支持。根据OpenSlide文档(Available Here),我可以使用DeepZoom生成如下瓷砖:

tiles = DeepZoomGenerator(slide, tile_size=256, overlap=0, limit_bounds=False)

我意识到两件事:-

  • slide.level_count在幻灯片中打印10个级别,即0-9个级别,其中0是最高分辨率
  • tiles.level_count在瓷砖中打印19个,即0-18级,其中18是最高分辨率

为了获得特定级别的磁贴,我可以使用get_tile(level, address),它返回一个RGB图像,并将深度缩放级别和该级别内磁贴的地址(列、行)作为(列、行)元组

现在我对一些事情感到困惑:

  1. 如何将幻灯片级别转换为深度缩放级别
  2. 如何在这个特定的深度缩放级别上获取不同磁贴的地址?我尝试使用随机地址,但它给出的异常为“无效地址”
  3. 如何将这两种东西结合在一起,这样我就只能从我的组织区域生成瓷砖,然后将这些瓷砖分割成肿瘤和非肿瘤

Tags: get地址级别levelgreyavailable瓷砖幻灯片