tifffile 写入保存 巨大的 金字塔 tile ome-tiff 图像文件

news/2024/12/1 0:28:45/

需要保存巨大图像,顺便给后人铺路

tiffslide 开源仓库:https://github.com/bayer-science-for-a-better-life/tiffslide
tifffile 开源仓库:https://github.com/cgohlke/tifffile

保存的 ome-tiff 大图可以使用 qupath(新的开源病理标准软件,内存占用较少,并能自动切换金字塔分辨率) 或一般的图像浏览器(内存占用很大,只能看到最高分辨率图像)打开。

可以使用 python库 openslide-python 打开,但只能读到最高分辨率的图像。
也可以使用 python库 tiffslide 打开,这个是 openslide 的新一代替代品,可以读到全部分辨率。

# openslide read
((10240, 10240),)
# tiffslide read
((10240, 10240), (7680, 7680), (2560, 2560), (1280, 1280), (512, 512))

写入大量图块到 ome-tiff 图像文件示例。

import tifffile
import numpy as np
import cv2def gen_im(size_hw):# 带编号的图块生成器,用于观察tile块的顺序im_i = 0while True:im = np.zeros([*size_hw, 3], np.uint8)im = cv2.putText(im, str(im_i), (size_hw[1]//4, size_hw[0]//2), cv2.FONT_HERSHEY_PLAIN, 3, color=(255, 255, 255), thickness=2)im_i += 1yield im# 图块大小
tile_hw = (256, 256)# 带编号的图像生成器
gen = gen_im(tile_hw)# 要需要的金字塔分辨率
multi_hw = [(10240, 10240), (7680, 7680), (2560, 2560), (1280, 1280), (512, 512)]with tifffile.TiffWriter('abc.ome.tif', bigtiff=True, ome=True) as tif:for i, hw in enumerate(multi_hw):if i == 0:# 首个图像需要指定 subifds,说明本次write后,后面会跟着多少张本张图的低分辨率图像tif.write(data=gen, subifds=len(multi_hw)-1, tile=tile_hw, photometric='rgb', compression='jpeg', shape=(*hw, 3), dtype=np.uint8)else:# 设定 subfiletype 为 1,代表本张图是属于低分辨率图像tif.write(data=gen, subfiletype=1, tile=tile_hw, photometric='rgb', compression='jpeg', shape=(*hw, 3), dtype=np.uint8)

写入稀疏图块到 ome-tiff 图像文件示例。

import tifffile
import numpy as np
import cv2def gen_im(size_hw):# 带编号的图块生成器,用于观察tile块的顺序im_i = 0while True:im = np.zeros([*size_hw, 3], np.uint8)+255im = cv2.putText(im, str(im_i), (size_hw[1]//4, size_hw[0]//2), cv2.FONT_HERSHEY_PLAIN, 3, color=(0, 0, 0), thickness=2)im_i += 1# 随机丢弃图块if im_i % 3 == 0:yield Noneelse:yield im# 图块大小
tile_hw = (256, 256)# 带编号的图像生成器
gen = gen_im(tile_hw)# 要需要的金字塔分辨率
multi_hw = [(10240, 10240), (7680, 7680), (2560, 2560), (1280, 1280), (512, 512)]with tifffile.TiffWriter('abc.ome.tif', bigtiff=True, ome=True) as tif:for i, hw in enumerate(multi_hw):if i == 0:# 首个图像需要指定 subifds,说明本次write后,后面会跟着多少张本张图的低分辨率图像tif.write(data=gen, subifds=len(multi_hw)-1, tile=tile_hw, photometric='rgb', compression='jpeg', shape=(*hw, 3), dtype=np.uint8)else:# 设定 subfiletype 为 1,代表本张图是属于低分辨率图像tif.write(data=gen, subfiletype=1, tile=tile_hw, photometric='rgb', compression='jpeg', shape=(*hw, 3), dtype=np.uint8)

http://www.ppmy.cn/news/487140.html

相关文章

分辨率,P与K的区别

分辨率 P 视频的分辨率是指视频在一定区域内包含的像素点的数量 •720P的分辨率为1280x720像素 •1080P的分辨率为1920*1080像素 •2k的分辨率为2560*1440像素 •4k的分辨率为3840*2160像素 •8K的分辨率为76804320像素 “P”全拼为Progressive译为逐行扫描,…

【深度学习】PyTorch深度学习实践 - Lecture_13_RNN_Classifier

文章目录 一、问题描述二、OurModel三、准备数据3.1 Data Convert3.2 Padding Data3.3 Label Convert 四、双向RNN五、PyTorch代码实现5.1 引入相关库5.2 创建Tensors函数5.3 将名字转化为字符列表函数5.4 国家名字数据集对象5.5 RNN(GRU)分类器对象5.6 …

Android dump渲染和合成图层GraphicBuffer指南

Android dump渲染和合成图层GraphicBuffer指南 引言 博客停更很久了,提起笔来渐感生疏啊!看来,还是得抽出时间来更新更新啊!好了,感慨也发完了,是时候切入正题了。本篇博客主要以本人在实际项目的开发中&am…

Linux—vmstat命令详解

vmstat概念 vmstat命令是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来动态监控系统资源的 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息使用情况 vmstat下载 有些系统可能没有自带vmsata命令&#xf…

一文看懂华为Mate30:4摄5G+7680帧超高速慢动作摄影,6200元起

【惊奇科技】华为Mate30 Pro简单上手 电影镜头貌似有点意思 作者 | 吴波 出品 | 网易手机&数码《易评机》栏目组 (油管&B站:惊奇科技 抖音:JQ163) 今年对于华为手机来说可谓历经各种坎坷,在重压之下华为还是于…

win11解决80端口默认被占用的问题

错误原因是Nginx无法启动, 提示80端口被占用 报错: [emerg] 14180#15404: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 首先查看80端口被谁占用: TCP 0.0.0.0:80 …

数据处理快人一步!聊一聊如何使用CUDA的Stream

作者 | 伊凡 编辑 | 极市平台 原文链接:https://zhuanlan.zhihu.com/p/51402722 点击下方卡片,关注“自动驾驶之心”公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复【CUDA】获取CUDA实战书籍! 导读 来…

前端大屏适配几种方案

记录一下前端大屏的几种适配方案。 我们是1920*1080的设计稿。 文章目录 一、方案一:remfont-size1.查看适配情况1.1 1920*1080情况下1.2 3840*2160(4k屏)情况下1.3 7680*2160 超宽屏下 二、方案二:vw(单位)三、方案三&#xff1…