2014-03-03 86 views
0

我有一個向量,我需要計算一個閾值將其轉換爲二進制向量(閾值= 1以上,= 0以上)。矢量的值要麼接近於零,要麼接近於零。因此,如果繪製矢量,值或者位於X軸附近或者高射(因此值之間存在明顯差異)。每次,矢量中的值都會發生變化,所以我需要動態計算閾值。矢量可以採用的最大值或最小值沒有限制。我知道otsu的方法用於灰度圖像,但由於我的矢量的範圍值不同,我認爲我不能使用它。有沒有任何標準的方法來計算我的案例的門檻?如果沒有,有沒有什麼好的解決方法?計算向量的閾值

+0

你能發佈的數據(標準情況下,兩個和極端的情況下),以及相關的代碼示例,你已經走到這一步嗎? – kkuilla

+0

您可以指定想要變爲1的值的比例。例如,對於50%的閾值將是「中值(向量)」。 –

+0

將每個矢量歸一化爲[0 1],閾值使用0.5? – Divakar

回答

0

如果極限在單個向量中不存在差異,並且0和1值的概率幾乎相等,爲什麼不簡單地使用向量的均值作爲閾值?

>> X=[6 .5 .9 3 .4 .6 7] 

X = 

    6.0000 0.5000 0.9000 3.0000 0.4000 0.6000 7.0000 

>> X>=mean(X) 

ans = 

    1  0  0  1  0  0  1 

如果1和0的概率不同,您可能需要將比較中的平均值乘以再次擬合。請注意,這是一個非常簡單的方法,可以進行改進以更好地適應您的問題

3

我建議您指定將變爲1的值的百分比,並將相應的百分點值用作閾值prctile功能來自統計工具箱):

x = [3 45 0.1 0.4 10 5 6 1.2]; 
p = 70; %// percent of values that should become 1 

threshold = prctile(x,p); 
x_quant = x>=threshold; 

該方法使閾值自動適應您的值。由於您的數據是無限的,因此使用百分比可能比使用平均值要好,因爲平均而言,單個較大的值可能會超出期望值。

在這個例子中,

x_quant = 

    0  1  0  0  1  0  0  0