@niivue/niivue 0.47.0 → 0.48.0
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/build/index.d.ts +2 -1
- package/build/index.js +49 -4
- package/build/index.js.map +1 -1
- package/build/index.min.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +49 -4
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/niivue.umd.js +2 -2
- package/package.json +1 -1
- package/src/nvimage/index.ts +55 -3
package/build/index.d.ts
CHANGED
|
@@ -404,7 +404,8 @@ declare class NVImage {
|
|
|
404
404
|
readMIF(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
|
|
405
405
|
readNRRD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
|
|
406
406
|
calculateRAS(): void;
|
|
407
|
-
|
|
407
|
+
hdr2RAS(nVolumes?: number): nifti.NIFTI1 | nifti.NIFTI2;
|
|
408
|
+
img2RAS(nVolume?: number): TypedVoxelArray;
|
|
408
409
|
vox2mm(XYZ: number[], mtx: mat4): vec3;
|
|
409
410
|
mm2vox(mm: number[], frac?: boolean): Float32Array | vec3;
|
|
410
411
|
arrayEquals(a: unknown[], b: unknown[]): boolean;
|
package/build/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
10
10
|
import { mat4 as mat46, vec2, vec3 as vec311, vec4 as vec48 } from "gl-matrix";
|
|
11
11
|
|
|
12
12
|
// package.json
|
|
13
|
-
var version = "0.
|
|
13
|
+
var version = "0.48.0";
|
|
14
14
|
|
|
15
15
|
// src/logger.ts
|
|
16
16
|
var _Log = class _Log {
|
|
@@ -20867,9 +20867,48 @@ var NVImage = class _NVImage {
|
|
|
20867
20867
|
this.img2RASstart = outStart;
|
|
20868
20868
|
this.calculateOblique();
|
|
20869
20869
|
}
|
|
20870
|
+
// Reorient raw header data to RAS
|
|
20871
|
+
// assume single volume, use nVolumes to specify, set nVolumes = 0 for same as input
|
|
20872
|
+
hdr2RAS(nVolumes = 1) {
|
|
20873
|
+
if (!this.permRAS) {
|
|
20874
|
+
throw new Error("permRAS undefined");
|
|
20875
|
+
}
|
|
20876
|
+
if (!this.hdr) {
|
|
20877
|
+
throw new Error("hdr undefined");
|
|
20878
|
+
}
|
|
20879
|
+
const hdrBytes = hdrToArrayBuffer({ ...this.hdr, vox_offset: 352 }, false);
|
|
20880
|
+
const hdr = nifti.readHeader(hdrBytes.buffer, true);
|
|
20881
|
+
if (nVolumes === 1) {
|
|
20882
|
+
hdr.dims[0] = 3;
|
|
20883
|
+
hdr.dims[4] = 1;
|
|
20884
|
+
} else if (nVolumes > 1) {
|
|
20885
|
+
hdr.dims[0] = 4;
|
|
20886
|
+
hdr.dims[4] = nVolumes;
|
|
20887
|
+
}
|
|
20888
|
+
const perm = this.permRAS.slice();
|
|
20889
|
+
if (perm[0] === 1 && perm[1] === 2 && perm[2] === 3) {
|
|
20890
|
+
return hdr;
|
|
20891
|
+
}
|
|
20892
|
+
hdr.qform_code = 0;
|
|
20893
|
+
for (let i = 1; i < 4; i++) {
|
|
20894
|
+
hdr.dims[i] = this.dimsRAS[i];
|
|
20895
|
+
}
|
|
20896
|
+
for (let i = 0; i < this.pixDimsRAS.length; i++) {
|
|
20897
|
+
hdr.pixDims[i] = this.pixDimsRAS[i];
|
|
20898
|
+
}
|
|
20899
|
+
let k = 0;
|
|
20900
|
+
for (let i = 0; i < 4; i++) {
|
|
20901
|
+
for (let j = 0; j < 4; j++) {
|
|
20902
|
+
hdr.affine[i][j] = this.matRAS[k];
|
|
20903
|
+
k++;
|
|
20904
|
+
}
|
|
20905
|
+
}
|
|
20906
|
+
return hdr;
|
|
20907
|
+
}
|
|
20870
20908
|
// Reorient raw image data to RAS
|
|
20871
20909
|
// note that GPU-based orient shader is much faster
|
|
20872
|
-
|
|
20910
|
+
// returns single 3D volume even for 4D input. Use nVolume to select volume (0 indexed)
|
|
20911
|
+
img2RAS(nVolume = 0) {
|
|
20873
20912
|
if (!this.permRAS) {
|
|
20874
20913
|
throw new Error("permRAS undefined");
|
|
20875
20914
|
}
|
|
@@ -20884,7 +20923,13 @@ var NVImage = class _NVImage {
|
|
|
20884
20923
|
return this.img;
|
|
20885
20924
|
}
|
|
20886
20925
|
const hdr = this.hdr;
|
|
20887
|
-
const
|
|
20926
|
+
const nVox = hdr.dims[1] * hdr.dims[2] * hdr.dims[3];
|
|
20927
|
+
let volSkip = nVolume * nVox;
|
|
20928
|
+
if (volSkip + nVox > this.img.length || volSkip < 0) {
|
|
20929
|
+
volSkip = 0;
|
|
20930
|
+
log.warn(`img2RAS nVolume (${nVolume}) out of bounds (${nVolume}+1)\xD7${nVox} > ${this.img.length}`);
|
|
20931
|
+
}
|
|
20932
|
+
const imgRAS = this.img.slice(0, nVox);
|
|
20888
20933
|
const aperm = [Math.abs(perm[0]), Math.abs(perm[1]), Math.abs(perm[2])];
|
|
20889
20934
|
const outdim = [hdr.dims[aperm[0]], hdr.dims[aperm[1]], hdr.dims[aperm[2]]];
|
|
20890
20935
|
const inStep = [1, hdr.dims[1], hdr.dims[1] * hdr.dims[2]];
|
|
@@ -20903,7 +20948,7 @@ var NVImage = class _NVImage {
|
|
|
20903
20948
|
const yi = outStart[1] + y * outStep[1];
|
|
20904
20949
|
for (let x = 0; x < outdim[0]; x++) {
|
|
20905
20950
|
const xi = outStart[0] + x * outStep[0];
|
|
20906
|
-
imgRAS[j] = this.img[xi + yi + zi];
|
|
20951
|
+
imgRAS[j] = this.img[xi + yi + zi + volSkip];
|
|
20907
20952
|
j++;
|
|
20908
20953
|
}
|
|
20909
20954
|
}
|