@niivue/niimath v0.1.1
@niivue/niimath
@niivue/niimath is a JavaScript + WASM library for performing mathemetical operations on NIFTI files. This library is intended to be used in the browser, not in a Node.js environment.
All image processing operations are performed using the WASM build of niimath, making it much faster than a pure JavaScript implementation. The image processing takes place in a separate worker thread, so it won't block the main thread in your application.
Usage
The @niivue/niimath JavaScript library offers an object oriented API for working with the niimath CLI. Since niimath is a CLI tool, the API implemented in @niivue/niimath is just a wrapper around the CLI options and arguments.
Example: volumes
For example, the difference of gaussian command niimath input.nii -dog 2 3.2 output.nii can be executed using the following @niivue/niimath JavaScript code:
import { Niimath } from '@niivue/niimath';
const niimath = new Niimath();
// call the init() method to load the wasm before processing images
await niimath.init();
// 1. selectedFile is a browser File object
// 2. note the use of the final run() method to execute the command.
// 3. note the use of await. The run method returns a promise that resolves to the output file if the command is successful.
const outFile = await niimath.image(selectedFile).dog(2, 3.2).run();Example: meshes
The @niivue/niimath library also supports the -mesh options available in the niimath CLI. However, the JavaScript API is slightly different from the volume processing due to the use of the -mesh suboptions.
import { Niimath } from '@niivue/niimath';
const niimath = new Niimath();
await niimath.init();
const outName = 'out.mz3'; // outname must be a mesh format!
const outMesh = await niimath.image(selectedFile)
.mesh({
i: 'm', // 'd'ark, 'm'edium, 'b'right or numeric (e.g. 128) isosurface
b: 1, // fill bubbles
})
.run(outName);
/*
Here's the help from the niimath CLI program
The mesh option has multiple sub-options:
-mesh : meshify requires 'd'ark, 'm'edium, 'b'right or numeric isosurface ('niimath bet -mesh -i d mesh.gii')
-i <isovalue> : 'd'ark, 'm'edium, 'b'right or numeric isosurface
-a <atlasFile> : roi based atlas to mesh
-b <fillBubbles> : fill bubbles
-l <onlyLargest> : only largest
-o <originalMC> : original marching cubes
-q <quality> : quality
-s <postSmooth> : post smooth
-r <reduceFraction> : reduce fraction
-v <verbose> : verbose
*/Installation
To install @niivue/niimath in your project, run the following command:
# TODO: publish to npm
# npm install @niivue/niimathTo install a local build of the library
Fist, cd into the js directory of the niimath repository.
# from niimath root directory
cd jsTo install a local build of the library, run the following command:
npm run buildThen, install the library using the following command:
npm pack # will create a .tgz file in the root directoryThen, install the @niivue/niimath library in your application locally using the following command:
npm install /path/to/niivue-niimath.tgzDevelopment
First cd into the js directory of the niimath repository.
# from niimath root directory
cd jsTo install the dependencies, run the following command:
npm installTo build the library, run the following command
npm run buildTo run the tests, run the following command:
npm run testTest using a simple demo
To test that the @niivue/niimath library is working correctly, you can run the following command:
npm run demo