如何在一维中计算Otsu阈值

时间:2018-10-10 00:51:43

标签: threshold

我正在尝试在分析化学数据中识别双峰分布。每个数据集列出了GC-MS中特定化合物的3〜70个保留时间。某些化合物的RTs是双峰分布的,其中库检索已为具有不同RTs的数据中的两个或多个不同特征分配了相同的标识。这对于具有非常相似的质谱图的异构体和其他化合物对来说非常普遍。 例如。这是一种显示双峰分布的化合物的RT直方图。 RT histogram

我想计算Otsu阈值以尝试定义双峰数据(也存在多峰分布,但一次仅一步)。我在计算上很难理解the Wikipedia article,但文字表明可以通过找到最小的类内方差来找到阈值。因此,我尝试从RT列表中进行如下计算:

a = list(d['Component RT'])
n = len(a)
b = [a.pop(0)]

varA = []
varB = []

for i in range(1,n-2):
    b.append(a.pop(0))
    varA.append(statistics.stdev(a)**2)
    varB.append(statistics.stdev(b)**2)

我是否正确地认为,如果我为上述数据绘制方差之和,我应该能够将Otsu阈值确定为最小值? summed variances

在此示例中,阈值很明显,大约有35个值可以使用。对于大多数化合物,该值较小(通常小于15),数据的定义可能不太明确。这甚至是使用的正确门槛吗? Wikipedia上有关模态的文章指出了许多其他有关多模态的测试。

0 个答案:

没有答案