cornerstone.js 中PT图像自己计算窗宽窗位

news/2024/7/21 3:51:01 标签: javascript, 图像处理

背景:做petct过程中,前端的PT图像可以正常显示窗框窗位,后端要做截图时不能正确显示窗宽窗位。

解决思路:前端可以正常显示是因为 cornerstone.js 的源码里有算法做过处理,可以参考源码算法。

computeAutoVoi.js 中的源码贴出来记录一下:

javascript">/**
 * Computes the VOI to display all the pixels if no VOI LUT data (Window Width/Window Center or voiLUT) exists on the viewport object.
 *
 * @param {Viewport} viewport - Object containing the viewport properties
 * @param {Object} image An Image loaded by a Cornerstone Image Loader
 * @returns {void}
 * @memberof Internal
 */
export default function computeAutoVoi (viewport, image) {
  if (hasVoi(viewport)) {
    return;
  }

  const maxVoi = image.maxPixelValue * image.slope + image.intercept;
  const minVoi = image.minPixelValue * image.slope + image.intercept;
  const ww = maxVoi - minVoi;
  const wc = (maxVoi + minVoi) / 2;

  if (viewport.voi === undefined) {
    viewport.voi = {
      windowWidth: ww,
      windowCenter: wc
    };
  } else {
    viewport.voi.windowWidth = ww;
    viewport.voi.windowCenter = wc;
  }
}

核心代码就是:

javascript">  // 从图像的dicom标签中可以拿到图像最大像素值/最小像素值*图像斜率+图像的截距
  const maxVoi = image.maxPixelValue * image.slope + image.intercept;
  const minVoi = image.minPixelValue * image.slope + image.intercept;

  // 窗宽
  const ww = maxVoi - minVoi;
  // 窗位
  const wc = (maxVoi + minVoi) / 2;


http://www.niftyadmin.cn/n/5164603.html

相关文章

【STM32 开发】| INA219采集电压、电流值

目录 前言1 原理图2 IIC地址说明3 寄存器地址说明4 开始工作前配置5 程序代码1)驱动程序2)头文件3) 测试代码 前言 INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压,转换次数和滤波选项…

docker部署tomcat

1.下载tomcat镜像 尽量去下载最新版本 直接输入docker pull tomcat 后面不跟版本号(要是跟版本号,你还要去官网去查看是否有此版本,太麻烦了) 2.查看镜像 3.通过镜像去run启动容器 -d 就是后台运行 --name 给容器取个新名字 -p 3355:8080…

Talk | 西安交通大学博士生赵子祥:基于先验知识指导的多模态图像融合算法研究

本期为TechBeat人工智能社区第544期线上Talk! 北京时间11月08日(周三)20:00,西安交通大学博士生-赵子祥的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “基于先验知识指导的多模态图像融合算法研究”,介绍了他的…

mysql字段内容用逗号隔开,查询包含指定内容的命令

原生语句 多个字段需要查询用or SELECT * FROM tp6_work_order WHERE ( ( (FIND_IN_SET(1, head_user_id) or FIND_IN_SET(1, check_user_id) or FIND_IN_SET(1, edit_user_id)) ) )tp6条件写法 $where []; $find_in_set_where "(FIND_IN_SET(" . $user[id] . …

在线预约表单小程序源码系统 带完整搭建教程

随着移动互联网的普及和前端技术的不断发展,越来越多的业务场景开始采用在线预约表单小程序来实现。这种小程序具有使用便捷、用户体验良好、能够快速处理大量数据等优点。随着消费者对服务质量和体验的要求不断提高,传统的预约方式已经无法满足人们的需…

设计模式之组合模式-创建层次化的对象结构

目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获(❀❀) 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式,它允许将对象组合成树形结…

python---命名空间

命名空间 命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过Python字典来实现的。 一般有三种命名空间: 内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异…

MySQL的默认引擎为什么是InnoDB

MySQL支持InnoDB、MyISAM、MEMORY、CSV等多个存储引擎,那为什么选InnoDB作为默认引擎呢? 主要原因有几点: 事务 事务主要用于保持数据一致性,是一组操作的集合,要么全部成功,要么全部失败。InnoDB引擎提供…