0

我有一个 tensor_fa nifti 图像,其值 [0,1] 的数据类型为 FLOAT32。最初尝试使用 xtk 边缘库加载本地脚本。这显示了一个空白画布。我还尝试增加范围(乘以 100 到范围 [0,100])并将这个相乘的图像更改为 INT32。在 slicedrop 中尝试时,原始图像“加载”,但任何阈值尝试都会引发“将文件放置在任何地方”消息。乘以 100 的图像也是如此。INT32 图像允许阈值化,但仍不显示图像。我已经在 fslview 和 mricron(nifti 查看器)中验证了所有三个图像。

此外,我尝试将音量最小/最大设置为 0/1,将阈值下限/上限设置为 0/1。

基本 nifti 标头信息:

data_type FLOAT32 或 INT32
昏暗1 121
昏暗2 145
昏暗3 121
昏暗4 1
数据类型 16 或 8
pixdim1 1.5000000000
pixdim2 1.5000000000
pixdim3 1.5000000000
pixdim4 0.0000000000
cal_max 0.0000
cal_min 0.0000
文件类型 NIFTI-1+
scl_slope 1.000000
scl_inter 0.000000

图像是:

http://wagners.homeip.net/work/wrtensor_fa_orig.nii.gz(原图)

http://wagners.homeip.net/work/wrtensor_fa.mul100.nii.gz(乘以 100)

作为 int 的图像被命名为 wrtensor_fa.nii.gz。Stackoverflow 不会让我发布第三个链接。

任何建议表示赞赏。

进一步跟进:

看来数据并不是真正的 [0,1]。它包含 NaN。当我将 NaN 转换为真值(例如 -1)时,可以显示图像。但是,我需要使用未修改的图像。有人会认为 volume.lowerThreshold 和 upperThreshold 可以解决问题。

进一步跟进#2:

我一直在摸索 Chrome 的 javascript 工具。在我正在使用的页面上,三个图像中的第一个(INT16)我可以做一个volume.filedata 并接收一个ArrayBuffer。第二个和第三个(均为 FLOAT32)返回 NULL。

4

1 回答 1

0

在 arrayMinMax 中使用 isNan() 怎么样?

X.parser.prototype.arrayMinMax = function(data) {

  var _min = Infinity;
  var _max = -Infinity;

  // buffer the length
  var _datasize = data.length;

  var i = 0;
  for (i = 0; i < _datasize; i++) {

    if(!isNaN(data[i])) {

      var _value = data[i];
      _min = Math.min(_min, _value);
     _max = Math.max(_max, _value);

    }

  }

  return [ _min, _max ];

};

我更喜欢这个解决方案,而不是在每个文件解析器中进行特定检查。你觉得好听吗?

谢谢

于 2013-09-11T16:16:24.647 回答