这个问题有7个子问题,前面都比较简单实现,我们主要聊一下最后一问。
(7)附件 11 中还包含 wsi-01.svs 和 wsi-02.svs 两个文件,请参考文献[1]的设计风格和模 式,利用 python、OpenSeadragon 库和 OpenSlide 库,设计一套能够显示 wsi-01.svs 和 wsi-02.svs 文件的前后端 web 软件,可支持任意倍率浏览、任意颜色曲线标注,其他具体细节功能或特色功能可自行决定。(可见题目要求是svs文件在Web端的任意倍率浏览)
参考文献:
[1] https://med.motic.com/MoticGallery/
[2] https://openseadragon.github.io/
首先,SVS文件是Leica Biosystems开发的一种数字病理学图像格式,用于存储数字化的组织切片图像。它是一种高分辨率图像格式,可以显示细胞和组织的微小结构,是数字病理学中常用的文件格式之一。
这种图片一般长这样:
如果我们想要将svs文件呈现在网页端,并且可以任意倍率浏览。可以先跟着我的步骤走,看一看有没有问题:
首先我们需要对svs文件进行一定的处理,一个迅速方便的方法是使用pyvips库将svs文件处理成金字塔切片图像文件夹。
使用以下指令下载pyvips库:
pip install pyvips -i https://pypi.tuna.tsinghua.edu.cn/simple/
然后执行如下代码:
# 一种简洁的生成金字塔图片的方式
import os
vipshome = r'D:\python大作业\选做03\vips-dev-8.14\bin'
os.environ['PATH'] = vipshome + ';' + os.environ['PATH']
import pyvips
img = pyvips.Image.new_from_file('wsi-01.svs', access='sequential')
img.dzsave('test')
这个vipshome库文件需要单独下载,这一步是为其配置环境变量。
可以从我的网盘链接下载
链接:https://pan.baidu.com/s/1egmjbonxfbK-JENuJ6Fofg
提取码:w8qb
也可以去官网下载:https://github.com/libvips/build-win64-mxe/releases
代码执行结束后可以获取到金字塔切片文件夹“test_files”
获取到的这个图片文件夹就是展示源,接下来就是放到前端代码中,我们可以使用一个叫做openseadragon的插件来做到这一点。这个插件可以平滑的展示图片的缩略放大效果。
js代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge"> -->
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
<title>openseadragon_demoo</title>
<script src='openseadragon.min.js'></script>
</script>
</head>
<body>
<div id="openseadragon1" style="width: 800px; height: 1000px;"></div>
</body>
<script type="text/javascript">
var viewer = OpenSeadragon({
id:'openseadragon1',
prefixUrl: './images/',
tileSources: {
Image: {
xmlns: 'http://schemas.microsoft.com/deepzoom/2008',
Url: './test_files/',
Overlap: '1',
TileSize: '254',
Format : 'jpeg',
Size:{
Height: '15171',
Width: '14000'
}
}
}
})
其中Height和Width最好是你金字塔图片最大的一层的图片像素宽和高。
其中用到了一个纯js插件openseadragon,可以从参考文献2中下载。
呈现在网页中效果:
图像是可以缩放移动的,朋友们我说句题外话,这个图片放大后细胞清晰可见,看的我非常不适,有一种想偶图的感觉。
所以我真的要致敬数字病理医生,他们要天天放大来回端详这样的图片查看有问题的细胞。
标注和部署在服务器上的工作就省略了。标注用的是 OpenSeadragonPaperjsOverlay插件
前后端用的是Django框架,大家可以尝试尝试。
最后推荐大家可以读一读这篇文章应该会对你理解这类产品有很大的帮助:
https://www.cn-healthcare.com/article/20220322/content-567649.html