需要帮助将最小化方程放入scipy加权最小二乘求解器中

时间:2017-11-28 23:33:52

标签: python scipy regression linear-algebra

我的问题是如何将加权最小二乘问题放入python求解器中。我试图在文件here中实施这些方法(PDF警告)。帖子底部有一个问题概述。

具体来说,我想从以下最小化方程(本文中的19)开始:

latex formula can be found here

\frac{min}{\Theta \epsilon M} \sum_{j=1}^{n} \sum_{i=1}^{m}(w(i,j))\left | \Psi(i,j)*\Theta (i,j) - I(i,j) \right |^{2}

它表示为加权最小二乘问题 wpsiI是我的知识,我正在努力解决theta

我首先尝试创建一个函数,它接受theta并返回这个等式的总和,就像它在上面所表达的那样。然后我将它传递给scipy.optimize.least_squares,但优化后theta值始终保持不变。我尝试实现一个雅可比,但结果总和爆炸到巨大的负值。我试图在图像上运行它也需要很长时间(我是带有光i的像素j的像素值)。

然后我意识到我几乎肯定会误解如何解决这个问题并且可以使用一些帮助来接近它。我目前的代码如下:

def theta_solver(self, theta):
    imshape = self.images.shape
    sm = 0

    for j in j_array:
        for i in i_array:
            w = self.get_w(i, j, theta)
            psi = self.non_diff_smoothing(self.get_psi(i, j))
            diff = psi*(theta[i, j]) - self.I[i, j]
            res = w*(diff)
            sm += res

    return sm

def solve_theta(self, theta_guess):
    res = scipy.optimize.least_squares(self.theta_solver, theta_guess) 

有些东西告诉我,我已经离开基地,因为我正在接近这个问题,我可以用正确的方向指。谢谢你的时间。

问题概述:

这种特殊的视觉方法称为光度立体声。通过拍摄具有不同光源的场景的多个图像,我们可以创建该场景的3D重建 一个问题是1/r^2照明的衰减取决于与光源的距离,这意味着这不能通过正常的线性解来解决。
本文中记录的方法是用于求解近光光度立体声的非线性方法。它做了两件事:

  • 它解决了表面Z
  • 通过交替求解器,由θ表示的每个像素处的反照率/强度。

在这个问题中,我只是试图解决方程的theta元素,这可以通过加权最小二乘法求解。

1 个答案:

答案 0 :(得分:0)

原来我严重过度思考这个问题。这可以分解为Ax = b形式的简单线性解。在查看误差方程时,在这种情况下:

argmin(THETA) sum(W * ||PSI * THETA - I||^2)

我们可以通过均方根内的部分分配权重。我们的等式最终成为:

W * PSI * THETA = W * I

我们可以使用您最喜欢的线性求解器(即共轭梯度下降)来解决这个问题