(1)在Bradski和Kaehler的书“学习OpenCV…”中,他们关于镜头失真的描述(第376页):
xcorrected = x * ( 1 + k1 * r^2 + k2 * r^4 + k3 * r^6 ) + [ 2 * p1 * x * y + p2 * ( r^2 + 2 * x^2 ) ],
ycorrected = y * ( 1 + k1 * r^2 + k2 * r^4 + k3 * r^6 ) + [ p1 * ( r^2 + 2 * y^2 ) + 2 * p2 * x * y ],
其中 r = sqrt( x^2 + y^2 )。
可能,(x, y) 是未校正捕获图像中与世界点对象坐标 (X, Y, Z) 相对应的像素坐标,相对于摄像头框架参考,并满足以下条件:
xcorrected = fx * ( X / Z ) + cx and ycorrected = fy * ( Y / Z ) + cy,
其中,fx、fy、cx和cy是相机的内部参数。因此,当我们有一张拍摄图像时,通过应用以上前两个校正表达式,我们可以获得所需的坐标(xcorrected、ycorrected),从而生成一个未畸变的捕捉到的世界场景图像。
然而...
(2) 复杂之处在于查看OpenCV 2.0 C参考文献中相机校准和三维重建部分的条目。为了方便比较,我们从所有世界点(X、Y、Z)坐标都是相对于相机参考框架来表示的开始,就像#1中一样。因此,变换矩阵[R | t]并不重要。
C参考文献中表述如下:
x' = X / Z,
y' = Y / Z,
x'' = x' * ( 1 + k1 * r'^2 + k2 * r'^4 + k3 * r'^6 ) + [ 2 * p1 * x' * y' + p2 * ( r'^2 + 2 * x'^2 ) ],
y'' = y' * ( 1 + k1 * r'^2 + k2 * r'^4 + k3 * r'^6 ) + [ p1 * ( r'^2 + 2 * y'^2 ) + 2 * p2 * x' * y' ],
其中 r' = sqrt(x'^2 + y'^2),最终得出
u = fx * x'' + cx,
v = fy * y'' + cy.
如图所示,这些表达式不等同于#1中呈现的那些表达式,因此两组修正后的坐标 ( xcorrected, ycorrected ) 和 ( u, v ) 并不相同。为什么存在矛盾?在我看来,第一组更有意义,因为我可以为其中每个x和y附加物理含义,而当相机焦距不恰好为1时,我在 X/Z 和 Y/Z 中找不到任何物理含义。此外,我们无法计算 x' 和 y' ,因为我们不知道(X, Y, Z)。
(3) 不幸的是,当我们参考英特尔开源计算机视觉库参考手册中镜头畸变部分(page 6-4)的写作时,情况变得更加混乱,其中部分说明如下:
"设 ( u, v ) 为真实像素图像坐标,即具有理想投影的坐标,而 (u ̃, v ̃ ) 是对应的实际观测(畸变)图像坐标。同样地,( x, y ) 是理想(无畸变)坐标,而(x ̃, y ̃ )是实际(畸变)图像物理坐标。考虑两个扩展项,给出以下结果:"
x ̃ = x * ( 1 + k1 * r^2 + k2 * r^4 ) + [ 2 p1 * x * y + p2 * ( r^2 + 2 * x^2 ) ]
y ̃ = y * ( 1 + k1 * r^2 + k2 * r^4 ] + [ 2 p2 * x * y + p2 * ( r^2 + 2 * y^2 ) ],
其中 r = sqrt( x^2 + y^2 )。...
"由于 u ̃ = cx + fx * u,v ̃ = cy + fy * v,因此结果系统可以重写为以下形式:
u ̃ = u + ( u – cx ) * [ k1 * r^2 + k2 * r^4 + 2 * p1 * y + p2 * ( r^2 / x + 2 * x ) ]
v ̃ = v + ( v – cy ) * [ k1 * r^2 + k2 * r^4 + 2 * p2 * x + p1 * ( r^2 / y + 2 * y ) ]
后者关系用于从摄像头中矫正图像。
好吧,看起来涉及 x ̃ 和 y ̃ 的表达式与本文顶部给出的两个涉及 xcorrected 和 ycorrected 的表达式相同。然而,根据给定的描述, x ̃ 和 y ̃ 并不是指已校正的坐标。我不理解坐标 ( x ̃, y ̃ ) 和 ( u ̃, v ̃ ) 或者 ( x, y ) 和 ( u, v ) 之间的区别。从它们的描述中,它们唯一的区别似乎在于 ( x ̃, y ̃ ) 和 ( x, y ) 是“物理”坐标,而 ( u ̃, v ̃ ) 和 ( u, v ) 不是。这个区别到底是什么?它们不都是物理坐标吗?我迷失了!
感谢任何帮助!