C++ findHomography()中矩阵的单应分解
我用它作为基础来检测场景中的矩形目标。我使用圆球和法兰匹配器。我已经能够使用C++ findHomography()中矩阵的单应分解,c++,opencv,computer-vision,homography,rotational-matrices,C++,Opencv,Computer Vision,Homography,Rotational Matrices,我用它作为基础来检测场景中的矩形目标。我使用圆球和法兰匹配器。我已经能够使用findHomography()和perspectiveTransform()函数成功地绘制场景中检测到的目标的边界框。 参考图像(img_object在上述代码中)是仅矩形目标的直视图。现在,场景图像中的目标可能向前或向后倾斜。我想知道它倾斜的角度。我读过各种帖子,得出结论,findHomography()返回的单应可以分解为旋转矩阵和平移向量。 我使用了代码从推荐的翻译成C++。这是从OpenCV的摄像机标定模块得
findHomography()
和perspectiveTransform()
函数成功地绘制场景中检测到的目标的边界框。
参考图像(
img_object
在上述代码中)是仅矩形目标的直视图。现在,场景图像中的目标可能向前或向后倾斜。我想知道它倾斜的角度。我读过各种帖子,得出结论,findHomography()
返回的单应可以分解为旋转矩阵和平移向量。
我使用了代码从推荐的翻译成C++。这是从OpenCV的摄像机标定模块得到的Zhang SVD分解代码。我从O'Reilly的学习OpenCV的书中得到了这个分解代码的完整解释。
我的问题是:
findHomography()
获得的单应性作为该分解模块的输入,并期望得到正确的输出吗?还是我遗漏了什么提前感谢您的时间和回复。张的校准程序将生成旋转矩阵。这可以表示为3个(欧拉)角,而不是一个。或者,等价地(通过罗德里格斯公式),作为一个单位向量和围绕该向量的旋转角,也就是三个数字
除非您的相机和目标非常小心地相互定位,否则没有理由期望只有一个非零旋转角度。为什么不使用已知参数(比例、平移、旋转和透视参数)创建您自己的单应性,并尝试在这样的矩阵上进行分解?您将看到是否将提取正确的参数。问题不在于单应性分解。我相当确信它工作正常。我想知道的是,在我的情况下,我可以给出findHomography()返回的单应性吗在将球体检测应用于该模块后?旋转矩阵是否会给出目标旋转的角度?谢谢你的回答。我可以理解,在其他两个轴上也会有小角度值。你能详细说明罗德里格斯公式吗?目标会向相机移动或远离相机。因此,该旋转matrix也能给我这个旋转?关于Rodriguez的公式,请参见维基百科:-OpenCV有代码来进行旋转矩阵的转换。我不明白你的第二个问题:与朝向或远离摄影机的运动相关的旋转?这是平移,不是旋转。对不起,我不清楚。通过向前/向后倾斜或朝向/远离摄影机,我的意思是我的目标在opencv轴系统中围绕x轴旋转,如中所示,这意味着我将在该轴上旋转。是的,在这种情况下,轴角度表示是平行于x轴的向量,角度表示绕其旋转,逆时针w.r.t.轴时为正值(如“眼睛盯着箭头,脚放在羽毛上”)。但是,在实践中,轴不会完全平行于相机x轴,除非您非常仔细地制作了这样的设置。