gpt4 book ai didi

OpenCV:从平移和旋转中获取透视矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:39 25 4
gpt4 key购买 nike

我正在尝试验证我的相机校准,所以我想纠正校准图像。我预计这将涉及使用对 warpPerspective 的调用,但我没有看到一个明显的函数,该函数采用相机矩阵以及旋转和平移向量来为此调用生成透视矩阵。

基本上我想执行描述的过程 here (特别是看到最后的图像)但从已知的相机模型和姿势开始。

是否有一个简单的函数调用可以获取相机的内在和外在参数并计算用于 warpPerspective 的透视矩阵?

我将在对图像调用 undistort 之后调用 warpPerspective

原则上,我可以通过求解 opencv camera calibration documentation 顶部定义的方程组来得出解。在指定约束 Z=0 之后,但我认为必须有一个固定例程可以让我对测试图像进​​行正射校正。

在我的搜索中,我发现很难浏览所有的立体校准结果——我只有一台相机,但想在我只看平面测试模式的约束下校正图像。

最佳答案

其实不需要正交相机。以下是如何获得适当的透视变换。

如果您使用 cv::calibrateCamera 校准相机,您将获得一个相机矩阵 K 一个镜头畸变系数向量 D相机,对于您使用的每个图像,一个旋转向量 rvec(您可以使用 cv::rodrigues 将其转换为 3x3 矩阵 R , doc ) 和翻译向量 T。考虑这些图像之一以及相关联的 RT。在使用畸变系数调用 cv::undistort 后,图像将类似于投影矩阵 K * [ R | 的相机获取的图像。 T].

基本上(正如@DavidNilosek 的直觉),您想取消旋转并获得图像,就好像它是由 K * [ I | 形式的投影矩阵获取的一样-C ] 其中 C=-R.inv()*T 是相机位置。为此,您必须应用以下转换:

Hr = K * R.inv() * K.inv()

唯一的潜在问题是扭曲的图像可能会超出图像平面的可见部分。因此,您可以使用额外的翻译来解决该问题,如下所示:

     [ 1  0  |         ]
Ht = [ 0 1 | -K*C/Cz ]
[ 0 0 | ]

其中 Cz 是 C 沿 Oz 轴的分量。

最后,根据上述定义,H = Ht * Hr 是所考虑图像的校正透视变换。

关于OpenCV:从平移和旋转中获取透视矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23275877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com