发明内容
本发明目的是解决对鱼眼镜头所成影像造成的畸变的问题,提供一种鱼眼镜头标定后鱼眼图像校正的方法,是对鱼眼镜头进行标定和标定后对其畸变图像校正的方法。
为了解决上述问题,本发明的技术方案为:
一种鱼眼镜头标定后鱼眼图像校正的方法,包括:
S1.建立完整的鱼眼摄像机投影和畸变模型,并在模型上建立鱼眼成像关系;
S2.由鱼眼镜头与配套摄像模块组成鱼眼摄像机,并自制平面棋盘标定板,再利用鱼眼摄像机拍摄平面棋盘格采集图片来标定鱼眼镜头;
S3.鱼眼镜头标定后,利用相关标定参数对鱼眼畸变图像进行畸变校正。
其中,步骤S1的建立完整的鱼眼摄像机投影和畸变模型的具体过程为:
设空间场景点X=[X,Y,Z,1]在鱼眼图像上的成像点为p=[u,v]τ;鱼眼摄像机投影成像的完整模型由以下方程描述:
其中λ为参数,λ>0;P称之为投影矩阵,P=[R|T],R∈S0(3),f(ρ)代表鱼眼镜头的曲面多项式模型,f(ρ)中的参数为(a0a1,a2,a3,a4),公式描述为:
f(ρ)=a0+a1ρ+a2ρ2+a3ρ3+a4ρ4 (2)
其中ρ对应于鱼眼图像像素点到成像中心的距离,
ρ关于θ的多项式称为畸变多项式,ρ关于θ的多项式模型表示为:
ρ=b0+b1θ+b2θ2+b3θ3+b4θ4+...+bnθn (3)
其中θ是入射光线与单位球Z轴正方向的夹角;多项式系数称之为畸变系数,表示为b0,b1,b2,b3,b4,...;
实际中生活中,摄像机安装会带来了离心畸变和图像传感器的误差,另外图像传感器一般不是正方形而是矩形,这些情况是真实存在的,难以忽略其影响。基于以上考虑,本发明通过增加参数来描述更精确的模型;即通过一个仿射变换达到精确描述的目地,即:
其中c,d,e为参数,(u′,v′)为真实坐标,(u,v)为理想坐标,(xc,yc)为图像中心坐标;
上式表示为:
u′=Au+t (5)
其中A∈R2×2和t∈R,
根据上面提出的模型,对鱼眼摄像机进行标定就是估计P=[R|T];a0,a1,a2,a3,a4,A,t这些参数;其中矩阵R,T称之为外部参数;a0,a1,a2,a3,a4、A,t称之为内部参数;要校正鱼眼畸变图像,只需要使用内部参数。
步骤S2的标定鱼眼镜头的步骤包括:
S21.自制平面棋盘标定板,鱼眼摄像机对棋盘标定板采集N幅图片,其中N>>1;读取所有的棋盘格拍摄图像;
S22.在每张棋盘格图像上自动选取棋盘格的黑白交叉顶点;
S23.估计外部参数和内部参数;
S24.线性优化,线性优化通过奇异值分解可以方便解决;
S25.中心提取,利用投影点的直观性,把A=I和t=0条件下的中心位置作为初始值,计算出新的中心位置;再使用计算的新中心位置作为下一次初始值,进行多次迭代,每一次计算投影误差,并求出均方误差,使误差满足需要的条件,并保证有局部最小值,从而确定优化后的中心位置;
S26.非线性优化,基于最大似然准优化获得的内外部参数,作为标定参数,选取需要的最终用于鱼眼图像校正使用。
上述步骤S23估计外部参数和内部参数的过程为:
拍摄平面标定板i幅图片,这样对于每一幅拍摄图片,能够得到:
其中是Ri的列向量;上标i表示第i幅标定板拍摄照片,下标j表示第i幅标定板照片的第j个点;X、Y分别为空间场景的横坐标和纵坐标;T为外部参数,
对式(6)两边进行叉乘运算,由于则:
对第i幅标定板图像上的第j个图像点pj能够得到三个齐次方程,即:
第I式:vj(r31Xj+r32Yj+t3)-g(ρj)(r21Xj+r22Yj+t2)=0
第II式:g(ρj)(r11Xj+r12Yj+t1)-uj(r31Xj+r32Yj+t3)=0
第III式:uj(r21Xj+r22Yj+t2)-vj(r11Xj+r12Yj+t1)=0
其中Xj,Yj,Zj和uj,vj是已知的,通过第III式求出r11,r12,r21,r22,t1,t2;
把所有待求项放入一个列向量H,即H=[r11,r12,r21,r22,t1,t2]τ;
L表示标定板上有L个点,把第III式改写为:
M·H=0
其中
在||H||2=1的条件下,通过最小平方准则最小化||M·H||2能够线性估计出H;由于r1,r2是标准正交,r31,r32也能够唯一的确定;然后对每一幅标定板图片确定外部参数:r11,r12,r21,r22,r31,r32,t1,t2;
再把所有待求项放入一个列向量,则第I式改写为:
其中
K表示对平面标定板的K次拍摄;求解以上方程,得到最小二乘解,确定参数a0,a1,a2,a3,a4;
步骤S24的线性优化是通过线性优化的方法对得到的初始值进行线性优化;优化的方法通过线性最小化来实现,具体为:
第一步,使用内部参数a0,a1,a2,a3,a4初始值代入第I式,第II式,第III式,通过求解第I式,第II式,第III式再次计算所有的外部参数r11,r12,r21,r22,r31,r32,t1,t2,t3;将问题转化为求解齐次线性方程组问题,通过奇异值分解解决;
第二步,将第一步求解的外部参数代入第II式,第III式来进一步优化内部参数;同样,将问题转化为线性方程组的求解问题,通过伪逆矩阵解决。
上述步骤S25中的中心提取,实际中生活中要考虑加入仿射变换的影响,所以在A=I和t=0的条件下,图像中心坐标误差很大,需要进一步优化。优化算法主要利用投影点的直观性,把A=I和t=0条件下的中心位置作为初始值,计算出新的中心位置;再使用计算的新中心位置作为下一次初始值,进行多次迭代,每一次计算投影误差,并求出均方误差,使误差满足需要的条件,并保证有局部最小值,从而确定优化后的中心位置。通过这种迭代算法,虽然耗费了一定的时间,但实验结果表明:这个时间花费是可以忽略不计的,进行12次迭代大约耗时1秒。额外使用这种迭代算法的作用在于不仅可以确定于圆形鱼眼图像的中心,还可以得到不完整的鱼眼图像的中心,这样不仅可以适用于圆形鱼眼图像还可以对不完整的鱼眼图像进行校正。
在步骤S24和步骤S25中,线性优化仅仅获得了几何距离的最小值,这个是不精确的,也是没有实际意义的。因此,在这一步基于最大似然准则进一步优化获得的内外部参数。
即步骤S26的非线性优化是基于最大似然准则优化获得的内外部参数;
假设获得了K幅标定板的拍摄图片,每一幅图片上包含L个点;那么最大似然估计就是最小化函数:
其中是场景点的投影;Ri,Ti描述标定阪的位置和方向;Ri∈S0(3),
最小化函数就是寻找合适的标定参数来最小化投影误差;使用Levenberg-Marquadt算法来最优化函数,这在MATLAB工具箱中可以方便使用lsqnonlin函数来进行最优化处理。Levenberg-Marquadt算法需要初始值,则采用使用步骤S24中获得的内外部参数作为初始值,矩阵A使用单位矩阵I作为初始值;中心位置Oc使用步骤S25中经过线性迭代后的值作为初始值;
设定初始值后,通过最大似然估计得到进一步优化后的内外部参数,这些参数即为标定参数,选取需要的最终用于鱼眼图像校正使用。
并且,步骤S3的标定后对鱼眼畸变图像进行校正的步骤包括:
S31.提取标定结果,对用于校正的参数以TXT的格式进行存储;
以TXT的格式的标定结果:曲面镜头模型多项式г的系数,表示为(a0,a1,a2,a3,a4),储存在数组SS中,SS=[a0,a1,a2,a3,a4];鱼眼图像的中心坐标(xc,yc)即向量t;仿射变换参数c,d,e即矩阵A;
S32.空间坐标映射,通过步骤S1和S2提出的模型参数标定过程,得到鱼眼成像坐标与空间场景坐标的转换规律,根据这个关系将鱼眼图像对应于空间场景图,从而得到透视图;
通过步骤S31的多项式系数a0,a1,a2,a3,a4得到曲面镜头模型多项式f(ρ),f(ρ)代表鱼眼镜头的曲面模型,这是一个关于ρ的多项式函数,为了校正需要得到ρ关于θ的畸变多项式采用以下方式;
ρ关于θ的多项式系数,称之为畸变多项式系数,表示为b0,b1,b2,b3,b4,...,为了求解畸变多项式系数,通过拟合多项式,设定一个循环来得到多项式的阶数,使拟合多项式误差小于0.01(ε≤0.01)即停止,获得最优参数;得到ρ关于θ的多项式,即
ρ=b0+b1θ+b2θ2+b3θ3+b4θ4+...+bnθn
那么,真实空间三维点P(X,Y,Z)映射为平面图像坐标p(x′,y′),其变换关系如下:
设
当N=0时,
此时,令N=eps,即令N为无穷小;这样做是防止进行除法运算时被除数为0。
当N≠0时,
理想图像坐标:
真实图像坐标:
S33.双三次坐标插值。经过步骤S32空间变换得到需要的像素点,再利用插值的方法可以获得新像素坐标,将原输入图像坐标的像素值直接赋值给新坐标从而得到新坐标的像素,最后按新的坐标进行输出图像;
这是由于通过步骤S32的像素点的空间变换,可以把鱼眼圆形图像恢复为满足人眼效果的校正图像。注意到上述图像变形校正后在图像平面可能会产生小数点的像素,即步骤S32中平面图像坐标p(x′,y′)会产生小数坐标,这是不符合图像坐标要求的,需要插值技术。双三次插值是一个鲁棒性强的插值技术,但计算量更高。更加清晰的图像质量和更多的场景细节内容,免除了人为的再次增强图像质量和细节,故在本案中将该方法作为首选。如设定输出图像(640*480或者640*320)大小后建立空图像空像素图像,再通过坐标映射和双三次坐标插值获得新像素坐标,将原图像坐标的像素值直接赋值给新坐标从而得到输出图像。
S34.滤波,对步骤S33输出的图像进行滤波处理。是为了减少高频噪声,同时把校正后的图像降采样到VGA(640*480或者640*320)显示,在处理的最后一步加入5*5低通滤波器处理,去除噪声干扰,这样采样得到的图像才是清晰符合人眼视觉的图像,可以在硬件上显示。
与现有技术相比,本发明的有益效果:
本发明首先建立了完整的鱼眼摄像机投影和畸变模型。该模型是一种通用的鱼眼模型,使用自制的平面标定板并利用该通用模型实现鱼眼摄像机的模型参数的标定,提出了一种具有普适性的鱼眼摄像机标定方法,并利用标定后的镜头畸变参数把鱼眼圆形变形图像恢复成满足人眼效果的透视图像。本发明能标定市场上的大多数鱼眼镜头,只需利用自制的标定板就可进行精确标定,操作简单、效率高。畸变校正方法不仅可以适用于圆形鱼眼图像还可以对不完整的鱼眼图像进行校正。本发明可以使通过鱼眼镜头采集的图像得到快速、准确地畸变校正。
具体实施方式
下面结合附图对本发明进一步说明。
鱼眼镜头标定后鱼眼图像校正方法的第一实施例
图1示出了本发明的方法的第一实施例完整过程。
步骤1:建立完整的鱼眼摄像机投影和畸变模型,并在模型上建立鱼眼成像关系;鱼眼摄像机的球面模型如图2示,设空间场景点X=[X,Y,Z,1]在鱼眼图像上的成像点为p=[u,v]τ;鱼眼摄像机投影成像的完整模型由以下方程描述:
其中λ为参数,λ>0;P称之为投影矩阵,P=[R|T],R∈S0(3),f(ρ)代表鱼眼镜头的曲面多项式模型,f(ρ)中的参数为(a0a1,a2,a3,a4),公式描述为:
f(ρ)=a0+a1ρ+a2ρ2+a3ρ3+a4ρ4
其中ρ对应于鱼眼图像像素点到成像中心的距离,
ρ关于θ的多项式称为畸变多项式,ρ关于θ的多项式模型表示为:
ρ=b0+b1θ+b2θ2+b3θ3+b4θ4+...+bnθn
其中θ是入射光线与单位球Z轴正方向的夹角;多项式系数称之为畸变系数,表示为b0,b1,b2,b3,b4,...;
实际中生活中,摄像机安装会带来了离心畸变和图像传感器的误差,另外图像传感器一般不是正方形而是矩形,这些情况是真实存在的,难以忽略其影响。基于以上考虑,本发明通过增加参数来描述更精确的模型。非常容易的,通过一个仿射变换即可达到精确描述的目地,即:
其中c,d,e为参数,(u′,v′)为真实坐标,(u,v)为理想坐标,(xc,yc)为图像中心坐标。
上式也可以表示为:
u′=Au+t
其中A∈R2×2和t∈R
按照本专利提出的模型,对鱼眼摄像机进行标定就是估计P=[R|T];a0,a1,a2,a3,a4,A,t这些参数。其中矩阵R,T称之为外部参数。a0,a1,a2,a3,a4,A,t(即c,d,e,xc,yc)称之为内部参数。要校正鱼眼畸变图像,只需要使用内部参数即可。
步骤2:对鱼眼镜头进行标定,该步骤通过以下方式实现:
步骤2.1:使用如图3示的模版自制平面棋盘标定板,利用鱼眼摄像机对棋盘标定板采集12幅图片并读取所有的棋盘格拍摄图像,如图4示;
步骤2.2:在每张棋盘格图像上自动选取棋盘格的黑白交叉顶点,如图5示为其中一幅已经选取了角点的标定板图像;
步骤2.3:估计外部参数和内部参数。
拍摄平面标定板i幅图片,这样对于每一幅拍摄图片,可以得到:
其中是Ri的列向量。上标i表示第i幅标定板拍摄照片,下标j表示第i幅标定板照片的第j个点。
上式两边进行叉乘运算,因为所以可得:
第I式:vj(r31Xj+r32Yj+t3)-g(ρj)(r21Xj+r22Yj+t2)=0
第II式:g(ρj)(r11Xj+r12Yj+t1)-uj(r31Xj+r32Yj+t3)=0
第III式:uj(r21Xj+r22Yj+t2)-vj(r11Xj+r12Yj+t1)=0
其中Xj,Yj,Zj和uj,vj是已知的,通过第III式求出r11,r12,r21,r22,t1,t2;
把所有待求项放入一个列向量H,即H=[r11,r12,r21,r22,t1,t2]τ;
L表示标定板上有L个点,把第III式改写为:
M·H=0
其中
在||H||2=1的条件下,通过最小平方准则最小化||M·H||2能够线性估计出H;由于r1,r2是标准正交,r31,r32也能够唯一的确定;这样通过第一个步骤,对每一幅标定板图片就可以确定外部参数:
r11,r12,r21,r22,r31,r32,t1,t2。
再把所有待求项放入一个列向量,则第I式改写为:
其中
K表示对平面标定板的K次拍摄;求解以上方程,得到最小二乘解,确定参数a0,a1,a2,a3,a4。
步骤2.4:线性优化;
在这一步通过线性优化的方法来对得到的初始值进行线性优化。优化的方法通过线性最小化来实现,具体思路如下:
第一步,使用内部参数a0,a1,a2,a3,a4初始值代入第I式,第II式,第III式,通过求解步骤2.3中的第I式,第II式,第III式,再次计算所有的外部参数r11,r12,r21,r22,r31,r32,t1,t2,t3。这样问题就转化为求解齐次线性方程组问题,通过奇异值分解可以方便解决。
第二步,将第一步求解的外部参数代入步骤2.3中的第II式,第III式来进一步优化内部参数。同样,问题转化为线性方程组的求解问题,通过伪逆矩阵可以解决。
步骤2.5:中心提取。本发明步骤1已经指出,实际中生活中要考虑加入仿射变换的影响,所以在A=I和t=0的条件下,图像中心坐标误差很大,需要进一步优化。优化算法主要利用投影点的直观性,把A=I和t=0条件下的中心位置作为初始值,计算出新的中心位置;再使用计算的新中心位置作为下一次初始值,进行多次迭代,每一次计算投影误差,并求出均方误差,使误差满足需要的条件,并保证有局部最小值,从而确定优化后的中心位置。通过这种迭代算法,虽然耗费了一定的时间,但实验结果表明:这个时间花费是可以忽略不计的,进行12次迭代大约耗时1秒。额外使用这种迭代算法的作用在于不仅可以确定于圆形鱼眼图像的中心,还可以得到不完整的鱼眼图像的中心,这样不仅可以适用于圆形鱼眼图像还可以对不完整的鱼眼图像进行校正。
步骤2.6:非线性优化。在步骤2.4和步骤2.5中,线性优化仅仅获得了几何距离的最小值,这个是不精确的,也是没有实际意义的。因此,在这一步基于最大似然准则进一步优化获得的内外部参数。
假设获得了K幅标定板的拍摄图片,每一幅图片上包含L个点。那么最大似然估计就是最小化函数:
其中是场景点的投影;Ri,Ti描述标定板的位置和方向;Ri∈S0(3),
最小化函数就是寻找合适的标定参数来最小化投影误差。使用Levenberg-Marquadt算法来最优化函数,这在MATLAB工具箱中可以方便使用lsqnonlin函数来进行最优化处理。Levenberg-Marquadt算法需要初始值,使用步骤2.4中获得的内外部参数作为初始值,另外矩阵A使用单位矩阵I作为初始值;中心位置Oc使用步骤2.5中线性迭代后的值作为初始值。设定初始值后,通过最大似然估计可以得到进一步优化后的内外部参数,这些参数就是得到的标定参数,选取需要的最终用于鱼眼图像校正使用。
实验结果如表1所示,
表1 鱼眼镜头标定结果
步骤3:对鱼眼畸变图像进行校正,具体步骤通过如图6所示方式实现,详述如下:
步骤3.1:提取标定结果,对用于校正的参数以TXT的格式进行存储。
以TXT的格式的标定结果:曲面镜头模型多项式Г的系数,表示为(a0,a1,a2,a3,a4),储存在数组SS中,SS=[a0,a1,a2,a3,a4];鱼眼图像的中心坐标(xc,yc)即向量t;仿射变换参数c,d,e即矩阵A;
步骤3.2:空间坐标映射。通过步骤1和2提出的模型参数标定过程,可以得到鱼眼成像坐标与空间场景坐标的转换规律,根据这个关系可以将鱼眼图像对应于空间场景图,从而得到透视图。
空间坐标映射的具体步骤如下。
通过步骤3.1的多项式系数a0,a1,a2,a3,a4很容易得到曲面镜头模型多项式f(ρ),f(ρ)代表鱼眼镜头的曲面模型,这是一个关于ρ的多项式函数,为了校正需要得到ρ关于θ的畸变多项式采用以下方式;
ρ关于θ的多项式系数,称之为畸变多项式系数,表示为b0,b1,b2,b3,b4,...,为了求解畸变多项式系数,通过拟合多项式,设定一个循环来得到多项式的阶数,使拟合多项式误差小于0.01(ε≤0.01),即停止,获得最优参数;即
ρ=4.62+9.53θ+26.78θ2-9.25θ3+77.78θ4+232.08θ5
多项式模型示意图如图7所示。
那么,真实空间三维点P(X,Y,Z)映射为平面图像坐标p(x′,y′),其变换关系如下:
设
当N=0时,
此时,令N=eps,即令N为无穷小;
当N≠0时,
理想图像坐标:
真实图像坐标:
步骤3.3:双三次坐标插值。通过步骤3.2的像素点的空间变换,可以把鱼眼圆形图像恢复为满足人眼效果的校正图像。注意到上述图像变形校正后在图像平面可能会产生小数点的像素,即步骤3.2中平面图像坐标p(x′,y′)会产生小数坐标,这是不符合图像坐标要求的,需要插值技术。双三次插值是一个鲁棒性强的插值技术,但计算量更高。更加清晰的图像质量和更多的场景细节内容,免除了人为的再次增强图像质量和细节,让此方法成为首选。本发明设定输出图像(640*480或者640*320)大小后建立空图像空像素图像,再通过坐标映射和双三次坐标插值获得新像素坐标,将原图像坐标的像素值直接赋值给新坐标从而得到输出图像。
步骤3.4:滤波。为了减少高频噪声,同时把校正后的图像降采样到VGA(640*480或者640*320)显示,在处理的最后一步加入5*5低通滤波器处理,去除噪声干扰,这样采样得到的图像才是清晰符合人眼视觉的图像,可以在硬件上显示。实验后,效果图如图8示。