二相码c
用于JavaScript的DICOM编码器,有浏览器和Node.js支持.
特征(v1.0.1)
| 代码名称 | 语法UID( s) | 解码 | 编码 | 外部编码c | js/wasm 基数 |
|---|---|---|---|---|---|
| 小恩地语Name | 1.2.840.1008.1.2 1.2.840.1008.1.2.2.1 1.2.840.1008.1.2.一.一.99 | - 说吧 | - 说吧 | - 说吧 | - 说吧 |
| 大恩地语Name | 1.2.840.1008.1.2.2 (中文(简体) ) | - 说吧 | - 说吧 | - 说吧 | - 说吧 |
| 利比佩克图尔博8比特 | 1.2.840.1008.1.2.2.4.50 (中文(简体) ) | 页:1 | 页:1 | 页:1 | 页:1 |
| Libjpeg Turbo12 比特语 | 1.2.840.1008.1.2.2.4.51 (中文(简体) ) | - 说吧 | - 说吧 | - 说吧 | - 说吧 |
| Jpeg 无废 | 1.2.840.1008.1.2.4.57 1.2.840.1008.2.4.70 | 页:1 | - 说吧 | 页:1 | - 说吧 |
| 树脂 | 1.2.840.1008.1.2.4.80 1.2.840.1008.1.2.4.81 | 页:1 | 页:1 | 页:1 | 页:1 |
| Jpeg 2000 (日语) | 1.2.840.1008.1.2.4.90 1.2.840.1008.1.2.4.91 (中文(简体) ) | 页:1 | 页:1 | 页:1 | 页:1 |
| JpegXL 图像 | 1.2.840.1008.1.2.4.110 1.2.840.1008.1.2.4.111 1.2.840.1008.1.2.1.2.12 | 页:1 | X 除外 .111 | 页:1 | 页:1 |
| 无色 | 1.2.840.1008.1.2.2.5 (中文(简体) ) | 页:1 | - 说吧 | - 说吧 | - 说吧 |
| HTJ2K 电话 | 1.2.840.1008.1.2.202 (201,203 也) | 页:1 | 页:1 | 页:1 | 页:1 |
下一次发布规划
v0.0.11: 对 Libjpeg Turbo12 Bit 的支持 v.0.0.12 编码选项支持. v1.0.0:支持浏览器(包含动态加载)和节点.
未来发布
- Rle Losless to be js/wasm based. 莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱莱.
- 支持现有解码器的其他操作.
- 支持其余的DICOM转移语法.
大楼
# Restore packages
pnpm install
# Build
pnpm run build
如何使用
常见
const dicomCodec = require('@cornerstonejs/dicom-codec');
....
const imageFrame = ....// see API
const imageInfo = {} // add here image information (see API)
const result = await dicomCodec.transcode(imageFrame, imageInfo, sourceTransferSyntaxUID, targetTransferSyntaxUID);
const pixelData = dicomCodec.getPixelData(result.imageFrame, result.imageInfo);
ES6 标准
import dicomCodec from '@cornerstonejs/dicom-codec';
...
const imageFrame = ....// see API
const imageInfo = {} // add here image information (see API)
const result = await dicomCodec.transcode(imageFrame, imageInfo, sourceTransferSyntaxUID, targetTransferSyntaxUID);
const pixelData = dicomCodec.getPixelData(result.imageFrame, result.imageInfo);
API 密码
解码
解码图像的async函数
参数(它没有变异任何参数:
- 被压缩的ImageFrame - 有被压缩的图像框架字节的打入阵列.
- 图像信息 - 对象
- 行- 有图像行/ 高度的数字 .
- 列 - 有图像列/宽的数字.
- 位点分配 - 每个像素样本带有位点的数字.
- 样本PerPixel - 每像素含有组件数量的数字.
- 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
- 源代码 TransferSyntaxUID - 与压缩图像框的传输语法 uid 字符串
回返情况:
- 对象
- 图像Frame - 有未压缩图像框架字节的打入阵列( 大部分代码返回 Uint8Array, 但是可以看到 Uint16Array, Int16Array)
- 图像信息 - 对象
- 行- 有图像行/ 高度的数字 .
- 列 - 有图像列/宽的数字.
- 位点分配 - 每个像素样本带有位点的数字.
- 样本PerPixel - 每像素含有组件数量的数字.
- 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
- 还有一些其他的编码属性.
如果源代码TransferSyntaxUID或相關的codec's transferSyntaxUID没有代码,则不发生解码. SyntaxUID指未压缩.
编码
编码图像的async 函数
参数(它没有变异任何参数:
- 图像Frame - 带有未压缩图像框字节的打入阵列
- 图像信息 - 对象
- 行- 有图像行/ 高度的数字 .
- 列 - 有图像列/宽的数字.
- 位点分配 - 每个像素样本带有位点的数字.
- 样本PerPixel - 每像素含有组件数量的数字.
- 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
- 目标转换语法UID - 将图像框编码为
- 编码选项 - 对象 - 每个编码器所特有的内容(见下文) (v>=0.0.12)
回返情况:
- 对象
- 图像Frame - 有图像框架字节的键入箭头( 大部分编码器返回 Uint8 箭头, 但可见 Uint16 Array, Int16 Array)
- 图像信息 - 对象
- 行- 有图像行/ 高度的数字 .
- 列 - 有图像列/宽的数字.
- 位点分配 - 每个像素样本带有位点的数字.
- 样本PerPixel - 每像素含有组件数量的数字.
- 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
- 还有一些其他的编码属性.
- 进程信息 - 对象
- 持续时间 - 以毫秒为单位的流程长度.
如果目标TransferSyntaxUID或相關的codec's transferSyntaxUID没有代码,则不发生编码. SyntaxUID指未压缩.
转码
转换图像(解码后编码)的async函数
参数(它没有变异任何参数:
- 图像Frame - 有图像框架字节的打入阵列
- 图像信息 - 对象
- 行- 有图像行/ 高度的数字 .
- 列 - 有图像列/宽的数字.
- 位点分配 - 每个像素样本带有位点的数字.
- 样本PerPixel - 每像素含有组件数量的数字.
- 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
- 源代码 transferSyntaxUID - 与压缩器的传输语法uid相接字符串.
- 目标转换语法UID - 用转语法 uid 字符串将图像框编码为.
- 编码选项 - 对象 - 每个编码器所特有的内容(见下文) (v>=0.0.12)
回返情况:
- 对象
- 图像Frame - 有未压缩图像框架字节的打入阵列( 大部分代码返回 Uint8Array, 但是可以看到 Uint16Array, Int16Array)
- 图像信息 - 对象
- 行- 有图像行/ 高度的数字 .
- 列 - 有图像列/宽的数字.
- 位点分配 - 每个像素样本带有位点的数字.
- 样本PerPixel - 每像素含有组件数量的数字.
- 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
- 还有一些其他的编码属性.
- 进程信息 - 对象
- 持续时间 - 以毫秒为单位的流程长度.
转码可能不会发生,取决于转出SyntaxUID的参数(见上文).
获取像素数据
函数返回基于图像Info格式化的图像Frame 一些解码器可能根据图像Info对像素Data有特定规则.
参数(它没有变异任何参数:
- 图像Frame - 带有未压缩图像框字节的打入阵列
- 图像信息 - 对象
- 行- 有图像行/ 高度的数字 .
- 列 - 有图像列/宽的数字.
- 位点分配 - 每个像素样本带有位点的数字.
- 样本PerPixel - 每像素含有组件数量的数字.
- 签名 - 如果像素数据被签名, 布尔为真; 如果未签名, 则为假.
回返情况:
- 对象
- 映像Frame - 有映像框字节的打入阵列(大多数代码返回了Uint8Array,但可以看到Uint16Array,Int16Array). 每个解码器可能基于图像Info来不同地对待这个.
设置配置
设置 dicom-codec 配置属性的函数 参数(它没有变异任何参数 :
- 选项 - 对象
- 动词 - 如果dicom-codec是动词,则布尔真能,否则是虚假的.
传输语法特定编码选项
JPEG XL 密码
传输语法 1.2.840.10008.1.2.4.110 总是使用无损失编码.
传输语法 1.2.840.10008.1.2.4.111 仅因为
像素编码器不创建JPEG重建数据.
传输语法 1.2.840.10008.1.2.4.112 接受这些编码选项 :
lossless:布尔,默认为true。 。 。 .distance: Butteraugli距离从0到25,用于失序编码. 默认为1.0——cjxl的默认,"可视无亏"——何时lossless实值false财务报告和审定财务报表 没有给出距离 。 不要依赖 libjxl 自身的默认 0: 它达到了 距离 0 通过 VarDCT 而不是模块化路径,该路径大于 一个真正的无损失编码 仍然不是无损失.effort:整数从1到9.decodingSpeed:整数从0到4.
已签名的像素数据
JPEG XL 没有签名的样本类型 - JxlDataType 无符号整数或浮动
——所以像素代表不能被带入代码流. 第3.5页 8.2.15
允许像素表达式为单色 JPEG XL 图像的 1, 但定义
没有任何机制,所以绘图是一个公约。 此库使用
每个传输语法不同,并自动应用:
| 传输语法 | 已签名样本 |
|---|---|
.110 无损失 | 传入为二相补. 字节精确的回程;赤色的代码流读取为未签名,任何应用像素代表的阅读器本身都同意. |
.112 | 等级在编码前和解码后相接后相接上取了样本范围的一半. |
.112 需要改变,因为作为未签名的 CT 框架 [-2048, 1704]
变成 [0, 1704] 加号 [63488, 65535]和丢失的编码涂片
相差:2211 HU 最大误差为1.0距离而无. 实行轮班制
给每个签名的 .112 框架、无损失选项或非损失选项,以便解码
倒置它只知道转移语法.
有两个后果值得了解:
- 签名框架在下面产生不同的字节
.110财务报告和审定财务报表.112两种解码 回到相同的像素这里,但是.112流读取的解码器 假设2的补缺 由2^(BitsStored-1)没有 标准对公约作了区分. - 巴特劳格利的距离是相对于全的
BitsAllocated范围。 简历 大约占到16位范围的6%,所以距离1.0仍然允许 几百个HU错误。 使用小距离,或.110,当HU忠诚 问题.
同样的限制也适用于JPEG-LS,它也没有标志旗;这个 库只为此对 JPEG-LS 进行无穷编码.
测试
pnpm run test # run vitest dispatch + integration tests
集成测试需要每一个基础的 enm编码器 dist/ 待建项目
本地的,否则它们会完全跳过。 CI先构建一切.