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 GETconst 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 GETconst 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 GETconst 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),如果未指定,则为 0Number
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