【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)

这篇具有很好参考价值的文章主要介绍了【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Cornerstone3D 是什么?

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示),CornerStone3D,cornerstone,javascript,前端

  • Cornerstone3D官网:https://www.cornerstonejs.org/

  • 在线查看显示效果(加载需时间,可先点击运行),欢迎fork

二、代码示例

了解了Cornerstone是什么,有什么作用后,我们先看一下如何去渲染两种比较重要的影像,栈影像和Volume影像,感受一下代码的逻辑及运行顺序,先有个初始的了解。

1. 渲染一个栈图的核心片段

// 准备一个渲染引擎 => renderingEngine
const renderingEngine = new RenderingEngine(this.renderingEngineId);

// 在渲染引擎中创建并加载视图,使视图与HTML元素绑定
const viewportId = "CT_AXIAL_STACK";
const viewportInput = {
  viewportId: viewportId,
  element: document.querySelector("#element1"),
  type: csEnums.ViewportType.STACK,
};
renderingEngine.enableElement(viewportInput);

const viewport = renderingEngine.getViewport(viewportId);
viewport.setStack(imageIds, 60);
viewport.render();

2. 渲染一个Volume图的核心代码


// 准备一个渲染引擎 => renderingEngine
const renderingEngine = new RenderingEngine(this.renderingEngineId);

// 去创建并缓存一个Volume
const volume = await volumeLoader.createAndCacheVolume(this.volumeId, {
  imageIds,
});

// 在渲染引擎中创建并加载视图,使视图与HTML元素绑定
const viewportId1 = "CT_AXIAL";
const viewportId2 = "CT_SAGITTAL";
const viewportId3 = "CT_CORONAL";
const viewportInputArray = [
  {
    viewportId: viewportId1,
    type: csEnums.ViewportType.ORTHOGRAPHIC,
    element: document.querySelector("#element1"),
    defaultOptions: {
      orientation: csEnums.OrientationAxis.AXIAL,
    },
  },
  {
    viewportId: viewportId2,
    type: csEnums.ViewportType.ORTHOGRAPHIC,
    element: document.querySelector("#element2"),
    defaultOptions: {
      orientation: csEnums.OrientationAxis.SAGITTAL,
    },
  },
  {
    viewportId: viewportId3,
    type: csEnums.ViewportType.ORTHOGRAPHIC,
    element: document.querySelector("#element3"),
    defaultOptions: {
      orientation: csEnums.OrientationAxis.CORONAL,
    },
  },
];
renderingEngine.setViewports(viewportInputArray);

// 加载Volume => 注意:创建是创建,加载是加载,加载时才会去请求Dicom文件
volume.load();

// 在视图上设置Volume
await setVolumesForViewports(
  renderingEngine,
  [
    {
      volumeId: this.volumeId,
    },
  ],
  [viewportId1, viewportId2, viewportId3]
);

// 渲染图像
renderingEngine.renderViewports([viewportId1, viewportId2, viewportId3]);

三、渲染流程解析

我们在有了初始印象后,就要开始看一下它具体是如何执行的。如果想要在自己的项目中使用这个库应该如何去做,下面对渲染流程在步骤上进行一个详解的解读,至于运行原理会在后面源码解析篇展开。

  • 👉 在项目中安装Cornerstone3D库
# 关注node版本,较低版本(16.10以下)可能会安装失败
npm install @cornerstonejs/core
npm install @cornerstonejs/tools
npm install @cornerstonejs/streaming-image-volume-loader
  • 👉 准备Dom元素及加载的Dicom文件

Cornerstone官网已部署了一部分测试Dicom文件,相关调用可查看演示代码

  <div id="demo-wrap">
    <div id="element1" class="cornerstone-item"></div>
    <div id="element2" class="cornerstone-item"></div>
    <div id="element3" class="cornerstone-item"></div>
  </div>
  • 👉 准备一个渲染引擎 => renderingEngine
const renderingEngine = new RenderingEngine(this.renderingEngineId);
  • 👉 创建并缓存一个Volume
const volume = await volumeLoader.createAndCacheVolume(this.volumeId, {
  imageIds,
});
  • 👉 在渲染引擎中创建并加载视图,使视图与HTML元素绑定
const viewportId1 = "CT_AXIAL";
const viewportId2 = "CT_SAGITTAL";
const viewportId3 = "CT_CORONAL";
const viewportInputArray = [
{
  viewportId: viewportId1,
  type: csEnums.ViewportType.ORTHOGRAPHIC,
  element: document.querySelector("#element1"),
  defaultOptions: {
    orientation: csEnums.OrientationAxis.AXIAL,
  },
},
{
  viewportId: viewportId2,
  type: csEnums.ViewportType.ORTHOGRAPHIC,
  element: document.querySelector("#element2"),
  defaultOptions: {
    orientation: csEnums.OrientationAxis.SAGITTAL,
  },
},
{
  viewportId: viewportId3,
  type: csEnums.ViewportType.ORTHOGRAPHIC,
  element: document.querySelector("#element3"),
  defaultOptions: {
    orientation: csEnums.OrientationAxis.CORONAL,
  },
},
];
renderingEngine.setViewports(viewportInputArray);
  • 👉 加载Volume => 注意:创建是创建,加载是加载,加载时才会去请求Dicom文件
 volume.load();
  • 👉 在视图上设置Volume
  await setVolumesForViewports(
    renderingEngine,
    [
      {
        volumeId: this.volumeId,
      },
    ],
    [viewportId1, viewportId2, viewportId3]
  );
  • 👉 渲染图像
renderingEngine.renderViewports([viewportId1, viewportId2, viewportId3]);
  • 🎉 bingo 渲染结果
    【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示),CornerStone3D,cornerstone,javascript,前端

四、核心概念解析

当然,上面的代码虽然运行成功了,但是还是要刨根问底,知道每个步骤涉及到的核心点是什么,有什么作用,做到知己知彼,才能在我们的代码中少踩坑。下面是涉及到的几个核心的基础概念解读

ImageId

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示),CornerStone3D,cornerstone,javascript,前端

imageLoader

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示),CornerStone3D,cornerstone,javascript,前端

RenderingEngine

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示),CornerStone3D,cornerstone,javascript,前端

该系列为从浅入深Cornerstone系列,包括cornerstone核心概念、基础使用、常见案例、工具使用、运行原理、源码解读等等,欢迎Fork演示Github:https://github.com/jianyaoo/vue-cornerstone-demo,一起讨论更多Cornerstone相关实践。文章来源地址https://www.toymoban.com/news/detail-813805.html

到了这里,关于【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详细介绍如何使用 NeRF 进行 3D 体积渲染-附源码下载

    在此示例中,我们展示了 Ben Mildenhall 等人的研究论文 NeRF:将场景表示为用于视图合成的神经辐射场的最小实现 。等人。作者提出了一种巧妙的方法,通过神经网络对 体积场景函数 进行建模来 合成场景的新颖视图。 为了帮助您直观地理解这一点,让我们从以下问题开始:

    2024年02月07日
    浏览(64)
  • 3D Web轻量引擎HOOPS Communicator如何实现对大模型的渲染支持?

    除了读取轻松外,HOOPS Communicator对超大模型的支持效果也非常好,它可以支持30GB的包含70万个零件和3.5亿个三角面的Catia装配模型! 那么它是如何来实现对大模型的支持呢? 我们将从以下几个方面与大家分享:最低帧率控制、增量更新、截流等级、边界预览、内存限制以及破

    2024年02月04日
    浏览(49)
  • 如何解决3d max渲染效果图全白这类异常问题?

    通过3d max渲染效果图时,经常会出现3Dmax渲染效果图全黑或是3Dmax渲染效果图全白这类异常问题。可能遇到这类问题较多的都是新手朋友。不知如何解决。 3dmax渲染出现异常的问题,该如何高效解决呢?今天小编这里整理几项知识点,大家可以快快一起看起来! 1、相机的位置

    2024年01月17日
    浏览(89)
  • CG MAGIC分享3d Max中的Corona渲染器材质如何成转换VRay材质?

    大家无论是使用Corona渲染器还是Vray渲染器时,进行材质问题时,都会遇到转化材质问题。 如何将CR转换成VR或者将VR转换CR材质呢? 对于这两者之间转换最好最好的方法只能是材质转换器。 CG MAGIC小编,梳理了两种方法,大家可以尝试以下两种尝试。 方法一、CR转VR材质的自带

    2024年02月10日
    浏览(40)
  • 汽车制造如何WEB端模型渲染轻量化?3D Web轻量化引擎HOOPS帮你实现!

    随着科技的迅猛发展,汽车制造领域不断迎来新领域的变革。其中,3D技术在汽车设计和制造中扮演着越来越重要的角色。而在这之中,3D Web轻量化引擎HOOPS正渐进的RGB露头角,为汽车制造提供了更加、便捷的解决方案。 本文将深入探讨HOOPS在汽车制造领域的应用,从技术特点

    2024年02月19日
    浏览(55)
  • 3D渲染的最佳CPU推荐, 目前流行的 3D 渲染 CPU

    在 3D 渲染领域,选择合适的 CPU 对于确保最佳性能和生产力至关重要。CPU 充当渲染工作站的动力源,处理复杂的计算并高效执行渲染任务。市场上有众多选择,了解 2023 年最流行的 3D 渲染 CPU 非常重要。 AMD Ryzen 9 5950X 仍然是最受欢迎的 3D 渲染 CPU 之一。它拥有 16 核和 32 线程

    2024年02月14日
    浏览(37)
  • vue项目引入cesium,创建3d地球,快速上手~

    最近开发的可视化项目中用到cesium库,准备把自己从中学习的功能,全部记录下来,完整项目demo预览地址:点击预览完整项目 引入ceium 网上有很多种引入,在此只介绍一种最简单的,也是本项目中使用的. 首先要先有一个cesium的库,这里我建议直接npm下载,自己也可以从github下载 npm i

    2024年02月13日
    浏览(39)
  • 2023超级3D动画渲染工具——key shot“底纹云渲染”

    KeyShot是Luxion的3D渲染动画工具,属于交互式光线跟踪和全局照明渲染器。 与KeyShot一起使用的软件包括3dsMax、Maya、Rhino、NX和C4D。 它可以方便快捷地创建3D模型,具有强大的实时动画系统,以其简单高效的渲染方式受到众多设计师的喜爱! 光线跟踪( Ray tracing )是三维计算机图

    2024年02月12日
    浏览(43)
  • 【Unity 3D绳索】基于图形渲染的3D绳索模拟

            前一段被要求模拟一根绳索,因为种种原因,笔者最后决定通过数学函数和Mesh模拟出一根绳索,具体的思路是首先利用Verlet函数模拟绳索的刚性,之后利用Mesh渲染圆柱体将绳索模拟出来。                  首先,利用Verlet进行逻辑上的绳索创建,具体思路参考

    2024年04月29日
    浏览(36)
  • 编译3D渲染引擎Horde3D

    Horde3D是Github上一款开源的轻量级3D渲染引擎,同时它还支持多个平台。今天我们准备在Mac平台上交叉编译至Android平台。如果需要同时能编译Sample,那么还需要SDL2库。默认情况下,编译 Horde3D 时不强制下载 SDL2 ,你可以选择强制下载,版本默认下载的是 2.0.9 ,不过我们打算替

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包