And*_*eve 1 opengl opencv perspectivecamera camera-calibration pose-estimation
我正在开发一个增强现实应用程序,将图形叠加到相机图像上。使用 OpenCV Pose Estimator 和设备本身的固有相机参数,我能够生成一个非常好的 OpenCV 相机矩阵和 OpenGL 透视矩阵,从而产生合理的结果。
然而,我的解决方案以及我在该论坛和其他 Internet 位置上检查过的所有类似解决方案,只是对透视矩阵近端和远端参数使用一些有些任意的值(通常为 1.0 和 100)。
然而,虽然如果感兴趣的对象不是太近,这通常是可以的,但当对象靠近视点时,它会变得更加不准确并且成为失真的来源。
实际上,随着这两个参数(近、远)的调整,透视的消失点发生变化。
有谁有更合理的方法来从可用数据中推导出近参数和远参数?
近平面和远平面对透视没有影响。它们仅更改前剪裁平面和后剪裁平面的放置位置。
通过查看典型的投影矩阵,您可以确信情况确实如此。使用定义:
asp:纵横比。t2:半视角的正切值。n: 距离较近。f: 距离较远。则投影矩阵为:
[ 1 / (asp * t2) 0 0 0 ]
P = [ 0 1 / t2 0 0 ]
[ 0 0 (n + f) / (n - f) 2 * n * f / (n - f) ]
[ 0 0 -1 0 ]
Run Code Online (Sandbox Code Playgroud)
将其应用于向量可以得出:
[ x ] [ x / (asp * t2) ]
P * [ y ] = [ y / t2 ]
[ z ] [ (z * (n + f) + 2 * n * f) / (n - f) ]
[ 1 ] [ -z ]
Run Code Online (Sandbox Code Playgroud)
透视除法后的向量为:
[ x / (-z * asp * t2) ]
[ y / (-z * t2) ]
[ -(n + f + (2 * n * f) / z) / (n - f) ]
[ 1 ]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,结果向量的x和y分量决定了顶点在窗口中(或更准确地说,在 NDC 空间中)的位置,不依赖于近距和远距的值。近和远值仅控制眼睛空间中的 z 坐标到 NDC 空间中的 z(深度)值的映射。
| 归档时间: |
|
| 查看次数: |
3877 次 |
| 最近记录: |