刘金亮 卜凡亮
摘 要:视觉领域中全景图像受到广泛关注。鱼眼图像全景拼接步骤繁多,工作量大且耗时较长,影响实时性。针对该问题设计了一种MFC+OpenCV相结合的鱼眼全景拼接系统。该系统用C++语言编译,在VS2012的操作平台上搭建MFC框架并安装配置OpenCV开源视觉处理库,进行输入输出、图像显示和图像拼接处理等操作。鱼眼全景拼接系统界面整洁,操作便捷,对全景视频监控开发具有重要现实意义。
关键词:鱼眼图像;全景拼接;MFC;OpenCV
DOI:10.11907/rjdk.182466
中图分类号:TP319文献标识码:A文章编号:1672-7800(2019)001-0112-04
Abstract:In the field of vision, panoramic images have received widespread attention and recognition. The fisheye image panorama stitching has many steps, it is of heavy workload and time-consuming, which affects the real-time performance. A fisheye panoramic stitching system based on MFC+OpenCV is designed. The fisheye panoramic splicing system is compiled in C++ language. On the VS2012 operating platform, the MFC framework is built and the OpenCV open source visual processing library is installed and configured. The fisheye image and the fisheye camera are used for input and output, image display and image splicing processing. The fisheye panoramic splicing system has a neat interface, convenient operation and simple start-up, which has very important practical significance for the development of panoramic video surveillance.
0 引言
計算机视觉作为一个重要研究领域引起许多学者关注[1]。图像拼接作为该领域的一个分支,其应用也越来越广泛[2]。图像拼接是指将两幅相邻的图像数据集合起来拼接成一幅尺度更大、视角更广的图像或全景图。全景图像获取方式主要有两种:①使用普通相机[3-4],通过拍摄多张具有重叠区域的小视角图像,经过拼接处理组合成一幅大视角图像,通常情况下形成全景图像的照片数量不低于8张;②直接使用广角镜头拍摄图像[5-6]。广角镜头是一种焦距短于标准镜头、视角大于标准镜头的摄影镜头,在较短的拍摄距离范围内能拍摄较大面积的景物,而鱼眼镜头是一种特殊的广角镜头[7],其水平和垂直视角都能达到180°。理论上两张鱼眼图片就能形成一幅360°×360°的全景图。但由于周边画面畸变严重,通常情况下采用3-4张鱼眼图片即可拼接成全景图像[8]。
沈柯[9]设计的全景视图图像拼接系统,只需将三脚架固定好,用普通相机从多角度拍摄多张图片系统就可输出全景拼接结果。但大量相同图片数据多次利用造成冗余计算,计算量巨大,耗时较长。宋宝森[10]设计的全景图像拼接系统,需要提前输入相机镜头多个参数,手动计算图像匹配的变换矩阵值并进行全局调整,随后输出全景图。虽然最终输出的全景图效果较好,但在系统操作过程中需要涉及相关参数设置,且步骤繁多,应用场景有限。廖训佚[11]在鱼眼全景拼接系统中,首先将各个模块进行明确的功能划分,然后在系统中将各模块耦合起来,操作步骤简单易学,但功能单一且拼接过程较慢,不适合实时拼接。
针对上述拼接系统设计的不足,本文使用C++程序、MFC(Microsoft Foundation Classes)界面开发库和OpenCV(Open Source Computer Vision Library)图像处理开源库,开发了一套基于鱼眼的图像和视频双拼接系统[12]。通过对鱼眼图像的处理,实现鱼眼图像的校正和拼接操作,各个模块独立运行,分工明确,最后生成全景拼接图。同时添加视频拼接功能模块,实时全景拼接。
1 全景拼接关键技术
鱼眼全景拼接关键技术有鱼眼校正技术[13]、图像匹配技术[14-15]等。
1.1 鱼眼校正技术
鱼眼校正技术是鱼眼全景拼接的基础,校正效果决定后面拼接的质量。常见的鱼眼校正技术有球面坐标定位法和经纬度映射法。鱼眼图像是圆形的,有圆心和半径,在鱼眼图像的圆形区域内按比例画出经线,然后将同一经线上的点校正后为同一横坐标,纵坐标不变,这就是球面坐标定位法原理。球面坐标定位法思路简单,校正效率高但校正质量不好,存在明显的拱形失真,不能应用于后续的拼接操作。而经纬度映射法在球面坐标定位法基础上添加了纬度线,即在鱼眼图像区域内按比例画出经纬线,同一经度上的点像素校正后具有相同的横坐标,同一纬度上的点像素校正后具有相同的纵坐标。同球面坐标定位法相比,经纬度映射法校正效果有了明显提高,本系统即采用该方法用于鱼眼图像校正。
1.2 图像匹配技术
图像匹配技术是图像拼接的关键技术。图像匹配技术分为基于区域的匹配、基于频域的匹配和基于特征点的匹配,本系统采用基于特征点的匹配。特征点匹配即对两幅待匹配的图像提取它们图像上明显的特征信息进行匹配,确定它们之间的空间关系。由于鱼眼图像校正后仍存在畸变现象,用特征点方法提取的特征信息能很好地进行匹配。本系统采用SURF特征点提取算法,该算法具有旋转、平移、仿射不变性等特性。
2 系统结构与流程设计
传统的全景图像是将待拼接的图像一步步拼接起来,过程琐碎,工作量大且耗时较长。鱼眼全景拼接系统省去一系列复杂的指向性操作,简化全景拼接图像的合成步骤,在已有算法基础上搭建鱼眼全景拼接系统。
2.1 系统功能
(1)图像读取。拼接系统软件设计核心在于图像处理,所以首先要读取图像,针对不同存储格式的图像都能进行载入操作。
(2)图像显示。图像要能显示在计算机屏幕上,并可统一将显示的图片以同一图片格式保存在计算机中。
(3)图像处理。此功能步骤:鱼眼图像校正、图像特征点检测和匹配、图像重映射及融合。鱼眼图像存在畸变,本系统通过经纬度映射法对鱼眼图像进行校正;对具有重叠区域的图像进行SURF特征点检测并进行匹配;利用匹配的特征点计算图像间的变换模型,将这些图像转换到同一坐标系上,并对拼接后的图像进行融合处理,减少图像间的重影现象,提高图像辨识度。这部分算法在OpenCV中实现。
(4)视频输入输出。通过接入实时的鱼眼摄像头,在计算机上实时观看拍摄的画面,并经过处理呈现出校正拼接后的全景图像。对视频的拼接本质就是通过捕获摄像头的帧对其进行图像拼接。
系统功能模块如图1所示。
2.2 系统流程
鱼眼全景拼接系统有两个独立的小系统,分别是鱼眼图像全景拼接系统和鱼眼摄像机实时拼接系统[16-17]。前者主要对图片进行处理,后者则是对摄像头导入的实时画面进行处理[18]。
鱼眼全景图像拼接流程如图2所示,操作步骤包括对鱼眼图像读取、显示,同时对于待拼接图像选择性添加或删除甚至清空。然后对待拼接图像进行拼接处理,包括鱼眼图像校正、图像特征点提取及匹配、图像重映射及融合等。对于拼接的图像有两种可能,一种是输入图像不符合匹配要求,因为选择的鱼眼图像不一定拥有共同区域,或由于图像拼接过程存在不可控因素导致拼接失败,此时系统会给出错误提示其找原因;一种是拼接成功,这时系统呈现拼接成功反馈的全景图,在此基础上可按系统格式要求保留全景图像或直接选择退出。
鱼眼摄像机实时拼接流程如图3所示。首先将摄像机镜头按一定位置摆好(本实验中按3个鱼眼摄像头两两成120°放好,并根据3个摄像头拍下的图像计算好它们之间的数据和拼接算法)。同时打开3个鱼眼摄像头,导入实时画面并显示实时拼接全景图。此种视频拼接属于拼接图像的合成方式,将每一部分视频帧按照一定的规则进行处理,然后各段图像以一定的拼接方式拼接成全景图像,实现视频拼接效果。
3 系统实现
3.1 系统软件开发环境
系统开发环境:VS2010+OpenCV+MFC。
MFC是微软基础类库的总称,是一个封装了大部分Windows API函数的C++类库,还是一个基础框架,作为应用程序的交互界面使用,对于编译框架能够很好地完成初期Windows界面设定[19]。
OpenCV是一个基于开源发行的跨平台计算机视觉库,用C++语言编写,主要接口也是C++语言[20-21],能实现图像处理和计算机视觉方面的很多通用算法,在本系统中主要用来实现图像拼接模块(图像的特征点检测和匹配、图像的重映射及融合)功能。
每个模块的接口分别表示如下:
3.2 关键代码
在本文设计的案件场景重建系统平台中,OpenCV负责鱼眼图像校正和图像拼接功能。捕获摄像头帧的关键代码如下:
3.3 系统试验
系统试验从两部分描述。
(1)鱼眼图像全景拼接。从文件夹中添加3张鱼眼图像,添加了图像在界面左边显示。点击全景拼接,系统自动将鱼眼图像先校正再匹配进行拼接,界面右边显示拼接结果。点击保存结果按钮就会按指定格式保存全景图像。鱼眼图像全景拼接如图5所示。
(2)鱼眼摄像机实时拼接。打开3个鱼眼镜头(两两呈120°),在界面左边实时显示摄像机拍摄的画面。点击视频拼接按钮,在界面右边就会显示出实时全景拼接图。点击保存结果按钮可保存当前拼接的图片。鱼眼摄像机实时拼接如图6所示。
4 结语
本文基于MFC+OpenCV设计了鱼眼全景拼接系统,大大提升了全景图片的生成效率,同时引入了实时视频拼接功能。该系统画面简洁、操作方便、运行流畅、兼容性较强,有一定的参考和应用价值。但受限于硬件配置条件,系统拼接展示的实时画面有卡顿现象,且拼接出来的图像分辨率较低,拼接图像的中间仍有明显的分割线存在,这是后续算法改进的方向。
参考文献:
[1] 倪晨旭. 计算机视觉研究综述[J]. 电子世界,2018(1):91-93.
[2] 薛佳乐. 图像拼接算法的研究[D]. 天津:天津理工大学,2018.
[3] 李佳,盛业华,张卡,等. 基于未标定普通相机的全景图像拼接方法[J]. 系统仿真学报,2013,25(9):2070-2074.
[4] 林華琦,兰诚栋. 基于多相机系统标定的全景拼接算法研究[J]. 信息通信,2018(3):37-40.
[5] 杨浩新. 角度不一样 效果大不同[N]. 中国摄影报,2018-02-27(007).
[6] 朱佳巍,王旗,范俊辉,等. 一款小型化红外广角镜头的设计[J]. 激光与光电子学进展,2018,55(7):139-144.
[7] 侯国柱,吕丽军. 一款可见光鱼眼镜头系统设计[J]. 光学与光电技术,2018,16(3):90-95.
[8] 周小康,饶鹏,朱秋煜,等. 鱼眼图像畸变校正技术研究[J]. 工业控制计算机,2017,30(10):95-96,99.
[9] 沈柯. 基于全景视图管理的3D图像拼接方法研究与实现[D]. 西安:西安电子科技大学,2014.
[10] 宋宝森. 全景图像拼接方法研究与实现[D]. 哈尔滨:哈尔滨工程大学,2012.
[11] 廖训佚. 鱼眼图像全景拼接系统[D]. 重庆:重庆大学,2009.
[12] 李佳,段平,张驰. 图像分块匹配下视频全景拼接方法[J]. 应用基础与工程科学学报,2018(4):697-708.
[13] 邢立新. 鱼眼镜头视频图像实时校正技术研究[D]. 哈尔滨:黑龙江大学,2014.
[14] 李倩. 基于特征描述的图像匹配技术研究[D]. 桂林:桂林电子科技大学,2017.
[15] 张晓闻. 融合优化算法的图像匹配技术研究[D]. 太原:中北大学,2017.
[16] 何源. 鱼眼图像无缝全景拼接技术研究[D]. 太原:山西农业大学,2015.
[17] 汪丹. 鱼眼图像全景拼接技术的研究与实现[D]. 长沙:湖南师范大学,2017.
[18] 吕世良,王晓茜,刘金国. 数字视频监控系统设计与实现[J]. 测控技术,2014,33(2):80-82,86.
[19] 车忠志,孙雪雁. MFC应用程序基本框架分析[J]. 农业网络信息,2010(9):145-147.
[20] 毛星云,冷雪飞. OpenCV编程入门[M]. 北京:电子工业出版社,2015.
[21] 汪洵潇. 基于OpenCV的视频监控数据管理系统的设计与实现[D]. 北京:北京交通大学,2011.
(责任编辑:杜能钢)