标准化时避免奇怪的单应性值

Jav*_*ock 5 c++ divide-by-zero numerical-methods homography

熟悉单应性的人会知道,为了保持齐次坐标,您必须将其除以任何矩阵分量进行归一化。单应性是一个 3x3 矩阵,它通常被归一化除以 (3,3) 处的元素。

http://www.cg.tu-berlin.de/fileadmin/fg144/Courses/06WS/scanning/Dennis/Extrinsic%20calibration-Dateien/image006.jpg

当该值非常小(例如 0.0000008)并除以假定为零的值 (0.0000007) 时,问题就会出现。结果值几乎是 0.875,当它被假定为零并且结果投影没有意义时。

我想知道解决这个问题的常用方法是什么。我使用 C++ 和浮点算法。

vgo*_*anz 3

所以,如果我理解这个问题:

0/0.000000001 = 0   = CORRECT
Run Code Online (Sandbox Code Playgroud)

和:

0.000000001/0.000000001 ~ 1    INCORRECT
Run Code Online (Sandbox Code Playgroud)

我将定义一个函数来检查错误,并带有参数 sigma。

如果 value < sigma = 0.001,则假定其为零,并返回 0,否则返回 value。

因此,它总是在超过 sigma 误差的值下工作,否则为 0。