ami-cjs.js
Version:
<p align="center"> <img src="https://cloud.githubusercontent.com/assets/214063/23213764/78ade038-f90c-11e6-8208-4fcade5f3832.png" width="60%"> </p>
225 lines (188 loc) • 8.77 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _parsers = require('./parsers.volume');
var _parsers2 = _interopRequireDefault(_parsers);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * Imports ***/
/**
* @module parsers/mhd
*/
var ParsersMHD = function (_ParsersVolume) {
_inherits(ParsersMHD, _ParsersVolume);
function ParsersMHD(data, id) {
_classCallCheck(this, ParsersMHD);
/**
* @member
* @type {arraybuffer}
*/
var _this = _possibleConstructorReturn(this, (ParsersMHD.__proto__ || Object.getPrototypeOf(ParsersMHD)).call(this));
_this._id = id;
_this._url = data.url;
_this._header = {};
_this._buffer = null;
try {
// parse header (mhd) data
var lines = new TextDecoder().decode(data.mhdBuffer).split('\n');
lines.forEach(function (line) {
var keyvalue = line.split('=');
if (keyvalue.length === 2) {
_this._header[keyvalue[0].trim()] = keyvalue[1].trim();
}
});
_this._header.DimSize = _this._header.DimSize.split(' ');
_this._header.ElementSpacing = _this._header.ElementSpacing.split(' ');
_this._header.TransformMatrix = _this._header.TransformMatrix.split(' ');
_this._header.Offset = _this._header.Offset.split(' ');
//
_this._buffer = data.rawBuffer;
} catch (error) {
window.console.log('ooops... :(');
}
return _this;
}
_createClass(ParsersMHD, [{
key: 'rightHanded',
value: function rightHanded() {
var anatomicalOrientation = this._header.AnatomicalOrientation;
if (anatomicalOrientation === 'RAS' || anatomicalOrientation === 'RPI' || anatomicalOrientation === 'LPS' || anatomicalOrientation === 'LAI') {
this._rightHanded = true;
} else {
this._rightHanded = false;
}
return this._rightHanded;
}
}, {
key: 'seriesInstanceUID',
value: function seriesInstanceUID() {
// use filename + timestamp..?
return this._url;
}
}, {
key: 'numberOfFrames',
value: function numberOfFrames() {
return parseInt(this._header.DimSize[2], 10);
}
}, {
key: 'sopInstanceUID',
value: function sopInstanceUID() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return frameIndex;
}
}, {
key: 'rows',
value: function rows() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return parseInt(this._header.DimSize[1], 10);
}
}, {
key: 'columns',
value: function columns() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return parseInt(this._header.DimSize[0], 10);
}
}, {
key: 'pixelType',
value: function pixelType() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
// 0 - int
// 1 - float
return 0;
}
}, {
key: 'bitsAllocated',
value: function bitsAllocated() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var bitsAllocated = 1;
if (this._header.ElementType === 'MET_UCHAR' || this._header.ElementType === 'MET_CHAR') {
bitsAllocated = 8;
} else if (this._header.ElementType === 'MET_USHORT' || this._header.ElementType === 'MET_SHORT') {
bitsAllocated = 16;
} else if (this._header.ElementType === 'MET_UFLOAT' || this._header.ElementType === 'MET_FLOAT') {
bitsAllocated = 32;
}
return bitsAllocated;
}
}, {
key: 'pixelSpacing',
value: function pixelSpacing() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var x = parseFloat(this._header.ElementSpacing[0], 10);
var y = parseFloat(this._header.ElementSpacing[1], 10);
var z = parseFloat(this._header.ElementSpacing[2], 10);
return [x, y, z];
}
}, {
key: 'imageOrientation',
value: function imageOrientation() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var invertX = this._header.AnatomicalOrientation.match(/L/) ? -1 : 1;
var invertY = this._header.AnatomicalOrientation.match(/P/) ? -1 : 1;
var x = new THREE.Vector3(parseFloat(this._header.TransformMatrix[0]) * invertX, parseFloat(this._header.TransformMatrix[1]) * invertY, parseFloat(this._header.TransformMatrix[2]));
x.normalize();
var y = new THREE.Vector3(parseFloat(this._header.TransformMatrix[3]) * invertX, parseFloat(this._header.TransformMatrix[4]) * invertY, parseFloat(this._header.TransformMatrix[5]));
y.normalize();
return [x.x, x.y, x.z, y.x, y.y, y.z];
}
}, {
key: 'imagePosition',
value: function imagePosition() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return [parseFloat(this._header.Offset[0]), parseFloat(this._header.Offset[1]), parseFloat(this._header.Offset[2])];
}
}, {
key: 'minMaxPixelData',
value: function minMaxPixelData() {
var pixelData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var minMax = [65535, -32768];
var numPixels = pixelData.length;
for (var index = 0; index < numPixels; index++) {
var spv = pixelData[index];
minMax[0] = Math.min(minMax[0], spv);
minMax[1] = Math.max(minMax[1], spv);
}
return minMax;
}
}, {
key: 'extractPixelData',
value: function extractPixelData() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return this._decompressUncompressed(frameIndex);
}
}, {
key: '_decompressUncompressed',
value: function _decompressUncompressed() {
var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var buffer = this._buffer;
var numberOfChannels = this.numberOfChannels();
var numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;
if (!this.rightHanded()) {
frameIndex = this.numberOfFrames() - 1 - frameIndex;
}
var frameOffset = frameIndex * numPixels;
if (this._header.ElementType === 'MET_CHAR') {
frameOffset = frameOffset;
return new Int8Array(buffer, frameOffset, numPixels);
} else if (this._header.ElementType === 'MET_UCHAR') {
frameOffset = frameOffset;
return new Uint8Array(buffer, frameOffset, numPixels);
} else if (this._header.ElementType === 'MET_SHORT') {
frameOffset = frameOffset * 2;
return new Int16Array(buffer, frameOffset, numPixels);
} else if (this._header.ElementType === 'MET_USHORT') {
frameOffset = frameOffset * 2;
return new Uint16Array(buffer, frameOffset, numPixels);
} else if (this._header.ElementType === 'MET_FLOAT') {
frameOffset = frameOffset * 4;
return new Float32Array(buffer, frameOffset, numPixels);
}
}
}]);
return ParsersMHD;
}(_parsers2.default);
exports.default = ParsersMHD;
module.exports = exports['default'];