wadors :: retrieveMetadata :: palette colors
This commit is contained in:
parent
cb72bd17fc
commit
74b99cb28d
@ -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.
|
* Fetch palette colors for instances with "PALETTE COLOR" photometricInterpretation.
|
||||||
@ -105,7 +121,7 @@ function getSourceImageInstanceUid(instance) {
|
|||||||
* @param instance {Object} The retrieved instance metadata;
|
* @param instance {Object} The retrieved instance metadata;
|
||||||
* @returns {String} The ReferenceSOPInstanceUID
|
* @returns {String} The ReferenceSOPInstanceUID
|
||||||
*/
|
*/
|
||||||
function getPaletteColors(server, instance) {
|
function getPaletteColors(server, instance, lutDescriptor) {
|
||||||
|
|
||||||
let entry = null,
|
let entry = null,
|
||||||
paletteUID = DICOMWeb.getString(instance['00281199']);
|
paletteUID = DICOMWeb.getString(instance['00281199']);
|
||||||
@ -120,9 +136,10 @@ function getPaletteColors(server, instance) {
|
|||||||
// no entry on cache... Fetch remote data.
|
// no entry on cache... Fetch remote data.
|
||||||
try {
|
try {
|
||||||
let r, g, b;
|
let r, g, b;
|
||||||
r = DICOMWeb.getBulkData(instance['00281201'].BulkDataURI, server.requestOptions);
|
r = getPaletteColor(server, instance, '00281201', lutDescriptor);
|
||||||
g = DICOMWeb.getBulkData(instance['00281202'].BulkDataURI, server.requestOptions);
|
g = getPaletteColor(server, instance, '00281202', lutDescriptor);;
|
||||||
b = DICOMWeb.getBulkData(instance['00281203'].BulkDataURI, server.requestOptions);
|
b = getPaletteColor(server, instance, '00281203', lutDescriptor);;
|
||||||
|
|
||||||
entry = { red: r, green: g, blue: b };
|
entry = { red: r, green: g, blue: b };
|
||||||
if (paletteUID !== null) {
|
if (paletteUID !== null) {
|
||||||
// when paletteUID is present, the entry can be cached...
|
// 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
|
// Get additional information if the instance uses "PALETTE COLOR" photometric interpretation
|
||||||
if (instanceSummary.photometricInterpretation === 'PALETTE COLOR') {
|
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) {
|
||||||
if (palettes.uid) {
|
if (palettes.uid) {
|
||||||
instanceSummary.paletteColorLookupTableUID = palettes.uid;
|
instanceSummary.paletteColorLookupTableUID = palettes.uid;
|
||||||
}
|
}
|
||||||
instanceSummary.redPaletteColorLookupTable = palettes.red;
|
instanceSummary.redPaletteColorLookupTableData = palettes.red;
|
||||||
instanceSummary.greenPaletteColorLookupTable = palettes.green;
|
instanceSummary.greenPaletteColorLookupTableData = palettes.green;
|
||||||
instanceSummary.bluePaletteColorLookupTable = palettes.blue;
|
instanceSummary.bluePaletteColorLookupTableData = palettes.blue;
|
||||||
instanceSummary.redPaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281101']));
|
instanceSummary.redPaletteColorLookupTableDescriptor = redPaletteColorLookupTableDescriptor;
|
||||||
instanceSummary.greenPaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281102']));
|
instanceSummary.greenPaletteColorLookupTableDescriptor = greenPaletteColorLookupTableDescriptor;
|
||||||
instanceSummary.bluePaletteColorLookupTableDescriptor = parseFloatArray(DICOMWeb.getString(instance['00281103']));
|
instanceSummary.bluePaletteColorLookupTableDescriptor = bluePaletteColorLookupTableDescriptor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,12 +27,20 @@ class ImageMetadataBuilder {
|
|||||||
|
|
||||||
const tag = this.tags[key];
|
const tag = this.tags[key];
|
||||||
const multi = !!tag.multi;
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((typeof value === 'string') && multi) {
|
||||||
|
value = value.split('\\');
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!_.isArray(value)) {
|
||||||
|
value = [value];
|
||||||
|
}
|
||||||
|
|
||||||
json[key] = {
|
json[key] = {
|
||||||
Value: value
|
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
|
// We need to sum 1 because WADO-RS frame number is 1-based
|
||||||
frame = (frame || 0) + 1;
|
frame = (frame || 0) + 1;
|
||||||
|
|
||||||
@ -91,11 +99,16 @@ export function getWADORSImageId(instance, frame) {
|
|||||||
.addTag('00281052', instance.rescaleIntercept)
|
.addTag('00281052', instance.rescaleIntercept)
|
||||||
.addTag('00281053', instance.rescaleSlope)
|
.addTag('00281053', instance.rescaleSlope)
|
||||||
.addTag('00281054', instance.rescaleType)
|
.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();
|
.toJSON();
|
||||||
|
|
||||||
_.extend(imageMetadata, {
|
_.extend(imageMetadata, {
|
||||||
uri: uri,
|
uri: uri,
|
||||||
sizeInBytes: instance.rows * instance.columns * (instance.bitsAllocated / 8),
|
|
||||||
instance: instance
|
instance: instance
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user