DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1386|回复: 0
打印 上一主题 下一主题

[待整理] 基于视觉传感器的智能车摄像头标定技术研究

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 20:32:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
引言
  本文以飞思卡尔智能车大赛为背景,使用飞思卡尔(Freeseale)生产的16位微控制器MC9S12XS128作为控制核心,制作一个能巡线快速行驶的摄像头小车。由于摄像头光轴与地面呈一定夹角,于是其成像存在梯形失真;为了扩大视野,广角镜头越来越为很多队伍所采用,于是又存在桶形失真。这两种失真,是每个采用广角镜头的摄像头队伍都要遇到的问题。很多队伍都回避这个问题,直接采用图像预处理后的像素点进行控制。但若将像素点转换为实际物理坐标,无疑更直观,对程序的编写或建模带来很大的方便,并且本文提出的这个方法,可有效解决这两种失真,实际操作并不复杂。
  各队解决方案综述
  文献[1]提出的方法是:可以通过对于每行提取的道路位置通过一个线性修正来消除梯形失真,可通过实验的方式确定线性补偿的系数。但是该实验方法比较繁杂,并且不能消除桶形失真。
  文献[2]制作了一个图像标定板,如图1所示。

  
  其原理是:图1(a)中阴影部分是车体放置的位置。在标定板上等间距地贴了许多黑线,给标定板拍照后,就可以知道实际中的位置与图像中的位置的相互关系。这个方法由于黑线有一定宽度,所以会存在较大误差。
  文献[3]采用非均行采集的方案。所谓非均行采集是与均行采集对应的。在均行采集中,AD模块所采集的行均匀分布于摄像头输出的图像中。而非均行采集则是指,AD模块所采集的行按某种规则非均匀地分布在原始图像中,而这种规则是保证采集得到的图像在纵向上(小车中轴方向)与现实景物不畸变。然后再确定每一行的横向畸变系数。

  
  如图2所示,非均行采集时,远处采得密,近处采得稀。由于摄像头安装方式在实验时会经常变动,以确定最佳俯角和最佳高度,每当变动就需要重新标定。这个方案就不大方便了。文献[4]建立了一个光路几何模型图,如图3所示。

  
  实验方案:量取摄像头架固定螺钉的高度H与摄像头中心相对于竖直杆的偏转角度(俯角)θ。由于光学中心的计算完全由这两个数据及近端距固定杆的距离S(即测量保险杠距固定杆的距离S0和近端距保险杠距离S'相加得到,也可直接在实验板上测量由近端黑线到摄像头固定杆的距离S)确定,因此要做到越精确越好。由O点做垂线长度为H至点A,做水平线AB,截取AD长为S,DB过O点做与垂直线成θ的射线交AB于C,过D做DE垂直于OC,并使OC为DE的垂直平分线,连接BE并延长,交OC与O’,则O’为光学中心。从图上能算得O’距底边距离为H’,俯角不变。

       将实验板垂直放置,做出边长为A1的正方形标定区域,即图3中的DE平面,将摄像头水平对向实验板中心C,摄像头架固定螺钉距实验板距离为H1。读出标定实验板上特征点的相应像素点。可以得到图4中(X,Y)与像素点(U,V)的关系(U为行数,V为列数)。

  
  由于实验平面与真实视野平面之间是纯几何关系,因此这部分转换函数关系可以用几何推导。 其公式较复杂,在这里不一一列出。
  其公式最大的弊端在于有很多sin()、cos()等三角函数运算,但单片机做这种运算会花费大量时间,所以本应尽量避免出现三角函数、开方等运算。而且,若采用广角镜头或摄像头架得较低时,B点将会距A点很远而找不到B点。所以该方法也不具通用性。实验本身也比较复杂。
  文献[5]采用的实验方法是:事先在一块白板上画一系列小的正方格,正方格越小,精度越高。然后标定中心黑粗线,用来确定赛车的摆放位置和图像的中心。如图5所示。之后可以直接读出各特征点相应的像素坐标,建立对应关系。

  
  该实验方案很直观,但其操作未必简便。因为摄像头视野较广,所需矫正网络也较大,在其上画方格线很难保证绝对水平或垂直。

  文献[6]根据几何数学建模,得出摄像头获取图像的成像坐标与景物实际的世界坐标的关系。

       坐标变换关系如下:

  
  在摄像头安装固定后,c/tanθ、a、b、c、h 和h/cosθ 均为常量。这个方法还是比较好的,但是需要知道f、L、H,这三个参数厂家会提供,但不一定准确,θ也较难准确测量,且不能解决桶形失真的问题。

      几何失真校正方法
  建模分析
  
  如图7所示,世界坐标系中的点P(Xw,Yw,Zw)首先经过刚体变换到摄像头坐标系中的点P(X,Y,Z)。

  
  
  然后再从摄像头坐标系到理想的图像坐标系的透视变换。

  
  图8是一镜头理想成像原理图,图中左边的直线是目标,右边的直线是目标所成的象。从图中可以看出,目标中心点O点成象于象的中心O′点,目标上不同的两点A点和B点成象于A′和B′点,且有 。但大视场角使得广角镜头不能再等效为理想透镜,而是一个焦距随着目标离光轴距离增大而减小的成象系统。根据牛顿成象定理,目标高度r与对应象高r′之间的计算关系为 。在物距m一定的情况下,焦距f愈小,象高r′愈小。这样,随着目标离光轴距离r的增加,焦距f随着减小,所成图象就产生了桶形失真。由以上的分析可看出,桶形失真可以看成像素点向心径向收缩,且随着目标距光轴距离r的增加,收缩率增大。因此,如果使失真图象中的像素离心径向按不同膨胀率增大,即可实现几何失真校正。
  
        实验方法
  情况(1):摄像头俯角小,虽有桶形失真,但关键区域处于图像中部。如图9所示。分段逆透视变换适用于这种情况。

  
  若忽略桶形失真,即让U=Xu+Center_u,V=Yu +Center_v(注意图7中图像原点Ouv在摄像头坐标系中坐标为(- Center_u,- Center_v,f)),则由公式1和公式2可知,

  
  由于Zw=0,上式又可写成:

  
  反解Xw,Yw,可得:

  
  上式又可写成:

  
  理论上根据4个点m1-m8就可以有一组解。
  实验步骤如下:以车头为原点,在车头前选取8个点,如图10所示(单位:cm)。 选点要求范围尽量大,跑道经常出现的区域,但又不能处于摄像头输出图像边缘区域;从图9中读出各点像素坐标(a,b);根据分辨率将各像素坐标转换为单片机图像坐标,这是一个线性变换;将8个点分成near、middle、far三组,每组4个点,根据式6可求出三组解。


        在单片机程序中,当图像预处理得到(U,V)后,可根据式5解出(Xw,Yw),差别是(U,V)处于不同位置时用不同的参数。由于相邻梯形有两个点是复用的,所以参数不会出现跳跃。图11显示该方法效果很好。

  
  文献[7]中提到可以选取很多点,然后采用最小二乘法进行拟合。但是由于各像素点失真程度不一样(越远离图像中心失真越严重),所以最后结果可能是本来失真较小的点被失真较大的点所“拖累”,没有一个点是准确的。
  情况(2):摄像头俯角较大,跑道会出现在图像各个位置(如图1(b)所示),这时单片机需要对整幅图像进行处理。可使用下列方法。
  这时不再让U=Xu,V=Yu,而是设

  
  
  从图像中读出多个像素坐标(U,V),令k初值为0.00001,通过式7解出(Xu,Yu),根据式6通过最小二乘法解出 ,再根据式5求出(Xw,Yw),求出拟合误差sum_err。(这里要将式5与式6中的U、V分别换成Xu、Yu)。有关最小二乘法可参考文献[8]。
  将k累加0.00001,同样的步骤可求出sum_err。
  画出k与sum_err曲线,sum_err起初随着k增大而减小,但从某个k开始又开始增大,k值即取拐点处的值。
  结论
  本文根据摄像头成像模型,导出逆透视变换公式,并根据两种情况分别给出解决方案。该解决方案方便可行,可供各参赛摄像头队伍参考。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-17 16:13 , 耗时 0.093907 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表