WSI图像的分割切图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、openslide_utils和tissue_utils

根据自己需要写一个openslide和关于简单组织提取的的依赖库,也可以直接用openslide官方的库。

二、使用步骤

1.引入库

代码如下(示例):

import glob
import os
import sys
import imageio
sys.path.append('../')
import openslide
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from utils.openslide_utils import Slide
from utils.tissue_utils import get_tissue

2.读入数据

代码如下(示例):

svs_dir = 'input_path'
svs_files = glob.glob(os.path.join(svs_dir, "*.svs/*。tif"))

3.粗略提取含有组织的区域

代码如下(示例):

slide = Slide(file)
contour_area_threshold = 12000 / (
slide.get_level_downsample(process_level) / slide.get_level_downsample(2)) ** 2
svs_im = np.array(slide.get_thumb(2))
#通过get_tissue得到组织区域的粗糙轮廓mask
svs_mask,_ = get_tissue(svs_im, contour_area_threshold)

4.切图

代码如下(示例):

w, h = slide.get_level_dimension(0)
    h_count = round(h // input_size)
    w_count = round(w // input_size)
    m=0
    s=1
    for i in range(w_count):
        for j in range(h_count):
            x = round(j * input_size)
            y = round(i * input_size)
            x_16 = round(j * input_size / downsample)
            y_16 = round(i * input_size / downsample)
            if np.sum(svs_mask[x_16 : x_16 + 32, y_16 : y_16 + 32]) == 1024:
                img = slide.read_region([y,x], 0, [512, 512])
          		imageio.imwrite("output_path" ,img)
                # plt.imshow(img)
                # plt.show()
                print('已保存{0}幅图像!'.format(s))
                s=s+1
            else:
                continue

三、完整代码

代码如下(示例):

import glob
import os
import sys
import imageio
sys.path.append('../')
import openslide
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from utils.openslide_utils import Slide
from utils.tissue_utils import get_tissue

svs_dir = 'input_path'

svs_files = glob.glob(os.path.join(svs_dir, "*.svs"))
process_level = 2
input_size = 512
for i in range(len(svs_files)):
    file = svs_files[i]
    seg_level = 2
    slide = Slide(file)
    contour_area_threshold = 12000 / (
            slide.get_level_downsample(process_level) / slide.get_level_downsample(2)) ** 2
    svs_im = np.array(slide.get_thumb(2))
    #通过get_tissue得到组织区域的粗糙轮廓mask
    svs_mask,_ = get_tissue(svs_im, contour_area_threshold)
    # plt.imshow(svs_mask)
    # plt.show()
    downsample = round(slide.get_level_downsample(process_level))


    w, h = slide.get_level_dimension(0)
    h_count = round(h // input_size)
    w_count = round(w // input_size)
    s=1
    for i in range(w_count):
        for j in range(h_count):
            x = round(j * input_size)
            y = round(i * input_size)
            x_16 = round(j * input_size / downsample)
            y_16 = round(i * input_size / downsample)
            if np.sum(svs_mask[x_16 : x_16 + 32, y_16 : y_16 + 32]) == 1024:
                img = slide.read_region([y,x], 0, [512, 512])
                imageio.imwrite("output_path" ,img)
                # plt.imshow(img)
                # plt.show()
                print('已保存{0}幅图像!'.format(s))
                s=s+1
            else:
                continue
 

如果大家有什么疑问或者对于病理组织图片处理有好的方法大家可以交流一下,谢谢

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值