在已知并修复相机型号时纠正鱼眼失真

时间:2014-01-23 17:50:06

标签: math geometry computer-vision projection camera-calibration

我有一台相机,其位置将被修复,我们知道相机的细节。我读到here,photoshop可以对不同相机模型的逆变换进行硬编码,然后逆变换只是一个查找表。

任何人都可以指导我如何构建查找表。我认为我需要对我进行扭曲和不失真的版本。我也不知道如何创造它。如果我从同一个地方拍摄普通照片和鱼眼镜头照片,那会是正确的吗?

3 个答案:

答案 0 :(得分:2)

拍摄两张具有明显特征点的平面照片。一个具有尽可能小的失真,另一个具有鱼眼失真。对于每个特征点,请注意未失真(x,y)和失真(X,Y)坐标。

然后你需要在不规则点上使用一些2D插值方案。您可以考虑径向基函数方法或Shepard的反距离加权。请记住,您将单独插入x和y,将其视为(X,Y)的两个函数。

一旦建立了插值,失真图像中的任何像素(具有坐标(X,Y))都将引导您到未失真图像中的相应(x,y)。您将所有预先计算的(x,y)存储在一个巨大的LUT中。

答案 1 :(得分:2)

为了避免在不规则点上插值的可怕成本,我建议你定义一个简单的全局模型,例如低度的双变量多项式(比如说3,有10个自由度)。您将使用最小二乘法来拟合模型,使用您拥有的点对应关系。这将是一个近似值,而不是一个真正的插值。

经典理论使用围绕摄像机光轴建立的模型,靠近图像中心,通常具有圆对称性。这导致了复杂的非线性最小二乘问题。

在我的建议(多项式)中,模型的约束较少,方程保持线性。

即使递增计算可以节省几个周期,也不会对每个像素的变形模型进行评估。

答案 2 :(得分:2)

您的问题需要考虑两个不同的问题:

  1. 建立一个失真模型,即两个变量的二维函数D(x,y)= [Dx(x,y),Dy(x,y)],它映射一个点上的理想的(未扭曲的)图像坐标空间与其扭曲的对应物。

  2. 使用模型扭曲扭曲的图像以便更正。

  3. 问题2很简单:快速计算扭曲你只需要构建一个扭曲图,即一个伪彩色图像,例如R通道编码X方向的位移,G通道位移沿Y.由于失真是正常的一个平滑的函数,不需要以全分辨率存储扭曲图。但是,必须注意使用每个通道的可用位编码位移,以免丢失精度 - 建议使用16位浮点数(或编码固定精度浮点数的整数)。一旦知道了扭曲贴图,将其应用于图像是一个简单的插值问题,通常由图层合成工具执行。

    问题1是困难的部分,因为答案取决于镜头的光学特性。如果透镜元件的设计和材料是已知的,理论上可以从几何光学的第一原理构建封闭形式的模型,但是在实践中由于涉及复杂性而很少这样做。因此镜头设计师通常会依靠光线追踪进行模拟。

    然而,在通常的实践中,镜片设计和制造的细节不可用,并且必须通过图像测量来估计失真。或者,正如您所注意到的,您可以利用其他人所做的工作,并查阅已知镜头的失真参数模型目录(或使用嵌入此类目录的应用程序,例如this one)。