@cornerstonejs/dicom-image-loader 2.0.0-beta.2 → 2.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/920.bundle.min.js +3 -0
- package/dist/920.bundle.min.js.LICENSE.txt +5 -0
- package/dist/920.bundle.min.js.map +1 -0
- package/dist/cornerstoneDICOMImageLoader.bundle.min.js +1 -1
- package/dist/cornerstoneDICOMImageLoader.bundle.min.js.map +1 -1
- package/dist/dynamic-import/{65916ef3def695744bda.wasm → 031089e563a18ada8441.wasm} +0 -0
- package/dist/dynamic-import/20fc4c659b85ccd2a9c0.wasm +0 -0
- package/dist/dynamic-import/584.min.js +2 -0
- package/dist/dynamic-import/584.min.js.map +1 -0
- package/dist/dynamic-import/610.min.js +2 -0
- package/dist/dynamic-import/610.min.js.map +1 -0
- package/dist/dynamic-import/918.min.js +2 -0
- package/dist/dynamic-import/918.min.js.map +1 -0
- package/dist/dynamic-import/958.min.js +3 -0
- package/dist/dynamic-import/958.min.js.LICENSE.txt +5 -0
- package/dist/dynamic-import/958.min.js.map +1 -0
- package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js +1 -1
- package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js.map +1 -1
- package/dist/esm/codecs/jpeg.d.ts +1 -0
- package/dist/esm/codecs/jpeg.js +890 -0
- package/dist/esm/codecs/jpegLossless.d.ts +7 -0
- package/dist/esm/codecs/jpegLossless.js +1219 -0
- package/dist/esm/src/constants/transferSyntaxes.d.ts +46 -0
- package/dist/esm/src/constants/transferSyntaxes.js +46 -0
- package/dist/esm/src/decodeImageFrameWorker.d.ts +1 -0
- package/dist/esm/src/decodeImageFrameWorker.js +262 -0
- package/dist/esm/src/externalModules.d.ts +5 -0
- package/dist/esm/src/externalModules.js +44 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.d.ts +3 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.js +77 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPixel.d.ts +2 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPixel.js +21 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPlane.d.ts +2 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPlane.js +28 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFull422ByPixel.d.ts +2 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFull422ByPixel.js +44 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPixel.d.ts +2 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPixel.js +33 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPlane.d.ts +2 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPlane.js +35 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/index.d.ts +7 -0
- package/dist/esm/src/imageLoader/colorSpaceConverters/index.js +7 -0
- package/dist/esm/src/imageLoader/configure.d.ts +3 -0
- package/dist/esm/src/imageLoader/configure.js +11 -0
- package/dist/esm/src/imageLoader/convertColorSpace.d.ts +1 -0
- package/dist/esm/src/imageLoader/convertColorSpace.js +40 -0
- package/dist/esm/src/imageLoader/createImage.d.ts +5 -0
- package/dist/esm/src/imageLoader/createImage.js +241 -0
- package/dist/esm/src/imageLoader/decodeImageFrame.d.ts +3 -0
- package/dist/esm/src/imageLoader/decodeImageFrame.js +63 -0
- package/dist/esm/src/imageLoader/decodeJPEGBaseline8BitColor.d.ts +4 -0
- package/dist/esm/src/imageLoader/decodeJPEGBaseline8BitColor.js +64 -0
- package/dist/esm/src/imageLoader/getImageFrame.d.ts +3 -0
- package/dist/esm/src/imageLoader/getImageFrame.js +26 -0
- package/dist/esm/src/imageLoader/getInstanceModule.d.ts +3 -0
- package/dist/esm/src/imageLoader/getInstanceModule.js +40 -0
- package/dist/esm/src/imageLoader/getMinMax.d.ts +4 -0
- package/dist/esm/src/imageLoader/getMinMax.js +15 -0
- package/dist/esm/src/imageLoader/getScalingParameters.d.ts +6 -0
- package/dist/esm/src/imageLoader/getScalingParameters.js +16 -0
- package/dist/esm/src/imageLoader/imageIdToURI.d.ts +1 -0
- package/dist/esm/src/imageLoader/imageIdToURI.js +4 -0
- package/dist/esm/src/imageLoader/index.d.ts +94 -0
- package/dist/esm/src/imageLoader/index.js +36 -0
- package/dist/esm/src/imageLoader/internal/index.d.ts +10 -0
- package/dist/esm/src/imageLoader/internal/index.js +10 -0
- package/dist/esm/src/imageLoader/internal/options.d.ts +3 -0
- package/dist/esm/src/imageLoader/internal/options.js +19 -0
- package/dist/esm/src/imageLoader/internal/rangeRequest.d.ts +9 -0
- package/dist/esm/src/imageLoader/internal/rangeRequest.js +121 -0
- package/dist/esm/src/imageLoader/internal/streamRequest.d.ts +2 -0
- package/dist/esm/src/imageLoader/internal/streamRequest.js +92 -0
- package/dist/esm/src/imageLoader/internal/xhrRequest.d.ts +3 -0
- package/dist/esm/src/imageLoader/internal/xhrRequest.js +102 -0
- package/dist/esm/src/imageLoader/isColorConversionRequired.d.ts +1 -0
- package/dist/esm/src/imageLoader/isColorConversionRequired.js +22 -0
- package/dist/esm/src/imageLoader/isJPEGBaseline8BitColor.d.ts +3 -0
- package/dist/esm/src/imageLoader/isJPEGBaseline8BitColor.js +9 -0
- package/dist/esm/src/imageLoader/isNMReconstructable.d.ts +1 -0
- package/dist/esm/src/imageLoader/isNMReconstructable.js +3 -0
- package/dist/esm/src/imageLoader/registerLoaders.d.ts +2 -0
- package/dist/esm/src/imageLoader/registerLoaders.js +7 -0
- package/dist/esm/src/imageLoader/wadors/combineFrameInstance.d.ts +12 -0
- package/dist/esm/src/imageLoader/wadors/combineFrameInstance.js +44 -0
- package/dist/esm/src/imageLoader/wadors/extractMultipart.d.ts +23 -0
- package/dist/esm/src/imageLoader/wadors/extractMultipart.js +73 -0
- package/dist/esm/src/imageLoader/wadors/findIndexOfString.d.ts +2 -0
- package/dist/esm/src/imageLoader/wadors/findIndexOfString.js +32 -0
- package/dist/esm/src/imageLoader/wadors/getImageQualityStatus.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadors/getImageQualityStatus.js +8 -0
- package/dist/esm/src/imageLoader/wadors/getPixelData.d.ts +26 -0
- package/dist/esm/src/imageLoader/wadors/getPixelData.js +35 -0
- package/dist/esm/src/imageLoader/wadors/getTagValue.d.ts +1 -0
- package/dist/esm/src/imageLoader/wadors/getTagValue.js +9 -0
- package/dist/esm/src/imageLoader/wadors/index.d.ts +25 -0
- package/dist/esm/src/imageLoader/wadors/index.js +21 -0
- package/dist/esm/src/imageLoader/wadors/loadImage.d.ts +25 -0
- package/dist/esm/src/imageLoader/wadors/loadImage.js +125 -0
- package/dist/esm/src/imageLoader/wadors/loadImage_test.d.ts +1 -0
- package/dist/esm/src/imageLoader/wadors/loadImage_test.js +41 -0
- package/dist/esm/src/imageLoader/wadors/metaData/NMHelpers.d.ts +5 -0
- package/dist/esm/src/imageLoader/wadors/metaData/NMHelpers.js +38 -0
- package/dist/esm/src/imageLoader/wadors/metaData/USHelpers.d.ts +19 -0
- package/dist/esm/src/imageLoader/wadors/metaData/USHelpers.js +46 -0
- package/dist/esm/src/imageLoader/wadors/metaData/extractPositioningFromMetadata.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadors/metaData/extractPositioningFromMetadata.js +18 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getFirstNumberValue.d.ts +2 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getFirstNumberValue.js +6 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getNumberString.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getNumberString.js +9 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getNumberValue.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getNumberValue.js +9 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getNumberValues.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getNumberValues.js +20 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getOverlayPlaneModule.d.ts +4 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getOverlayPlaneModule.js +38 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getSequenceItems.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getSequenceItems.js +14 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getValue.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadors/metaData/getValue.js +14 -0
- package/dist/esm/src/imageLoader/wadors/metaData/index.d.ts +7 -0
- package/dist/esm/src/imageLoader/wadors/metaData/index.js +7 -0
- package/dist/esm/src/imageLoader/wadors/metaData/metaDataProvider.d.ts +14 -0
- package/dist/esm/src/imageLoader/wadors/metaData/metaDataProvider.js +261 -0
- package/dist/esm/src/imageLoader/wadors/metaDataManager.d.ts +14 -0
- package/dist/esm/src/imageLoader/wadors/metaDataManager.js +50 -0
- package/dist/esm/src/imageLoader/wadors/register.d.ts +1 -0
- package/dist/esm/src/imageLoader/wadors/register.js +6 -0
- package/dist/esm/src/imageLoader/wadors/retrieveMultiframeMetadata.d.ts +15 -0
- package/dist/esm/src/imageLoader/wadors/retrieveMultiframeMetadata.js +26 -0
- package/dist/esm/src/imageLoader/wadouri/combineFrameInstanceDataset.d.ts +22 -0
- package/dist/esm/src/imageLoader/wadouri/combineFrameInstanceDataset.js +69 -0
- package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager.d.ts +31 -0
- package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager.js +142 -0
- package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager_test.d.ts +1 -0
- package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager_test.js +10 -0
- package/dist/esm/src/imageLoader/wadouri/dataset-from-partial-content.d.ts +6 -0
- package/dist/esm/src/imageLoader/wadouri/dataset-from-partial-content.js +56 -0
- package/dist/esm/src/imageLoader/wadouri/fileManager.d.ts +11 -0
- package/dist/esm/src/imageLoader/wadouri/fileManager.js +20 -0
- package/dist/esm/src/imageLoader/wadouri/getEncapsulatedImageFrame.d.ts +2 -0
- package/dist/esm/src/imageLoader/wadouri/getEncapsulatedImageFrame.js +33 -0
- package/dist/esm/src/imageLoader/wadouri/getPixelData.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadouri/getPixelData.js +13 -0
- package/dist/esm/src/imageLoader/wadouri/getUncompressedImageFrame.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadouri/getUncompressedImageFrame.js +47 -0
- package/dist/esm/src/imageLoader/wadouri/index.d.ts +42 -0
- package/dist/esm/src/imageLoader/wadouri/index.js +31 -0
- package/dist/esm/src/imageLoader/wadouri/loadFileRequest.d.ts +2 -0
- package/dist/esm/src/imageLoader/wadouri/loadFileRequest.js +17 -0
- package/dist/esm/src/imageLoader/wadouri/loadImage.d.ts +9 -0
- package/dist/esm/src/imageLoader/wadouri/loadImage.js +104 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/USHelpers.d.ts +2 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/USHelpers.js +44 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/extractPositioningFromDataset.d.ts +6 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/extractPositioningFromDataset.js +80 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getImagePixelModule.d.ts +4 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getImagePixelModule.js +79 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getLUTs.d.ts +4 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getLUTs.js +44 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js +30 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getNumberValues.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getNumberValues.js +16 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getOverlayPlaneModule.d.ts +4 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/getOverlayPlaneModule.js +36 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/index.d.ts +5 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/index.js +5 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/metaDataProvider.d.ts +2 -0
- package/dist/esm/src/imageLoader/wadouri/metaData/metaDataProvider.js +223 -0
- package/dist/esm/src/imageLoader/wadouri/parseImageId.d.ts +8 -0
- package/dist/esm/src/imageLoader/wadouri/parseImageId.js +20 -0
- package/dist/esm/src/imageLoader/wadouri/register.d.ts +2 -0
- package/dist/esm/src/imageLoader/wadouri/register.js +8 -0
- package/dist/esm/src/imageLoader/wadouri/retrieveMultiframeDataset.d.ts +17 -0
- package/dist/esm/src/imageLoader/wadouri/retrieveMultiframeDataset.js +57 -0
- package/dist/esm/src/imageLoader/wadouri/unpackBinaryFrame.d.ts +3 -0
- package/dist/esm/src/imageLoader/wadouri/unpackBinaryFrame.js +14 -0
- package/dist/esm/src/shared/decoders/decodeBigEndian.d.ts +4 -0
- package/dist/esm/src/shared/decoders/decodeBigEndian.js +28 -0
- package/dist/esm/src/shared/decoders/decodeHTJ2K.d.ts +5 -0
- package/dist/esm/src/shared/decoders/decodeHTJ2K.js +109 -0
- package/dist/esm/src/shared/decoders/decodeJPEG2000.d.ts +5 -0
- package/dist/esm/src/shared/decoders/decodeJPEG2000.js +93 -0
- package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-js.d.ts +6 -0
- package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-js.js +34 -0
- package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-wasm-not-yet-working.d.ts +1 -0
- package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-wasm-not-yet-working.js +1 -0
- package/dist/esm/src/shared/decoders/decodeJPEGBaseline8Bit.d.ts +3 -0
- package/dist/esm/src/shared/decoders/decodeJPEGBaseline8Bit.js +62 -0
- package/dist/esm/src/shared/decoders/decodeJPEGLS.d.ts +5 -0
- package/dist/esm/src/shared/decoders/decodeJPEGLS.js +84 -0
- package/dist/esm/src/shared/decoders/decodeJPEGLossless.d.ts +6 -0
- package/dist/esm/src/shared/decoders/decodeJPEGLossless.js +39 -0
- package/dist/esm/src/shared/decoders/decodeLittleEndian.d.ts +4 -0
- package/dist/esm/src/shared/decoders/decodeLittleEndian.js +29 -0
- package/dist/esm/src/shared/decoders/decodeRLE.d.ts +4 -0
- package/dist/esm/src/shared/decoders/decodeRLE.js +128 -0
- package/dist/esm/src/shared/getMinMax.d.ts +6 -0
- package/dist/esm/src/shared/getMinMax.js +16 -0
- package/dist/esm/src/shared/getMinMax_test.d.ts +1 -0
- package/dist/esm/src/shared/getMinMax_test.js +9 -0
- package/dist/esm/src/shared/getPixelDataTypeFromMinMax.d.ts +2 -0
- package/dist/esm/src/shared/getPixelDataTypeFromMinMax.js +22 -0
- package/dist/esm/src/shared/isColorImage.d.ts +1 -0
- package/dist/esm/src/shared/isColorImage.js +10 -0
- package/dist/esm/src/shared/scaling/bilinear.d.ts +1 -0
- package/dist/esm/src/shared/scaling/bilinear.js +32 -0
- package/dist/esm/src/shared/scaling/replicate.d.ts +1 -0
- package/dist/esm/src/shared/scaling/replicate.js +20 -0
- package/dist/esm/src/shared/scaling/scaleArray.d.ts +2 -0
- package/dist/esm/src/shared/scaling/scaleArray.js +15 -0
- package/dist/esm/src/types/DICOMLoaderDataSetWithFetchMore.d.ts +9 -0
- package/dist/esm/src/types/DICOMLoaderDataSetWithFetchMore.js +1 -0
- package/dist/esm/src/types/DICOMLoaderIImage.d.ts +12 -0
- package/dist/esm/src/types/DICOMLoaderIImage.js +1 -0
- package/dist/esm/src/types/DICOMLoaderImageOptions.d.ts +23 -0
- package/dist/esm/src/types/DICOMLoaderImageOptions.js +1 -0
- package/dist/esm/src/types/LoadRequestFunction.d.ts +1 -0
- package/dist/esm/src/types/LoadRequestFunction.js +1 -0
- package/dist/esm/src/types/LoaderDecodeOptions.d.ts +2 -0
- package/dist/esm/src/types/LoaderDecodeOptions.js +1 -0
- package/dist/esm/src/types/LoaderOptions.d.ts +18 -0
- package/dist/esm/src/types/LoaderOptions.js +1 -0
- package/dist/esm/src/types/LutType.d.ts +6 -0
- package/dist/esm/src/types/LutType.js +1 -0
- package/dist/esm/src/types/WADORSMetaData.d.ts +4 -0
- package/dist/esm/src/types/WADORSMetaData.js +1 -0
- package/dist/esm/src/types/WebWorkerTypes.d.ts +64 -0
- package/dist/esm/src/types/WebWorkerTypes.js +1 -0
- package/dist/esm/src/types/XHRRequest.d.ts +16 -0
- package/dist/esm/src/types/XHRRequest.js +1 -0
- package/dist/esm/src/types/index.d.ts +11 -0
- package/dist/esm/src/types/index.js +1 -0
- package/dist/esm/src/version.d.ts +2 -0
- package/dist/esm/src/version.js +1 -0
- package/package.json +24 -17
- package/dist/cornerstoneDICOMImageLoaderNoWebWorkers.bundle.min.js +0 -2
- package/dist/cornerstoneDICOMImageLoaderNoWebWorkers.bundle.min.js.map +0 -1
- package/dist/dynamic-import/610.min.worker.js +0 -2
- package/dist/dynamic-import/610.min.worker.js.map +0 -1
- package/dist/dynamic-import/75788f12450d4c5ed494.wasm +0 -0
- package/dist/dynamic-import/945.min.worker.js +0 -2
- package/dist/dynamic-import/945.min.worker.js.map +0 -1
- package/dist/dynamic-import/index.worker.e62ecca63f1a2e124230.worker.js +0 -2
- package/dist/dynamic-import/index.worker.e62ecca63f1a2e124230.worker.js.map +0 -1
- package/dist/index.worker.bundle.min.worker.js +0 -2
- package/dist/index.worker.bundle.min.worker.js.map +0 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import getNumberValues from './getNumberValues';
|
|
2
|
+
import isNMReconstructable from '../../isNMReconstructable';
|
|
3
|
+
function getImageTypeSubItemFromDataset(dataSet, index) {
|
|
4
|
+
const imageType = dataSet.string('x00080008');
|
|
5
|
+
if (imageType) {
|
|
6
|
+
const subTypes = imageType.split('\\');
|
|
7
|
+
if (subTypes.length > index) {
|
|
8
|
+
return subTypes[index];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
function extractOrientationFromNMMultiframeDataset(dataSet) {
|
|
14
|
+
let imageOrientationPatient;
|
|
15
|
+
const modality = dataSet.string('x00080060');
|
|
16
|
+
if (modality?.includes('NM')) {
|
|
17
|
+
const imageSubType = getImageTypeSubItemFromDataset(dataSet, 2);
|
|
18
|
+
if (imageSubType && isNMReconstructable(imageSubType)) {
|
|
19
|
+
if (dataSet.elements.x00540022) {
|
|
20
|
+
imageOrientationPatient = getNumberValues(dataSet.elements.x00540022.items[0].dataSet, 'x00200037', 6);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return imageOrientationPatient;
|
|
25
|
+
}
|
|
26
|
+
function extractPositionFromNMMultiframeDataset(dataSet) {
|
|
27
|
+
let imagePositionPatient;
|
|
28
|
+
const modality = dataSet.string('x00080060');
|
|
29
|
+
if (modality?.includes('NM')) {
|
|
30
|
+
const imageSubType = getImageTypeSubItemFromDataset(dataSet, 2);
|
|
31
|
+
if (imageSubType && isNMReconstructable(imageSubType)) {
|
|
32
|
+
if (dataSet.elements.x00540022) {
|
|
33
|
+
imagePositionPatient = getNumberValues(dataSet.elements.x00540022.items[0].dataSet, 'x00200032', 3);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return imagePositionPatient;
|
|
38
|
+
}
|
|
39
|
+
function extractOrientationFromDataset(dataSet) {
|
|
40
|
+
let imageOrientationPatient = getNumberValues(dataSet, 'x00200037', 6);
|
|
41
|
+
if (!imageOrientationPatient && dataSet.elements.x00209116) {
|
|
42
|
+
imageOrientationPatient = getNumberValues(dataSet.elements.x00209116.items[0].dataSet, 'x00200037', 6);
|
|
43
|
+
}
|
|
44
|
+
if (!imageOrientationPatient) {
|
|
45
|
+
imageOrientationPatient =
|
|
46
|
+
extractOrientationFromNMMultiframeDataset(dataSet);
|
|
47
|
+
}
|
|
48
|
+
return imageOrientationPatient;
|
|
49
|
+
}
|
|
50
|
+
function extractPositionFromDataset(dataSet) {
|
|
51
|
+
let imagePositionPatient = getNumberValues(dataSet, 'x00200032', 3);
|
|
52
|
+
if (!imagePositionPatient && dataSet.elements.x00209113) {
|
|
53
|
+
imagePositionPatient = getNumberValues(dataSet.elements.x00209113.items[0].dataSet, 'x00200032', 3);
|
|
54
|
+
}
|
|
55
|
+
if (!imagePositionPatient) {
|
|
56
|
+
imagePositionPatient = extractPositionFromNMMultiframeDataset(dataSet);
|
|
57
|
+
}
|
|
58
|
+
return imagePositionPatient;
|
|
59
|
+
}
|
|
60
|
+
function extractSpacingFromDataset(dataSet) {
|
|
61
|
+
let pixelSpacing = getNumberValues(dataSet, 'x00280030', 2);
|
|
62
|
+
if (!pixelSpacing && dataSet.elements.x00289110) {
|
|
63
|
+
pixelSpacing = getNumberValues(dataSet.elements.x00289110.items[0].dataSet, 'x00280030', 2);
|
|
64
|
+
}
|
|
65
|
+
return pixelSpacing;
|
|
66
|
+
}
|
|
67
|
+
function extractSliceThicknessFromDataset(dataSet) {
|
|
68
|
+
let sliceThickness;
|
|
69
|
+
if (dataSet.elements.x00180050) {
|
|
70
|
+
sliceThickness = dataSet.floatString('x00180050');
|
|
71
|
+
}
|
|
72
|
+
else if (dataSet.elements.x00289110 &&
|
|
73
|
+
dataSet.elements.x00289110.items.length &&
|
|
74
|
+
dataSet.elements.x00289110.items[0].dataSet.elements.x00180050) {
|
|
75
|
+
sliceThickness =
|
|
76
|
+
dataSet.elements.x00289110.items[0].dataSet.floatString('x00180050');
|
|
77
|
+
}
|
|
78
|
+
return sliceThickness;
|
|
79
|
+
}
|
|
80
|
+
export { getImageTypeSubItemFromDataset, extractOrientationFromDataset, extractPositionFromDataset, extractSpacingFromDataset, extractSliceThicknessFromDataset, };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
function getLutDescriptor(dataSet, tag) {
|
|
2
|
+
if (!dataSet.elements[tag] || dataSet.elements[tag].length !== 6) {
|
|
3
|
+
return;
|
|
4
|
+
}
|
|
5
|
+
return [
|
|
6
|
+
dataSet.uint16(tag, 0),
|
|
7
|
+
dataSet.uint16(tag, 1),
|
|
8
|
+
dataSet.uint16(tag, 2),
|
|
9
|
+
];
|
|
10
|
+
}
|
|
11
|
+
function getLutData(lutDataSet, tag, lutDescriptor) {
|
|
12
|
+
const lut = [];
|
|
13
|
+
const lutData = lutDataSet.elements[tag];
|
|
14
|
+
for (let i = 0; i < lutDescriptor[0]; i++) {
|
|
15
|
+
if (lutDescriptor[2] === 16) {
|
|
16
|
+
lut[i] = lutDataSet.uint16(tag, i);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
lut[i] = lutDataSet.byteArray[i + lutData.dataOffset];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return lut;
|
|
23
|
+
}
|
|
24
|
+
function populatePaletteColorLut(dataSet, imagePixelModule) {
|
|
25
|
+
imagePixelModule.redPaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281101');
|
|
26
|
+
imagePixelModule.greenPaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281102');
|
|
27
|
+
imagePixelModule.bluePaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281103');
|
|
28
|
+
if (imagePixelModule.redPaletteColorLookupTableDescriptor[0] === 0) {
|
|
29
|
+
imagePixelModule.redPaletteColorLookupTableDescriptor[0] = 65536;
|
|
30
|
+
imagePixelModule.greenPaletteColorLookupTableDescriptor[0] = 65536;
|
|
31
|
+
imagePixelModule.bluePaletteColorLookupTableDescriptor[0] = 65536;
|
|
32
|
+
}
|
|
33
|
+
const numLutEntries = imagePixelModule.redPaletteColorLookupTableDescriptor[0];
|
|
34
|
+
const lutData = dataSet.elements.x00281201;
|
|
35
|
+
const lutBitsAllocated = lutData.length === numLutEntries ? 8 : 16;
|
|
36
|
+
if (imagePixelModule.redPaletteColorLookupTableDescriptor[2] !==
|
|
37
|
+
lutBitsAllocated) {
|
|
38
|
+
imagePixelModule.redPaletteColorLookupTableDescriptor[2] = lutBitsAllocated;
|
|
39
|
+
imagePixelModule.greenPaletteColorLookupTableDescriptor[2] =
|
|
40
|
+
lutBitsAllocated;
|
|
41
|
+
imagePixelModule.bluePaletteColorLookupTableDescriptor[2] =
|
|
42
|
+
lutBitsAllocated;
|
|
43
|
+
}
|
|
44
|
+
imagePixelModule.redPaletteColorLookupTableData = getLutData(dataSet, 'x00281201', imagePixelModule.redPaletteColorLookupTableDescriptor);
|
|
45
|
+
imagePixelModule.greenPaletteColorLookupTableData = getLutData(dataSet, 'x00281202', imagePixelModule.greenPaletteColorLookupTableDescriptor);
|
|
46
|
+
imagePixelModule.bluePaletteColorLookupTableData = getLutData(dataSet, 'x00281203', imagePixelModule.bluePaletteColorLookupTableDescriptor);
|
|
47
|
+
}
|
|
48
|
+
function populateSmallestLargestPixelValues(dataSet, imagePixelModule) {
|
|
49
|
+
const pixelRepresentation = dataSet.uint16('x00280103');
|
|
50
|
+
if (pixelRepresentation === 0) {
|
|
51
|
+
imagePixelModule.smallestPixelValue = dataSet.uint16('x00280106');
|
|
52
|
+
imagePixelModule.largestPixelValue = dataSet.uint16('x00280107');
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
imagePixelModule.smallestPixelValue = dataSet.int16('x00280106');
|
|
56
|
+
imagePixelModule.largestPixelValue = dataSet.int16('x00280107');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function getImagePixelModule(dataSet) {
|
|
60
|
+
const imagePixelModule = {
|
|
61
|
+
samplesPerPixel: dataSet.uint16('x00280002'),
|
|
62
|
+
photometricInterpretation: dataSet.string('x00280004'),
|
|
63
|
+
rows: dataSet.uint16('x00280010'),
|
|
64
|
+
columns: dataSet.uint16('x00280011'),
|
|
65
|
+
bitsAllocated: dataSet.uint16('x00280100'),
|
|
66
|
+
bitsStored: dataSet.uint16('x00280101'),
|
|
67
|
+
highBit: dataSet.uint16('x00280102'),
|
|
68
|
+
pixelRepresentation: dataSet.uint16('x00280103'),
|
|
69
|
+
planarConfiguration: dataSet.uint16('x00280006'),
|
|
70
|
+
pixelAspectRatio: dataSet.string('x00280034'),
|
|
71
|
+
};
|
|
72
|
+
populateSmallestLargestPixelValues(dataSet, imagePixelModule);
|
|
73
|
+
if (imagePixelModule.photometricInterpretation === 'PALETTE COLOR' &&
|
|
74
|
+
dataSet.elements.x00281101) {
|
|
75
|
+
populatePaletteColorLut(dataSet, imagePixelModule);
|
|
76
|
+
}
|
|
77
|
+
return imagePixelModule;
|
|
78
|
+
}
|
|
79
|
+
export default getImagePixelModule;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
function getLUT(pixelRepresentation, lutDataSet) {
|
|
2
|
+
let numLUTEntries = lutDataSet.uint16('x00283002', 0);
|
|
3
|
+
if (numLUTEntries === 0) {
|
|
4
|
+
numLUTEntries = 65535;
|
|
5
|
+
}
|
|
6
|
+
let firstValueMapped = 0;
|
|
7
|
+
if (pixelRepresentation === 0) {
|
|
8
|
+
firstValueMapped = lutDataSet.uint16('x00283002', 1);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
firstValueMapped = lutDataSet.int16('x00283002', 1);
|
|
12
|
+
}
|
|
13
|
+
const numBitsPerEntry = lutDataSet.uint16('x00283002', 2);
|
|
14
|
+
const lut = {
|
|
15
|
+
id: '1',
|
|
16
|
+
firstValueMapped,
|
|
17
|
+
numBitsPerEntry,
|
|
18
|
+
lut: [],
|
|
19
|
+
};
|
|
20
|
+
for (let i = 0; i < numLUTEntries; i++) {
|
|
21
|
+
if (pixelRepresentation === 0) {
|
|
22
|
+
lut.lut[i] = lutDataSet.uint16('x00283006', i);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
lut.lut[i] = lutDataSet.int16('x00283006', i);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return lut;
|
|
29
|
+
}
|
|
30
|
+
function getLUTs(pixelRepresentation, lutSequence) {
|
|
31
|
+
if (!lutSequence || !lutSequence.items || !lutSequence.items.length) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const luts = [];
|
|
35
|
+
for (let i = 0; i < lutSequence.items.length; i++) {
|
|
36
|
+
const lutDataSet = lutSequence.items[i].dataSet;
|
|
37
|
+
const lut = getLUT(pixelRepresentation, lutDataSet);
|
|
38
|
+
if (lut) {
|
|
39
|
+
luts.push(lut);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return luts;
|
|
43
|
+
}
|
|
44
|
+
export default getLUTs;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
function getMinStoredPixelValue(dataSet) {
|
|
2
|
+
const pixelRepresentation = dataSet.uint16('x00280103');
|
|
3
|
+
const bitsStored = dataSet.uint16('x00280101');
|
|
4
|
+
if (pixelRepresentation === 0) {
|
|
5
|
+
return 0;
|
|
6
|
+
}
|
|
7
|
+
return -1 << (bitsStored - 1);
|
|
8
|
+
}
|
|
9
|
+
function getModalityLUTOutputPixelRepresentation(dataSet) {
|
|
10
|
+
const sopClassUID = dataSet.string('x00080016');
|
|
11
|
+
if (sopClassUID === '1.2.840.10008.5.1.4.1.1.2' ||
|
|
12
|
+
sopClassUID === '1.2.840.10008.5.1.4.1.1.2.1') {
|
|
13
|
+
return 1;
|
|
14
|
+
}
|
|
15
|
+
const rescaleIntercept = dataSet.floatString('x00281052');
|
|
16
|
+
const rescaleSlope = dataSet.floatString('x00281053');
|
|
17
|
+
if (rescaleIntercept !== undefined && rescaleSlope !== undefined) {
|
|
18
|
+
const minStoredPixelValue = getMinStoredPixelValue(dataSet);
|
|
19
|
+
const minModalityLutValue = minStoredPixelValue * rescaleSlope + rescaleIntercept;
|
|
20
|
+
if (minModalityLutValue < 0) {
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
if (dataSet.elements.x00283000 && dataSet.elements.x00283000.length > 0) {
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
return dataSet.uint16('x00280103');
|
|
29
|
+
}
|
|
30
|
+
export default getModalityLUTOutputPixelRepresentation;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function getNumberValues(dataSet, tag, minimumLength) {
|
|
2
|
+
const values = [];
|
|
3
|
+
const valueAsString = dataSet.string(tag);
|
|
4
|
+
if (!valueAsString) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const split = valueAsString.split('\\');
|
|
8
|
+
if (minimumLength && split.length < minimumLength) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
for (let i = 0; i < split.length; i++) {
|
|
12
|
+
values.push(parseFloat(split[i]));
|
|
13
|
+
}
|
|
14
|
+
return values;
|
|
15
|
+
}
|
|
16
|
+
export default getNumberValues;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export default function getOverlayPlaneModule(dataSet) {
|
|
2
|
+
const overlays = [];
|
|
3
|
+
for (let overlayGroup = 0x00; overlayGroup <= 0x1e; overlayGroup += 0x02) {
|
|
4
|
+
let groupStr = `x60${overlayGroup.toString(16)}`;
|
|
5
|
+
if (groupStr.length === 4) {
|
|
6
|
+
groupStr = `x600${overlayGroup.toString(16)}`;
|
|
7
|
+
}
|
|
8
|
+
const data = dataSet.elements[`${groupStr}3000`];
|
|
9
|
+
if (!data) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
const pixelData = [];
|
|
13
|
+
for (let i = 0; i < data.length; i++) {
|
|
14
|
+
for (let k = 0; k < 8; k++) {
|
|
15
|
+
const byte_as_int = dataSet.byteArray[data.dataOffset + i];
|
|
16
|
+
pixelData[i * 8 + k] = (byte_as_int >> k) & 0b1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
overlays.push({
|
|
20
|
+
rows: dataSet.uint16(`${groupStr}0010`),
|
|
21
|
+
columns: dataSet.uint16(`${groupStr}0011`),
|
|
22
|
+
type: dataSet.string(`${groupStr}0040`),
|
|
23
|
+
x: dataSet.int16(`${groupStr}0050`, 1) - 1,
|
|
24
|
+
y: dataSet.int16(`${groupStr}0050`, 0) - 1,
|
|
25
|
+
pixelData,
|
|
26
|
+
description: dataSet.string(`${groupStr}0022`),
|
|
27
|
+
label: dataSet.string(`${groupStr}1500`),
|
|
28
|
+
roiArea: dataSet.string(`${groupStr}1301`),
|
|
29
|
+
roiMean: dataSet.string(`${groupStr}1302`),
|
|
30
|
+
roiStandardDeviation: dataSet.string(`${groupStr}1303`),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
overlays,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as getImagePixelModule } from './getImagePixelModule';
|
|
2
|
+
export { default as getLUTs } from './getLUTs';
|
|
3
|
+
export { default as getModalityLUTOutputPixelRepresentation } from './getModalityLUTOutputPixelRepresentation';
|
|
4
|
+
export { default as getNumberValues } from './getNumberValues';
|
|
5
|
+
export { default as metaDataProvider } from './metaDataProvider';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as getImagePixelModule } from './getImagePixelModule';
|
|
2
|
+
export { default as getLUTs } from './getLUTs';
|
|
3
|
+
export { default as getModalityLUTOutputPixelRepresentation } from './getModalityLUTOutputPixelRepresentation';
|
|
4
|
+
export { default as getNumberValues } from './getNumberValues';
|
|
5
|
+
export { default as metaDataProvider } from './metaDataProvider';
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import external from '../../../externalModules';
|
|
2
|
+
import getNumberValues from './getNumberValues';
|
|
3
|
+
import parseImageId from '../parseImageId';
|
|
4
|
+
import dataSetCacheManager from '../dataSetCacheManager';
|
|
5
|
+
import getImagePixelModule from './getImagePixelModule';
|
|
6
|
+
import getOverlayPlaneModule from './getOverlayPlaneModule';
|
|
7
|
+
import getLUTs from './getLUTs';
|
|
8
|
+
import getModalityLUTOutputPixelRepresentation from './getModalityLUTOutputPixelRepresentation';
|
|
9
|
+
import { getDirectFrameInformation } from '../combineFrameInstanceDataset';
|
|
10
|
+
import multiframeDataset from '../retrieveMultiframeDataset';
|
|
11
|
+
import { getImageTypeSubItemFromDataset, extractOrientationFromDataset, extractPositionFromDataset, extractSpacingFromDataset, extractSliceThicknessFromDataset, } from './extractPositioningFromDataset';
|
|
12
|
+
import isNMReconstructable from '../../isNMReconstructable';
|
|
13
|
+
import { getInstanceModule, instanceModuleNames, } from '../../getInstanceModule';
|
|
14
|
+
import { getUSEnhancedRegions } from './USHelpers';
|
|
15
|
+
function metaDataProvider(type, imageId) {
|
|
16
|
+
const { MetadataModules } = external.cornerstone.Enums;
|
|
17
|
+
const { dicomParser } = external;
|
|
18
|
+
if (Array.isArray(imageId)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const parsedImageId = parseImageId(imageId);
|
|
22
|
+
if (type === MetadataModules.MULTIFRAME) {
|
|
23
|
+
const multiframeData = multiframeDataset.retrieveMultiframeDataset(parsedImageId.url);
|
|
24
|
+
if (!multiframeData.dataSet) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const multiframeInfo = getDirectFrameInformation(multiframeData.dataSet, multiframeData.frame);
|
|
28
|
+
return multiframeInfo;
|
|
29
|
+
}
|
|
30
|
+
let url = parsedImageId.url;
|
|
31
|
+
if (parsedImageId.frame) {
|
|
32
|
+
url = `${url}&frame=${parsedImageId.frame}`;
|
|
33
|
+
}
|
|
34
|
+
const dataSet = dataSetCacheManager.get(url);
|
|
35
|
+
if (!dataSet) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (type === MetadataModules.GENERAL_STUDY) {
|
|
39
|
+
return {
|
|
40
|
+
studyDescription: dataSet.string('x00081030'),
|
|
41
|
+
studyDate: dicomParser.parseDA(dataSet.string('x00080020')),
|
|
42
|
+
studyTime: dicomParser.parseTM(dataSet.string('x00080030') || ''),
|
|
43
|
+
accessionNumber: dataSet.string('x00080050'),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (type === MetadataModules.GENERAL_SERIES) {
|
|
47
|
+
return {
|
|
48
|
+
modality: dataSet.string('x00080060'),
|
|
49
|
+
seriesInstanceUID: dataSet.string('x0020000e'),
|
|
50
|
+
seriesNumber: dataSet.intString('x00200011'),
|
|
51
|
+
studyInstanceUID: dataSet.string('x0020000d'),
|
|
52
|
+
seriesDate: dicomParser.parseDA(dataSet.string('x00080021')),
|
|
53
|
+
seriesTime: dicomParser.parseTM(dataSet.string('x00080031') || ''),
|
|
54
|
+
acquisitionDate: dicomParser.parseDA(dataSet.string('x00080022')),
|
|
55
|
+
acquisitionTime: dicomParser.parseTM(dataSet.string('x00080032') || ''),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (type === MetadataModules.GENERAL_IMAGE) {
|
|
59
|
+
return {
|
|
60
|
+
sopInstanceUID: dataSet.string('x00080018'),
|
|
61
|
+
instanceNumber: dataSet.intString('x00200013'),
|
|
62
|
+
lossyImageCompression: dataSet.string('x00282110'),
|
|
63
|
+
lossyImageCompressionRatio: dataSet.floatString('x00282112'),
|
|
64
|
+
lossyImageCompressionMethod: dataSet.string('x00282114'),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (type === MetadataModules.PATIENT) {
|
|
68
|
+
return {
|
|
69
|
+
patientID: dataSet.string('x00100020'),
|
|
70
|
+
patientName: dataSet.string('x00100010'),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (type === MetadataModules.PATIENT_STUDY) {
|
|
74
|
+
return {
|
|
75
|
+
patientAge: dataSet.intString('x00101010'),
|
|
76
|
+
patientSize: dataSet.floatString('x00101020'),
|
|
77
|
+
patientSex: dataSet.string('x00100040'),
|
|
78
|
+
patientWeight: dataSet.floatString('x00101030'),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (type === MetadataModules.NM_MULTIFRAME_GEOMETRY) {
|
|
82
|
+
const modality = dataSet.string('x00080060');
|
|
83
|
+
const imageSubType = getImageTypeSubItemFromDataset(dataSet, 2);
|
|
84
|
+
return {
|
|
85
|
+
modality,
|
|
86
|
+
imageType: dataSet.string('x00080008'),
|
|
87
|
+
imageSubType,
|
|
88
|
+
imageOrientationPatient: extractOrientationFromDataset(dataSet),
|
|
89
|
+
imagePositionPatient: extractPositionFromDataset(dataSet),
|
|
90
|
+
sliceThickness: extractSliceThicknessFromDataset(dataSet),
|
|
91
|
+
pixelSpacing: extractSpacingFromDataset(dataSet),
|
|
92
|
+
numberOfFrames: dataSet.uint16('x00280008'),
|
|
93
|
+
isNMReconstructable: isNMReconstructable(imageSubType) && modality.includes('NM'),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (type === MetadataModules.IMAGE_PLANE) {
|
|
97
|
+
const imageOrientationPatient = extractOrientationFromDataset(dataSet);
|
|
98
|
+
const imagePositionPatient = extractPositionFromDataset(dataSet);
|
|
99
|
+
const pixelSpacing = extractSpacingFromDataset(dataSet);
|
|
100
|
+
const sliceThickness = extractSliceThicknessFromDataset(dataSet);
|
|
101
|
+
let columnPixelSpacing = null;
|
|
102
|
+
let rowPixelSpacing = null;
|
|
103
|
+
if (pixelSpacing) {
|
|
104
|
+
rowPixelSpacing = pixelSpacing[0];
|
|
105
|
+
columnPixelSpacing = pixelSpacing[1];
|
|
106
|
+
}
|
|
107
|
+
let rowCosines = null;
|
|
108
|
+
let columnCosines = null;
|
|
109
|
+
if (imageOrientationPatient) {
|
|
110
|
+
rowCosines = [
|
|
111
|
+
parseFloat(imageOrientationPatient[0]),
|
|
112
|
+
parseFloat(imageOrientationPatient[1]),
|
|
113
|
+
parseFloat(imageOrientationPatient[2]),
|
|
114
|
+
];
|
|
115
|
+
columnCosines = [
|
|
116
|
+
parseFloat(imageOrientationPatient[3]),
|
|
117
|
+
parseFloat(imageOrientationPatient[4]),
|
|
118
|
+
parseFloat(imageOrientationPatient[5]),
|
|
119
|
+
];
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
frameOfReferenceUID: dataSet.string('x00200052'),
|
|
123
|
+
rows: dataSet.uint16('x00280010'),
|
|
124
|
+
columns: dataSet.uint16('x00280011'),
|
|
125
|
+
imageOrientationPatient,
|
|
126
|
+
rowCosines,
|
|
127
|
+
columnCosines,
|
|
128
|
+
imagePositionPatient,
|
|
129
|
+
sliceThickness,
|
|
130
|
+
sliceLocation: dataSet.floatString('x00201041'),
|
|
131
|
+
pixelSpacing,
|
|
132
|
+
rowPixelSpacing,
|
|
133
|
+
columnPixelSpacing,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (type === MetadataModules.CINE) {
|
|
137
|
+
return {
|
|
138
|
+
frameTime: dataSet.floatString('x00181063'),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (type === MetadataModules.IMAGE_PIXEL) {
|
|
142
|
+
return getImagePixelModule(dataSet);
|
|
143
|
+
}
|
|
144
|
+
if (type === MetadataModules.VOI_LUT) {
|
|
145
|
+
const modalityLUTOutputPixelRepresentation = getModalityLUTOutputPixelRepresentation(dataSet);
|
|
146
|
+
return {
|
|
147
|
+
windowCenter: getNumberValues(dataSet, 'x00281050', 1),
|
|
148
|
+
windowWidth: getNumberValues(dataSet, 'x00281051', 1),
|
|
149
|
+
voiLUTSequence: getLUTs(modalityLUTOutputPixelRepresentation, dataSet.elements.x00283010),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (type === MetadataModules.MODALITY_LUT) {
|
|
153
|
+
return {
|
|
154
|
+
rescaleIntercept: dataSet.floatString('x00281052'),
|
|
155
|
+
rescaleSlope: dataSet.floatString('x00281053'),
|
|
156
|
+
rescaleType: dataSet.string('x00281054'),
|
|
157
|
+
modalityLUTSequence: getLUTs(dataSet.uint16('x00280103'), dataSet.elements.x00283000),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
if (type === MetadataModules.SOP_COMMON) {
|
|
161
|
+
return {
|
|
162
|
+
sopClassUID: dataSet.string('x00080016'),
|
|
163
|
+
sopInstanceUID: dataSet.string('x00080018'),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (type === MetadataModules.PET_ISOTOPE) {
|
|
167
|
+
const radiopharmaceuticalInfo = dataSet.elements.x00540016;
|
|
168
|
+
if (radiopharmaceuticalInfo === undefined) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const firstRadiopharmaceuticalInfoDataSet = radiopharmaceuticalInfo.items[0].dataSet;
|
|
172
|
+
return {
|
|
173
|
+
radiopharmaceuticalInfo: {
|
|
174
|
+
radiopharmaceuticalStartTime: dicomParser.parseTM(firstRadiopharmaceuticalInfoDataSet.string('x00181072') || ''),
|
|
175
|
+
radionuclideTotalDose: firstRadiopharmaceuticalInfoDataSet.floatString('x00181074'),
|
|
176
|
+
radionuclideHalfLife: firstRadiopharmaceuticalInfoDataSet.floatString('x00181075'),
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
if (type === MetadataModules.OVERLAY_PLANE) {
|
|
181
|
+
return getOverlayPlaneModule(dataSet);
|
|
182
|
+
}
|
|
183
|
+
if (type === 'transferSyntax') {
|
|
184
|
+
let transferSyntaxUID;
|
|
185
|
+
try {
|
|
186
|
+
transferSyntaxUID = dataSet.string('x00020010');
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
transferSyntaxUID,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (type === MetadataModules.PET_SERIES) {
|
|
195
|
+
return {
|
|
196
|
+
correctedImage: dataSet.string('x00280051'),
|
|
197
|
+
units: dataSet.string('x00541001'),
|
|
198
|
+
decayCorrection: dataSet.string('x00541102'),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
if (type === MetadataModules.PET_IMAGE) {
|
|
202
|
+
return {
|
|
203
|
+
frameReferenceTime: dataSet.floatString(dataSet.string('x00541300') || ''),
|
|
204
|
+
actualFrameDuration: dataSet.intString(dataSet.string('x00181242')),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
if (type === MetadataModules.ULTRASOUND_ENHANCED_REGION) {
|
|
208
|
+
return getUSEnhancedRegions(dataSet);
|
|
209
|
+
}
|
|
210
|
+
if (type === MetadataModules.CALIBRATION) {
|
|
211
|
+
const modality = dataSet.string('x00080060');
|
|
212
|
+
if (modality === 'US') {
|
|
213
|
+
const enhancedRegion = getUSEnhancedRegions(dataSet);
|
|
214
|
+
return {
|
|
215
|
+
sequenceOfUltrasoundRegions: enhancedRegion,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (type === 'instance') {
|
|
220
|
+
return getInstanceModule(imageId, metaDataProvider, instanceModuleNames);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
export default metaDataProvider;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
function parseImageId(imageId) {
|
|
2
|
+
const firstColonIndex = imageId.indexOf(':');
|
|
3
|
+
let url = imageId.substring(firstColonIndex + 1);
|
|
4
|
+
const frameIndex = url.indexOf('frame=');
|
|
5
|
+
let frame;
|
|
6
|
+
if (frameIndex !== -1) {
|
|
7
|
+
const frameStr = url.substring(frameIndex + 6);
|
|
8
|
+
frame = parseInt(frameStr, 10);
|
|
9
|
+
url = url.substring(0, frameIndex - 1);
|
|
10
|
+
}
|
|
11
|
+
const scheme = imageId.substring(0, firstColonIndex);
|
|
12
|
+
const adjustedFrame = frame !== undefined ? frame - 1 : undefined;
|
|
13
|
+
return {
|
|
14
|
+
scheme,
|
|
15
|
+
url,
|
|
16
|
+
frame,
|
|
17
|
+
pixelDataFrame: adjustedFrame,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export default parseImageId;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { loadImage } from './loadImage';
|
|
2
|
+
import { metaDataProvider } from './metaData/index';
|
|
3
|
+
export default function (cornerstone) {
|
|
4
|
+
cornerstone.registerImageLoader('dicomweb', loadImage);
|
|
5
|
+
cornerstone.registerImageLoader('wadouri', loadImage);
|
|
6
|
+
cornerstone.registerImageLoader('dicomfile', loadImage);
|
|
7
|
+
cornerstone.metaData.addProvider(metaDataProvider);
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare function _get(uri: any): {
|
|
2
|
+
dataSet: import("dicom-parser").DataSet;
|
|
3
|
+
cacheCount: number;
|
|
4
|
+
};
|
|
5
|
+
declare function isMultiframeDataset(uri: any): boolean;
|
|
6
|
+
declare function retrieveMultiframeDataset(uri: any): {
|
|
7
|
+
dataSet: any;
|
|
8
|
+
frame: number;
|
|
9
|
+
};
|
|
10
|
+
declare function generateMultiframeWADOURIs(uri: any): any[];
|
|
11
|
+
declare const _default: {
|
|
12
|
+
_get: typeof _get;
|
|
13
|
+
generateMultiframeWADOURIs: typeof generateMultiframeWADOURIs;
|
|
14
|
+
retrieveMultiframeDataset: typeof retrieveMultiframeDataset;
|
|
15
|
+
isMultiframeDataset: typeof isMultiframeDataset;
|
|
16
|
+
};
|
|
17
|
+
export default _default;
|