Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import { Enums, Types } from '@cornerstonejs/core'; /** * Gets the scalar data for a series of time frames from a 4D volume, returns an * array of scalar data after performing AVERAGE, SUM or SUBTRACT to be used to * create a 3D volume * * @param dynamicVolume4D: volume to compute time frame data from * @param operation: operation to perform on time frame data, operations include * SUM, AVERAGE, and SUBTRACT (can only be used with 2 time frames provided) * @param frameNumbers: an array of frame indexs to perform the operation on, if * left empty, all frames will be used * @returns */ function generateImageFromTimeData( dynamicVolume: Types.IDynamicImageVolume, operation: string, frameNumbers?: number[] ) { // If no time frames provided, use all time frames const frames = frameNumbers || [...Array(dynamicVolume.numTimePoints).keys()]; const numFrames = frames.length; if (frames.length <= 1) { throw new Error('Please provide two or more time points'); } // Gets scalar data for all time frames const typedArrays = dynamicVolume.getScalarDataArrays(); const arrayLength = typedArrays[0].length; const finalArray = new Float32Array(arrayLength); if (operation === Enums.DynamicOperatorType.SUM) { for (let i = 0; i < numFrames; i++) { const currentArray = typedArrays[frames[i]]; for (let j = 0; j < arrayLength; j++) { finalArray[j] += currentArray[j]; } } return finalArray; } if (operation === Enums.DynamicOperatorType.SUBTRACT) { if (frames.length > 2) { throw new Error('Please provide only 2 time points for subtraction.'); } for (let j = 0; j < arrayLength; j++) { finalArray[j] += typedArrays[frames[0]][j] - typedArrays[frames[1]][j]; } return finalArray; } if (operation === Enums.DynamicOperatorType.AVERAGE) { for (let i = 0; i < numFrames; i++) { const currentArray = typedArrays[frames[i]]; for (let j = 0; j < arrayLength; j++) { finalArray[j] += currentArray[j]; } } for (let k = 0; k < arrayLength; k++) { finalArray[k] = finalArray[k] / numFrames; } return finalArray; } } export default generateImageFromTimeData; |