鱼眼矫正公式,需要解释。

3
经过广泛的搜索,我没有找到一个很好解释WebGL鱼眼图像矫正公式的方法。在fisheye/antifisheye中,有一个“奇怪的公式”:

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

它在文字上被描述为“奇怪的公式”。它某种程度上遵循Paul Burke对镜头失真校正的工作(参见此处),但我并没有看到联系。在我的应用中,这个公式可以简化为(值是手动调整的,以适应我的镜头和网络摄像头):

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

r是像素距离图像中心的距离,d是该方向上的单位向量,centerPoint是图像的中心。我不理解反正切如何直接与坐标相关联,有人可以帮助我吗?我知道公式中反正切部分是计算像素距离图像中心的,但我不明白这是如何计算的。

谢谢!


添加您的可视化设置图像... 鱼眼矫正通常会转换片段/几何体,使其垂直距离与深度坐标相匹配。在某些情况下,它是通过乘以 cos,在其他情况下,它是 tan 或其他公式,这完全取决于您正在查看什么,以及如何查看(投影类型和查看的几何形状以及摄像机距离等)。... - Spektre
1个回答

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

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

这是等距投影的理论正确公式,我们假设它是在镜头中完成的。我在原帖中引用的公式中,2R/pi被替换成了其他内容,但由于镜头的不完美性能,它仍然有效 - 最可能是它具有某种我们永远无法知道的奇怪函数,并且作为近似值使用。

希望这样更容易理解,如有任何问题,我将乐意回答 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接