itk
Version:
High performance spatial analysis in a JavaScript runtime environment.
76 lines (60 loc) • 2.57 kB
JavaScript
var Image = require('./Image.js');
var ImageType = require('./ImageType.js');
var Matrix = require('./Matrix.js');
var imageIOComponentToJSComponent = require('./imageIOComponentToJSComponent.js');
var imageIOPixelTypeToJSPixelType = require('./imageIOPixelTypeToJSPixelType.js');
var readImageEmscriptenFSFile = function readImageEmscriptenFSFile(imageModule, filePath) {
var imageIO = new imageModule.ITKImageIO();
imageIO.SetFileName(filePath);
if (!imageIO.CanReadFile(filePath)) {
throw new Error('Could not read file: ' + filePath);
}
imageIO.ReadImageInformation();
var ioDimensions = imageIO.GetNumberOfDimensions();
var imageType = new ImageType(ioDimensions);
var ioComponentType = imageIO.GetComponentType();
imageType.componentType = imageIOComponentToJSComponent(imageModule, ioComponentType);
var ioPixelType = imageIO.GetPixelType();
imageType.pixelType = imageIOPixelTypeToJSPixelType(imageModule, ioPixelType);
imageType.components = imageIO.GetNumberOfComponents();
var image = new Image(imageType);
var ioDirection = new Matrix(ioDimensions, ioDimensions);
for (var ii = 0; ii < ioDimensions; ++ii) {
var directionColumn = imageIO.GetDirection(ii);
for (var jj = 0; jj < ioDimensions; ++jj) {
ioDirection.setElement(jj, ii, directionColumn.get(jj));
}
}
for (var _ii = 0; _ii < image.imageType.dimension; ++_ii) {
if (_ii < ioDimensions) {
image.size[_ii] = imageIO.GetDimensions(_ii);
image.spacing[_ii] = imageIO.GetSpacing(_ii);
image.origin[_ii] = imageIO.GetOrigin(_ii);
for (var _jj = 0; _jj < image.imageType.dimension; ++_jj) {
if (_jj < ioDimensions) {
var element = ioDirection.getElement(_jj, _ii);
image.direction.setElement(_jj, _ii, element);
} else {
image.direction.setElement(_jj, _ii, 0.0);
}
}
} else {
image.size[_ii] = 0;
image.spacing[_ii] = 1.0;
image.origin[_ii] = 0.0;
image.direction.setIdentity();
}
} // Spacing is expected to be greater than 0
// If negative, flip image direction along this axis.
for (var _ii2 = 0; _ii2 < image.imageType.dimension; ++_ii2) {
if (image.spacing[_ii2] < 0.0) {
image.spacing[_ii2] = -image.spacing[_ii2];
for (var _jj2 = 0; _jj2 < image.imageType.dimension; ++_jj2) {
image.direction.setElement(_ii2, _jj2, -1 * image.direction.getElement(_ii2, _jj2));
}
}
}
image.data = imageIO.Read();
return image;
};
module.exports = readImageEmscriptenFSFile;