【CV】相机畸变

相机畸变

由于摄像机制造工艺偏差,以及入射光线在通过各个透镜时的折射误差和CCD点阵位置误差等,世纪的光学系统存在着非线性几何失真,从而使目标像点与理论像点之间存在着多种几何畸变。

其中影响最大的是径向畸变和切向畸变。径向畸变来自于透镜形状,切向畸变来自于整个摄像机的组装过程。

径向畸变主要有桶形畸变,枕形畸变和胡子畸变。主要原因是镜头形状的缺陷。

其中径向畸变成像仪中心畸变为0,随着向边缘移动,畸变越来越严重。可以通过下面的泰勒级数展开式进行校正:

Xc = x ( 1 + k1r^2 + k2r^4 + k3r^6 ) / ( 1 + k4r^2 + k5r^4 + k6r^6 )

Yc = y ( 1 + k1r^2 + k2r^4 + k3r^6 ) / ( 1 + k4r^2 + k5r^4 + k6r^6 )

r是该点距离成像中心的距离,r = x^2 + y^2xy是图像中畸变后的位置坐标,XcYc是通过校正后得到的真实坐标,k1k2k3...是参数。

 

切向畸变主要有薄棱镜畸变和离心畸变。主要原因是由于透镜制造上的缺陷使得透镜本身与图像平面不平行。可以通过如下公式来矫正:

Xc = x + [ 2p1y + p2 ( r^2 + 2x^2 )]

Yc = y + [ 2p2x + p1 ( r^2 + 2y^2 )]

r是该点距离成像中心的距离,r = x^2 + y^2 xy是图像中畸变后的位置坐标,XcYc是通过校正后得到的真实坐标,p1p2是参数。

 

opencv畸变模型

径向畸变模型:

Xc = x ( 1 + k1r^2 + k2r^4 + k3r^6 ) / ( 1 + k4r^2 + k5r^4 + k6r^6 )

Yc = y ( 1 + k1r^2 + k2r^4 + k3r^6 ) / ( 1 + k4r^2 + k5r^4 + k6r^6 )

切向畸变模型:

Xc = xd + [ 2p1xdyd + p2 ( r^2 + 2xd^2 )]

Yc = yd + [ 2p2xdyd + p1 ( r^2 + 2yd^2 )]

可得(一般情况下,薄棱镜畸变可以忽略不计,故opencv2.0版本只考虑了径向畸变和切向畸变):

Xc = xd ( 1 + k1r^2 + k2r^4 + k3r^6 ) / ( 1 + k4r^2 + k5r^4 + k6r^6 ) + [ 2p1xdyd + p2 ( r^2 + 2xd^2 )] ( 1 + p3r^2 + … )

Yc = yd ( 1 + k1r^2 + k2r^4 + k3r^6 ) / ( 1 + k4r^2 + k5r^4 + k6r^6 ) + [ 2p2xdyd + p1 ( r^2 + 2yd^2 )] ( 1 + p3r^2 + … )

p3为考虑切向畸变的扩展,此外设为0即可。

张正友标定中只有k1,k2,k3,p1,p2五个参数,对于质量比较好的相机切向畸变很小可忽略,k3也可忽略,张正友标定中默认p1,p20

 

posted @ 2021-05-28 11:15  sewage  阅读(807)  评论(0编辑  收藏  举报