OpenCV中从基础矩阵得到本质矩阵

5

我已经通过使用SURF找到对应点,计算出了立体图像的基本矩阵。根据Hartley和Zisserman的方法,计算本质矩阵的步骤如下:

E = K.t() * F * K

我该如何获得K值?还有其他计算E的方法吗?

1个回答

13

我不知道你从哪里得到那个公式,但正确的公式是E = K'^T . F . K(参见Hartley&Zisserman,第二版第9.6节,第257页)。

K是内部相机参数,以像素为单位表示比例因子和图像中心位置。

    | \alpha_u     0     u_0 |
K = |    0      \alpha_u v_0 |
    |    0         0      1  |

(抱歉,SO不支持Latex)

编辑:要获取这些值,您可以执行以下操作:

  • 校准相机
  • 如果您拥有制造商数据,则可以计算近似值。如果镜头正确居中于传感器上,则u_0和v_0分别是图像分辨率的宽度和高度的一半。alpha = k.f其中f:焦距(m),k为像素比例因子:例如,如果您有6um的像素,则k=1/6um。例如,如果镜头为8mm,像素大小为8um,则alpha=1000

计算E

当然,有多种方法可以计算E,例如,如果您已经对相机进行了强校准,则可以提取两个相机之间的R和t(旋转矩阵和平移向量),并且E被定义为t的反对称矩阵和矩阵R的乘积。

但是如果您有这本书,所有这些都在内部。

编辑刚刚注意到,甚至有一个关于此主题的维基百科页面


抱歉,我没有提到立体图像是用同一台相机拍摄的,因此K' = K,并且我所说的t()是指OpenCV中转置矩阵的函数。那么,我的问题现在是:我如何从这些图像中获取K(我事先不知道它)? - JuaniL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接