实时视频拼接速度的优化方案
本文为CSDN原创文章,转载请注明出处
优化方案,提高拼接速度
根据之前章节的方法,进行初步视频拼接得到的效果,其速度并不是最快,需要进行一定的优化。通过实验,得到下面几种优化方式。
1.代码运行的环境是在VS2017上运行的,其中有两种运行模式,分别为Debug模式和Release模式。由于Debug中包含了很多调试信息,会插入大量的检查,并且编译器编优化程度不一样,Realease模式的编译器优化程度远远优于Debug模式,通过实验对比,代码在Release模式下运行的速度式Debug模式下的七八倍。因此,配置好Release模式的相关环境,,选择Release模式运行代码,对程序进行优化,提高拼接速度。
2.通过改变输入图像的分辨率来提高拼接速度。输入图像分辨率越高,则包含越多的图像信息,细节越多,处理起来将会耗费更多的计算机资源,因此,拼接速度将会减慢。为了提高拼接速度,可以采用对输入的视频进行降低分辨率处理。降低分辨率的原理和处理方法如下:
对于图像的尺度而言,必然会联系到图像金字塔模型,其可以以多分辨率来解释图像,所以一种方法是对图像建立金字塔,金字塔从上至下, 尺寸逐渐增大,分辨率增加,因此,只需对输入图像进行下采样,来缩小输入分辨率。Opencv库中pyrDown()函数可用来对图像进行下采样。
另一种方法是对输入图像直接进行缩放,即对输入的图像重新定义尺寸大小,为了尽可能地不丢失图像的信息,先得到输入图像最原始的尺寸,然后再对图像的长和宽按相同比例进行缩放,得到新的图像尺寸,减少了图像中的冗余信息opencv库中可以通过resize()函数来重新定义图片尺寸。
两种方法对于降低图片分辨率而言,选用resize()函数直接重新定义图像尺寸更加方便快捷,计算量较小。
3.对运动物体检测进行优化,不判定整个重叠区域,而是在重叠区域内自选ROI区域进行运动物体检测,这样可以有效地减少直方图统计的计算量。但是,由于图片容易受到光照,噪声等环境因素的影响,所选的区域不能太小,否则,统计出来的直方图将不具有代表性,对于直方图对比时阈值的选取将会更为苛刻。
并且由于每次重新更新拼接模板时,重叠区域的边界坐标都会发生变化,每次都需要重新传入新的坐标参数,所以为了减少传参的麻烦,手动选取重合区域内的某一个矩形ROI区域,固定该矩形四点的坐标值。通过减少自选更小的运动检测区域,小幅度提高了拼接速度。
4.尽可能的减少两个摄像头的重叠区域,一方面,倘若两个摄像头重叠区域较多,即两幅图像的内容几乎一致,无法得到更宽阔的视野,则生成的拼接图像将失去了拼接的意义,使得视频拼接不划算;另一方面,尽可能地减少重合区域,可以使提取的特征点数量减少,使之后特征点的匹配筛选以及后续相机参数的估计的相关计算量降低,有效的提高拼接速度。
5.对于算法和参数的选择,体现在以下几部分。
第一,特征点寻找算法,通过图像拼接章节的特征点提取算法介绍,实验中有SURF和ORB两种算法,其中SURF算法使SIFT算法的改进,比SIFT快一个数量级,ORB使FAST算法的改进,比SURF要快一个数量级。SURF速度较ORB慢,但是对于较小重叠区域的优质匹配特征点提取,效果较好。但是对于缩放后的小分辨率输入图像,且重叠区域较小时,获得的优质匹配特征点较少,将造成两幅图像无法匹配。因此,综合速度以及质量的考虑,由于ORB速度理论上比SURF要快10倍,优先选取ORB算法,而相对增加重叠区域的重合面积。
第二,对图像投影平面的选择,实验中,有多种投影方式,通过实验对比处理图像投影变换所耗费的时间,柱面投影是计算速度最快的,因此优先选择柱面投影。
第三,由于只是两路摄像头的视频拼接,不需要担心投影平面出现蛇形的情况,所以不需要使用波形校正,从而节约计算机资源。
第四,根据实验时在相关场景下得到的拼接视频效果,观察其重叠区域的曝光程度,若重叠区域的曝光亮度差不明显,则选择不采用曝光补偿从而一定程度的减少计算机的运算量。
通过以上四步,可以使得计算拼接模板的速度大幅度提高,但是也无法改变在重叠区域检测到运动物体时,重新更新拼接模板所占用的时间导致帧率大幅度下降这个问题。因此实验中对于拼接模板的更新,采用折中办法,只要做到拼接模板更新时,前后帧的连续性较高,不卡顿即可。
第五,融合算法的选择。融合速度决定了整个视频拼接的速度,融合算法速度越快,则拼接速度也越快。实验中,根据第三章图像融合章节所提到的,有两种融合算法可选,分别为羽化融合(渐入渐出融合)以及多频段融合。因为多频段融合是对两幅图像分别建立拉普拉斯金字塔,再对两个图像拉普拉斯金字塔的相同层进行加权融合,最后再进行拉普拉斯逆变换得到最终的融合图像,相当于是对多个图像进行了融合,其复杂度太高,计算时间耗费高于渐入渐出融合,所以在实验时,优先选择渐入渐出融合,通过调整加权系数,来得到比较好的融合图像,倘若效果不好,只能牺牲拼接速度,改用多频段融合方法。
经过以上五个步骤,根据上述方法做相应的优化,得到的是数据结果如下所示,通过降低输入图像的分辨率,选择ORB算法进行特征点提取,并且并用柱面投影方式进行图像变换,选用羽化融合(渐入渐出融合)进行图像融合,并利用Release模式运行代码,可以很大程度的提高视频拼接的速度。