寻找使用离散值计算高斯曲线最大值的C / C ++库

时间:2011-08-14 21:46:09

标签: c++ c discrete-mathematics curve-fitting gaussian

我有一些离散值和假设,这些值位于高斯曲线上。 应该使用仅使用3个离散值的最大计算算法。 你知道实现这个计算的C / C ++中的库或代码吗?

谢谢!

P.S .: 原始任务是自动对焦实施。我移动(显微镜)相机并在不同位置捕捉图片。具有最多不同颜色的位置应该具有最佳焦点。

修改 这是很久以前:-( 我只是想删除这个问题,但是让它尊重了这个问题。

1 个答案:

答案 0 :(得分:9)

你有三个应该在高斯曲线上的点;这意味着他们躺在功能上:

generic Gaussian function

如果你取这个函数的对数,你得到:

log of the Gaussian function

这只是一个简单的二阶多项式,即一个垂直轴为simautry的抛物线:

generic 2nd grade polynomial

coefficient definitions

所以,如果你知道抛物线的三个系数,你可以推导出高斯曲线的参数;顺便提一下,你感兴趣的高斯函数的唯一参数是 b ,因为它告诉你分布的中心在哪里,即它的最大值。立即找出

b from beta and alpha

剩下要做的就是拟合抛物线(用“原始”x和你的值的对数)。现在,如果你有更多的点,那么就会涉及多项式拟合,但是,由于你只有三个点,情况非常简单:只有一个抛物线可以通过三个点。

您现在只需为每个点编写抛物线方程并求解系统:

system of the three points

(使用y and z,其中 z 是在相应的x处读取的实际值

这可以手工解决(有一段时间),有些CAS或...... looking on StackOverflow :);因此解决方案是:

solution of the parabola through three points

所以使用这些最后的方程(记住: y 是你的“真实”值的对数)和其他关系你可以很容易地写出一个简单的代数公式得到高斯曲线的参数b,即它的最大值。

final result

(我可能在计算中做了一些混乱,在使用结果之前仔细检查它们,无论如何程序应该是正确的)

(感谢http://www.codecogs.com/latex/eqneditor.php的LaTeX方程式)