gpt4 book ai didi

opengl - OpenGL 中的相机镜头失真

转载 作者:行者123 更新时间:2023-12-03 23:22:48 25 4
gpt4 key购买 nike

我正在尝试为我的 SLAM 项目模拟镜头失真效果。
扫描的彩色 3D 点云已经提供并加载到 OpenGL 中。
我想要做的是在给定的姿势下渲染 2D 场景,并在来自鱼眼相机的真实图像和渲染图像之间进行一些视觉测距。
由于相机镜头畸变严重,渲染阶段也要考虑。

问题是我不知道把镜头畸变放在哪里。着色器?

我找到了 some open codes将失真放入几何着色器中。但是我猜这个畸变模型与计算机视觉社区中的镜头畸变模型不同。在 CV 社区中,镜头畸变通常发生在投影平面上。

This one与我的工作非常相似,但他们没有使用失真模型。

有人有什么好主意吗?

我刚找到 another implementation .他们的代码在片段着色器和几何着色器中实现了失真。但是片段着色器版本可以应用于我的情况。因此,我想以下内容会起作用:

# vertex shader
p'=T.model x T.view x p
p_f = FisheyeProjection(p') // custom fish eye projection

最佳答案

镜头畸变通常将直线变成曲线。使用 OpenGL 对线条和三角形进行光栅化时,无论您如何变换顶点,图元的边缘都保持笔直。

如果您的模型具有足够精细的分割,那么将扭曲合并到顶点变换中是可行的。如果您只渲染点,它也适用。

但是,当您的目标是普遍适用性时,您必须以某种方式处理直边图元。一种方法是使用几何着色器进一步分割传入模型;或者您可以使用曲面分割着色器。

另一种方法是渲染成立方体贴图,然后使用着色器为此创建等效的透镜。我实际上建议使用它来生成鱼眼图像。

畸变本身通常由 3 到 5 阶多项式表示,将光学中心轴的未畸变角距离映射到畸变角距。

关于opengl - OpenGL 中的相机镜头失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44489686/

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