Math 为什么有3个相互冲突的OpenCV相机校准公式?

Math 为什么有3个相互冲突的OpenCV相机校准公式?,math,opencv,formula,camera-calibration,Math,Opencv,Formula,Camera Calibration,我对OpenCV的用于摄像机校准的各种坐标参数化有问题。问题在于,关于图像失真公式的三种不同信息源显然给出了所涉及参数和方程的三种非等效描述: (1) Bradski和Kaehler在他们的书《学习OpenCV…》中写到了镜头畸变(第376页): 其中r=sqrt(x^2+y^2) 假设,(x,y)是未校正捕获图像中的像素坐标,对应于坐标(x,y,Z)为相机帧参考的世界点对象,其中 xcorrected = fx * ( X / Z ) + cx and ycorrected =

我对OpenCV的用于摄像机校准的各种坐标参数化有问题。问题在于,关于图像失真公式的三种不同信息源显然给出了所涉及参数和方程的三种非等效描述:

(1) Bradski和Kaehler在他们的书《学习OpenCV…》中写到了镜头畸变(第376页):

其中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,yccorrected),以生成捕获的世界场景的未失真图像

然而

(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,yccorrected)和(u,v)不相同。为什么会有矛盾?在我看来,第一组更有意义,因为我可以将物理意义附加到其中的每个x和y,而当相机焦距不完全为1时,我发现x'=x/Z和y'=y/Z没有物理意义。此外,我们无法计算x'和y',因为我们不知道(x,y,Z)

(3) 不幸的是,当我们参考《英特尔开源计算机视觉库参考手册》的“镜头失真”一节(第6-4页)时,事情变得更加模糊,其中部分内容是:

“设(u,v)为真像素图像坐标,即具有理想投影的坐标,(ũ,ṽ)为相应的真实观察(畸变)图像坐标。同样,(x,y)为理想(无畸变)且(x̃,ỹ)为真实(畸变)图像物理坐标。考虑到两个展开项,得出以下结果:

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)

“由于ũ=cx+fx*u和ṽ=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并不是指校正坐标。我不理解coo的含义之间的区别坐标系(x̃,ỹ)和(ũ,ṽ),或者就这一点而言,在对(x,y)和(u,v)之间。从它们的描述来看,它们唯一的区别似乎是(x̃,ỹ)和(x,y)指的是“物理”坐标,而(ũ,ṽ)和(u,v)不要。这是什么区别?它们不都是物理坐标吗?我迷路了


感谢您的输入!

相机校准没有唯一的公式,它们都是有效的。请注意,第一个公式包含r^2、r^4和r^6的常数K1、K2和K3,而另外两个公式仅包含r^2和r^4的常数?这是因为它们都是近似模型。第一个公式可能更精确,因为它有更多的参数参数

只要你看到:

r = sqrt( x^2 + y^2 )
假设x=(x坐标像素)-(摄像机中心以像素为单位)可能是安全的,因为r通常表示从中心开始的半径


顺便问一下,你想做什么?估计相机参数,校正镜头畸变,或者两者都做?

谢谢道格的输入。不幸的是,我可能没有足够清楚地提出这个问题,因为你似乎没有抓住三个公式之间的争论点。这不是vario中使用的术语数量的差异我们这里关注的是近似值,但事实是——至少在我看来——三种不同的公式在数学上是不等价的(即使假设它们在近似值中都有相同数量的项)。我正试图编写一个程序,修正给定fx、fy、cx和cy的相机失真。John
r = sqrt( x^2 + y^2 )