关于前端:cornerstone-Core-基础概念一

47次阅读

共计 5349 个字符,预计需要花费 14 分钟才能阅读完成。

cornerstone Core 根底概念 (一)

Cornerstone Core,它是一个轻量级 JavaScript 库,用于在反对 HTML5 画布元素的古代 web 浏览器中显示医学图像。Cornerstone Core 并不意味着是一个残缺的应用程序自身,而是一个能够作为更大、更简单应用程序的一部分应用的组件。

上面将介绍 Cornerstone Core 中的基本概念与 API,以便后续理解 Cornerstone Core 的用法。

Enabled Elements

在 Cornerstone 中,启用的元素是 HTMLElement(通常是 div),咱们在其中显示交互式医学图像。

const element = document.getElementById("dicom_container");
cornerstone.enable(element);

Image Ids

cornerstone Image Id 是标识基石要显示的单个图像的 URL。也是图像的惟一标识,所有的操作解决都是基于这个惟一标识进行辨认。

Cornerstone 应用图像 Id 中的 URL 计划来确定要调用哪个图像加载程序插件来理论加载图像。该策略容许 Cornerstone 同时显示应用不同协定从不同服务器取得的多个图像。

imageLoader 通过辨认 scheme name 抉择加载器,常见 imageId:

// wadouri - HTTP GET
const wadouriImageId =
  "wadouri:http://localhost:3333/wado?requestType=WADO&studyUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075541.1&seriesUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075541.2&objectUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075557.1&contentType=application%2Fdicom&transferSyntax=1.2.840.10008.1.2.1";

// dicomweb - HTTP GET
const dicomwebImageId =
  "dicomweb:http://localhost:3333/wado?requestType=WADO&studyUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075541.1&seriesUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075541.2&objectUID=1.3.6.1.4.1.25403.166563008443.5076.20120418075557.1&contentType=application%2Fdicom&transferSyntax=1.2.840.10008.1.2.1";

// wadors - RESTful 格调 HTTP GET
const wadorsImageId =
  "wadors:https://api.hackathon.siim.org/dicomweb/studies/1.3.6.1.4.1.14519.5.2.1.7777.9002.198875685720513246512710453733/series/1.3.6.1.4.1.14519.5.2.1.7777.9002.207203214132667549392101803048/instances/1.3.6.1.4.1.14519.5.2.1.7777.9002.327873213718058651550666129029/frames/1";

// dicomfile - 本地文件
const dicomfileImageId = "dicomfile:1";

CornerstoneWADOImageLoader 中的 wadouri 对于 scheme name 的判断:

function getLoaderForScheme(scheme) {if (scheme === "dicomweb" || scheme === "wadouri") {
    // 如果是 scheme 时 dicomweb 或 wadouri 时,采纳 ajxs 申请
    return xhrRequest;
  } else if (scheme === "dicomfile") {
    // 如果 scheme 为 dicomfile 时,则采纳本地文件加载形式
    return loadFileRequest;
  }
}

Image Loaders

Image Loaders 是一个 JavaScript 函数,负责获取图像的 image id,并将该图像的相应图像加载对象返回给 Cornerstone。Image Load 对象蕴含解析为生成图像的 Promise。

Image Loaders 的工作流程:

ImageLoader 向 cornerstone 注册,以加载特定的 ImageId URL 计划。ImageLoader 是开放性的,容许开发者自定义图像加载器,然而须要在 cornerstone 中注册才可应用。
CornerstoneWADOImageLoader 中的 wadouri 和 wadors 对于注册的代码,这是主动注册的:

export default function(cornerstone) {
  // register dicomweb and wadouri image loader prefixes
  cornerstone.registerImageLoader('dicomweb', loadImage);
  cornerstone.registerImageLoader('wadouri', loadImage);
  cornerstone.registerImageLoader('dicomfile', loadImage);

  // add wadouri metadata provider
  cornerstone.metaData.addProvider(metaDataProvider);
}

export default function(cornerstone) {
  // register wadors scheme and metadata provider
  cornerstone.registerImageLoader('wadors', loadImage);
  cornerstone.metaData.addProvider(metaDataProvider);
}

自定义加载器注册形式:

function loadImage(imageId) {
  // 解析 imageId 并返回可用的 URL
  const url = parseImageId(imageId);

  const promise = new Promise((resolve, reject) => {
    // 生成 dicom 申请数据
    const oReq = new XMLHttpRequest();
    oReq.open("get", url, true);
    oReq.responseType = "arraybuffer";
    oReq.onreadystatechange = function (oEvent) {if (oReq.readyState === 4) {if (oReq.status == 200) {
          // 申请胜利后,创立图像对象
          const image = createImageObject(oReq.response);

          resolve(image);
        } else {reject(new Error(oReq.statusText));
        }
      }
    };

    oReq.send();});

  return {promise,};
}

// 注册 myCustomLoader 以对应的 loadImage 函数
cornerstone.registerImageLoader("myCustomLoader", loadImage);

// 通过 imageId 获取图像
cornerstone.loadImage("myCustomLoader:http://example.com/image.dcm");

Viewports

每个启用的元素都有一个视口,用于形容应如何渲染图像。

const element = document.getElementById("dicom_container");

// 获取以后的视口对象
const viewport = cornerstone.getViewport(element);

// 设置视口对象
cornerstone.setViewport(element, viewport);

viewport 对象蕴含信息:

属性名称 形容 值类型
scale 图像的缩放比例。等于 1 时不进行缩放,一个图像像素占用一个屏幕像素,大于 1 时将放大,小于 1 时放大。 Number
translation 在像素坐标系中的平移间隔,具备属性 x 和 y 的对象。 Object
voi 窗宽窗位,具备属性 windowWidth 和 windowCenter 的对象。 Object
invert 图像是否进行色彩反转。 Boolean
pixelReplication 放大图像时是否应用图像平滑。 Boolean
hflip 图像是否程度翻转。 Boolean
vflip 图像是否垂直翻转。 Boolean
rotation 图像的旋转角度。 Number
modalityLUT 利用的 modalityLUT。 Array
voiLUT 利用的 voiLUT。 Array
colormap 利用的伪黑白对象。 Object
labelmap 将此图像渲染为 labelmap,间接跳过 modalityLUT 和 voiLUT。 Boolean
displayedArea 显示区域信息,具备属性 tlhc、brhc(显示区域位于启用元素的坐标)、columnPixelSpacing、rowPixelSpacing(像素间距)的对象。 Object

Images

图像加载程序返回图像对象。

// 显示图像前
const imageId =
  "dicomweb:https://tools.cornerstonejs.org/examples/assets/dicom/bellona/chest_lung/1.dcm";
const image = await cornerstone.loadImage(imageId);

// 显示图像后
const element = document.getElementById("dicom_container");
const image = cornerstone.getImage(element);

image 对象蕴含信息:

属性名称 形容 值类型
imageId 与此图像对象关联的 imageId。 String
minPixelValue 图像中存储的最小像素值,个别来自 tag 信息(0028, 0106),如果未指定,则会依据 PixelData 从新计算。 Number
maxPixelValue 图像中存储的最大像素值,个别来自 tag 信息(0028, 0107),如果未指定,则会依据 PixelData 从新计算。 Number
slope 从新缩放斜率,将存储的像素值转换为模态像素值,个别来自 tag 信息(0028, 1053),如果未指定,则为 1。 Number
intercept 重缩放截距用于将存储的像素值转换为模态值,个别来自 tag 信息(0028, 1052),如果未指定,则为 0 Number
windowCenter 图像的默认窗位,个别来自 tag 信息(0028, 1050)。 Number
windowWidth 图像的默认窗宽,个别来自 tag 信息(0028, 1050)。 Number
getPixelData 底层像素数据的函数,返回灰度的整数数组和色彩的 RGBA 数组。 Function
rows 图像中的行数,个别指图像的高度,个别来自 tag 信息(0028, 0010)。 Number
columns 图像中的列数,个别指图像的宽度,个别来自 tag 信息(0028, 0011)。 Number
height 图像的高度,与 rows 同值。 Number
width 图像的宽度,与 columns 同值。 Number
color 是否为彩色图像,个别来自 tag 信息(0028, 0004),对值进行多项判断失去。 Boolean
columnPixelSpacing 垂直像素间距,个别来自 tag 信息(0028, 0030),如果未指定,则为 1。 Number
rowPixelSpacing 程度像素间距,个别来自 tag 信息(0028, 0030),如果未指定,则为 1。 Number
invert 是否反转显示,个别来自 tag 信息(0028, 0004),值为 MONOCHROME1 则为 true,反之为 false。 Boolean
sizeInBytes 用于存储此图像像素的字节数。 Number
stats 上次从新绘制图像对于性能的统计信息,次要是一些耗时统计,例如:上一次获取像素数据的工夫等。 Object
cachedLut 图像的缓存信息,次要是一些初始的信息,例如:原始窗宽窗位等。 Object

正文完
 0