本章的图像数据来源是海港匝道口集卡通过的视频记录,用于保存每辆通过匝道口 的集卡的图像信息。匝道口两侧安装了固定的摄像头,通过摄像头录入视频图像。然而 每辆集卡的信息如果都以视频文件保存的话,那势必要占很大的系统空间,因此需要把 每帧视频图像拆开并且拼接成完整的图像文件。 。
由于匝道口狭窄,每次仅能通过一辆集卡,使得安装的摄像头离集卡空间距离近,
加上安防的摄像头为了取得尽可能大的视角,采用了鱼眼失真的镜头(如图3.1所示),
使得人们看到的是畸变的图像。
因此利用图像拼接算法在matlab计算机仿真环境下就可以拼接帧图像,使得集卡即 消除了鱼眼失真的效果,还能缩小文件占用的空间,从而能存下更多的集卡信息。
图3.1 集装箱视频原始数据图像
由于图像具有鱼眼失真的特性,故不能直接进行图像拼接,主要可以用下列两种方 法来克服它的失真效果对拼接的影响:
1、对图像运用几何变换把鱼眼图像校正成不失真的图像。
2、截取每帧中间不失真的狭窄区域进行拼接。
对于第一种运用几何变换的方法,运算量比较大,并且每辆车离镜头的位置不同,
要有不同的变换参数,如果一旦前期在变换这一环节有误差,将会累计到下一步图像配 准的环节,这种的误差累计最终会导致误差更大,从而使得匹配错位。
对于第二种方法,我们仅仅截取图像中间非失真的区域把它当作正常图像来做,比 较简单,运算简便。故本文用第二种方法,但是截取的区域不宜过小,也不宜过大。如 果过小,前后两帧势必没有相关区域,因此无法用图像拼接算法处理;如果过大,使得 失真的部分也截取下来了,失真的部分不仅会对匹配结果带来误差,而且拼接完的图像 也会带有失真的现象,不是很美观。
原图大小为384x 288,高的方向上是不会影响图像拼接的,所以取全部288个像素。
决定宽度的像素大小主要有两大因素:
第一是集卡通过匝道口的车速,车速过快势必连续两帧图像相位差较大,此时如果 截取宽度较小,两帧之间没有相关图像,匹配必定失败。
第二是图像采集的帧率,通常视频帧率为24帧,而本文用到的集卡视频则低于24 帧。如果采集频率过低,势必也使相邻两帧图像没有任何相关关系,这样是无法进行图
像匹配的。 ,
对于第一个问题,发现车辆通过匝道口要减速且以基本匀速速度通过匝道口。在帧 率方面,调整摄像头帧率统一到4帧/秒。经过反复实验,宽度取以中间向左右各取50 个像素即101个像素,如图3.2(a)截取中间像素,成为待配准图像图3.2(b):
(a)原始图像数据 (b)截取后待配准图像 图3.2截取待匹配图像
(a)前一帧图像 (b) 后一帧图像 (c)前两帧图像拼接结果 图3.3前后两帧图像拼接
的需要 找到与
图3.3(a)和(b)分别为前后两帧截取的待匹配图像,通过模板匹配法找前后两帧的 相位关系,过程如下:
1.在纵坐标上把前一帧均匀分成25个小块图像,高为10个像素,每个小块即为 秽…
101×10,从前一帧的末端每隔7个像素取一列,一共取3列作为待匹配的模板
aEi][j],如图3.4所示,取出的图像是25小块中一块,在图像尾部截取3列,
蓝色标记处即为待匹配模板。i在纵坐标方向上25个小块,值为1到25,a Ej]
为一个模板,有3个像素行,10个像素高。
图3.4待匹配图像模板
2. 对于后一帧,同样分为25个小分块,与步骤一一样取3列模板b[i][j][k],i 表示一共有25行,k表示每一行从尾部遍历到头部,每一个b[i][j]与aEi][j]
取差的绝对值,存入C[k]。
图3.5红色为搜索模板
3.第一行取完后,找到最小的值的位移量cmin[k],如图3.5,在后一帧图像相同 位置截取相同大小图像做为搜索图,并且按照箭头方向逐个像素平移,当移至 蓝色部分时,绝对值最小,即匹配成功,位移量就是cmin[k]。全部遍历完总共 有25个值,即25个位移量。
4.对这25个位移量进行统计,找出出现频率最多的位移值,过滤掉干扰值,这样 得到一个位移量P,最终定为这两帧的位移关系。
5.截取后一帧图像P个像素宽度图像,拼接至前一帧图像的后部,结果即为图 3.3(c)所示,从而完成了两帧图像匹配。
和传统模板匹配法不同的是,本文采用多个模板,用统计的方法找到两帧图像之间 的位移关系,单一模板匹配的话,或多或少会受到一些诸如噪声的误差而产生匹配出错,
多个模板统计方法可以把误差降到最低限度,对图像拼接算法的准确度有极大帮助。
相邻两帧匹配完成后,依次进行两两相邻图像帧的匹配,把匹配好的图像裁剪后依 次拼接到原始图像后面,得到完整的集卡图像。效果如图3.6所示:
由图3.6所示,通过模板匹配法拼接图像,图像没有明显接缝、失帧、多帧以及相 位关系误差等错误。这种基于模板匹配的算法虽然能解决图像拼接问题,但是在matlab 环境下测得时间消耗上大约每个视频8秒左右,由于每帧图像要分成25分块,每一块 需要做遍历运算,所以比较耗CPU时间。