发明内容
为解决现有技术中存在的问题,本发明的实施例提供一种极线矫正方法、装置和客流检测系统。
为达到上述目的,本发明的实施例采用如下技术方案:
一种极线矫正方法,所述方法包括:
获取初始帧的目标图像与矫正前图像的位置关系信息并保存;
根据所保存的所述位置关系信息,和相应的矫正前图像中的像素点获取待处理图像帧的目标图像。
进一步的,上述方法还包括:
计算矫正前图像的投影矩阵与矫正后图像的投影矩阵之间的转换矩阵;设置目标图像与矫正后图像之间的缩放比例关系;根据所述转换矩阵和缩放比例关系计算得到位置关系矩阵,该位置关系矩阵为所述位置关系信息。
进一步的,目标图像ms与矫正后图像mn之间的缩放比例关系表示为:
un=us/scaleX,vn=vs/scaleY
其中,[un,vn,1]表示矫正后图像中任一像素点,[us,vs,1]表示目标图像中任一像素点,scaleX表示X轴方向上的缩放系数,scaleY表示Y轴方向上的缩放系数;
所述的位置关系矩阵包括记录X轴方向上位置关系的第一位置关系矩阵,和记录Y轴方向上位置关系的第二位置关系矩阵。
进一步的,上述方法还包括:查询所述位置关系信息,获得目标图像中的像素点在矫正前图像中的对应像素点;根据所述对应像素点,在矫正前的图像中利用双线性差值计算得到所述目标图像中的像素点的像素值。
进一步的,上述方法还包括:执行如下标定处理程序,以获取所述矫正前图像的投影矩阵,包括如下步骤:
输入标定板的标定数据信息;添加第一图像序列或第二图像序列,其中,第一图像序列的第一帧有效图像与第二图像序列的第一帧有效图像相对应,所述第一图像序列和第二图像序列为需进行极线矫正的两组对应的图像序列;根据上述标定数据信息以及第一图像序列或第二图像序列,计算第一图像序列或第二图像序列的标定结果并输出。
进一步的,上述方法还包括:计算矫正前图像的投影矩阵与矫正后图像的投影矩阵之间的初始转换矩阵;根据所述初始转换矩阵计算矫正前后的图像中心的位置偏移;根据所述图像中心的位置偏移,计算矫正前图像的投影矩阵与矫正后图像的投影矩阵之间的所述转换矩阵。
本发明实施例还一种极线矫正装置,所述装置包括:
位置关系获取单元,用于获取初始帧的目标图像与矫正前图像的位置关系信息并保存;
目标图像获取单元,用于根据所保存的所述位置关系信息,和相应的矫正前图像中的像素点获取待处理图像帧的目标图像。
进一步的,所述位置关系获取单元包括:
转换矩阵计算模块,用于计算矫正前图像的投影矩阵与矫正后图像的投影矩阵之间的转换矩阵;
比例关系设置模块,用于设置目标图像与矫正后图像之间的缩放比例关系;
关系矩阵计算模块,用于根据所述转换矩阵和缩放比例关系计算得到位置关系矩阵,该位置关系矩阵为所述位置关系信息。
进一步的,所述目标图像获取单元包括:
对应像素点获得模块,用于查询所述位置关系信息,获得目标图像中的像素点在矫正前图像中的对应像素点;
像素值计算模块,用于根据所述对应像素点,在矫正前的图像中利用双线性差值计算得到所述目标图像中的像素点的像素值。
本发明实施例还提供了一种客流检测系统,所述系统包括上述的极线矫正装置。
本发明实施例提供的技术方案,利用计算出的目标图像与矫正前图像的位置关系信息,以及矫正前图像中的像素点可直接获得缩放后的目标图像。本技术方案,能够同时执行缩放和极线矫正处理,且只需处理目标图像所包含数量的像素点,通过一次双线性插值,就可得到目标图像。由于本技术方案无需先计算出整帧矫正后的图像并保存,且目标图像包含的像素点较少,本技术方案能够显著降低计算量,减少了占用的内存空间,提高了系统的处理速度。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例一提供的极线矫正方法,如图1所示,包括如下步骤:
步骤S1:获取初始帧的目标图像与矫正前图像的位置关系信息并保存;
上述目标图像为经过矫正处理和缩放的图像,上述位置关系信息可以为体现了目标图像中的像素点与矫正前图像中的相应像素点的位置对应关系和缩放比例关系的任何信息,优选的,本发明实施例中采用位置关系矩阵。
例如,可通过如下方式获取位置关系矩阵:计算矫正前图像的投影矩阵与矫正后图像的投影矩阵之间的转换矩阵,并设置目标图像与矫正后图像之间的缩放比例关系,根据所述转换矩阵和缩放比例关系计算得到位置关系矩阵。
显而易见的,上述目标图像和矫正后图像为同一个原图像(极线矫正前的图像)所对应的最终的目标图像和仅进行了矫正处理的矫正后图像。
上述初始帧可以为需要进行极线矫正的图像序列(以下简称图像序列)中按顺序排列的第一帧,或者,上述初始帧可以为选取的用于获取上述位置关系信息的图像序列中的任一个图像帧。
步骤S2:根据所保存的所述位置关系信息,和相应的矫正前图像中的像素点获取待处理图像帧的目标图像。
通过初始帧得到上述位置关系之后,对图像序列中的其它帧,由于该帧的目标图像与矫正前图像的位置关系信息和由初始帧得到的位置关系信息一致,直接查询所保存的位置关系信息,利用相应的矫正前图像中的像素点,获取图像序列中的其它帧的目标图像。
本发明实施例提供的技术方案,利用计算出的目标图像与矫正前图像的位置关系信息,以及矫正前图像中的像素点可直接获得缩放后的目标图像。本技术方案,能够同时执行缩放和极线矫正处理,且只需处理目标图像所包含数量的像素点,通过一次双线性插值,就可得到目标图像。由于本技术方案无需先计算出整帧矫正后的图像并保存,且目标图像包含的像素点较少,本技术方案能够显著降低计算量,减少了占用的内存空间,提高了系统的处理速度。
下面对本发明实施例二提供的极线矫正方法进行描述。具体包括如下步骤的处理:
步骤一:对立体摄像机进行标定。
为了便于理解,下面对本发明实施例二采用的立体摄像机的标定原理、方法及相关的技术特征进行描述。
立体摄像机的成像系统采用透镜成像模型,在实际中用小孔成像模型来代替透镜成像模型,如图2所示。P表示空间中任一点,空间点P在图像上的投影位置p为光心O与点P的连线OP与图像平面的交点。(x,y)表示p的图像坐标,(xc,yc,zc)为空间点P在摄像机坐标系下的坐标,O1是图像平面主点,f=|OO1|为摄像机焦距,根据比例关系可得出如下关系式:
用齐次坐标与矩阵表示上述透视投影关系式,得到公式(2):
设图像的像素坐标是(u,v),则图像点的像素坐标与以毫米为单位的图像坐标的关系为:
其中,sx,sy为图像平面单位距离上的像素数(pixels/mm),称为比例系数,(uo,vo)为摄像机光轴与图像平面的交点,即计算机帧存图像中心的坐标。
进一步的,摄像机坐标与世界坐标的转换关系如下式(4):
其中,R和T分别为从世界坐标系到摄像机坐标系的旋转矩阵和平移矩阵,R是一个3x3的正交矩阵,T是3x1的平移向量。
结合公式2、公式3、公式4,得到以世界坐标系表示的空间P点坐标(Xw,Yw,Zw)与其投影点p的坐标(u,v)的关系如下式(5)所示:
其中,ax=f·sx,ay=f·sy;内部参数矩阵A由摄像机内部参数决定;矩阵[R|T]由摄像机相对于世界坐标系的方位即外部参数决定。矩阵P为投影矩阵,矩阵P为3X4矩阵。
由上所述,如果已知三维世界坐标和相应的图像坐标,将投影矩阵P看作未知数,则共有12个未知数。因此只需求解一个含有12个方程式的方程组,就可以求得投影矩阵P的系数。从原理上讲,只需6个物体点就可以解出P的系数,但是为了计算得更加准确,本发明实施例中实际采取的物体点数要远远大于这个数目。
可选的,本发明实施例采用基于OpenCV的GML摄像头标定工具箱(GMLCamera Calibration Toolbox)的标定软件进行上述标定处理。
在本发明实施例中使用的标定板是奇数*偶数的棋盘格。首先利用摄像机拍摄一组标定板的图片。拍摄标定板图像时需要改变标定板与摄像头的距离、标定板与摄像头的角度,以及标定板在镜头中的位置。将获取到的多幅图片作为下一步骤——求摄像机的内部外部参数的输入,具体包括如下处理:
步骤T1:建立一个新的工程,接收所输入的标定数据信息,例如,标定板的横向小方格数和纵向小方格数,以及小方格的边长,如32mm。
步骤T2:添加图片
对左目摄像机和右目摄像机是分别标定的,所以添加图片时也要分别添加。例如,对左目摄像机的拍摄图片,接收工具栏中的“Add Image”按钮所发送的指令,选择并添加所需的图片。为获得理想的标定效果,本发明实施例中选取的图片数量在25副以上。
步骤T3:检测角点
接收通过工具栏中的“Detect All”按钮所发送的指令,启动角点检测过程。检测出所有的角点,如图3所示,在棋盘格式的标定板中示出了检测到的角点。
步骤T4:标定
接收工具栏中“calibrate”按钮所发送的指令,根据上述添加的多幅图像计算并输出对左目摄像机标定结果,例如焦距,图像中心坐标,畸变因数,像素误差等,以及左目摄像机内部参数矩阵A1,平移矩阵T1,旋转矩阵R1,投影矩阵P1。
对于右目摄像机拍摄的图片,重复步骤T1到步骤T4的工作。在本发明实施例中,如图4所示,在进行标定之前,保证对右目摄像机进行标定的图像(Image)列表中的第一幅有效的图片(如名称为Right1.bmp图片)与之前对左目摄像机标定时的第一幅有效图片(如名称为Left1.bmp图片)是对应的,从而保证了对右目摄像机的标定结果,包括摄像机内部矩阵,平移矩阵,旋转矩阵等,是与对左目摄像机的标定结果相对应的。
在上述内容中,本发明实施例以左右目摄像机拍摄的图片为例进行了说明,但不局限于,对任何需要进行标定的两组图像序列,如第一图像序列和第二图像序列,通过输入标定板的标定数据信息,分别添加第一图像序列或第二图像序列,其中,第一图像序列的第一帧有效图像与第二图像序列的第一帧有效图像相对应,所述第一图像序列和第二图像序列需进行极线矫正的两组对应图像序列;可以根据上述标定数据信息以及第一图像序列或第二图像序列,计算第一图像序列或第二图像序列的标定结果并输出。
步骤二:对立体摄像机拍摄到的原始图像进行矫正。
为清楚说明本发明实施例的技术方案首先对矫正处理的原理进行描述。
本发明实施例采用由两个针孔摄像机组成的立体摄像机装置。如图5所示,显示了矫正前的立体摄像机模型示意图,其中,C1是左目摄像机的光心,C2是右目摄像机的光心,E1是左极点,E2是右极点。R1,R2分别是左右像平面,空间点W在左像平面的投影是M1,在右像平面的投影是M2。M2与E2的连线为M1的外极线,M1与E1的连线为M2的外极线。
图6所示为矫正后的立体摄像机模型示意图。像平面共面并且平行于基线,C1,C2的连线叫做基线。
C1在右目摄像机的焦点平面上时,右极点就处于无穷远处。右目图像中所有的极线都经过极点,所以右目图像中的极线都变得平行了。当左右目图像的两个极点都在无穷远处,即基线C1C2分别包含于两个焦点平面中时,左右目图像中的极线都变得平行了。
若需要使外极线水平,新的X轴应平行于基线。当焦距相同时,像平面也是共面的。
另外,对矫正好的左右目图像,对应的点必须有相同的纵坐标,这要求摄像头的内部参数一致(包括图像中心,焦距等)。
由上所述,矫正后的图像视为由一个新的立体摄像机装置拍摄得到的,而这个新的立体摄像机装置是通过对原有的摄像机进行旋转得到的。矫正后的新投影矩阵与矫正前的原投影矩阵有相同的光心,但是新投影矩阵的方向在经过旋转后不同于原投影矩阵的方向。
步骤21:建立矫正后图像的投影矩阵
本发明实施例二以对分别由左目摄像机和右目摄像机拍摄到的左目图像和右目图像进行矫正为例进行说明。即需要分别获取左右目图像矫正后的投影矩阵。
如图7所示,可通过如下步骤计算上述矫正后图像的投影矩阵:
步骤211:根据矫正前图像的投影矩阵,计算出内部参数矩阵A,和图像中心C,其中,求取矫正前图像的投影矩阵的方法参见上述步骤一中的相关内容。
步骤222:根据新X轴通过原光心C1,C2,利用下式确定该新X轴。
r1=(C1-C2)/||C1-C2|| (6)
x轴是基线的方向,C1,C2分别为左右目摄像机的光心。
在此以及下文中,分别用r1,r2,r3分别代新的X,Y,Z轴,
步骤223:根据新Y轴垂直于新X轴和原Z轴,通过下式确定新Y轴。
r2=k∧r1, (7)
y轴是垂直于新x轴,原z轴的,k表示原z轴。
步骤224:根据新Z轴垂直于新X轴和新Y轴,利用下式确定新Z轴。
r3=r1∧r2, (8)
步骤225:经标准化操作得到新的旋转矩阵R。
可以通过下式建立新的旋转矩阵R,R是一个3×3的矩阵:
步骤226:确立新的内部参数矩阵A。
对于左右摄像机来说,内部参数矩阵A是相同的,可以任取原左目摄像机或原右目摄像机的内部参数,还必须保证图像中心的y轴坐标相同。
设左目摄像机原内部参数矩阵为A1,新内部参数矩阵为An1;右目摄像机原内部参数矩阵为A2,新内部参数矩阵为An2。
An1,An2的获取过程如下:
任取A1或A2的值赋给An2,An1,然后再做如下运算
An1(1,3)=An1(1,3)+dL(1)
An1(2,3)=An1(2,3)+dL(2)
An2(1,3)=An2(1,3)+dR(1)
An2(2,3)=An2(2,3)+dR(2)
An2,An1是3*3的矩阵,An1(1,3)表示An1的第1行第3列元素,An1(2,3)表示An1的第2行第3列元素,An2(1,3)表示An2的第1行第3列元素,An2(2,3)表示An2的第2行第3列元素。dL是左图中心的位置偏移,dR是右图中心的位置偏移,dL,dR是3维矢量。dL(1)表示取dL的第一维元素,dL(2)表示取dL的第二维元素;dR(1)表示取dR的第一维元素,dR(2)表示取dR的第二维元素。
步骤227:按照以下公式,求得左目摄像机或右目摄像机矫正后新的投影矩阵
和
步骤22:求取矫正前后,新旧两个投影矩阵之间的转换矩阵。
设转换矩阵为T,对左目图像或右目图像,若矫正前投影矩阵为Po,矫正后投影矩阵为Pn,则可得到如下关系式:
TPo=Pn (11)
具体的,对左目图像有TPo1=Pn1,其中,Po1和Pn1分别表示左目图像矫正前和矫正后的投影矩阵;对右目图像有TPo2=Pn2,其中,Po2和Pn2分别表示右目图像矫正前和矫正后的投影矩阵。
转换矩阵为T可以表示为下式:
T=PnPo -1或者, (12)
T=Pn1Po1 -1,T=Pn2Po2 -1 (13)
进一步的,当考虑到矫正前后图像中心的偏移时,需要对图像中心进行矫正,如图8所示,包括如下处理:
步骤(81):在不考虑图像中心偏移的情况下,通过上述公式6至公式13计算出转换矩阵,例如,不考虑图像中心偏移,首先计算出左目图像矫正前后投影矩阵的转换矩阵TL和右目图像矫正前后投影矩阵的转换矩阵TR。
步骤(82):根据原图像中心和矫正前后投影矩阵的变换矩阵TL,TR,计算图像中心的矫正前后的位置偏移dL,dR。
若原图像中心可以表示为C=[x,y,1]时,通过Cnew=T*C计算矫正后的图像中心,从而得到矫正前后图像中心的位置偏移。
步骤(83):根据计算出的图像中心的偏移,再次重新执行上述公式6至公式13的步骤,计算出新的转换矩阵,并将该转换矩阵用于后续的处理过程中。
步骤23:对于初始帧,根据缩放比例关系和上述转换矩阵T,计算目标图像中的像素点在原图像(矫正前图像)对应点的位置坐标,即计算位置关系矩阵并保存。
根据转换矩阵T和缩放比例关系,可以求得目标图像(经矫正处理且缩放后的图像)的点和矫正前图像的点之间的位置对应关系,本发明实施例中用位置关系矩阵表示该位置对应关系。
设m=[u v 1]表示像平面的一点,m0=[u0 v0 1]表示矫正前图像m0上的一点,mn=[un vn 1]表示矫正后图像mn上的一点。根据公式5,公式11可推出式14,表示如下:
mo=T-1mn (14)
在实际应用中,需要对矫正后的图像进行一定比例的缩放,以提高处理速度。设在X轴方向的缩放比例是scaleX,在Y轴方向的缩放比例是scaleY。scaleX和scaleY的取值可以相同,也可以不同。
设ms=[us vs 1]表示缩放后的目标图像ms上的一点,ms中的点和缩放前图像mn中的点之间的关系可以表示为:
un=us/scaleX (15)
vn=vs/scaleY (16)
通过上述公式14、公式15、公式16就可以建立起缩放后图像ms与矫正前原图像mo的点的对应关系——位置关系矩阵。
如图9所示,下面对获取目标图像上一点与矫正前图像中的对应点的位置关系的方法进行描述。
本发明实施例采用两个位置关系矩阵xiMat[us][vs],yiMat[us][vs]分别来表示目标图像上的点在矫正前图像上x轴和y轴上的位置坐标。
目标图像ms中任一点表示为ms=[us vs 1],可通过下式,经过比例缩放和矩阵变换得到对应点m0=[u0 v0 1],
[u0,v0,1]=T-1*[us/scaleX,vs/scaleY,1] (17)
然后将X轴上的值u0赋值给xiMat[us][vs],将Y轴上的值v0赋值给yiMat[us][vs]。用这种方法将整个图像扫描一遍,就建立起缩放图像与矫正前原图的对应点的位置关系矩阵xiMat[us][vs],yiMat[us][vs]。
步骤24:目标图像上的像素点ms=[us vs 1]根据其X轴和Y轴上的坐标,通过查询位置关系矩阵xiMat[us][vs],yiMat[us][vs],既得到ms=[us vs 1]在矫正前图像中的对应像素点的坐标m0=[u0 v0 1]。
在双目摄像机装置不变的情况下,对视频进行矫正可以在第一帧计算出位置关系矩阵xiMat[us][vs],yiMat[us][vs]并保存在内存,由于后续帧跟第一帧有相同的位置关系矩阵,在对后续帧矫正时,只需直接查询该位置关系矩阵,即可得到目标图像上的像素点与其矫正前图像中的对应点的位置关系。
由上所述,可以看出,本发明实施例中需要处理的像素点的数量与目标图像中像素点的数量一致,由于目标图像通过缩放比例关系的设置,通常较小,从而大大减少了计算量。
步骤25:根据目标图像中的点ms=[us vs 1]在矫正前的图像中的对应像素点m0=[u0 v0 1],在矫正前的图像中运用双线性插值技术,得到ms=[us vs 1]的虚拟像素值,将该虚拟像素值作为目标图像中的点ms=[us vs 1]的像素值。
目标图像ms中的像素点ms=[us vs 1]的坐标都是整数,若计算得到在矫正前图像mo中的对应像素点的坐标是整数,那么ms中对应的点的像素值就是mo中该点的像素值;然而通常情况下,经过计算得到的mo中的点的坐标不是整数,例如,是浮点数,所以采用双线性插值来计算目标图像中像素点的灰度值,但不局限于此,可以采用其他合适的方法生成该像素值。
可以看出,在本发明实施例中,在获取目标图像的过程中,只需进行一次双线性插值,由于双线性差值的计算较为复杂,本发明通过减少一次双线性差值的计算,进一步降低了计算量和计算复杂度。
步骤26:判断目标图像中的点是否都处理完毕,若是,目标图像生成完毕,结束操作,若否,顺次得到目标图像中下一个待处理像素点的坐标,重复上述步骤24和25,直至目标图像中所有的像素点都处理完毕。
本发明方法实施例中各个步骤的执行顺序可以根据需要进行重新调整。
本发明实施例三还提供了一种极线矫正装置,如图11所示,所述装置包括:
位置关系获取单元111,用于获取初始帧的目标图像与矫正前图像的位置关系信息并保存;
目标图像获取单元112,用于根据所保存的所述位置关系信息,和相应的矫正前图像中的像素点获取待处理图像帧的目标图像。
进一步的,所述位置关系获取单元111包括:
转换矩阵计算模块,用于计算矫正前图像的投影矩阵与矫正后图像的投影矩阵之间的转换矩阵;
比例关系设置模块,用于设置目标图像与矫正后图像之间的缩放比例关系;
关系矩阵计算模块,用于根据所述转换矩阵和缩放比例关系计算得到位置关系矩阵,该位置关系矩阵为所述位置关系信息。
所述目标图像获取单元112包括:
对应像素点获得模块,用于查询所述位置关系信息,获得目标图像中的像素点在矫正前图像中的对应像素点;
像素值计算模块,用于根据所述对应像素点,在矫正前的图像中利用双线性差值计算得到所述目标图像中的像素点的像素值。
本发明装置实施例中各功能模块的具体工作方法可参见本发明方法实施例。
本发明实施例还提供了一种客流检测系统,如铁路、地铁和公交的自动客流统计系统,所述系统包括上述的极线矫正装置。在保证获得准确客流统计结果的同时,该客流检测系统计算量较小,计算速度快,对内存要求低,系统性能更强。
由上所述,本发明实施例提供的技术方案,利用计算出的目标图像与矫正前图像的位置关系信息,以及矫正前图像中的像素点可直接获得缩放后的目标图像。本技术方案,能够同时执行缩放和极线矫正处理,且只需处理目标图像所包含数量的像素点,通过一次双线性插值,就可得到目标图像。由于本技术方案无需先计算出整帧矫正后的图像并保存,且目标图像包含的像素点较少,本技术方案能够显著降低计算量,减少了占用的内存空间,提高了系统的处理速度。
本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。