有无限多的可能性(或者可能是1个微不足道的可能性,或者在关于值g0
的特殊情况下没有).使用直接方法,解决方案可以是computed analytically in constant time.不需要近似或迭代方法来寻找给定函数的根.这只是一个纯粹的数学问题.
高斯核有有趣的symmetries.其中之一是峰值平移到(0,0)
时的旋转不变性.另一个原因是,二维高斯曲面的一维截面是一条高斯曲线.
让我们暂时忽略offset
:它并没有真正改变问题(它只是一个Z轴平移),并为分辨率添加了额外的无用术语.
IS问题的几何解是ellipse,因此解(xe, ye)
遵循conic expression:(xe-x0)² / a² + (ye-y0)² / b² = 1
.如果为sigma_x = sigma_y
,则解决方案更简单:这是一个具有表达式(xe-x0)² + (ye-y0)² = r
的圆.注意,a
、b
和r
依赖于搜索值和核参数(例如,sigma_x
).改变sigma_x
和sigma_y
就像拉长了空间,所以解决方案也是一样的.改变x0
和y0
就像是转换空间,所以解决方案也是如此.
事实上,我们可以解决更简单的情况,即x0=0
、y0=0
、sigma_x=1
和sigma_y=1
.然后我们可以应用平移,然后使用变换矩阵进行线性变换.基本的乘法4x4矩阵就可以做到这一点.由于需要考虑的参数较少,因此解决较简单的情况要容易得多.实际上,g0
和offset
也可以从f
中go 掉一部分,因为它在表达式的两边,我们只需要解线性方程offset + g0 * h(xe,ye) = g0 / e
,所以h(x,y) = 1 / e - offset / g0
,其中h(xe, ye) = exp(-(xe² + ye²)/2)
.假设我们暂时忘记平移和线性变换,这个问题就可以很容易地解决:
h(xe, ye) = 1 / e - offset / g0
exp(-(xe² + ye²)/2) = 1 / e - offset / g0
-(xe² + ye²)/2 = ln(1 / e - offset / g0)
xe² + ye² = -2 * ln(1 / e - offset / g0)
就这样!我们得到了半径r
是-2*ln(1 / e - offset / g0)
的圆的表达式!请注意,表达式中的ln
基本上是自然对数.
现在我们可以试着找出4x4矩阵系数,或者实际上试着直接求解完整的表达式,这最终不是那么困难.
offset + g0 * exp(-((x-x0)²/(2*sigma_x²) + (y-y0)²/(2*sigma_y²))) = g0 / e
exp(-((x-x0)²/(2*sigma_x²) + (y-y0)²/(2*sigma_y²))) = 1 / e - offset / g0
-((x-x0)²/(2*sigma_x²) + (y-y0)²/(2*sigma_y²)) = ln(1 / e - offset / g0)
((x-x0)²/sigma_x² + (y-y0)²/sigma_y²)/2 = -ln(1 / e - offset / g0)
(x-x0)²/sigma_x² + (y-y0)²/sigma_y² = -2 * ln(1 / e - offset / g0)
就这样!我们得到了二次曲线表达式,其中r = -2 * ln(1 / e - offset / g0)
是一个常数,a = sigma_x
和b = sigma_y
是上面表达式中的未知参数.它可以用a = sigma_x/sqrt(r)
和b = sigma_y/sqrt(r)
来归一化,所以右边是1,正好符合上面的表达式,但这只是一些数学细节.
你可以很容易地找到椭圆的一点,因为你知道椭圆(x0, y0)
的中心,并且在y=y0
直线和上面的圆锥表达式的交点处至少有一个点.让我们找到它:
(x-x0)²/sigma_x² + (y0-y0)²/sigma_y² = -2 * ln(1 / e - offset / g0)
(x-x0)²/sigma_x² = -2 * ln(1 / e - offset / g0)
(x-x0)² = -2 * ln(1 / e - offset / g0) * sigma_x²
x = sqrt(-2 * ln(1 / e - offset / g0) * sigma_x²) + x0
请注意,有两个解决方案(-sqrt(...) + x0
),但您只需要其中一个.我希望我在计算中没有犯任何错误(至少细节应该足以很容易地找到它),在您的情况下,解决方案不是一个复数.这个解决方案的好处是它是very very fast to compute.
The final solution is:
(xe, ye) = (sqrt(-2*ln(1/e-offset/g0)*sigma_x²)+x0, y0)