我对用于相机校准目的的OpenCV 的各种坐标参数化有疑问。问题在于,关于图像失真公式的三种不同信息来源显然对所涉及的参数和方程给出了三种非等效描述:
(1) Bradski 和 Kaehler在他们的书 “Learning 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 是相机的内在参数。因此,从捕获的图像中获得 (x, y),我们可以通过应用上述前两个校正表达式获得所需的坐标 (xcorrected, ycorrected) 以生成捕获的世界场景的未失真图像。
然而...
(2) 当我们查看 Camera Calibration and 3D Reconstruction 部分下的 OpenCV 2.0 C Reference 条目时,就会出现复杂情况。为了便于比较,我们从所有世界点 (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 附加物理意义,而当相机对焦时,我发现 x' = X / Z 和 y' = Y / Z 没有物理意义长度不完全是 1。此外,我们无法计算 x' 和 y',因为我们不知道 (X, Y, Z)。
(3) 不幸的是,当我们参考英特尔开源计算机视觉库参考手册的镜头失真部分(第 6-4 页)中的著作时,事情变得更加模糊,其中部分指出:
“令(u,v)为真实像素图像坐标,即具有理想投影的坐标,(ũ,ṽ)为对应的真实观察(畸变)图像坐标。同理,(x,y)为理想(畸变) -free) 和 ( 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) 不是。这种区别到底是什么?不都是物理坐标吗?我迷路了!
感谢您的任何意见!