我使用这个代码作为基础,在镜头中检测我的矩形目标,我使用ORB和Flann,我成功地使用findHomography()和perspectiveTransform()函数绘制了场景中检测到的目标的边框。
参考图像(上述代码中的img_object)是矩形target.Now的直视图像,我的场景图像中的目标可以向前或向后倾斜。我想找出它被倾斜的角度。我阅读了各种帖子,得出了findHomography()返回的同形可以分解为旋转矩阵和平移向量的结论。我使用了此链接推荐的https:/gist.github.com/inspirit/740979的代码,翻译为C++.This是从OpenCV的相机校准模块获得的张SVD分解代码,我从O‘’Reilly的学习OpenCV一书中得到了对这个分解代码的完整解释。
我还在匹配器返回的关键点上使用solvePnP()交叉检查旋转矩阵和从同形分解返回的平移向量,但它们似乎不相同。
我已经得到了所有场景图像倾斜度的测量结果,我找到了从旋转矩阵中提取角度的两种方法,以检查它们是否与我的值匹配。
三个欧拉角是
theta_{x} = atan2(r_{32},r_{33})
theta_{y} = atan2(-r_{31},sqrt{r_{32}^2 + r_{33}^2})
theta_{z} = atan2(r_{21},r_{11})
我用这两种方法来计算旋转矩阵的角度,这两种方法都是从同形分解得到的,并且解p().All,角度是不同的,并且给出了非常意想不到的值。
在我的理解中有漏洞吗?我不知道我的计算在哪里,wrong.Are有什么可供选择的吗?
发布于 2014-02-06 07:33:03
你为什么指望他们是一样的?他们根本不是一回事。
欧拉角是从世界框架开始,一次旋转一个轴的三个角度。
罗德里格斯公式给出了世界框架中一个向量的分量,以及该向量的旋转角度。
https://stackoverflow.com/questions/21569934
复制相似问题