cornerstone.js使用记录(三)

2,094 阅读1分钟

解析DCM文件中的标签

dcm文件中都会存有于患者,及病因有关的信息标签,这些标签可能会被用到,也可能用不到,但还是要了解。 可以来这个网站查看标签信息 DICOM, 或者掘金也有作者归纳好了。 链接


解析这些标签需要用到 dicomParser插件

//在这个函数里会返回一些对象,对象中的data属性有以及挂载的标签信息
cornerstone.loadAndCacheImage(imageId).then(img => {
    cornerstone.displayImage(element,img);
})

img.data

image.png

  • byteArray 这个是字节数组
  • byteArrayParser 中的属性可以解析原始数据数组
  • elements DCM文件中的标签信息

标签对应的信息就不展开了,提供的两个网站对有解释。 例如:需要获取病人的ID ---> img.data.elements["x00100020"], 这样就能获取到一个包含了病人ID开始的字节位以及结束的字节位。

image.png

  • dataOffset 字节数组中的起始位
  • length 病人ID信息的长度
  • tag 病人ID
  • vr 识别数据类型

知道了以上信息,就可以使用 dicomParser提供的 DataSet构造函数解析标签信息,当然也可以自己解析。无论是自己解析还是 dicomParser解析都用到 String.fromCharCode函数。 先看源码 :

image.png

image.png

DataSet函数中的 text, string大致是一样的。

string

image.png

text

image.png

使用也很简单

cornerstone.loadAndCacheImage(imageId).then(img => {
    let byteArray = img.data.byteArray,
        byteArrayParser = img.data.byteArrayParser,
        elements = img.data.elements;
    console.log(new dicomParser.DataSet(byteArray,byteArrayParser,elements).string("x00100020"));
    cornerstone.displayImage(element,img);
})

image.png

自己解析的话:

let elements = img.data.elements["x00100020"];
resolveTag(img.data.byteArray,elements.dataOffset,elements.length);
function resolveTag(byteArray, position, len) {
    let result = "";
    for (let i = 0; i < len; i++) {
        let temp = byteArray[position + i];
        result += String.fromCharCode(temp);
    }
    return result;
}

基本能获取的信息就这些,更深的还是要靠自己去查看源码,试着写一遍。