Update metadata for missing fields using image data
This commit is contained in:
parent
b0195a1a57
commit
4c0cdc559b
@ -146,6 +146,9 @@ function loadDisplaySetIntoViewport(data, templateData) {
|
|||||||
enabledElement.image = image;
|
enabledElement.image = image;
|
||||||
enabledElement.viewport = cornerstone.getDefaultViewport(enabledElement.canvas, image);
|
enabledElement.viewport = cornerstone.getDefaultViewport(enabledElement.canvas, image);
|
||||||
|
|
||||||
|
// Update the metaData for missing fields
|
||||||
|
updateMetaData(image);
|
||||||
|
|
||||||
// Check if there are default viewport settings for this sopClassUid
|
// Check if there are default viewport settings for this sopClassUid
|
||||||
if (!displaySet.images || !displaySet.images.length) {
|
if (!displaySet.images || !displaySet.images.length) {
|
||||||
return;
|
return;
|
||||||
@ -266,6 +269,9 @@ function loadDisplaySetIntoViewport(data, templateData) {
|
|||||||
function onNewImage(e, eventData) {
|
function onNewImage(e, eventData) {
|
||||||
log.info('imageViewerViewport onNewImage');
|
log.info('imageViewerViewport onNewImage');
|
||||||
|
|
||||||
|
// Update the metaData for missing fields
|
||||||
|
updateMetaData(eventData.enabledElement.image);
|
||||||
|
|
||||||
// Update the templateData with the new imageId
|
// Update the templateData with the new imageId
|
||||||
// This allows the template helpers to update reactively
|
// This allows the template helpers to update reactively
|
||||||
templateData.imageId = eventData.enabledElement.image.imageId;
|
templateData.imageId = eventData.enabledElement.image.imageId;
|
||||||
|
|||||||
@ -49,32 +49,7 @@ addMetaData = function(imageId, data) {
|
|||||||
|
|
||||||
// If there is sufficient information, populate
|
// If there is sufficient information, populate
|
||||||
// the imagePlane object for easier use in the Viewer
|
// the imagePlane object for easier use in the Viewer
|
||||||
if (instanceMetaData.frameOfReferenceUID &&
|
metaData.imagePlane = getImagePlane(instanceMetaData);
|
||||||
instanceMetaData.imageOrientationPatient &&
|
|
||||||
instanceMetaData.imagePositionPatient) {
|
|
||||||
|
|
||||||
var imageOrientation = instanceMetaData.imageOrientationPatient.split('\\');
|
|
||||||
var imagePosition = instanceMetaData.imagePositionPatient.split('\\');
|
|
||||||
|
|
||||||
var columnPixelSpacing = 1.0;
|
|
||||||
var rowPixelSpacing = 1.0;
|
|
||||||
if (instanceMetaData.pixelSpacing) {
|
|
||||||
var split = instanceMetaData.pixelSpacing.split('\\');
|
|
||||||
rowPixelSpacing = parseFloat(split[0]);
|
|
||||||
columnPixelSpacing = parseFloat(split[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
metaData.imagePlane = {
|
|
||||||
frameOfReferenceUID: instanceMetaData.frameOfReferenceUID,
|
|
||||||
rows: instanceMetaData.rows,
|
|
||||||
columns: instanceMetaData.columns,
|
|
||||||
rowCosines: new cornerstoneMath.Vector3(parseFloat(imageOrientation[0]), parseFloat(imageOrientation[1]), parseFloat(imageOrientation[2])),
|
|
||||||
columnCosines: new cornerstoneMath.Vector3(parseFloat(imageOrientation[3]), parseFloat(imageOrientation[4]), parseFloat(imageOrientation[5])),
|
|
||||||
imagePositionPatient: new cornerstoneMath.Vector3(parseFloat(imagePosition[0]), parseFloat(imagePosition[1]), parseFloat(imagePosition[2])),
|
|
||||||
rowPixelSpacing: rowPixelSpacing,
|
|
||||||
columnPixelSpacing: columnPixelSpacing,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the metaData to the imageId lookup object
|
// Add the metaData to the imageId lookup object
|
||||||
metaDataLookup[imageId] = metaData;
|
metaDataLookup[imageId] = metaData;
|
||||||
@ -95,6 +70,86 @@ addSpecificMetadata = function(imageId, type, data) {
|
|||||||
metaDataLookup[imageId] = $.extend(metaDataLookup[imageId], metaData);
|
metaDataLookup[imageId] = $.extend(metaDataLookup[imageId], metaData);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the related metaData for missing fields given a specified image
|
||||||
|
*
|
||||||
|
* @param image
|
||||||
|
*/
|
||||||
|
updateMetaData = function(image) {
|
||||||
|
var imageMetaData = metaDataLookup[image.imageId];
|
||||||
|
if (!imageMetaData) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
imageMetaData.instance.sopClassUid = imageMetaData.instance.sopClassUid || image.data.string('x00080016');
|
||||||
|
imageMetaData.instance.sopInstanceUid = imageMetaData.instance.sopInstanceUid || image.data.string('x00080018');
|
||||||
|
|
||||||
|
imageMetaData.instance.rows = imageMetaData.instance.rows || image.rows;
|
||||||
|
imageMetaData.instance.columns = imageMetaData.instance.columns || image.columns;
|
||||||
|
imageMetaData.instance.pixelSpacing = imageMetaData.instance.pixelSpacing || image.data.string('x00280030');
|
||||||
|
imageMetaData.instance.frameOfReferenceUID = imageMetaData.instance.frameOfReferenceUID || image.data.string('x00200052');
|
||||||
|
imageMetaData.instance.imageOrientationPatient = imageMetaData.instance.imageOrientationPatient || image.data.string('x00200037');
|
||||||
|
imageMetaData.instance.imagePositionPatient = imageMetaData.instance.imagePositionPatient || image.data.string('x00200032');
|
||||||
|
|
||||||
|
imageMetaData.instance.sliceThickness = imageMetaData.instance.sliceThickness || image.data.string('x00180050');
|
||||||
|
imageMetaData.instance.sliceLocation = imageMetaData.instance.sliceLocation || image.data.string('x00201041');
|
||||||
|
imageMetaData.instance.tablePosition = imageMetaData.instance.tablePosition || image.data.string('x00189327');
|
||||||
|
imageMetaData.instance.spacingBetweenSlices = imageMetaData.instance.spacingBetweenSlices || image.data.string('x00180088');
|
||||||
|
|
||||||
|
imageMetaData.instance.lossyImageCompression = imageMetaData.instance.lossyImageCompression || image.data.string('x00282110');
|
||||||
|
imageMetaData.instance.lossyImageCompressionRatio = imageMetaData.instance.lossyImageCompressionRatio || image.data.string('x00282112');
|
||||||
|
|
||||||
|
imageMetaData.instance.frameIncrementPointer = imageMetaData.instance.frameIncrementPointer || image.data.string('x00280009');
|
||||||
|
imageMetaData.instance.frameTime = imageMetaData.instance.frameTime || image.data.string('x00181063');
|
||||||
|
imageMetaData.instance.frameTimeVector = imageMetaData.instance.frameTimeVector || image.data.string('x00181065');
|
||||||
|
|
||||||
|
imageMetaData.imagePlane = imageMetaData.imagePlane || getImagePlane(imageMetaData.instance);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs and returns the imagePlane given the instance
|
||||||
|
*
|
||||||
|
* @param instance The instance containing information to construct imagePlane
|
||||||
|
* @returns imagePlane The constructed imagePlane to be used in viewer easily
|
||||||
|
*/
|
||||||
|
function getImagePlane(instance) {
|
||||||
|
if (!instance.rows || !instance.columns || !instance.pixelSpacing ||
|
||||||
|
!instance.frameOfReferenceUID || !instance.imageOrientationPatient ||
|
||||||
|
!instance.imagePositionPatient) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var imageOrientation = instance.imageOrientationPatient.split('\\');
|
||||||
|
var imagePosition = instance.imagePositionPatient.split('\\');
|
||||||
|
|
||||||
|
var columnPixelSpacing = 1.0;
|
||||||
|
var rowPixelSpacing = 1.0;
|
||||||
|
if (instance.pixelSpacing) {
|
||||||
|
var split = instance.pixelSpacing.split('\\');
|
||||||
|
rowPixelSpacing = parseFloat(split[0]);
|
||||||
|
columnPixelSpacing = parseFloat(split[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
frameOfReferenceUID:
|
||||||
|
instance.frameOfReferenceUID,
|
||||||
|
rows:
|
||||||
|
instance.rows,
|
||||||
|
columns:
|
||||||
|
instance.columns,
|
||||||
|
rowCosines:
|
||||||
|
new cornerstoneMath.Vector3(parseFloat(imageOrientation[0]), parseFloat(imageOrientation[1]), parseFloat(imageOrientation[2])),
|
||||||
|
columnCosines:
|
||||||
|
new cornerstoneMath.Vector3(parseFloat(imageOrientation[3]), parseFloat(imageOrientation[4]), parseFloat(imageOrientation[5])),
|
||||||
|
imagePositionPatient:
|
||||||
|
new cornerstoneMath.Vector3(parseFloat(imagePosition[0]), parseFloat(imagePosition[1]), parseFloat(imagePosition[2])),
|
||||||
|
rowPixelSpacing:
|
||||||
|
rowPixelSpacing,
|
||||||
|
columnPixelSpacing:
|
||||||
|
columnPixelSpacing,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Looks up metaData for Cornerstone Tools given a specified type and imageId
|
* Looks up metaData for Cornerstone Tools given a specified type and imageId
|
||||||
* A type may be, e.g. 'study', or 'patient', or 'imagePlane'. These types
|
* A type may be, e.g. 'study', or 'patient', or 'imagePlane'. These types
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user