栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

使用python

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用python

使用python_openslide剪切大型tif图

全视野图像WSI都比较大,通常为10w×10w左右。为了能用他来训练算法需要将其剪切为瓦片(patch)。之前用GDAL切但是切的很慢。找了好久终于找到了使用python_openslide的用法,记录一下。

效果

目的:将11w×8.5w像素、1.5G的tif图切成512*512大小,切出来应该有3.8w左右个patch。

python_openslide:

把WSI(patch文件夹与WSI在同一目录)放在不同盘处理的速度不同,经过尝试得到数据(初始patch生成速度和最后patch生成速度数值上等于patch文件夹中按patch修改日期排序的第二分钟的文件数量和倒数第二分钟的文件数量):

WSI及patch位置初始patch生成速度最后patch生成速度全程用时
C盘3724张/分钟3280张/分钟11分钟
D盘2650张/分钟1337张/分钟25分钟
移动硬盘2092张/分钟445张/分钟59分钟

切出来有36.5G。
速度差别还挺大的,应该是硬盘读取速度的原因吧。

上代码:

import openslide
import numpy as np
import imageio  # 用于保存瓦片

slide = openslide.OpenSlide("H:\qiepian\qiepian\52001488-3.tif")
dst_path = 'H:\qiepian\openslide_patch512\'

[m, n] = slide.dimensions   # 得出高倍下的(宽,高)
print(m, n)
N = 512
ml = N * m//N
nl = N * n//N

for i in range(0, ml, N):   # 这里由于只是想实现剪切功能,暂时忽略边缘不足N*N的部分
    for j in range(0, nl, N):
        im = np.array(slide.read_region((i, j), 0, (N, N)))
        imageio.imwrite(dst_path + str(i) + '-' + str(j) + '.tif', im)  # patch命名为‘x-y’

slide.close()   # 关闭文件
C++_GDAL:

代码及效果见另一篇博客。

点个赞再走~~~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号