wadors :: retrieveMetadata :: palette colors

This commit is contained in:
Leonardo Campos 2017-02-21 11:50:22 -03:00
parent cb72bd17fc
commit 74b99cb28d
2 changed files with 49 additions and 15 deletions

View File

@ -97,6 +97,22 @@ function getSourceImageInstanceUid(instance) {
}
}
function getPaletteColor(server, instance, tag, lutDescriptor) {
const lut = [];
const numLutEntries = lutDescriptor[0];
const bits = lutDescriptor[2];
const data = DICOMWeb.getBulkData(instance[tag].BulkDataURI, server.requestOptions);
for (var i = 0; i < numLutEntries; i++) {
if(bits === 16) {
lut[i] = data.readUInt16LE(i*2);
} else {
lut[i] = data.readUInt8(i);
}
}
return lut;
}
/**
* Fetch palette colors for instances with "PALETTE COLOR" photometricInterpretation.
@ -105,7 +121,7 @@ function getSourceImageInstanceUid(instance) {
* @param instance {Object} The retrieved instance metadata;
* @returns {String} The ReferenceSOPInstanceUID
*/
function getPaletteColors(server, instance) {
function getPaletteColors(server, instance, lutDescriptor) {
let entry = null,
paletteUID = DICOMWeb.getString(instance['00281199']);
@ -120,9 +136,10 @@ function getPaletteColors(server, instance) {
// no entry on cache... Fetch remote data.
try {
let r, g, b;
r = DICOMWeb.getBulkData(instance['00281201'].BulkDataURI, server.requestOptions);
g = DICOMWeb.getBulkData(instance['00281202'].BulkDataURI, server.requestOptions);
b = DICOMWeb.getBulkData(instance['00281203'].BulkDataURI, server.requestOptions);
r = getPaletteColor(server, instance, '00281201', lutDescriptor);
g = getPaletteColor(server, instance, '00281202', lutDescriptor);;
b = getPaletteColor(server, instance, '00281203', lutDescriptor);;
entry = { red: r, green: g, blue: b };
if (paletteUID !== null) {
// when paletteUID is present, the entry can be cached...
@ -261,17 +278,21 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
// Get additional information if the instance uses "PALETTE COLOR" photometric interpretation
if (instanceSummary.photometricInterpretation === 'PALETTE COLOR') {
let palettes = getPaletteColors(server, instance);
const redPaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281101']));
const greenPaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281102']));
const bluePaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281103']));
const palettes = getPaletteColors(server, instance, redPaletteColorLookupTableDescriptor);
if (palettes) {
if (palettes.uid) {
instanceSummary.paletteColorLookupTableUID = palettes.uid;
}
instanceSummary.redPaletteColorLookupTable = palettes.red;
instanceSummary.greenPaletteColorLookupTable = palettes.green;
instanceSummary.bluePaletteColorLookupTable = palettes.blue;
instanceSummary.redPaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281101']));
instanceSummary.greenPaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281102']));
instanceSummary.bluePaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281103']));
instanceSummary.redPaletteColorLookupTableData = palettes.red;
instanceSummary.greenPaletteColorLookupTableData = palettes.green;
instanceSummary.bluePaletteColorLookupTableData = palettes.blue;
instanceSummary.redPaletteColorLookupTableDescriptor = redPaletteColorLookupTableDescriptor;
instanceSummary.greenPaletteColorLookupTableDescriptor = greenPaletteColorLookupTableDescriptor;
instanceSummary.bluePaletteColorLookupTableDescriptor = bluePaletteColorLookupTableDescriptor;
}
}

View File

@ -27,12 +27,20 @@ class ImageMetadataBuilder {
const tag = this.tags[key];
const multi = !!tag.multi;
const value = tag.value && multi ? tag.value.split('\\') : [tag.value];
let value = tag.value;
if((value.length === 1) && (value[0] == null)) {
if((value == null) || ((value.length === 1) && (value[0] == null))) {
return;
}
if((typeof value === 'string') && multi) {
value = value.split('\\');
}
if(!_.isArray(value)) {
value = [value];
}
json[key] = {
Value: value
};
@ -42,7 +50,7 @@ class ImageMetadataBuilder {
}
}
formatWADORSImageUrl = function(wadorsuri, frame) {
function formatWADORSImageUrl(wadorsuri, frame) {
// We need to sum 1 because WADO-RS frame number is 1-based
frame = (frame || 0) + 1;
@ -91,11 +99,16 @@ export function getWADORSImageId(instance, frame) {
.addTag('00281052', instance.rescaleIntercept)
.addTag('00281053', instance.rescaleSlope)
.addTag('00281054', instance.rescaleType)
.addTag('00281101', instance.redPaletteColorLookupTableDescriptor)
.addTag('00281102', instance.greenPaletteColorLookupTableDescriptor)
.addTag('00281103', instance.bluePaletteColorLookupTableDescriptor)
.addTag('00281201', instance.redPaletteColorLookupTableData)
.addTag('00281202', instance.greenPaletteColorLookupTableData)
.addTag('00281203', instance.bluePaletteColorLookupTableData)
.toJSON();
_.extend(imageMetadata, {
uri: uri,
sizeInBytes: instance.rows * instance.columns * (instance.bitsAllocated / 8),
instance: instance
});