【发布时间】:2018-07-09 20:41:21
【问题描述】:
我想从 node.js 中的 .dcm 文件 (Dicom) 生成缩略图。
到目前为止,我发现了一个名为 dicom-parser 的节点模块,它从 dcm 文件中提取元数据。
我的测试用例:
var dicom = require('dicom-parser');
var fs = require('fs');
var dicomFileAsBuffer = fs.readFileSync('./FullPano.dcm');
var dataSet = dicom.parseDicom(dicomFileAsBuffer);
var pixelData = new Uint8Array(dataSet.byteArray.buffer,
dataSet.elements.x00880200.items[0].dataSet.elements.x7fe00010.dataOffset,
dataSet.elements.x00880200.items[0].dataSet.elements.x7fe00010.length);
fs.writeFileSync('test5.jpg', pixelData); // <----- not working :'(
为了帮助你帮我调试,这里是dataSet.elements.x00880200对象:
但是存储在标签 x00880200 -> x7fe00010 中的 pixelData 不是标准格式,无论是 jpeg、jpg、png...这里的想法是直接从文件中即时获取 dcm 图像的缩略图, nodejs 中的服务器端。
从dicom doc(见下文),标签 0088,0200 保存图标的数据,也就是缩略图。
图标图像序列
(0088,0200)
3
此图标图像是图像的代表。
此序列中只允许一个项目。
我遇到了 cornerstone 库:cornerstone-js 和 wado-image-loader。但两者都没有在 node.js 环境中工作(做了一个issue about that)。这些库可以生成 dcm 的“主”图像,但只有在 dcm 文件在客户端加载后,在 js 中。我的要求是在 nodejs 中为图标/缩略图执行此操作。
【问题讨论】:
-
“生成的图像不可利用” 你能澄清一下吗?你用什么来检查图像?另外,您能否提供有关该 DICOM 对象的更多信息? (有些字段非常重要,例如传输语法。)没有它,我们无法重现问题。
-
更新了整个答案以更清晰,并在我的 dicom 之旅中添加更多细节。 “你用什么检查图像?” -> 通过操作系统标准查看器看不到图像 + 我在十六进制编辑器中检查,并且没有一个测试图像包含 jpg 或 png 十六进制标题。因此,我认为了解 dcm 的所有领域并不能帮助您帮助我。 Dcm 标签是标准的并且有文档记录。
-
@MarcelFalliere 您是否设法检索到图像?
-
@HRK44 不适用于 dicom-parser。我们现在使用 Cornerstone 在网络上的画布中显示 .dcm。
-
@MarcelFalliere 你只需要使用一个编码器(例如,如果你想要 JPEG,你可以使用npmjs.com/package/jpeg-js),然后一旦你有了编码的数据,你就可以用它做你想做的事——创建新的文件,base64 它,等等...