我有一个向量,我需要计算一个阈值,将其转换为二进制向量(高于阈值= 1,低于= 0)。向量的值要么接近于零,要么远离它。因此,如果绘制了矢量,则值或者位于X轴附近或者向上射高(因此值之间存在明显差异)。每次,向量中的值都会发生变化,因此我需要动态计算阈值。矢量可以采用的最大值或最小值没有限制。我知道otsu的方法用于灰度图像,但由于我的矢量的范围值是变化的,我想我不能使用它。有没有标准的方法来计算我的案件的门槛?如果没有,有什么好的解决方法吗?
答案 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的概率不同,您可能希望将比较中的均值乘以再次拟合。请注意,这是一个非常简单的方法,可以很好地改进以更好地适应您的问题