2013-08-29 166 views
0

我有一張tensor_fa nifti圖像,其數據類型爲FLOAT32,值爲[0,1]。最初嘗試使用xtk邊緣庫加載本地腳本。這顯示了一個空白的畫布。我也嘗試增加範圍(乘以100到範圍[0,100])並將這個相乘的圖像更改爲INT32。在slicedrop中嘗試時,原始圖像「加載」,但任何閾值嘗試都會引發「放置文件到任何位置」消息。相同的圖像乘以100. INT32圖像允許閾值,但仍不顯示圖像。我已經在fslview和mricron(nifti觀衆)中驗證了所有三張圖片。無法顯示nifti圖像

另外,我試着將音量最小/最大值設置爲0/1,將較低/較高的閾值設置爲0/1。

基本nifti頭信息:

 
data_type  FLOAT32 or INT32 
dim1   121 
dim2   145 
dim3   121 
dim4   1 
datatype  16 or 8 
pixdim1  1.5000000000 
pixdim2  1.5000000000 
pixdim3  1.5000000000 
pixdim4  0.0000000000 
cal_max  0.0000 
cal_min  0.0000 
file_type  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。

回答

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

}; 

我喜歡這個解決方案比在每個文件解析器中進行特定檢查更好。 這聽起來不錯嗎?

謝謝

+0

我猶豫不決,因爲我不知道arrayMinMax在哪裏/如何在其他地方使用。如果你確信這是一個不錯的選擇,那對我來說聽起來很棒。 –