发明内容
有鉴于此,本发明提供了一种多路实时视频拼接处理***,以解决现有视频拼接技术在保证拼接效果的条件下,不能达到视频拼接实时性要求的问题。
一种多路实时视频拼接处理***,其特征在于,是一个带有支持CUDA的NVIDIA显卡的服务器,设有:视频采集单元(U1)、视频流同步单元(U2)、视频初始化逻辑控制单元(U3)、视频初始化配准单元(U4)、视频初始化融合单元(U5)、实时视频拼接单元(U6),其中:
视频采集单元(U1),是三路具有相同镜头、焦距的同款摄像机依次从左到右水平排开且固定位置,使采集的多路视频图像在水平方向有30%的重合度,并将原始数据从YUV格式转换为图像处理所需的RGB格式,向所述视频流同步单元(U2)传入三路视频图像:I1(x,y)、I2(x,y)和I3(x,y),其中0≤y≤H-1,0≤x≤W-1,H为高度、W为宽度,x、y、H、W均为非负整数;
视频流同步单元(U2),设有:大小为5帧连续图像的三个缓冲区队列,依次缓存所述的三路视频图像流I1(x,y)、I2(x,y)和I3(x,y),采用先进先出FIFO的队列置换方式,利用操作***生产者-消费者机制对所述三路实时视频流进行同步互斥控制,确保视频流全景图像的正确拼接;
视频初始化逻辑控制单元(U3),判断从所述视频流同步单元(U2)传入的三路同步视频图像的实时性:
若当前为离线阶段,则将三路图像送到视频初始化配准单元(U4),
若当前为实时阶段,则将三路图像送到实时视频拼接单元(U6);
视频初始化配准单元(U4),利用SURF算子对当前的三路同步视频图像提取特征点,找到图像之间特征点的对应关系,再利用RANSAC算法求解图像间的空间变换模型,设有:特征点提取子单元(U41)、特征点匹配子单元(U43)和模型变换子单元(U44),其中:
特征点提取子单元(U41)以及特征点描述子单元(U42),利用Herbert Bay在“SURF:Speeded Up Robust Features”中提出的SURF算子进行特征点提取和描述,其中:
特征点提取子单元(U41),对所述的三幅同步视频图像I1(x,y)、I2(x,y)和I3(x,y)利用SURF算法提取特征点:用不同尺寸的盒子滤波模板近似高斯二阶微分,构造尺度空间,并利用积分图像加速所述盒子滤波模板的卷积操作,在所述尺度空间进行非极大值抑制,得到特征点的位置(x,y)和尺度信息s;
特征点描述子单元(U42),首先在以特征点为中心,以6s为半径的区域内,分别计算出x方向和y方向的Haar小波响应,其中Haar小波模板的大小为4s;将一个60度的扇形作为滑动窗口,对窗口内的Haar响应值利用高斯权重w=2.5s进行累加;以36度为步长,旋转一圈,当Haar响应累加值最大时,对应的方向即为所求特征点的主方向;
以特征点为中心,沿着特征点的主方向,在20s×20s大小区域内,划分4×4个子区域,在每一个子区域中,计算5×5=25次Haar响应值,生成4维的SURF特征描述符v=(∑dx,∑|dx|,∑dy,∑|dy|),其中dx和dy分别为每个像素点经过Haar小波后得到在x方向和y方向的响应值;∑dx和∑dy分别为对子区域内所有像素点在x方向上和y方向上,以特征点为中心进行高斯加权(σ=3.3s)的累加响应值,最终得到16×4=64维的SURF特征点描述符;
特征点匹配子单元(U43),对相邻两幅图像[I1(x,y),I2(x,y)]中检测到的特征点集合P1和特征点集合P2进行匹配,步骤如下:
a.先建立带优先级的KD树索引,
b.从特征点集合P
1中任意选取一点
在特征点集合P
2中找出其的最近邻点
和次近邻点
其中i∈{1,2,...,N
1}、j∈{1,2,...,N
2},N
1和N
2分别为特征点集合P
1和P
2中特征点的个数,
c.计算
到所述最近邻距点
到所述次邻距点
的距离的比值
若比值Ratio小于0.8,则判断
与
是一对特征匹配点,分别记录其在特征点集合P
1和特征点集合P
2中的索引,
d.重复步骤b和步骤c,直到遍历完特征点集合P1为止;
模型变换子单元(U44),利用单应矩阵计算一个三维平面上的点在不同二维图像中的投影位置,通过RANSAC算法精确求出所述单应矩阵的8个参数,使得两组相邻两幅图像[I1(x,y),I2(x,y)]和[I2(x,y),I3(x,y)]分别得以配准;
视频初始化融合单元(U5),包括颜色亮度校正子单元(U51),最佳缝合线子单元(U52)以及加权融合子单元(U53),以便对重叠区域中图像的颜色亮度和结构差异进行调整,其中:
颜色亮度校正子单元(U51),步骤如下:
把所述相邻的两幅图像I1(x,y)、I2(x,y)从RBG颜色空间转换到lαβ颜色空间,分离亮度通道l和颜色通道αβ,对所述相邻两幅图像的重叠区域,
求出图像I1(x,y)在所述重叠区域部分的归一化亮度通道均值以及图像I2(x,y)在所述重叠区域部分的归一化亮度均值最终对应的伽马校正参数γ1∈(0,10)和γ2∈(0,10)通过以下最优化方程求解得到:
其中σN为图像归一化灰度误差标准差和σg为伽马增益标准差,取值σN=2.0/255,σg=0.5/255,
求解得到最终的颜色亮度伽马校正参数γ′1和γ′2,在对原来的图像I1(x,y)、I2(x,y)的亮度通道进行伽马变换,得到校正后的图像;
最佳缝合线子单元(U52),在所述两幅图像的重叠区域,寻找一条缝合线,使得缝合线的两侧图像之间的颜色和结构差异最小,颜色差异用对应像素值之差进行度量、结构差异用梯度差进行度量;综合颜色和结构差异,用一个二维矩阵表示,从第一行随机选取10个像素点作为缝合线生长起始点,在最后一行选取值最小的那个像素点为缝合线终点;利用启发式A*搜索算法,分别计算出每个生长点对应的一条缝合线的平均累计误差值,选取平均累计误差值最小的线作为最佳缝合线,在重叠区域内的所述最佳缝合线的两侧分别选择一幅图像的像素,进行全景图像的合成,
加权融合子单元(U53),传入待合成全景的两幅图像I′1(x,y)和I′2(x,y),分别建立一个二值图像表示初始化权重矩阵R1(x,y)和R2(x,y),以所述最佳缝合线为边界,在其两侧,R1(x,y)的值分别为1和0,R2(x,y)的值分别为0和1,分别对每个初始化权重矩阵用距离变换函数计算出对应初始化权重矩阵中所有非零像素点到与其相邻的最近的零像素点的街区距离,再通过一个设定的平滑过渡带区域大小参数ε∈(0,1]和阈值T=1,得到对应全景图像的所述两个相邻图像的归一化加权融合矩阵α1(x,y)和α2(x,y);
实时视频拼接单元(U6),在实时阶段对传入的两幅相邻的实时视频图像进行以下步骤来求出最终融合的图像:
利用所述颜色校正子单元(U51)在离线阶段计算出的最终伽马校正参数γ′1和γ′2,直接对采集的实时视频图像在亮度通道进行颜色校正;
调用预置所述服务器内的基于并行编程模型指令集架构,直接利用离线阶段计算出的单应矩阵,通过实现CUDA的核函数mapFunc<<<grid,block>>>(src,mapMatrix,dst),在图像处理器GPU上实现多线程并发的投影变换计算,对相邻图像进行配准,确定图像的重叠区域;
用离线阶段求出的加权融合矩阵α1(x,y)和α2(x,y)对所述服务器得到的投影变换图像进行加权融合,从而得到在缝合线处更为平滑过渡的实时全景视频图像;
最后通过cudaMemcpy2D函数的cudaMemcpyDeviceToHost参数,将在GPU中计算得到的全景图像数据返回给CPU,供界面显示。
将变换模型算法用CUDA的并发机制实现,大大的加快了算法速度。通过对两路摄像机采集的704*576像素的图像进行实时配准,在Win764位操作***、Intel Xeon3.60GHz、8GRAM、NVIDIA Quadro K600显卡配置下,得到各阶段的实验数据,如下表。
其中实时拼接阶段只是简单的利用离线阶段计算出的空间投影变换单应矩阵H、颜色亮度伽马校正参数γ′1、γ′2和加权融合矩阵α1(x,y)和α2(x,y),由于投影变换和加权融合阶段需要对全景图像的每一个像素做相对复杂的运算,故每一帧需要投影变换阶段、加权融合阶段的全部时间和直接利用颜色亮度伽马校正参数γ1、γ2做颜色校正的时间,即平均花费16+10+36=62ms,达到了16帧/秒;而不利用CUDA并行架构的话,需要105+10+339=454ms,只有不到3帧/s,实验表明利用CUDA比单纯只用CPU计算要加速16/3=5倍以上。
需要指出的是,本发明为了确保拼接的效果,利用了最佳融合线和加权融合的方法,而不是像现有视频拼接***直接求取投影变换后就进行融合,虽然可以减少一定的时间,但是效果不太好,如图12d所示,黑色框所选区域内有明显的过渡带,如图12e所示本发明方法图像间的过渡效果要更好,而且帧率也保证在15~20帧之间。
本发明将图像拼接算法作为实时视频拼接的重要基础,在此基础之上,利用操作***多线程调度机制相关原理和CUDA并行计算架构,让实时的视频拼接成为可能。通过操作***生产者-消费者模型和多线程机制,实现了实时视频流的采集和同步;通过经典的SURF特征提取算法,结合一定监控场合下的特定情况,对特定区域进行特征查找和利用带优先级的KD树索引机制,加速了特征提取匹配算法的速度;在颜色校正阶段,利用了伽马变换使得相邻图像间的颜色亮度整体一样;在寻找最佳缝合线时,构造了一个度量误差矩阵,使缝合线尽可能地穿越图像的平滑区域,同时利用了启发式搜索算法,加速了最优路径的寻找速度;最后在实时视频拼接中利用了CUDA并行计算架构来加速计算,保证了实时性的要求。
与现有技术相比,本发明的有益效果是:本方法充分结合了CPU和GPU各自的优点,利用CUDA并行计算架构,构建两者协同工作的编程模型,并利用基于特征的图像配准、透视投影变换模型和基于最佳缝合线的加权融合法,最终实现又好又快的多路视频实时拼接。
具体实施方式
一种多路实时视频拼接处理***,包括:
视频采集单元,用于实时采集多路视频流,并将原始YUV数据格式转换为图像处理所需要的RGB格式;
视频流同步单元,对实时采集的多路视频流,利用操作***生产者-消费者机制对多路视频流进行同步控制,确保拼接的视频流全景图像不会出现错乱和断层;
初始化逻辑控制单元,对视频拼接的逻辑进行控制,分为两个阶段:离线阶段和实时阶段。若当前为离线阶段,则将采集到的同步视频图像送至视频初始化配准单元(U4)和视频初始化融合单元(U5)进行处理;若当前为实时阶段,则直接将采集到的实时视频流送至实时视频拼接单元(U6)进行处理。
视频初始化配准单元,利用SURF算子对当前的三路同步视频图像提取特征点,再利用匹配的特征点,在RANSAC算法的基础上,求解空间变换参数;
视频初始化融合单元,对上述三路同步视频图像的重叠区域进行预处理,使重叠区域的颜色亮度尽可能地相似,从而使拼接后的图像在过渡处更完美;先在重叠区域内求出颜色结构差异度量矩阵,最后通过启发式路径搜索算法,选取累计误差最小的路径作为最佳缝合线;并在最佳缝合线的基础上,利用距离变换函数,建立加权融合矩阵,供实时拼接阶段加权融合。
实时视频拼接单元,获得之前预处理阶段计算得到的图像投影变换模型、最佳缝合线加权融合矩阵和颜色亮度伽马校正系数,首先对图像进行颜色校正处理,再将待处理的同步实时视频帧图像从CPU传入GPU,让CUDA并行架构进行图像变换,以及通过加权融合重矩阵对图像进行融合,生成全景视频帧图像,计算完毕后传回CPU,供界面显示;
优选的,所述视频初始化配准单元包括:
特征点提取子单元,分别对多路同步实时视频图像利用SURF算子进行特征提取,得到感兴趣的特征点;
特征点描述子单元,对上一步提取到的特征点进行描述,定义特征描述符,使得特征具有鲁棒性;
特征点匹配子单元,通过最近邻算法对特征点进行匹配,计算两幅对应图像特征点之间的欧氏距离,利用最近邻距离与次近邻的比来确定匹配的特征点对;
模型变换子单元,通过提取匹配得到对应的匹配点对,并利用RANSAC算法对其中的错配点进行剔除,从而加强配准参数的准确性。
优选的,所述视频初始化融合单元包括:
颜色亮度校正子单元,分别计算两幅相邻图像重叠区域的平均亮度值,利用最优化方法求出伽马变换校正系数,使得两幅相邻图像的颜色亮度接近;
最佳缝合线子单元,计算两幅相邻图像重叠区域的颜色结构差异度量,构造一个邻接矩阵,利用启发式搜索算法,求得累计误差最小的路径作为最佳缝合线;
加权融合子单元,在所求得的最佳缝合线基础上,通过距离变换函数,分别为相邻的两个图像建立一个权重矩阵,最终通过该矩阵进行加权融合。
优选的,所述实时视频拼接单元包括:
实时颜色校正子单元,该单元主要是利用离线阶段所求的颜色亮度伽马校正参数对图像进行颜色亮度校正。
GPU模型变换子单元,该单元主要是在离线阶段所求得的单应矩阵的基础上,对实时采集的视频图像利用CUDA并行计算架构进行投影变换,实现图像的快速配准;
GPU加权融合子单元,该单元主要是在离线阶段求得的加权融合矩阵的基础上,对经过模型变换后的图像进行加权融合,得到最终的全景视频图像。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清晰、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明公开了一种多路实时视频拼接处理***,以解决现有技术的算法存在的不能同时保证拼接效果和视频拼接实时性的问题,本发明能够保证较好拼接效果的同时,即在颜色亮度和结构上在重叠区域有较好的过渡,并且保证拼接视频的实时性。其结构图如图1所示,包括:视频采集单元U1、视频流同步单元U2、初始化逻辑控制单元U3、视频初始化配准单元U4、视频初始化融合单元U5、实时视频拼接单元U6,其中:
视频采集单元U1,如图2所示,三路摄像机左中右分别用于实时采集具有重叠区域的视频图像,由于原始采集到的视频图像数据是YUV格式,需要对其进行格式转换,转换为传统的RGB格式,为稍后的图像配准融合做准备,并标记为I1(x,y)、I2(x,y)和I3(x,y)。其详细内容可参见下面所对应的实施例。
视频流同步单元U2,如图3所示,三路摄像机左中右将实时采集并转换后的RGB图像分别放入3个与之对一一应的缓冲区队列1、缓冲区队列2和缓冲区队列3,缓冲区队列的大小均设为5帧连续视频图像,为了使得采集的多路视频流同步,一旦缓冲队列满后,则将队首图像帧丢弃,使得实时采集的最新图像能够补充至缓冲队列。其详细内容可参见下面所对应的实施例。
初始化逻辑控制单元U3,对视频拼接的逻辑进行控制,分为两个阶段:离线阶段和实时阶段。若当前为离线阶段,则将采集到的同步视频图像送至视频初始化配准单元(U4)和视频初始化融合单元(U5)进行处理;若当前为实时阶段,则直接将采集到的实时视频流送至实时视频拼接单元(U6)进行处理。
视频初始化配准单元U4,如图4所示,通过利用SURF算子对视频图像进行特征点的提取,将检测出来的特征点构造对应的特征向量描述符,计算特征向量之间的欧氏距离,利用最近邻距离与次近邻距离的比值作为判断是否匹配的标准,从而对两幅相邻图像进行配准;并利用RANSAC算法去除一些错误匹配的特征点对对变换参数的影响,最后求解出空间变换参数,从而确定两幅图像的重叠区域。其详细内容可参见下面所对应的实施例。
视频初始化融合单元U5,如图5所示,利用相邻图像的重叠区域求出颜色亮度伽马校正参数,以尽可能地消除图像拼接中颜色亮度差异造成的拼接缝;最佳缝合线子单元通过对重叠区域进行结构颜色差异度量,得到一个矩阵表示,在第一行随机选取10个生长点,利用启发式搜索算法,分别计算出每个生长点对应的一条拼接线的平均累计误差值,选取平均累计误差值最小线作为最佳缝合线。在最佳缝合线求出来之后,利用距离变换函数,求得最佳缝合线位置加权融合矩阵,在实时视频融合中,利用该权重矩阵进行加权融合,从而使图像之间过渡更为平缓。其详细内容可参见下面所对应的实施例。
实时视频拼接单元U6,如图6所示,对实时同步视频流进行颜色校正,这一阶段主要任务是将实时变换的图像送至GPU,编写实现自己的核函数,让其在CUDA并行计算架构上进行并行运算,从而加速图像变换的速度;以及利用之前得到的加权融合矩阵,进行全景图像融合,最终得到实时的全景视频流。其详细内容可参见下面所对应的实施例。
其具体实施方式如下所示:
实施例一
本实施例公开的实时视频拼接处理的流程如图7所示,包括:
步骤S1、将具有相同镜头和焦距的3路同款摄像机依次从左到右水平排开,固定位置,分别读入实时采集的YUV格式原始图像数据,其中摄像机左和摄像机中为两个相邻摄像机,其采集的图像中在水平方向大约有30%的重合度,摄像机中和摄像机右采集的图像在水平方向也有30%左右的重叠区域,同理,可以扩充至更多摄像机;
采集的图像为YUV原始数据格式,为了后期图像处理需要将其转变为RGB数据格式。其转换公式为:
其中Y∈[0,255]、U∈[0,255]、V∈[0,255],由于每一个YUV离散分量都有与之对应的RGB数值,故可以利用查表找对浮点型运算进行加速。设转换后的RGB图像为I1(x,y)、I2(x,y)和I3(x,y),其高为H个像素,宽为W个像素,(x,y)表示二维空间的坐标,分别代表图像的行和列,其中,0≤y≤H-1,0≤x≤W-1,x、y、H、W均为非负整数。
步骤S2、对采集的多路视频流进行同步,每一路视频流对应一个视频帧缓冲队列,其本质是利用操作***的生产者-消费者模型,其中帧缓冲队列为临界资源,共有生产者线程和消费者两个线程,其读写同步通过互斥锁来实现。主要步骤如下:
若某路摄像机采集转换后的视频图像到达计算机内存时,生产者线程获得互斥锁,生产者将其加入到对应的视频图像缓冲队列中,生产者线程释放互斥锁;若所有的视频图像缓冲队列中都含有至少一帧视频帧的时候,即所有缓冲队列都不为空,则首先消费者线程获得互斥锁,消费者将视频图像缓冲队列的队首视频图像取出来,用于下一步拼接成全景视频;若某一视频图像缓冲队列中的视频图像到达上限,即某一队列满了,那么则将队首的那帧图像丢弃掉,以便让后来最新的图像能够及时进入缓冲队列。
我们归纳出,这种采用视频图像缓冲队列的同步方案的异步时间差Tdiff可以表示为:
其中:
Bsize表示缓冲区队列的大小,缓存的图像帧数越多,其不同步的现象就越明显。
Fc代表摄像机的采集频率,即帧率,摄像机的帧率越低,其不同步的现象就越明显。
Nc代表摄像的数量,同时采集的摄像机的路数越多,其不同步的现象就越明显。
D代表网络延时,由于图像数据比较大,在视频采集传输线路和服务器接收视频流的时候,也可能会因为带宽受限和***总线等原因产生时延,网络延时越大,其不同步的现象就越明显。
Pscene代表视频流之间发生不同步的概率,它取决于多路摄像机所拍摄的场景的复杂度差异,如果两个摄像机所拍摄场景的复杂度有较明显的差异,视频流之间发生不同步的概率就越高,不同步的现象就越明显。
在一般实验中,摄像机的帧率是采集初始化时确定的,采集端网络延时可以在局域网中控制或者通过模拟信号采集卡进行采集,而场景的相对复杂度往往是不可控制的,因此从理论上说,在摄像机数量固定的条件下,缓冲队列越小,采集的图像就表现得越同步。但是,缓冲队列设置得过小,比如1,就意味着当场景复杂度突然发生较大变化时,比如复杂运动的物体突然进入场景时,采集帧率突然下降,缓冲区供应的图像比消费的更慢,即缓冲区队列有较大概率为空,这时采集的视频就会发生较明显的丢帧和滞后现象。这里我们通过多次实验,将视频帧缓冲队列的大小设为5较为合适。
步骤S3、对实时采集的视频流进行逻辑控制,分为两个阶段:离线阶段和实时阶段。若当前为离线阶段,则将采集到的同步视频图像通过步骤S41-S44和步骤S51-S53进行处理;若当前为实时阶段,则将采集到的实时视频流直接通过步骤S61-S63进行处理。
为了说明简便,下面步骤均以两路图像I1(x,y)和I2(x,y)的配准融合进行说明,容易扩展到多路图像中去。
在本实施例中,参见图7,步骤3获取两幅相邻图像间的8参数变换模型具体以步骤S41-S44加以实现,包括:
步骤S41、拿到一幅图像后,需要提取出我们感兴趣的特征,从而能够用这些特征表示一幅图像,这就是对图像进行特征点提取。本发明采用Herbert Bay于2006年在“SURF:Speeded Up Robust Features”中提出的SURF算子对图像进行特征提取,由于***的特定结构,已经知道图像的大概重合部分,故不需要对整幅图像进行特征提取和匹配,只需对图像的部分地方进行操作,节省了算法的运行时间,同时也在一定程度上提高了匹配的精确度。
SURF算子由尺度空间表示,其特征点是由Hessian矩阵的行列式极值来检测的。在图像I(x,y)中的一个点p(x,y),在尺度为σ的Hessian矩阵定义如下:
其中:L
xx(x,y,σ)、L
xy(x,y,σ)和L
yy(x,y,σ)分别是高斯滤波二阶偏导数
和
在点p(x,y)处与图像I(x,y)卷积的结果,其中二维高斯滤波函数为
为了加快算法的速度,SURF算子采用盒子滤波模板,来近似高斯二阶微分,如图8所示,并使用积分图像来加速模板与图像卷积操作。
从而Hessian矩阵的行列式可以得到:
Det(H)=Lxx(x,y,σ)*Lyy(x,y,σ)-Lxy(x,y,σ)Lxy(x,y,σ)≈DxxDyy-(0.9Dxy)2
其中Dxx、Dyy和Dxy分别是由图8中9*9大小的盒子滤波模板(d)、(e)和(f)与图像I(x,y)进行卷积而得,可以由积分图像将卷积运算转化为加减运算,并且计算时间的复杂度与模板尺寸无关。
SURF通过不断改变盒子滤波模板的尺寸,如9*9、15*15、21*21、27*27等,求取Hessian矩阵的行列式响应值,从而构建尺度金字塔。初始尺度空间层对应的模板尺寸大小为9*9,此时尺度值s=1.2,对应高斯滤波函数中σ=1.2;模板尺寸大小N与尺度值s成比例,
如27*27的盒子滤波模板其尺度s=1.2*27/9=3.6=σ;同样,SURF尺度空间划分了若干组(Octave),每一组包括若干层(Layer),由逐步变大的盒子滤波器模板,如9*9、15*15、21*21、27*27等,与同一图像I(x,y)卷积得到的响应图组成;不同组的之间的尺度有相互重叠、模板尺寸的间隔增量也在不断的翻倍,如第一组间隔为6,第二组间隔为12,第三组间隔为24等,故第二组模板尺度变化为15*15、27*27、39*39、51*51等,第三组尺度变化为27*27、51*51、75*75、99*99等,依次类推。一般情况下为3组,每组4层。
随着同一组中的模板尺寸间隔增量不断变大,特征点的采样间隔也在变大,例如第一组(Octave),每个像素点都计算Hessian矩阵的行列式响应值,到了第二组,隔一个点计算一次,第三组则隔2个点计算一次,成倍递增,依此类推。
对于每一组(Octave),尺度空间中的每一个盒子滤波器,与图像卷积,对计算出的Hessian矩阵行列式响应值设一个阈值T=300,大于该阈值的点为候选兴趣点。对候选兴趣点进行非极大值抑制:对于该层(Layer)的周围8个点以及上下相邻层对应位置的9*2个点,一共26个点比较行列式响应值的大小,若该点是周围26个点中行列式响应值最大的,则该点为所求的特征点。需要注意的是每一组的头尾两层是没法计算的。
步骤S42、对提取的特征构造特征描述符,首先需要求得特征点的主方向,以特征点为中心,以6s为半径的区域内(其中s为当前特征点的尺度),分别计算出x方向和y方向的Haar小波响应,其中Haar小波模板的大小为4s,如图9所示。然后以特征点为中心,将一个60度的扇形作为滑动窗口,用以下公式对窗口内的Haar响应值利用高斯权重(w=2.5s)进行累加,即离特征点近的Haar响应值权重大,离特征点远的Haar响应值权重小。
其中w为高斯权重,dx、dy分别为x方向和y方向的Haar小波响应值。
以36度为步长,旋转一圈,当Haar响应累加值mw最大时,对应的方向θw即为所求特征点的主方向。
以特征点为中心,将坐标轴移至特征点主方向,在20s×20s大小区域内,划分4×4共16个子区域,在每一个子区域中计算5*5=25次Haar响应值,生成4维的SURF特征描述符v=(∑dx,∑|dx|,∑dy,∑|dy|),其中dx和dy分别为每个像素点经过Haar小波后得到在x方向和y方向的响应值;∑dx和∑dy分别为对子区域内所有像素点在x方向上和y方向上,以特征点为中心进行高斯加权(σ=3.3s)的累加响应值,将16个子区域的向量分别加入特征向量中形成16*4=64维的SURF特征向量描述符;
步骤S43、相邻两路摄像机采集的图像进行提取特征后,确定各自特征点的对应匹配关系。P1为在图像I1(x,y)中检测出的特征点的集合,P2为在图像I2(x,y)中检测到的特征点的集合,计算对应匹配点的步骤为:
第一步,先建立带优先级的KD树索引,加快匹配点的搜索。
KD树是一个二叉树,通常用于高维数据的索引。能够在每一维度将数据分为左右两部分,搜寻路径即从其中一条路径进行前进,直到叶子节点。但在求最近邻的时候,当查询点的领域与分割超平面两侧都有交集,则需要回溯检测两侧的特征,导致回溯过程过多,效率下降。故可以利用带优先级的KD树,其本质为在KD树的基础上利用了一个优先级队列,记录各自分割超平面与查询点的距离排序,距离越近,优先级越高,回溯检测总是从优先级高的节点开始。
第二步,遍历集合P
1,其中
为集合P
1中的任意一点,从另一集合P
2中找出
的最近邻
和次近邻点
其中i∈{1,2,...,N
1}、j∈{1,2,...,N
2},N
1和N
2分别为集合P
1和P
2中特征点的个数,
第三步,计算
的最近邻距离与次近邻距离比值
当比值Ratio小于0.8时,则认为
与
的特征点是一对匹配点,并分别记录其在集合P
1和P
2中的索引
第四步,重复以上两步直到遍历完集合P1为止;
为了保证匹配的准确性,我们进行交叉验证。同理,
第一步,遍历集合P
2,其中
为集合P
2中的任意一点,依次从另一集合P
1中找出距
的最近邻点
和次近邻点
第二步,计算
的最近邻距离与次近邻距离比值
当比值Ratio小于0.8时,则认为
与
的特征点是一对匹配点,并分别记录其在集合P
2和P
1中的索引
第三步,重复以上两步直到遍历完集合P2为止;
第四步,对比前后两次验证的索引对,找出公共部分的索引对,即为最终的特征点匹配对。
步骤S44、设在步骤S43中得到的一对特征点匹配对为
和
根据小孔成像原理,我们知道一个三维空间坐标点分别对应两个图像I
1(x,y)和I
2(x,y)中不同位置的像素点,那么它们存在一一对应关系。可以通过透视投影映射函数,利用一个3*3的单应(homography)矩阵H,使得图像配准。单应矩阵用来计算同一个三维平面上的点在不同的二维图像中的投影位置的,是一个一对一的映射。其8参数矩阵表现形式为:
化简得到:
其中a1、a2、a3、b1、b2、b3、c1、c2为所求的参数,共8个自由度,理论上至少需要4个对应的特征点匹配对,即可计算出两幅图像间的透视投影变换关系。
由于我们得到的特征点匹配对比未知数的个数要多,这是一个超定方程组。但是经过交叉验证后的匹配点对中仍然可能有部分错误匹配的点对。下面利用RANSAC算法,求出精确的8参数变换模型。具体步骤为:
第一步,从特征匹配点对集合中随机选取4组匹配点对,带入到上式映射函数中,求出变换参数,其中一幅图像的4点中不能有任意三点在一条直线上的情况,
第二步,将特征匹配点对集合中剩余的匹配点对,利用第一步求出来的变换参数矩阵进行验证,若误差在一定阈值之内,则计为正确的匹配点对,个数加1,
第三步,直到遍历完特征匹配点对集合中的所有点对,统计出最终正确的匹配点对个数,记录下来,
第四步,重复第一至第三步30次,选取正确的匹配点对个数最多所对应的变换参数矩阵为最终所求的8参数透视变换模型。
在本实施例中,参见图7,步骤5获取两幅相邻图像间的颜色校正参数、最佳缝合线及融合加权矩阵求取的具体以步骤S51-S53加以实现,包括:
步骤S51、求取颜色校正参数,多路摄像机采集的图像由于受不同角度光照和镜头工艺等因素的影响,会使得图像的颜色亮度产生一些差异,对重叠区域直接拼接将对全景图像视觉效果有着严重的影响,使得拼接出来的全景不自然。
在对图像进行加权融合之前,先对相邻图像的颜色进行预处理,尽可能的消除图像拼接中的颜色亮度缝隙。由于人对亮度的变化的敏感程度比对颜色变化的敏感度要高,本***利用颜色空间变换,将RBG颜色空间转换到lαβ颜色空间,分离了亮度通道和颜色通道,利用重叠区域的像素信息,对亮度通道做伽马变换使得两幅图像尽可能的相似。具体算法步骤为:
第一步,获得左边图像I1(x,y)与中间图像I2(x,y)的重叠区域像素,并根据以下公式,进行颜色空间变换,
第二步,初始操作,在左边图像I
1(x,y)的重叠区域求出亮度通道均值
并用参数γ
1做伽马校正:
同理,在中间图像I
2(x,y)的重叠区域求出亮度通道均值
用参数γ
2做伽马校正:
使得校正后的两幅图像尽可能的相似,
其中N为重叠区域的像素个数,Y1,2(pn)、Y2,1(pn)分别为左边图像I1(x,y)和右边图像I2(x,y)在重叠区域中第n个像素点的亮度通道l分量值,γ1和γ2分别为要求解的左边图像I1(x,y)和中间图像I2(x,y)的伽马校正参数,。
为了计算方便,对上式两边取对数
简记,
第三步,根据前一步的亮度变换,转化为求以下最优化问题
其中分别表示图像的归一化灰度误差标准差和图像伽马增益标准差,这里我们分别取σN=2.0/255,σg=0.5/255。
第四步,将求出的伽马校正参数γ1和γ2分别对图像进行变换
第五步,输出颜色亮度校正后的图像。
步骤S52、该方法的思想是在两幅图像的重叠部分,寻找一条缝合线,使得缝合线的两边图像之间的颜色差异和结构差异同时最小,从而在缝合线的两边只选一幅图像的像素进行合成全景图像。利用人工智能中的启发式A*算法搜索最优路径,得到最佳缝合线。
第一步,从颜色差异来看,对所述两幅图像I1(x,y)和I2(x,y)的重叠区域做差,得到差图像Dc(x),即有
Dc(x)=|I1(x,y)-I2(x,y)|
第二步,从结构差异来看,对相邻两幅图像I1(x,y)和I2(x,y)的重叠区域分别在x和y方向上求梯度,并构造梯度差异算子Dg(x),即有
其中,梯度可以通过分别对图像I
1(x,y)和I
2(x,y)的重叠区域利用Sobel算子S
h和S
v分别求取水平和垂直方向的梯度值,并记为
和
第三步,综合颜色和结构差异,得到Dt(x)=Dc(x)+Dg(x),该结果构成一个邻接矩阵。我们随机从第一行选取10像素作为个生长起始点,选择最后一行值最小的那个像素为终点;利用启发式A*搜索算法,分别计算出每个生长点对应的一条拼接线的平均累计误差值,选取平均累计误差值最小线作为最佳缝合线,从而保证最佳缝合线要尽可能的穿越重叠区域平滑部分的原则。
对于每一个生长起始点,最佳缝合线A*算法步骤如下:
第一步,构造一个估计函数=从生长起始点到当前位置的实际值+当前位置到终点的估计值,即f(n)=g(n)+h(n),其中g(n)为从生长起始点到当前点的误差累加值,h(n)为从当前节点到终点的估计误差值,这里定义为街区权重距离;规定扩展方向从右开始,顺时针顺序。
第二步,创建一个OPEN表来存放未扩展节点,初始化时将生长起始点放入该表;创建一个CLOSED表来存放已经扩展的节点,初始化时该表为空
第三步,若OPEN表为空,则查找失败,算法结束;
在表OPEN表中找到使估计函数f(n)最小的节点n,将它从OPEN表中移出,放入CLOSED表中。
若节点n是终点,则最佳缝合线找到,通过父节点指针得到从生长起始点到终点的路径,算法结束;
若节点n不是终点,则根据扩展规则产生它周围的相邻节点ni,作为它的子节点,并将每个子节点ni的父节点指针指向n,用于回溯。然后对于每一个子节点ni,计算估计函数f(ni)=g(ni)+h(ni)=g(n)+c(n,ni)+h(ni),其中c(n,ni)为从节点n到ni的代价。有以下三种情况:
1若ni已经在CLOSED表中,则忽略此节点,
2若ni为新的节点,则将ni放入OPEN表中,
3若ni已经在OPEN表中,则比较其新老估计函数值,若f(ni)<f(old),说明从起始生长点经过n到ni的路径要比之前搜索得到的路径更短,用ni代替原来OPEN表中的节点,
第四步,返回第三步。
最终从10条缝合线中选择一条平均累计误差值最小的作为最佳缝合线。
步骤S53、在相邻图像I1(x,y)和I2(x,y)最佳缝合线的基础上,通过加权融合使得其在接缝处过渡得更平滑,主要有四步。
第一步,对相邻图像I1(x,y)和I2(x,y),分别建立一个二值图像表示初始化权重矩阵R1(x,y)和R2(x,y),对于R1(x,y)在缝合线的两侧分别为1和0,对于R2(x,y)在缝合线的两侧分别为0和1,如图11c、11d所示,
第二步,定义一个距离变换函数D(p(x,y)),对R1(x,y)和R2(x,y)进行变换,
D(p(x,y))=min(dis(p,q))p∈非零像素集、q∈零像素集
其中距离函数定义为街区距离dis(p(x1,y1),q(x2,y2))=|x1-x2|+|y1-y2|。
该距离变换函数D(p(x,y))的本质就是计算初始化权重矩阵中所有非零像素点到与其相邻的最近的零像素点的距离,如图10a、10b所示。
第三步,通过一个阈值ε∈(0,1]来设定平滑过渡带的大小,分别计算出对应图像I1(x,y)和I2(x,y)新的过渡融合权重α1(x,y)和α2(x,y),归一化0~1之间,如图10c、10d所示
α1(x,y)=ε*R1(x,y)ifε*R1(x0,y0)>1,则α1(x0,y0)=1
α2(x,y)=ε*R2(x,y)ifε*R2(x0,y0)>1,则α2(x0,y0)=1
第四步,由以下公式计算最终融合的图像,
在本实施例中,参见图7,步骤5对图像进行实时视频拼接的具体以步骤S61-S63加以实现,包括:
步骤S61、利用步骤S51求得的伽马校正参数γ1和γ2,对图像进行颜色变换。
步骤S62、将图像传送至GPU,调用自己实现的核函数,实现多线性并发计算,实时计算出投影变换后的图像。
该步骤是本***最为重要的一个环节,关系到能否成功实现实时视频拼接。考虑到本***的特定应用场合,用于监控的摄像机相对位置基本固定不变,主要从以下两个方面,对算法速度进行加速,以实现实时拼接。
第一,利用操作***多线程调度原理,将本***的工作分为两个线程,一个是离线拼接初始化线程,该线程主要负责特征点的提取、匹配、求取变换模型和颜色校正参数,由于这个过程需要的时间比较长,故不是对每一帧采集的图像组进行操作,而是过一定时间或等到用户发送指令后再进行。另外一个线程就是实时拼接线程,考虑到前期初始化的离线线程已经算出了配准阶段所需的图像之间的位置变换关系和融合阶段所需的颜色亮度校正系数,而且图像间的相对位置保存不变,故可以一次运算,多次利用。在实时拼接阶段只需要根据相应的空间变换模型、颜色亮度伽马校正参数和加权融合矩阵对图像进行处理计算即可,大大节省了运算时间。
第二,在图像的配准阶段,本***利用S44阶段求得的8参数投影变换模型,对相邻摄像机采集的图像进行配准。由于图像的变换主要是涉及到矩阵元素的加减乘除运算,这是CUDA并行计算架构的优势,实现算法主要由以下步骤构成:
第一步,通过CUDA并行编程的cudaMemcpy2D接口和cudaMemcpyHostToDevice参数,将内存中的待配准的图像数据拷贝至GPU中,
第二步,通过调用自己实现的基于CUDA架构的核函数mapFunc<<<grid,block>>>(src,mapMatrix,dst),在图形处理器GPU上实现多线程并发的图像变换计算。一个核函数是CUDA程序中的一个可被并行执行的步骤,其中grid为线程块的集合,表示CUDA在执行核函数时使用的并行线程块的数量;block为线程的集合,表示一个线程块中包含线程的数量,故总的线程数量为grid*block个。src为源图像,mapMatrix为S44阶段求解的8参数投影变换模型矩阵,dst为变换后的目标图像。
步骤S63、利用步骤S53计算出来的融合矩阵α1(x,y)和α2(x,y),用以下公式通过CUDA实现,对投影变换后的图像进行加权融合,得到全景图像,
最后,通过cudaMemcpy2D接口的cudaMemcpyDeviceToHost参数,实现将在GPU中的全景图像计算结果数据返回给CPU,供界面显示。如图11e所示。
本实施例利用了编程模型的多线程机制,离线线程处理复杂度较高的图像算法运算,在线线程负责实时拼接;利用多路摄像机对实时视频流进行采集;在操作***消费者-生产者和缓冲区队列临界资源互斥控制的基础上实现了多路视频流的同步;利用SURF算子对图像进行特征提取、描述符定义,进行交叉验证特征点匹配,结合RANSAC算法精确求解相邻图像间的8参数单应矩阵变换模型;通过空间变换将图像亮度和颜色通道分离,在人类更敏感的亮度通道做伽马校正,求得校正系数供实时拼接阶段使用;从结构和颜色两方面考虑,利用启发式搜寻算法,求出最佳缝合线以及对缝合线位置邻近进行距离函数变换,求得加权融合矩阵;通过CUDA并行计算架构对相邻图像进行模型变换和加权融合,较单纯利用CPU计算速度提高5倍以上,最终生成平滑过渡、无缝拼接的实时全景视频流,视频帧率达到15~20帧。
上述实施例是在理论方面对本发明公开的一种多路实时视频拼接处理***的详细地描述,同时在理论上也对其有益效果进行了描述。本发明也通过实验证明在拼接全景视频流效果上能够达到较好的结果,同时本发明公布的方法在实时性上也能取得满意的效果。
本说明书中各个实施例采用递进的方式描述。专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各个实例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚的说明硬件和软件的可互换性,在上述说明中已经按照功能一般性的描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本发明中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、制只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、图形处理器GPU、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其他形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合于本文所公开的原理和新颖特点相一致的最宽的范围。