UNPKG

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
'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'];