【问题标题】:Fisheye correction formula, need explanation鱼眼校正公式,需要说明
【发布时间】:2015-12-24 04:04:33
【问题描述】:

经过大量搜索,我一直无法找到一个解释得体的 WebGL 鱼眼图像校正公式。 fisheye/antifisheye 的 Shadertoy 显示了一个公式

uv = m + normalize(d) * atan(r * -power * 10.0) * bind / atan(-power * bind * 10.0);

字面意思是“奇怪的公式”。它以某种方式遵循了 Paul Burke 在镜头畸变校正here 方面的工作,但我没有看到其中的联系。在我的应用程序中,公式归结为(值手动调整到我的镜头和网络摄像头):

uv = centerPoint + normalize(d) * atan(r * pi) * 1/3 / atan(pi/3)

其中 r 是像素到图像中心的距离,d 是该方向上的单位向量,而 centerPoint 是图像的中心。我不明白反正切如何直接与坐标联系在一起,谁能帮我得到它?我确实知道带有反正切的公式部分是计算距图像中心的像素距离,我不明白是如何计算的。

谢谢!

【问题讨论】:

  • 添加可视化设置的图像...鱼眼校正通常会转换片段/几何形状,因此与相机的垂直距离与深度坐标相匹配。在某些情况下,它是乘以 cos 在其他情况下是 tan 或其他公式都取决于您查看的内容和方式(投影类型和查看的几何形状以及与相机的距离)...

标签: image-processing webgl fisheye


【解决方案1】:

好的,经过一番搜索和询问,我明白了公式中发生了什么。下图有图表和基本公式:]1。由于 xy' 位置是已知的 - 它是纹理上的目标位置,我们计算 xy - 鱼眼图像上的源像素。 R是鱼眼图像半径。我们可以根据我们想要达到的最大视角来替换所需的 d 值(因为切线函数在 90 度处趋于无穷大并且 tan(B) = 1/d,所以取一个合理的值很好)。 转换后,我们得到:

xy= atan(xy'/d)* 2R/pi

这是理论上正确的等距投影公式,我们假设在镜头中执行。我在原帖中引用的公式有别的东西,而不是 2R/pi,但由于镜头的缺陷,它仍然有效——它很可能有一些我们永远不会知道的奇怪函数,它作为一个近似值起作用。

在那里,我希望它是可以理解的,如果有任何问题,我会很乐意回答他们:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 2018-04-15
    • 2017-04-27
    • 2018-06-05
    • 2016-05-20
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多