基于cornerstone.js的dicom医学影像查看浏览功能
最近由于项目需求,需要医学影像.dcm文件的预览功能,功能完成后,基于原生Demo做一个开源分享。
心急的小伙伴可以先看如下基于原生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>Document</title>
<script src="https://unpkg.com/hammerjs@2.0.8/hammer.js"></script>
<script src="https://unpkg.com/cornerstone-core@2.6.1/dist/cornerstone.js"></script>
<script src="https://unpkg.com/cornerstone-math@0.1.10/dist/cornerstoneMath.min.js"></script>
<script src="https://unpkg.com/cornerstone-wado-image-loader@4.1.3/dist/cornerstoneWADOImageLoader.bundle.min.js"></script>
<script src="https://unpkg.com/cornerstone-web-image-loader@2.1.1/dist/cornerstoneWebImageLoader.min.js"></script>
<script src="https://unpkg.com/cornerstone-tools@6.0.7/dist/cornerstoneTools.js"></script>
<script src="https://unpkg.com/dicom-parser@1.8.13/dist/dicomParser.min.js"></script>
</head> <body>
<!-- 用于加载图片的div区域 -->
<div id="dicomImage" style="width: 512px;height: 512px;"></div> </body> <script> // 注册并挂载cornerstone及其cornerstoneTools,固定操作
cornerstoneTools.external.cornerstone = cornerstone;
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
cornerstoneTools.external.Hammer = Hammer;
cornerstoneWADOImageLoader.external.dicomParser = dicomParser;
cornerstoneWADOImageLoader.external.cornerstone = cornerstone;
// imageId就是cornerstone要求的.dcm图片地址,例如:var imageId = "wadouri:http://127.0.0.1:6699/ctdcm1.dcm";
var imageId = "wadouri: http://http://127.0.0.1:6699/media/dicm/0a291d1b12b86213d813e3796f14b329_haAJH2K.dcm";
// 初始化cornerstoneTools工具
cornerstoneTools.init();
// 获取要用于加载图片的div区域
var element = document.getElementById('dicomImage');
//激活获取到的用于图片加载的区域
cornerstone.enable(element);
// 从cornerstoneTools库中获取窗宽,窗高工具
const WwwcTool = cornerstoneTools.WwwcTool;
//添加获取到的窗宽,窗高工具
cornerstoneTools.addTool(WwwcTool);
// 绑定工具操作功能到鼠标左键
cornerstoneTools.setToolActive('Wwwc', {
mouseButtonMask: 1
})
//使用loadAndCacheImage()方法加载并缓存图片,然后使用displayImage()方法显示图片。
cornerstone.loadAndCacheImage(imageId).then(function (image) {
cornerstone.displayImage(element, image);
}) </script> </html>
二、基于源码片段的解释
1、基于以上源码片段,做一下分段介绍。如下:
1 <script src="https://unpkg.com/hammerjs@2.0.8/hammer.js"></script>
2 <script src="https://unpkg.com/cornerstone-core@2.6.1/dist/cornerstone.js"></script>
3 <script src="https://unpkg.com/cornerstone-math@0.1.10/dist/cornerstoneMath.min.js"></script>
4 <script src="https://unpkg.com/cornerstone-wado-image-loader@4.1.3/dist/cornerstoneWADOImageLoader.bundle.min.js"></script>
5 <script src="https://unpkg.com/cornerstone-web-image-loader@2.1.1/dist/cornerstoneWebImageLoader.min.js"></script>
6 <script src="https://unpkg.com/cornerstone-tools@6.0.7/dist/cornerstoneTools.js"></script>
7 <script src="https://unpkg.com/dicom-parser@1.8.13/dist/dicomParser.min.js"></script>
如上代码主要为引入所需js库代码:
第一行中引入hammer.js库,hammer.js是一款开源的移动端脚本框架,它可以完美的实现在移端开发的大多数事件,如:点击、滑动、拖动、多点触控等事件。这里用在pc端,也可以有很好的鼠标拖动等效果的实现。
第二行中引入cornerstone.js库,Corenerstone 是一个旨在搭建一个完全基于web的医学影像平台的开源项目。Cornerstone Core组件是一个在支持HTML5 canvas元素的现代浏览器上显示医学影像的轻量级的JavaScript库。
第三行引入cornerstoneMath.min.js库,该库主要包含对医学影像文件的一些操作的技术,例如使用cornerstone工具库中的测量工具时,就需要该库文件提供数学计算支持。
第四行中引入cornerstoneWADOImageLoader.bundle.min.js库,主要用于对DICOM医学影像文件的支持。
第五行引入cornerstoneWebImageLoader.min.js主要用于对于非DICOM医学影像文件的网络图片的支持。
第六行引入cornerstoneTools.js库,该库时基于cornerstone的工具库,具备画线测距,测量夹角,改变色差,拖动影像等医学影像基础常用功能。
第七行引入dicomParser.min.js库,该库主要用于对DICOM医学影像文件图片及图片信息进行解析。
<!-- 用于加载图片的div区域 -->
<div id="dicomImage" style="width: 512px;height: 512px;"></div>
2、这里就是一个用于将DICOM医学文件在页面展示的区域。
// 注册并挂载cornerstone及其cornerstoneTools,固定操作
cornerstoneTools.external.cornerstone = cornerstone;
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
cornerstoneTools.external.Hammer = Hammer;
cornerstoneWADOImageLoader.external.dicomParser = dicomParser;
cornerstoneWADOImageLoader.external.cornerstone = cornerstone;
3、这里是对cornerstone库及dicom文件渲染其相关库文件的注册挂载,固定格式,不要更改。
// imageId就是cornerstone要求的.dcm图片地址,例如:var imageId = "wadouri:http://127.0.0.1:6699/ctdcm1.dcm";
var imageId = "wadouri: http://http://127.0.0.1:6699/media/dicm/0a291d1b12b86213d813e3796f14b329_haAJH2K.dcm";
// 初始化cornerstoneTools工具
cornerstoneTools.init();
// 获取要用于加载图片的div区域
var element = document.getElementById('dicomImage');
//激活获取到的用于图片加载的区域
cornerstone.enable(element);
// 从cornerstoneTools库中获取窗宽,窗高工具
const WwwcTool = cornerstoneTools.WwwcTool;
//添加获取到的窗宽,窗高工具
cornerstoneTools.addTool(WwwcTool);
4、这里就是注释中说的那样,就是一些固定步骤。
imageId:官方文档规定的.dcm图片地址,也就是需要展示的DICOM医学影像文件的网络地址。
dicomImage:这里就是在html代码中自己定义的用于将DICOM医学文件在页面展示的区域。
其他的就是一些固定操作。
1 // 绑定工具操作功能到鼠标左键
2 cornerstoneTools.setToolActive('Wwwc', {
3 mouseButtonMask: 1
4 })
5 //使用loadAndCacheImage()方法加载并缓存图片,然后使用displayImage()方法显示图片。
6 cornerstone.loadAndCacheImage(imageId).then(function (image) {
7 cornerstone.displayImage(element, image);
8 })
5、这是最后的两步。1~4行代码,用于将前面写的‘获取窗宽,窗高工具’功能绑定到鼠标的左键,用于在图片上按住鼠标左键时,可以实现拖动改变色差的效果。
setToolActive():该方法用于激活并绑定某功能到某个操作键。 mouseButtonMask: 1:该含义为绑定到鼠标左键。
loadAndCacheImage():该方法用于加载并缓存DICOM图片及图片的数据。最大缓存为1GB
displayImage(element, image):该方法用于在我们设定的网页区域展示解析后的DICOM图片
6、至此,我们已经完成了所以代码。
注意:(1)由于我们用的是在线Js库文件,所以需要等待后在能看到图片效果.
(2)imageId 是博主自己设置的本地服务器的dcm图片地址,请替换为你自己服务器的dcm图片地址。如果对node.js有了解的大佬,可以使用http-server本地服务器包,自己快速搭建本地服务器用于测试,但是需要注意跨域问题。可以使用:http-server --cors 命令替代“http-server”命令解决跨域问题。不会的伙伴请参考:http-server服务跨域设置 - ParamousGIS - 博客园 (cnblogs.com) 前端解决跨域问题-nmp安装http-server - 不周客 - 博客园 (cnblogs.com)
基于cornerstone.js的dicom医学影像查看浏览功能的更多相关文章
- 使用医学影像开源库cornerstone.js解析Dicom图像显示到HTML中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 基于cornerstone.js的cornerstoneWADOImageLoader
上一篇简单介绍了cornerstone.js的相关使用介绍和基于cornerstone的web库cornerstoneWADOImageLoader,在实际开发中遇到了相关的一些问题,在这里说明一下, ...
- js:基于原生js的上啦下啦刷新功能
链接:https://www.jianshu.com/p/a8392115e6f0演示地址:http://wonghan.cn/iscroll-demo/html:<body> <d ...
- 基于node.js的websocket 前后端交互小功能
一.node var ws = require("nodejs-websocket"); console.log("开始建立连接...") var server ...
- 《基于Node.js实现简易聊天室系列之详细设计》
一个完整的项目基本分为三个部分:前端.后台和数据库.依照软件工程的理论知识,应该依次按照以下几个步骤:需求分析.概要设计.详细设计.编码.测试等.由于缺乏相关知识的储备,导致这个Demo系列的文章层次 ...
- DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM
背景: 从DICOM网络传输一文开始,相继介绍了C-ECHO.C-FIND.C-STORE.C-MOVE等DIMSE-C服务的简单实现,博文中的代码给出的实例都是基于fo-dicom库来实现的,原因只 ...
- Cornerstone.js使用相关
官网地址:https://github.com/chafey/cornerstone 简介: Cornerstone is an open source project with a goal to ...
- DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求
转载:http://blog.csdn.net/zssureqh/article/details/39213817 背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间w ...
- DICOM医学图像处理:Orthanc Plugin SDK实现WADO服务
背景: Orthanc是博主发现的一个很完美的DICOM和HTTP服务端开源软件,前几篇分别介绍了Orthanc的基本使用.Orthanc从0.8.0版本之后给出了Plugin SDK,通过该SDK可 ...
随机推荐
- 评价管理后台PC端
1.css动画效果 --2020.12.26 2.remove() --2020.12.28 3.执行顺序 --2020.12.30 4.联动 --2021.01.06 5.奥利给~ --202 ...
- vue设计模式
vm 的设计模式. mvvm 是 model-view-viewModel 的简写. model 是数据模块,view 是渲染视图,viewModel 是沟通视图和数据模块的桥梁. vue 中使用了哪 ...
- 差分隐私(Differential Privacy)定义及其理解
1 前置知识 本部分只对相关概念做服务于差分隐私介绍的简单介绍,并非细致全面的介绍. 1.1 随机化算法 随机化算法指,对于特定输入,该算法的输出不是固定值,而是服从某一分布. 单纯形(simplex ...
- 降维、特征提取与流形学习--非负矩阵分解(NMF)
非负矩阵分解(NMF)是一种无监督学习算法,目的在于提取有用的特征(可以识别出组合成数据的原始分量),也可以用于降维,通常不用于对数据进行重建或者编码. NMF将每个数据点写成一些分量的加权求和(与P ...
- 接口测试postman深度挖掘应用①
一.测试接口前需要搞明白的原理: 1.在讲如何使用postman时,我们首先应该要了解网络的请求相应的知识,下面以fiddle进行抓包为例分析: 通过fiddler抓包我们不难发现,客户端也就是用户会 ...
- HIPPO-4J 1.3.0 正式发布:支持 Dubbo、RibbitMQ、RocketMQ 框架线程池
文章首发在公众号(龙台的技术笔记),之后同步到个人网站:xiaomage.info Hippo-4J 距离上一个版本 1.2.1 已经过去一个月的时间.在此期间,由 8 位贡献者 提交了 170+ c ...
- CYaRon!语
P3695 CYaRon!语 开始之前 上次水了些小模拟之后感觉不能再颓废了,于是就来大模拟. 然后这个题花了我一个多星期 还是最差解 不过,为了纪念我的第 20 道紫题,纪念我这一周的努力,我还是想 ...
- spring中的bean生命周期
1.实例化(在堆空间中申请空间,对象的属性值一般是默认值.通过调用createBeanInstance()方法进行反射.先获取反射对对象class,然后获取默认无参构造器,创建对象) 2.初始化(就是 ...
- UiPath文本操作Set Text的介绍和使用
一.Set Text的介绍 向输入框/文本框写入文本的一种操作 二.Set Text在UiPath中的使用 1.打开设计器,在设计库中新建一个Sequence,为序列命名及设置Sequence存放的路 ...
- jfinal中如何使用过滤器监控Druid监听SQL执行?
摘要:最开始我想做的是通过拦截器拦截SQL执行,但是经过测试发现,过滤器至少可以监听每一个SQL的执行与返回结果.因此,将这一次探索过程记录下来. 本文分享自华为云社区<jfinal中使用过滤器 ...