opencv和matlab都有函数decomposeHomographyMatrix
。这需要单应矩阵H和相机内在的K.我不明白它为什么需要K?
这些功能实现中的每一个都引用了" Malis" (https://hal.archives-ouvertes.fr/inria-00174036/document)。在第7页,它讨论了内在矩阵K,但从未使用它。它似乎没有必要吗?
答案 0 :(得分:2)
以下是我对您链接的文档的理解("深入理解基于视觉的控制的单应性分解")。如果我错了,请纠正我。
DecomposeHomographyMat需要K来计算来自投射单应性G的欧几里德单应型H.
H = K_inv * G * K(式2)
R,t和n将根据欧几里德单应矩阵(公式3)计算。
Opencv函数decomposeHomographyMat 假设得到一个投射单应矩阵作为输入(不是欧几里德)! 请注意,在您链接的文档中,投影单应矩阵称为G(不是H!),而欧几里德单应矩阵称为H.
投影单应矩阵是基于矢量 p - 点的图像坐标计算的。 (像素)
alfa_p * p_c = G * p_star
欧几里得单应矩阵是基于向量 m "从相机姿态观察到的点的归一化投影坐标计算的。 (例如米)。
alfa_m * m_c = H * m_star
其中:-c - 当前帧; _d - 所需的框架;阿尔法 - 只是比例因子
图像与投影坐标之间的关系是:
m = K_inv * p
K - 相机内部参数的矩阵; K_inv - 矩阵K的倒数
更清楚:
p_c = G * p_star
- > K * K_inv * p_c = G * K * K_inv * p_star
- > K * m_c = G * K * m_star
- > m_c = K_inv * G * K * m_star
- > m_c = H * m_star
请记住: K_inv * K = I - 单位矩阵
答案 1 :(得分:0)
嗯,你必须知道K才能找到R,T。您的参考文献中的公式(1)清楚地显示了这一点(在您的情况下给出了单应性G,并且您正在寻找相机姿势R,T)。在不知道K的情况下无法解决R,T。
以后是否使用K取决于你将如何处理姿势。如果您要将3D地标投影到图像,您也必须知道K.
不确定我是否告诉你任何新内容......