安微微,武忆涵,王高峰
(1.贵州宇鹏科技有限责任公司,贵阳 550014;2.长安大学 信息工程学院,西安 710018)
近些年,计算机技术逐渐成熟,计算机图像处理技术也在此基础上取得了快速发展,应用广泛,逐渐与人们的生活密不可分。同时随着移动通信技术日新月异的发展,人们对于视频和图像的清晰度、丰富度、大视野的需求也越来越高,同时对于视觉体验要求也越来越多[1]。但是由于普通的单目相机镜头广角的局限性,其只能获取固定角度内的视觉信息,无法覆盖到所有的场景,因此一般的广角镜头已经不能满足人们的需要,人们对监控视角和图像质量要求越来越高。
基于此,为了获取较大的视角,人们根据仿生学,通过观察鱼在水中的成像原理发明了鱼眼镜头。该镜头通常具有超过180°的视角。因其自身焦距极短的特性,一般小于等于16 mm,这为远距离拍摄大范围景物创造了条件,因此鱼眼相机被认为是拍摄全景的利器。鱼眼相机广泛应用于交通安全监测、智能全景、医疗检测以及车联网等领域[2]。极限运动爱好者会利用鱼眼镜头的广视角去捕获一系列动作,以达到强烈的视觉冲击力及身临其境的感觉;在目标追踪任务中,通常的球机或者枪机方案无法避免人群遮挡的问题,从而导致追踪不稳定,但鱼眼相机的顶视角安装方式天然地缓解了该问题;无死角的摄像头监控正是利用鱼眼镜头的广视角特性,在不增加设备大小的前提下去捕获更大的视角范围。虽然鱼眼镜头在许多场景下优于普通的广角镜头,其成像路径完全不同于一般的小孔成像。针对普通针孔相机将三维点直接投影到归一化平面上,鱼眼相机则是先将三维点投影到单位球面,再将单位球面上的点投影到归一化平面上。鱼眼镜头采用非相似成像,在成像过程中引入畸变,通过对直径空间的压缩,突破成像视角的局限,从而达到广角成像。由于鱼眼镜头焦距较短以及其成像原理,导致显示的图像画面除中心部分外的图像边缘会产生较为严重的畸变,这种畸变是明显的桶形畸变,不符合现实视角以及人眼视觉观测效果且不利于对鱼眼图像进行后续的处理,因此,如何对鱼眼图像进行畸变校正正成为国内外研究热点[3]。
鱼眼镜头有4种投影模型:正交投影、等距投影、等立体角投影和体视投影[4]根据以上4种模型设计制作等立体角投影镜头。在复杂的棱镜系统、相机几何和图像传感器表面的共同累积作用下产生了畸变。因为一般鱼眼相机模型的通用性不好,所以引入了畸变模型。而目前国内外的主要畸变校正技术围绕投影和标定方法:标定方法需要采用外部设备对镜头进行标定[5],获取参数之后在进行后续的操作,对实验设备要求较高,并且处理过程繁琐,不适用于监控系统的实时性;投影校正主要包括:球面投影,柱面投影,双经度校正,扇形校正等方法[6]。球面投影采用对多个球面上的点进行拟合,形成新的半径,并且以此计算畸变校正参数,该方法精度低,并且计算量大,鲁棒性低并且对于鱼眼图像中出现的非线性特征点拉伸较为严重。柱面投影是将原始图片采用圆柱方式进行投影,该算法虽然过程简单,但是效果太差[7]。双经度校正首次提出是采用经纬映射的方法进行校正设计,后文献[8]对其进行改进,采用球面模型半径大于鱼眼图像半径的方法改进边缘拉现象,但是过程较为复杂,不能同时满足校正效果和监控画面实时性的要求[9]。而同样,文献[10]的扇形校正方法对图像进行了区域分块,但是对画面整体性效果比较差。
因此,为保证鱼眼镜头可以快速校正并实现实时性,本文拟提出一种新的鱼眼图像处理方法,首先采用投影模型进行坐标点变换,其次采用双椭圆模型进行校正,利用双线性插值生成固定的矩阵,并通过CUDA进行加速输出达到实时效果,经实验结果证明,本算法能够在保证校正效果的情况下达到实时输出的结果,方法具有可行性。
在了解鱼眼镜头原理前,先对相机坐标进行简单介绍,在立体视觉和图像处理方面[11],通常有4个坐标系分别是像素坐标系、图像坐标系、相机坐标系和世界坐标系,如图1所示。
图1 坐标系
其中:OW-XW,YW,ZW为世界系坐标,描述相机位置,单位为m。OC-XC,YC,ZC为相机坐标系,光心为原点。o-x,y为图像坐标系,光心为图像中点,单位为mm。u,v为像素坐标系,原点为图像左上角,单位为pixel。
4个坐标系相互联系,转换关系如下:
1)假设P(XW,YW,ZW)为世界坐标系一点,从世界坐标系转化为相机坐标系属于刚体变换:即物体不会发生形变,只会涉及到旋转和平移,R表示旋转矩阵,T表示偏移向量。如图2(a)所示,因此转换关系为:
图2 相机转换坐标示意图
R:3*3,T:3*1
(1)
其中:XC,YC,ZC为世界坐标系对应坐标。
2)从相机坐标转换到图像坐标系,属于透视投影关系,采用投影方式进行坐标关系转换,从3D转换为2D。也可看作针孔模型的改变模型。如图2(b)所示。
根据三角形相似原理,可以得到转换关系为:
(2)
(3)
其中:x,y为图像坐标系对应坐标,f为鱼眼镜头焦距。
3)而对于计算机而言,所处理的坐标系为像素坐标,如图2(c)所示,与以上变换不同,该转换没有旋转变换,但是坐标原点位置不一致,大小不一致,只有伸缩变换和平移变换。图像坐标与像素坐标转换关系为:
(4)
(5)
其中:u,v为像素坐标系对应坐标。
因此,从上述可以看出,从世界坐标系转化为像素坐标系关系如式(6)所示:
(6)
4)从相机坐标转换到图像坐标系,采用投影方式进行坐标关系转换,从3D转换为2D。
(7)
为了获取更大的视角,使视野变大,因此采用鱼眼镜头。一般鱼眼镜头都是由几个不同的透镜组合而成的,在成像过程中,经过不同程度的折射,使得更大视角的图像投影到成像平面上[12]。但同时也伴随着更大的畸变。一般情况下可以根据控制光线的路径来设计各种各样的镜头类型。鱼眼相机先将三维点投影到单位球面,再将单位球面上的点投影到归一化平面上。鱼眼图像的一般模型如图3所示。
图3 鱼眼镜头投影模型
首先,将世界坐标系即真实空间一点经过线性投影至鱼眼镜头的三维坐标系中,其次,将鱼眼镜头的点通过选择投影方式投影至投影平面,最后显示在图像坐标上。正常相机通过投影会映射到图像坐标系的m1点处,而鱼眼相机采用不同的投影映射的方向,投影到m点处,在获取更大视角的同时产生了畸变[13]。
1.2.1 鱼眼镜头常用的投影模式
标准鱼眼镜头通常由多层镜片组成,故呈现出较为复杂的光学设计结构。进入鱼眼相机的光线经过多次折射,通过相机的传感器成像。
一方面,从数学理论角度进行分析:通过对鱼眼相机的投影曲线进行拟合可以得到合适的数学公式来表示鱼眼相机成像模型;另一方面,从光学原理角度进行分析:利用“非相似”成像机制,通过对物理空间进行挤压,一定会引入无法避免的畸变(多为径向的桶形畸变)来描述鱼眼相机成像模型。主光线的路径决定了光学系统畸变程度,所以图像产生了一定程度的形变,但是处于三维空间的物和二维空间的像依旧是一一对应的映射关系,保障了“非相似”成像机制的可行性。
在鱼眼镜头进行图像投影的过程中,比常用的投影方式有4种:等距投影、体视投影、等立体角投影、正交投影[14]。它们的投影模型分别如图4(a)~(d)所示。成像模型实际上是为了用来描述入射角与成像像高之间的映射关系,等距投影是以线性关系来定义,等立体角投影模型是用正弦函数来定义,体视投影是以正切函数来定义。由于等距投影的线性关系、适用于大于180°的场景且价格亲民的特点,因此本文算法主要采用等距投影进行校正。定义光线的入射角为θ,成像像高为r,对比4种成像模型的优缺点。
图4 鱼眼镜头投影模型
1)等距投影:
r=fθ
等距投影成像模型中径向距离与入射角呈单倍数的正比例关系,这个比例系数就是镜头焦距。在这种投影模型中,入射光线之间的角度相同时,保持其对应各投影点之间的间距相同,这也是这个投影模型名称的来源。同时这种模型还可以解决在小孔成像下入射角90°时图像无限拉伸的问题。等距投影模型作为应用最广泛的鱼眼相机成像模型,具有计算简便、算法简单、实时性强的优点。本文也采用该成像模型。
2)体视投影:
这是一种保角不变投影模型,球形物面上的微小面元经过体视投影后,其像仍然是一个小圆。因此这种投影模型对微小物体成像具有相似性。但是相似性带来视场角不足的影响。体视投影对视角接近180°的图像压缩较小,成像面积小,畸变较大,价格昂贵。因此本文也不采用。
3)等立体角投影:
这也是鱼眼相机常用的一种投影模型。在虚拟单位半球形面上两个相等立体角的入射面,在成像平面上的两个像的面积相同。等立体角投影图像不失真,映射关系较为复杂,算法执行速度较慢,不符合本文所要求的实时输出效果。
4)正交投影:
r=fsinθ
这种投影方式带来的畸变最大,对边缘物体压缩最厉害近180°处的图像信息几乎全部丢失。体视投影光心无限远映射关系简单,图像中心畸变小边缘图像失真严重,仅适用于视角小于180°的场景,不符合本文大于180°视角的需求。
由于鱼眼镜头的特殊成像原理,拍摄出来的图像中心点畸变较小,由圆心向外扩展,畸变依次增加,在边界处最为明显[15],因此在产生最终图像之前一定要进行畸变校正。采用单一传统的球面校正模型,不能够对鱼眼畸变进行很好的校正,尤其是图像边缘位置校正效果尤为的差。因此在对传统方法和一些文献方法进行对比之后,本文提出一种新型校正方法,首先采用球面半径拟合法进行边界扫描,对鱼眼图像进行去黑边处理。其次用边缘检测进行鱼眼轮廓提取,对轮廓上多个点进行采样,拟合出最符合实际情况的鱼眼图像的半径和圆心,再采用双椭圆模型进行校正处理,最后通过CUDA处理加速,实现实时输出的效果[16-17]。
在实际的拍摄采样中,鱼眼相机并不是覆盖全平面的,因此需要进行轮廓提取,本文所用的提取方法为横纵遍历法,周围的黑色区域均为无效区域,在处理过程中应先进行去除,利用无效区域各通道颜色值为0的特性,采用从上到下,从左到右提取出鱼眼图像。扫描临界点如图5所示。
图5 鱼眼图像扫描过程
其中:A、B、C、D点分别为鱼眼图像的边界值,经过扫描可以去除空白无效区域,将处理后的鱼眼图像进行边缘检测,通过线性拟合的方式确定鱼眼图像的光心和半径。如图6所示。
图6 边缘检测图像
在本次的实验过程中,采用的鱼眼图如图7(a)和图7(b)所示。
图7 实验示例图
在边缘检测确定鱼眼图像之后,采用线性拟合进行半径的确定。由于单次实验存在数据的不确定性和不准确性,所以要在多次实验之后,求取平均值,得出本次采用鱼眼相机的半径为925,光心坐标为(960,1 280)。
鱼眼图像经过畸变校正需要经过以下几个步骤:
1)将像素坐标转化为图像坐标。
2)经过双椭圆映射关系进行三维坐标系转化。
3)计算公式,得到原始图像和校正图像后的关系映射表。
4)采用双线性插值得到目标图像的灰度值。
5)根据输出结果对半径和光心进行微调,达到最佳校正结果。
采用球面模型近似模拟鱼眼图像的复杂光学成像原理如图8(a)所示,空间中一点P(x,y,z),根据光学成像和几何原理,投影至半球面点P1(x1,y1,z1)位置,点P1垂直投影至XOY平面得到鱼眼图像上的点m(u,v)。
根据该球面投影模型,球面半径为R,我们可知,若空间中存在一条直线,该直线在球面的投影为一半径等于球面半径R的大圆,在鱼眼图像上的投影为长轴等于球面半径的椭圆。
根据该特点,我们可以在鱼眼图像上选取一条在实际空间为直线的弧线,在该弧线上选取多个点坐标信息,进行曲线拟合,曲线拟合的过程是求一条曲线使得所有的数据点都在该曲线附近,这样一来,该曲线可以反映数据总体分布,而且不会出现较大的局部波动。曲线拟合可以反映被逼函数的特性,逼近函数和已知函数偏差在某种程度达到最小。如图8(b)所示。利用最小二乘法进行线性拟合出椭圆的一般表达式,即可得到该弧线所在椭圆的数学表达示。根据椭圆长轴等于球面模型半径,即可计算出椭圆半径R的值。对比校正效果,对得到的半径和光心进行微调找到最佳校正效果的光心和半径。
如图8(c)所示,目标图像中的一点P(u,v),以点O为圆心建立直角坐标系,点P的坐标为:
(8)
过点P的两条分别垂直于U轴和V轴的直线,根据图8(d)中的球面模型,投影在球面上为两个半径为R的大圆。投影至鱼眼图像中为两个交点为P2(x,y)、长轴等于R的椭圆,如图8(e)所示。
根据几何关系可计算出两个椭圆的数学表达式,从而可计算出目标图像点P(u,v)与它在鱼眼图像中的投影点P2(x,y)之间的映射关系:
(9)
(10)
(11)
其中:为椭球面投影至XOZ平面后与X轴的夹角,为椭球面投影这YOZ平面后与Y轴的夹角。
根据目标图像点P(u,v)与它在鱼眼图像中的投影点P2(x,y)之间的映射关系,即可获取畸变校正后的目标图像。
常见的插值运算包括双线性插值、最邻近插值、双三次插值等方法。双线性插值,又被称作双线性内插,是对两个变量的插值函数的线性插值拓展。在两个方向分别进行一次线性插值是双线性插值的核心思想。目标图的一个像素值根据源图中虚拟点的4个真实的像素值决定;最邻近插值作为最基本、最简单的图像缩放算法,计算量小,但是失真严重、效果差、插值生成的灰度图像不连续,在灰度变化明显的地方呈现锯齿状;双三次插值又被称为立方卷积插值,该方法不是仅考虑4个相邻点的灰度影响,而是根据待求像素点在源图像中相邻的16个像素点的值,其权重由该点到待求像素点的水平距离和垂直距离决定,但是计算成本高,算法复杂,实时性差。根据以上分析,双线性插值兼顾插值效果和运算速度,故本文选用此法进行像素点填充[18-19]。
真实的图像坐标系填充都是以整数坐标进行统计填充的,因此再得到鱼眼图像像素坐标与校正后坐标的对应关系后,通过双线性插值进行像素点填充[20]。
如图9所示,假设所要求的像素值为P点像素值,通过Q11Q21Q12Q22坐标点的像素值,可以得到P点的像素值推导关系为:
图9 双线性插值
(12)
(13)
其中:f(x,y1)为R1像素值,f(x,y2)为R2像素值。
(14)
其中:f(x,y)为点P像素值。
为了能够保障监控画面的实时输出,采用GPU进行加速处理,将畸变校正处理的结果进行封装成为映射表,如图10所示,经过CUDA处理,达到实时校正输出结果的目的。图片为映射关系转换结果,映射表为x-x1,y-y1的对应关系。
图10 校正映射关系图
为了验证本文算法的实时性和校正图像质量,对多组不同的鱼眼图像进行了校正实验,并且验证了实时输出时间。本文实验平台为Window 10 操作系统,编程环境为VS2019,所用鱼眼镜头是海康威视鱼眼系列镜头。原始鱼眼图像如图11所示。
图11 原始鱼眼图像
图11为原始鱼眼图像,其中图(a)为近距离拍摄方格图;(b)为室内实验室场景图;(c)为室外场景图。
图12是采用拟合校正方法分别对图11(a)、(b)、(c)进行校正的结果图,从图12(a)、(b)、(c)中可以看出,拟合校正方法在对方格图,近景,远景的校正产生严重的拉伸,而对于原始拱形畸变,也是几乎没有改变,依然存在很大的畸变,不符合人体视觉效果。
图12 拟合校正效果图
图13是采用文献[8]方法进行畸变校正的结果图,与传统拟合校正方法相比较,该方法虽然解决了拉伸严重的现象,但是在图像边界处会出现新的畸变。该方法在边缘处仍然产生很严重的畸变,且图片中的灯以及一些直线也未能校正过来。如图13(b)所示,该方法对真实场景进行畸变校正之后产生了空间扭曲,线性结构破坏等问题,不能作为一种很好的鱼眼图像畸变校正方法。
图13 双经度校正效果图
图14是采用文本算法即双椭圆模型校正算法进行畸变校正的结果图,图14(a)为对方格图片校正结果,可明显看出,通过本文算法,对方格进行校正之后恢复了原始的真实情况,同时对线性结构的校正效果也有明显的提升;图14(b)是对室内鱼眼图像的校正结果,校正之后的图像符合人眼的视觉体验。图14(c)为对室外场景的图像校正,可以看出,本文算法对于室外大场景下的畸变依然有很好的校正效果,对图中桥和建筑物处理之后,都恢复成现实世界的效果。
图14 本文算法效果图
通过对比可以看出,本文算法在校正效果上比传统的拟合校正以及文献[8]的方法有很大的改进。
视频监控除了要满足人眼视觉效果之外,最重要的一点就是需要达到实时性,本文经过对算法进行优化,生成坐标变换映射表,通过GPU调用CUDA进行加速,处理一帧图片所耗费时间为24 ms,能够实时输出。
针对现有鱼眼相机存在径向畸变的问题,结合传统方法,本文提出一种改进的双椭圆畸变校正方法,在获取得到鱼眼图像之后,通过扫描确定鱼眼图像范围,经过线性拟合判断鱼眼图像的光心和焦距,其次通过投影映射关系,采用双椭圆的模型进行校正,通过双线性插值对新的图像进行像素赋值,从实验结果可以看出,本文提出的算法具有很强的兼容性和适应性,对于室内室外的近景远景都有很好的校正效果。除此之外,本文还通过GPU,用CUDA进行加速,实现了校正之后鱼眼相机的实时性,实现了现有环境下人们对监控的视觉效果和实时输出的两大特性。