2

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

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 是图像的中心。我不明白反正切如何直接与坐标联系在一起,谁能帮我得到它?我确实知道带有反正切的公式部分是计算距图像中心的像素距离,我不明白是如何计算的。

谢谢!

4

1 回答 1

1

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

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

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

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

于 2015-10-03T11:38:15.897 回答