@cornerstonejs/nifti-volume-loader 2.0.0-beta.6 → 2.0.0-beta.8
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/esm/NiftiImageVolume.d.ts +1 -1
- package/dist/esm/NiftiImageVolume.js.map +1 -1
- package/dist/esm/helpers/convert.d.ts +1 -1
- package/dist/esm/helpers/convert.js +3 -1
- package/dist/esm/helpers/convert.js.map +1 -1
- package/dist/esm/helpers/fetchAndAllocateNiftiVolume.d.ts +0 -1
- package/dist/esm/helpers/fetchAndAllocateNiftiVolume.js +9 -77
- package/dist/esm/helpers/fetchAndAllocateNiftiVolume.js.map +1 -1
- package/dist/esm/helpers/makeVolumeMetadata.d.ts +5 -1
- package/dist/esm/helpers/makeVolumeMetadata.js +41 -27
- package/dist/esm/helpers/makeVolumeMetadata.js.map +1 -1
- package/dist/esm/helpers/modalityScaleNifti.d.ts +5 -1
- package/dist/esm/helpers/modalityScaleNifti.js +143 -6
- package/dist/esm/helpers/modalityScaleNifti.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.LICENSE.txt +3 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -12,7 +12,7 @@ type NiftiImageProperties = {
|
|
|
12
12
|
export default class NiftiImageVolume extends ImageVolume {
|
|
13
13
|
loadStatus: LoadStatus;
|
|
14
14
|
controller: AbortController;
|
|
15
|
-
constructor(imageVolumeProperties: Types.
|
|
15
|
+
constructor(imageVolumeProperties: Types.ImageVolumeProps, streamingProperties: NiftiImageProperties);
|
|
16
16
|
cancelLoading: () => void;
|
|
17
17
|
clearLoadCallbacks(): void;
|
|
18
18
|
load: (callback: (...args: unknown[]) => void, priority?: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NiftiImageVolume.js","sourceRoot":"","sources":["../../src/NiftiImageVolume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAkBzD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IAIvD,YACE,
|
|
1
|
+
{"version":3,"file":"NiftiImageVolume.js","sourceRoot":"","sources":["../../src/NiftiImageVolume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAkBzD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IAIvD,YACE,qBAA6C,EAC7C,mBAAyC;QAEzC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAWxB,kBAAa,GAAG,GAAG,EAAE;YAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;YAE5B,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAGD,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;YAG3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC;QAeK,SAAI,GAAG,CACZ,QAAsC,EACtC,QAAQ,GAAG,CAAC,EACN,EAAE;QAMV,CAAC,CAAC;QA/CA,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC;IACnD,CAAC;IA0BM,kBAAkB;QACvB,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;IACjC,CAAC;IAmBM,OAAO;QACZ,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { getShouldUseSharedArrayBuffer } from '@cornerstonejs/core';
|
|
1
2
|
import { parseAffineMatrix } from './affineUtilities';
|
|
2
3
|
const invertDataPerFrame = (dimensions, imageDataArray) => {
|
|
3
4
|
let TypedArrayConstructor;
|
|
4
5
|
let bytesPerVoxel;
|
|
5
6
|
if (imageDataArray instanceof Uint8Array ||
|
|
6
7
|
imageDataArray instanceof ArrayBuffer ||
|
|
7
|
-
|
|
8
|
+
(getShouldUseSharedArrayBuffer() &&
|
|
9
|
+
imageDataArray instanceof SharedArrayBuffer)) {
|
|
8
10
|
TypedArrayConstructor = Uint8Array;
|
|
9
11
|
bytesPerVoxel = 1;
|
|
10
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/helpers/convert.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/helpers/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import NiftiImageVolume from '../NiftiImageVolume';
|
|
2
2
|
export declare const urlsMap: Map<any, any>;
|
|
3
|
-
export declare const getTypedNiftiArray: (datatypeCode: any, niftiImageBuffer: any) => Float32Array | Int16Array | Uint8Array;
|
|
4
3
|
export default function fetchAndAllocateNiftiVolume(volumeId: string): Promise<NiftiImageVolume>;
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import * as NiftiReader from 'nifti-reader-js';
|
|
2
|
-
import {
|
|
3
|
-
import { vec3 } from 'gl-matrix';
|
|
4
|
-
import makeVolumeMetadata from './makeVolumeMetadata';
|
|
2
|
+
import { eventTarget, triggerEvent } from '@cornerstonejs/core';
|
|
5
3
|
import NiftiImageVolume from '../NiftiImageVolume';
|
|
6
|
-
import
|
|
7
|
-
import { invertDataPerFrame, rasToLps } from './convert';
|
|
8
|
-
import modalityScaleNifti from './modalityScaleNifti';
|
|
4
|
+
import { rasToLps } from './convert';
|
|
9
5
|
import Events from '../enums/Events';
|
|
10
6
|
import { NIFTI_LOADER_SCHEME } from '../constants';
|
|
11
|
-
|
|
7
|
+
import makeVolumeMetadata from './makeVolumeMetadata';
|
|
8
|
+
import modalityScaleNifti from './modalityScaleNifti';
|
|
12
9
|
export const urlsMap = new Map();
|
|
13
10
|
function fetchArrayBuffer(url, onProgress, signal, onload) {
|
|
14
11
|
return new Promise((resolve, reject) => {
|
|
@@ -45,18 +42,6 @@ function fetchArrayBuffer(url, onProgress, signal, onload) {
|
|
|
45
42
|
xhr.send();
|
|
46
43
|
});
|
|
47
44
|
}
|
|
48
|
-
export const getTypedNiftiArray = (datatypeCode, niftiImageBuffer) => {
|
|
49
|
-
switch (datatypeCode) {
|
|
50
|
-
case NIFTICONSTANTS.NIFTI_TYPE_UINT8:
|
|
51
|
-
return new Uint8Array(niftiImageBuffer);
|
|
52
|
-
case NIFTICONSTANTS.NIFTI_TYPE_FLOAT32:
|
|
53
|
-
return new Float32Array(niftiImageBuffer);
|
|
54
|
-
case NIFTICONSTANTS.NIFTI_TYPE_INT16:
|
|
55
|
-
return new Int16Array(niftiImageBuffer);
|
|
56
|
-
default:
|
|
57
|
-
throw new Error(`datatypeCode ${datatypeCode} is not yet supported`);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
45
|
export default async function fetchAndAllocateNiftiVolume(volumeId) {
|
|
61
46
|
const niftiURL = volumeId.substring(NIFTI_LOADER_SCHEME.length + 1);
|
|
62
47
|
const progress = (loaded, total) => {
|
|
@@ -85,63 +70,10 @@ export default async function fetchAndAllocateNiftiVolume(volumeId) {
|
|
|
85
70
|
niftiHeader = NiftiReader.readHeader(niftiBuffer);
|
|
86
71
|
niftiImage = NiftiReader.readImage(niftiHeader, niftiBuffer);
|
|
87
72
|
}
|
|
88
|
-
const
|
|
73
|
+
const { scalarData, pixelRepresentation } = modalityScaleNifti(niftiHeader, niftiImage);
|
|
89
74
|
const { orientation, origin, spacing } = rasToLps(niftiHeader);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const volumeMetadata = makeVolumeMetadata(niftiHeader, orientation, typedNiftiArray);
|
|
93
|
-
const scanAxisNormal = vec3.create();
|
|
94
|
-
vec3.set(scanAxisNormal, orientation[6], orientation[7], orientation[8]);
|
|
95
|
-
const { BitsAllocated, PixelRepresentation, PhotometricInterpretation, ImageOrientationPatient, Columns, Rows, } = volumeMetadata;
|
|
96
|
-
const rowCosineVec = vec3.fromValues(ImageOrientationPatient[0], ImageOrientationPatient[1], ImageOrientationPatient[2]);
|
|
97
|
-
const colCosineVec = vec3.fromValues(ImageOrientationPatient[3], ImageOrientationPatient[4], ImageOrientationPatient[5]);
|
|
98
|
-
const { dims } = niftiHeader;
|
|
99
|
-
const numFrames = dims[3];
|
|
100
|
-
const dimensions = [Columns, Rows, numFrames];
|
|
101
|
-
const direction = new Float32Array([
|
|
102
|
-
rowCosineVec[0],
|
|
103
|
-
rowCosineVec[1],
|
|
104
|
-
rowCosineVec[2],
|
|
105
|
-
colCosineVec[0],
|
|
106
|
-
colCosineVec[1],
|
|
107
|
-
colCosineVec[2],
|
|
108
|
-
scanAxisNormal[0],
|
|
109
|
-
scanAxisNormal[1],
|
|
110
|
-
scanAxisNormal[2],
|
|
111
|
-
]);
|
|
112
|
-
const signed = PixelRepresentation === 1;
|
|
113
|
-
let bytesPerVoxel = 1;
|
|
114
|
-
if (BitsAllocated === 16 || BitsAllocated === 32) {
|
|
115
|
-
bytesPerVoxel = 4;
|
|
116
|
-
}
|
|
117
|
-
const sizeInBytesPerComponent = bytesPerVoxel * dimensions[0] * dimensions[1] * dimensions[2];
|
|
118
|
-
let numComponents = 1;
|
|
119
|
-
if (PhotometricInterpretation === 'RGB') {
|
|
120
|
-
numComponents = 3;
|
|
121
|
-
}
|
|
122
|
-
const sizeInBytes = sizeInBytesPerComponent * numComponents;
|
|
123
|
-
const isCacheable = cache.isCacheable(sizeInBytes);
|
|
124
|
-
if (!isCacheable) {
|
|
125
|
-
throw new Error(Enums.Events.CACHE_SIZE_EXCEEDED);
|
|
126
|
-
}
|
|
127
|
-
cache.decacheIfNecessaryUntilBytesAvailable(sizeInBytes);
|
|
128
|
-
let scalarData;
|
|
129
|
-
switch (BitsAllocated) {
|
|
130
|
-
case 8:
|
|
131
|
-
if (signed) {
|
|
132
|
-
throw new Error('8 Bit signed images are not yet supported by this plugin.');
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
scalarData = createUint8SharedArray(dimensions[0] * dimensions[1] * dimensions[2]);
|
|
136
|
-
}
|
|
137
|
-
break;
|
|
138
|
-
case 16:
|
|
139
|
-
case 32:
|
|
140
|
-
scalarData = createFloat32SharedArray(dimensions[0] * dimensions[1] * dimensions[2]);
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
scalarData.set(typedNiftiArray);
|
|
144
|
-
const niftiImageVolume = new NiftiImageVolume({
|
|
75
|
+
const { volumeMetadata, dimensions, direction } = makeVolumeMetadata(niftiHeader, orientation, scalarData, pixelRepresentation);
|
|
76
|
+
return new NiftiImageVolume({
|
|
145
77
|
volumeId,
|
|
146
78
|
metadata: volumeMetadata,
|
|
147
79
|
dimensions,
|
|
@@ -149,7 +81,8 @@ export default async function fetchAndAllocateNiftiVolume(volumeId) {
|
|
|
149
81
|
origin,
|
|
150
82
|
direction,
|
|
151
83
|
scalarData,
|
|
152
|
-
sizeInBytes,
|
|
84
|
+
sizeInBytes: scalarData.byteLength,
|
|
85
|
+
imageIds: [],
|
|
153
86
|
}, {
|
|
154
87
|
loadStatus: {
|
|
155
88
|
loaded: false,
|
|
@@ -158,6 +91,5 @@ export default async function fetchAndAllocateNiftiVolume(volumeId) {
|
|
|
158
91
|
},
|
|
159
92
|
controller,
|
|
160
93
|
});
|
|
161
|
-
return niftiImageVolume;
|
|
162
94
|
}
|
|
163
95
|
//# sourceMappingURL=fetchAndAllocateNiftiVolume.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAndAllocateNiftiVolume.js","sourceRoot":"","sources":["../../../src/helpers/fetchAndAllocateNiftiVolume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"fetchAndAllocateNiftiVolume.js","sourceRoot":"","sources":["../../../src/helpers/fetchAndAllocateNiftiVolume.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import { Types } from '@cornerstonejs/core';
|
|
2
|
-
export default function makeVolumeMetadata(niftiHeader: any, orientation: any, scalarData: any):
|
|
2
|
+
export default function makeVolumeMetadata(niftiHeader: any, orientation: any, scalarData: any, pixelRepresentation: any): {
|
|
3
|
+
volumeMetadata: Types.Metadata;
|
|
4
|
+
dimensions: Types.Point3;
|
|
5
|
+
direction: Types.Mat3;
|
|
6
|
+
};
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
+
import { utilities } from '@cornerstonejs/core';
|
|
1
2
|
import { vec3 } from 'gl-matrix';
|
|
2
|
-
|
|
3
|
+
const { windowLevel } = utilities;
|
|
4
|
+
export default function makeVolumeMetadata(niftiHeader, orientation, scalarData, pixelRepresentation) {
|
|
3
5
|
const { numBitsPerVoxel, littleEndian, pixDims, dims } = niftiHeader;
|
|
4
|
-
const rowCosines = vec3.create();
|
|
5
|
-
const columnCosines = vec3.create();
|
|
6
|
-
vec3.set(rowCosines, orientation[0], orientation[1], orientation[2]);
|
|
7
|
-
vec3.set(columnCosines, orientation[3], orientation[4], orientation[5]);
|
|
8
6
|
let min = Infinity;
|
|
9
7
|
let max = -Infinity;
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const zDim = dims[3];
|
|
13
|
-
const frameLength = xDim * yDim;
|
|
14
|
-
const middleFrameIndex = Math.floor(zDim / 2);
|
|
8
|
+
const frameLength = dims[1] * dims[2];
|
|
9
|
+
const middleFrameIndex = Math.floor(dims[3] / 2);
|
|
15
10
|
const offset = frameLength * middleFrameIndex;
|
|
16
11
|
for (let voxelIndex = offset; voxelIndex < offset + frameLength; voxelIndex++) {
|
|
17
12
|
const voxelValue = scalarData[voxelIndex];
|
|
@@ -22,30 +17,49 @@ export default function makeVolumeMetadata(niftiHeader, orientation, scalarData)
|
|
|
22
17
|
min = voxelValue;
|
|
23
18
|
}
|
|
24
19
|
}
|
|
25
|
-
const windowCenter = (max
|
|
26
|
-
const
|
|
20
|
+
const { windowWidth, windowCenter } = windowLevel.toWindowLevel(min, max);
|
|
21
|
+
const rowCosines = vec3.create();
|
|
22
|
+
const columnCosines = vec3.create();
|
|
23
|
+
const scanAxisNormal = vec3.create();
|
|
24
|
+
vec3.set(rowCosines, orientation[0], orientation[1], orientation[2]);
|
|
25
|
+
vec3.set(columnCosines, orientation[3], orientation[4], orientation[5]);
|
|
26
|
+
vec3.set(scanAxisNormal, orientation[6], orientation[7], orientation[8]);
|
|
27
27
|
return {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
volumeMetadata: {
|
|
29
|
+
BitsAllocated: numBitsPerVoxel,
|
|
30
|
+
BitsStored: numBitsPerVoxel,
|
|
31
|
+
SamplesPerPixel: 1,
|
|
32
|
+
HighBit: littleEndian ? numBitsPerVoxel - 1 : 1,
|
|
33
|
+
PhotometricInterpretation: 'MONOCHROME2',
|
|
34
|
+
PixelRepresentation: pixelRepresentation,
|
|
35
|
+
ImageOrientationPatient: [
|
|
36
|
+
rowCosines[0],
|
|
37
|
+
rowCosines[1],
|
|
38
|
+
rowCosines[2],
|
|
39
|
+
columnCosines[0],
|
|
40
|
+
columnCosines[1],
|
|
41
|
+
columnCosines[2],
|
|
42
|
+
],
|
|
43
|
+
PixelSpacing: [pixDims[1], pixDims[2]],
|
|
44
|
+
Columns: dims[1],
|
|
45
|
+
Rows: dims[2],
|
|
46
|
+
voiLut: [{ windowCenter, windowWidth }],
|
|
47
|
+
FrameOfReferenceUID: '1.2.3',
|
|
48
|
+
Modality: 'MR',
|
|
49
|
+
VOILUTFunction: 'LINEAR',
|
|
50
|
+
},
|
|
51
|
+
dimensions: [dims[1], dims[2], dims[3]],
|
|
52
|
+
direction: new Float32Array([
|
|
35
53
|
rowCosines[0],
|
|
36
54
|
rowCosines[1],
|
|
37
55
|
rowCosines[2],
|
|
38
56
|
columnCosines[0],
|
|
39
57
|
columnCosines[1],
|
|
40
58
|
columnCosines[2],
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
voiLut: [{ windowCenter, windowWidth }],
|
|
46
|
-
FrameOfReferenceUID: '1.2.3',
|
|
47
|
-
Modality: 'MR',
|
|
48
|
-
VOILUTFunction: 'LINEAR',
|
|
59
|
+
scanAxisNormal[0],
|
|
60
|
+
scanAxisNormal[1],
|
|
61
|
+
scanAxisNormal[2],
|
|
62
|
+
]),
|
|
49
63
|
};
|
|
50
64
|
}
|
|
51
65
|
//# sourceMappingURL=makeVolumeMetadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeVolumeMetadata.js","sourceRoot":"","sources":["../../../src/helpers/makeVolumeMetadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"makeVolumeMetadata.js","sourceRoot":"","sources":["../../../src/helpers/makeVolumeMetadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { Types } from '@cornerstonejs/core';
|
|
2
|
+
export default function modalityScaleNifti(niftiHeader: any, niftiImageBuffer: any): {
|
|
3
|
+
scalarData: Types.PixelDataTypedArray;
|
|
4
|
+
pixelRepresentation: number;
|
|
5
|
+
};
|
|
@@ -1,11 +1,148 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { cache, Enums, getShouldUseSharedArrayBuffer, utilities, } from '@cornerstonejs/core';
|
|
2
|
+
import * as NIFTICONSTANTS from './niftiConstants';
|
|
3
|
+
const { createFloat32SharedArray, createInt16SharedArray, createUint8SharedArray, createUint16SharedArray, } = utilities;
|
|
4
|
+
export default function modalityScaleNifti(niftiHeader, niftiImageBuffer) {
|
|
5
|
+
const { datatypeCode, scl_slope, scl_inter } = niftiHeader;
|
|
6
|
+
let slope = scl_slope;
|
|
7
|
+
let inter = scl_inter;
|
|
4
8
|
if (!scl_slope || scl_slope === 0 || Number.isNaN(scl_slope)) {
|
|
5
|
-
|
|
9
|
+
slope = 1;
|
|
6
10
|
}
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
if (!scl_inter || Number.isNaN(scl_inter)) {
|
|
12
|
+
inter = 0;
|
|
9
13
|
}
|
|
14
|
+
const hasNegativeRescale = inter < 0 || slope < 0;
|
|
15
|
+
const hasFloatRescale = inter % 1 !== 0 || slope % 1 !== 0;
|
|
16
|
+
let niiBuffer;
|
|
17
|
+
let scalarData;
|
|
18
|
+
let pixelRepresentation = 1;
|
|
19
|
+
switch (datatypeCode) {
|
|
20
|
+
case NIFTICONSTANTS.NIFTI_TYPE_UINT8:
|
|
21
|
+
niiBuffer = new Uint8Array(niftiImageBuffer);
|
|
22
|
+
if (hasFloatRescale) {
|
|
23
|
+
scalarData = allocateScalarData('Float32Array', niiBuffer);
|
|
24
|
+
}
|
|
25
|
+
else if (hasNegativeRescale) {
|
|
26
|
+
scalarData = allocateScalarData('Int16Array', niiBuffer);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
pixelRepresentation = 0;
|
|
30
|
+
scalarData = allocateScalarData('Uint8Array', niiBuffer);
|
|
31
|
+
}
|
|
32
|
+
break;
|
|
33
|
+
case NIFTICONSTANTS.NIFTI_TYPE_INT16:
|
|
34
|
+
niiBuffer = new Int16Array(niftiImageBuffer);
|
|
35
|
+
if (hasFloatRescale) {
|
|
36
|
+
scalarData = allocateScalarData('Float32Array', niiBuffer);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
scalarData = allocateScalarData('Int16Array', niiBuffer);
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
42
|
+
case NIFTICONSTANTS.NIFTI_TYPE_INT32:
|
|
43
|
+
niiBuffer = new Int32Array(niftiImageBuffer);
|
|
44
|
+
scalarData = allocateScalarData('Float32Array', niiBuffer);
|
|
45
|
+
break;
|
|
46
|
+
case NIFTICONSTANTS.NIFTI_TYPE_FLOAT32: {
|
|
47
|
+
niiBuffer = new Float32Array(niftiImageBuffer);
|
|
48
|
+
scalarData = allocateScalarData('Float32Array', niiBuffer);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case NIFTICONSTANTS.NIFTI_TYPE_INT8:
|
|
52
|
+
niiBuffer = new Int8Array(niftiImageBuffer);
|
|
53
|
+
if (hasFloatRescale) {
|
|
54
|
+
scalarData = allocateScalarData('Float32Array', niiBuffer);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
scalarData = allocateScalarData('Int8Array', niiBuffer);
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case NIFTICONSTANTS.NIFTI_TYPE_UINT16:
|
|
61
|
+
niiBuffer = new Uint16Array(niftiImageBuffer);
|
|
62
|
+
if (hasFloatRescale || hasNegativeRescale) {
|
|
63
|
+
scalarData = allocateScalarData('Float32Array', niiBuffer);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
pixelRepresentation = 0;
|
|
67
|
+
scalarData = allocateScalarData('Uint16Array', niiBuffer);
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case NIFTICONSTANTS.NIFTI_TYPE_UINT32:
|
|
71
|
+
niiBuffer = new Uint32Array(niftiImageBuffer);
|
|
72
|
+
scalarData = allocateScalarData('Float32Array', niiBuffer);
|
|
73
|
+
break;
|
|
74
|
+
default:
|
|
75
|
+
throw new Error(`NIFTI datatypeCode ${datatypeCode} is not yet supported`);
|
|
76
|
+
}
|
|
77
|
+
const nVox = scalarData.length;
|
|
78
|
+
if (slope !== 1 && inter !== 0) {
|
|
79
|
+
for (let i = 0; i < nVox; i++) {
|
|
80
|
+
scalarData[i] = intensityRaw2Scaled(scalarData[i], slope, inter);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
niftiHeader.numBitsPerVoxel = (scalarData.byteLength / scalarData.length) * 8;
|
|
84
|
+
return {
|
|
85
|
+
scalarData,
|
|
86
|
+
pixelRepresentation,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function intensityRaw2Scaled(raw, scl_slope, scl_inter) {
|
|
90
|
+
return raw * scl_slope + scl_inter;
|
|
91
|
+
}
|
|
92
|
+
function checkCacheAvailable(bitsAllocated, length) {
|
|
93
|
+
const sizeInBytes = (bitsAllocated / 8) * length;
|
|
94
|
+
const isCacheable = cache.isCacheable(sizeInBytes);
|
|
95
|
+
if (!isCacheable) {
|
|
96
|
+
throw new Error(Enums.Events.CACHE_SIZE_EXCEEDED);
|
|
97
|
+
}
|
|
98
|
+
cache.decacheIfNecessaryUntilBytesAvailable(sizeInBytes);
|
|
99
|
+
return sizeInBytes;
|
|
100
|
+
}
|
|
101
|
+
function allocateScalarData(types, niiBuffer) {
|
|
102
|
+
let bitsAllocated;
|
|
103
|
+
let scalarData;
|
|
104
|
+
const useSharedArrayBuffer = getShouldUseSharedArrayBuffer();
|
|
105
|
+
const nVox = niiBuffer.length;
|
|
106
|
+
switch (types) {
|
|
107
|
+
case 'Float32Array':
|
|
108
|
+
bitsAllocated = 32;
|
|
109
|
+
checkCacheAvailable(bitsAllocated, nVox);
|
|
110
|
+
scalarData = useSharedArrayBuffer
|
|
111
|
+
? createFloat32SharedArray(nVox)
|
|
112
|
+
: new Float32Array(nVox);
|
|
113
|
+
break;
|
|
114
|
+
case 'Int16Array':
|
|
115
|
+
bitsAllocated = 16;
|
|
116
|
+
checkCacheAvailable(bitsAllocated, nVox);
|
|
117
|
+
scalarData = useSharedArrayBuffer
|
|
118
|
+
? createInt16SharedArray(nVox)
|
|
119
|
+
: new Int16Array(nVox);
|
|
120
|
+
break;
|
|
121
|
+
case 'Int8Array':
|
|
122
|
+
bitsAllocated = 8;
|
|
123
|
+
checkCacheAvailable(bitsAllocated, nVox);
|
|
124
|
+
scalarData = useSharedArrayBuffer
|
|
125
|
+
? createInt16SharedArray(nVox)
|
|
126
|
+
: new Int16Array(nVox);
|
|
127
|
+
break;
|
|
128
|
+
case 'Uint16Array':
|
|
129
|
+
bitsAllocated = 16;
|
|
130
|
+
checkCacheAvailable(bitsAllocated, nVox);
|
|
131
|
+
scalarData = useSharedArrayBuffer
|
|
132
|
+
? createUint16SharedArray(nVox)
|
|
133
|
+
: new Uint16Array(nVox);
|
|
134
|
+
break;
|
|
135
|
+
case 'Uint8Array':
|
|
136
|
+
bitsAllocated = 8;
|
|
137
|
+
checkCacheAvailable(bitsAllocated, nVox);
|
|
138
|
+
scalarData = useSharedArrayBuffer
|
|
139
|
+
? createUint8SharedArray(nVox)
|
|
140
|
+
: new Uint8Array(nVox);
|
|
141
|
+
break;
|
|
142
|
+
default:
|
|
143
|
+
throw new Error(`TypedArray ${types} is not yet supported`);
|
|
144
|
+
}
|
|
145
|
+
scalarData.set(niiBuffer);
|
|
146
|
+
return scalarData;
|
|
10
147
|
}
|
|
11
148
|
//# sourceMappingURL=modalityScaleNifti.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modalityScaleNifti.js","sourceRoot":"","sources":["../../../src/helpers/modalityScaleNifti.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modalityScaleNifti.js","sourceRoot":"","sources":["../../../src/helpers/modalityScaleNifti.ts"],"names":[],"mappings":"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"}
|