提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、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