I am trying to implement a TV-like surface regularization in a least squares solver. The formulation is as follows:

$E_{surface} = \sum |dA_\theta| $


$dA_{\theta} = \frac{\theta_1}{f_x f_y} * \sqrt{(f_x \theta_2)^2 + (f_y \theta_3)^2 + (\theta_1 + (\bar{x} - c_x) \theta_2 + (\bar{y} - c_y) \theta_3)^2}$

This term basically is the normals in camera direction weighted by the norm of the unnormalized normals, which corresponds to backprojecting the pixel into 3D and measuring the visible surface (projection onto plane orthogonal to camera axis).

$\theta (x) = \left( \begin{array}{c} \theta_1\\ \theta_2\\ \theta_3\\ \end{array} \right)$ contains the depth in pixel (x, y), and the derivatives of the depth in x and y direction in pixel(x, y). The $(\dots)^2$ under the root are the three components of the normal.

$\bar{x}$ describes the pixel index of x, $\bar{y}$ that of y. $f_x$, $f_y$, $c_x$, $c_y$ are the intrinsic camera parameters.


Now, for IRLS, I reformulate the problem as:

$E_{surface} = \sum w |dA_\theta|^2 $ with $w = \frac{|\,dA_{\theta}\,|'}{dA_{\theta}}$

So after every iteration of the solver, I update my weights according to the formula, which has to be solved in closed form.



Seems like the derivative $[\dots]'$ is $\frac{d}{d\theta}$, so to implement it my weight is a vector aswell, consisting of the partial derivatives? This is getting ugly...

Can anyone confirm?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.