python 将SVS文件转换为TIFF图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 将SVS文件转换为TIFF图像相关的知识,希望对你有一定的参考价值。

# -*- coding: utf-8 -*-
__author__ = "Pingjun Chen"
__email__ =  "chenpingjun@gmx.com"

import os, sys, pdb
import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
from skimage import io
import openslide
import argparse


def save_svs_img(slide_filename, tile_size=8192):
	slide_file = openslide.OpenSlide(slide_filename)
	slide_width, slide_height = slide_file.dimensions

	# tile_arr = []
	slide_img = np.zeros((slide_height, slide_width, 3), np.uint8)	
	x_tile_num = int(np.floor((slide_width-1)/tile_size)) + 1
	y_tile_num = int(np.floor((slide_height-1)/tile_size)) + 1
	for iy in range(y_tile_num):	
		for ix in range(x_tile_num):
			start_x = ix * tile_size
			len_x = tile_size if (ix + 1) * tile_size < slide_width else (slide_width - start_x) 
			start_y = iy * tile_size
			len_y = tile_size if (iy + 1) * tile_size < slide_height else (slide_height - start_y)
			# tile_arr.append(((start_x, start_y), (len_x, len_y)))
			cur_tile = slide_file.read_region(location=(start_x, start_y), level=0, size=(len_x, len_y))
			slide_img[start_y:start_y+len_y, start_x:start_x+len_x, :] = np.array(cur_tile)[:,:,:3]

	slide_savename = os.path.splitext(slide_filename)[0] + '.tif'
	# misc.imsave(slide_savename, slide_img)
	io.imsave(slide_savename, slide_img)


def batch_convert_svs(slide_dir, tile_size=8192):
	svs_list = [svs_file for svs_file in os.listdir(slide_dir) if svs_file.endswith(".svs")]
	for ind, svs_file in enumerate(svs_list):
		print("Processing {}/{}: {}".format(ind+1, len(svs_list), svs_file))
		save_svs_img(svs_file, tile_size)


def set_args():
    parser = argparse.ArgumentParser(description="load svs")

    parser.add_argument("--filedir",        type=str, default="./")
    parser.add_argument("--filename",       type=str, default="124180.svs")
    parser.add_argument("--tile-size",      type=int, default=4096)    

    args = parser.parse_args()
    return args


if __name__ == '__main__':
    args = set_args()

    # save_svs_img(args.filename, args.tile_size)
    batch_convert_svs(args.filedir, args.tile_size)

以上是关于python 将SVS文件转换为TIFF图像的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不将完整文件加载到内存的情况下将 tiff 图像转换为 Base64

在python中将tiff转换为jpeg

在.Net中将TIFF文件转换为PNG

如何将 tiff 图像保存到新的 npy 文件中?

在 .NET 2.0 中将位图转换为一个多页 TIFF 图像

将不同的图片格式(jpg、gif、png等)转换为TIFF格式