我有一些离散值和假设,这些值位于高斯曲线上。应该有一个只使用 3 个离散值的最大计算算法。你知道实现这个计算的 C/C++ 中的任何库或代码吗?
谢谢!
PS:原任务是自动对焦实现。我移动(显微镜)相机并在不同位置拍摄照片。具有最多不同颜色的位置应该具有最佳焦点。
编辑 这是很久以前的事了:-(我只是想删除这个问题,但尊重好的答案。
我有一些离散值和假设,这些值位于高斯曲线上。应该有一个只使用 3 个离散值的最大计算算法。你知道实现这个计算的 C/C++ 中的任何库或代码吗?
谢谢!
PS:原任务是自动对焦实现。我移动(显微镜)相机并在不同位置拍摄照片。具有最多不同颜色的位置应该具有最佳焦点。
编辑 这是很久以前的事了:-(我只是想删除这个问题,但尊重好的答案。
你有三个应该在高斯曲线上的点;这意味着它们位于函数上:
如果你取这个函数的对数,你会得到:
这只是一个简单的二级多项式,即具有对称垂直轴的抛物线:
和
所以,如果知道抛物线的三个系数,就可以推导出高斯曲线的参数;顺便说一句,您感兴趣的高斯函数的唯一参数是b,因为它告诉您分布的中心在哪里,即它的最大值在哪里。立即发现
剩下要做的就是拟合抛物线(使用“原始” x 和您的值的对数)。现在,如果你有更多的点,就会涉及多项式拟合,但是,由于你只有三个点,情况非常简单:只有一条抛物线穿过三个点。
您现在只需为每个点编写抛物线方程并求解系统:
(其中z是在相应 x 处读取的实际值)
这可以手动解决(需要一些时间),通过一些 CAS 或...查看 StackOverflow :);因此解决方案是:
所以使用这些最后的方程(记住:y是你的“真实”值的对数)和其他关系,你可以很容易地写一个简单的代数公式来得到你的高斯曲线的参数 b,即它的最大值。
(我可能在计算中做了一些混乱,在使用结果之前仔细检查它们,无论如何程序应该是正确的)
(感谢http://www.codecogs.com/latex/eqneditor.php提供的 LaTeX 方程)