计算向量的阈值

时间:2014-03-03 09:51:23

标签: matlab vector binary-data

我有一个向量,我需要计算一个阈值,将其转换为二进制向量(高于阈值= 1,低于= 0)。向量的值要么接近于零,要么远离它。因此,如果绘制了矢量,则值或者位于X轴附近或者向上射高(因此值之间存在明显差异)。每次,向量中的值都会发生变化,因此我需要动态计算阈值。矢量可以采用的最大值或最小值没有限制。我知道otsu的方法用于灰度图像,但由于我的矢量的范围值是变化的,我想我不能使用它。有没有标准的方法来计算我的案件的门槛?如果没有,有什么好的解决方法吗?

2 个答案:

答案 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

答案 1 :(得分: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的概率不同,您可能希望将比较中的均值乘以再次拟合。请注意,这是一个非常简单的方法,可以很好地改进以更好地适应您的问题