APP下载

以OpenCV为基础的图像预处理技术在无人机视频的应用

2018-02-26陈之尧

电子技术与软件工程 2018年16期

陈之尧

摘要

OpenCV实为一种新型的开放源代码函数库,多用于计算机视觉与数字图像处理。本文首先对OpenCV的概念、体系结构进行了简要分析,以无人机视频预处理系统为例,提出了一种新型的预处理方法,在无人机拍摄视频中应用图像处理的图像增益数、高斯滤波算法、图像融合操作及双边平滑算法等,有效解决了无人机视频图像经常出现的清晰度低、抖动等问题,此外,还一定程度降低了噪声、环境光线对其所造成的影响与干扰。

【关键词】OpenCV 图像预处理 无人机视频

伴随科学技术尤其是计算机技术的不断发展与更新,数字图像技术在诸如雷达、航空、生物、医学及通信等领域得到了广泛化应用,有力推动着这些领域的发展与完善;而在计算机、电子及通信等技术大发展的时代背景下,带动了无人机领域的前进与繁荣,但在无人机技术相多领域扩展应用进程中,却面临着诸多问题与挑战。比如无人机的拍摄功能,因无人机在拍摄过程中容易出现抖动情况,受抖动及环境因素影响,画面会出现电磁波干扰、噪声污染及模糊不清等情况与问题。

1 OpenCV概述

1.1 OpenCV的基本特点

OpenCV实际是经开发而得到的C源码,以Intel处理器指令集为基础而专门开发的优化代码,不仅有统一的功能定义与结构,而且还有便捷且灵活的借口,超强的矩阵计算能力等,除此之外,诸如MacOS、linux、windows等平台,其均支持。

(1)对外开放的源代码,无论是商业开发,还是个人开发,均免费;

(2)对于大多C或C++编译器均支持,在各个平台间,其能够顺利、高质量移植,比如C++Builder、VC.NET2005及VC++6.0等;

(3)有较好的跨平台性,能够移植,能在诸如MacOS、windows等平台上运行;

(4)OpenCV全部的算法均以封装在IPL的动态数据结构为基础,拥有高灵活性,除此之外,超过50%的函数在进行汇编时,或者是在设计时,均能以Intel处理器指令集为对象,不断优化代码;

(5)拥有强大的矩阵计算能力,在图像处理能力方面也很突出,因而能够大幅减少开发时间与精力投入,对于程序开发质量与效率有提升作用;除此之外,还能提高整个程序运行的稳定性与可靠性;

(6)接口方便、灵活,包含C/C++函数达300多个,有着比较高的代码效率;对于高层API同样可提供支持;能独立使用。

1.2 OpenCV的模块分析

针对OpenCV来讲,其主要包含如下模块

1.2.1 CV模块

其在整个OpenCV体系架构中,乃是最基本的OpenCV函数,包含有诸多内容,比如三维重建、模式识别、运动分析与对象跟踪、图像处理、相机标定及结构分析等。

1.2.2 CVAUX模块

其主要包含的函数有HMM、PCA及部分三维跟踪等。

1.2.3 CXCORE模块

此库包含有全部OpenCV运行状态下的部分最核心且最基本的数据结构、数组的基本运算、矩阵等;除此之外,其还囊括有用于出错处理的部分函数。

1.2.4 ML模块

针对此模块来讲,其实为一个机器学习库,包含部分用作回归、分类与数据聚类的函数与类。

1.2.5 HIGHGUI模块

对于此图像界面函数而言,其主要包含系统调用函数、图像视频I/O及图像用户窗口GUI等。

2 OpenCV的体系结构分析

2.1 数据结构分析

OpenCV设计了许多比较常用、最基本的数据类型,如多维柱状图混合类CvHistogram、图像类的Ipl Image,除此之外,还有可变集合类的CvSet、矩阵类的CvMat等。针对此些数据类型而言,其中比较常用的便是Ipl Image类,先对其展开深入分析与研究。

Ipl Image类的基本定义为:

typedef struct_Ipl Image

{

intnSize;/*Ipl Image大小*/

intID;/*图像头的版本*/

int nChannels;/*通道数,依据各种颜色的位图支持1,2,3或4个通道*/

int alpha Channel;/*被OpenCV忽略*/

char color Model;/*被OpenCV忽略*/

char channel Seq;/*同上*/

int data Order;/*0-對颜色通道进行交叉存取,1-处于分开状态的颜色通道.只有cvCreate Image能创建交叉存取图像*/

int align;/*图像行排列(4or8).OpenCV忽略它,用width Step代替*/

int width;/*图像宽像素数*/

int height;/*图像高像素数*/

int Border Mode;/*边际结束模式,被OpenCV忽略*/

int BorderConst;/*同上*/char*imageData Origin;/*指针指向一个图像数据结构(并非必须排列),主要是为了对图像内存分配做准备*/

}Ipl Image;

2.2 数据存取方式

针对OpenCV数据来讲,其在具体的存取方式方面,主要可划分为三种,其一为带指针直接存取,其二是直接存取,其三为间接存取。针对间接存取而言,其有着比较慢的速度,而对于另外两种来讲,则有着比较快的速度,先以带指针直接存取的方式为对象,对其进行深入剖析。

设定图像的基本定义是Ipl Image*img,图像元素的类型不同,则其主要有如下存取方式:(1)针对那些8位且单通道的图像,其在具体的像素IN)存取上,主要可进行如下操作:

int step=img->width Step/sizeof(uchar);

uchar*data=(uchar*)img->image Data;

I(i,j)~data[i*step+j];

(2)针对8位且3通道的图像,其像素I(i,j)存取上,主要可开展如下操作:

int step=img->width Step/sizeof(uchar);

int channels=img->n Channels;

I(i,j)R-data[i*step+j*channels+2];//RED分量

3 OpenCV图像预处理技术在无人机视频的应用

3.1 无人机视频预处理系统构成

针对无人机视频预处理系统而言,其由其部分构成,分别为图像融合操作、图像平滑处理、帧图像初始化、无人机视频获取、图像增益处理、图像滤波处理与程序读入视频文件。见图1所示。

首先,系统会根据实际情况,对无人机实时采集到的视频图像实时初始化处理,其次,针对那些已经完成初始化的帧图像,则采用图像融合算法、双边平滑算法、高斯滤波算法、5领域像素平均算法对图像实施融合、增益、平滑及滤波等处理,因而所输出的图像序列有着比较高的质量。

3.2 算法原理

3.2.1 高斯滤波算法

本文选用高斯滤波算法,获得关于图像的滤波功能,函数声明:void Gaussian Blur (Input Array srcl,0utput Array dstl,Sizeksize,double sigma X,double sigma Y=0,int borderType=BOR-DER_DEFAULT)

在此声明中,border Type所表示的是边缘点插值类型;Ksize代表的是滤波器模板大小;srcl代表的是输入图像;sigmaX所代表的是横向滤波系数,而sigmaY所代表的是竖向滤波系数;srcl表示的是输入图像。

所谓高斯滤波,从根本上来讲,就是对原图像的各像素实施滤波,而与之相对应的像素滤波之后所得到的值,实为依据其相邻像素,乘以1个滤波器模板,即仅需将高斯滤波器模板弄清楚便可。需要指出的是,因本文需要进行处理的是二维帧图像,为了能够做到最简化,設定sigmaY等于sigmaX,然后所得到的模块大小ksize,便可用如下公式进行表示:(1),其中,i所表示的是行,而j表示的是列;而针对ksize来讲,其高与宽须为奇数,而α与β相加之和需为1。

3.2.2 双边平滑算法

对于双边滤波而言,其实为一种边缘平滑且简单的非迭代方案,公式为:

与值域与域过滤相结合,便可以被表示为双边滤波,如果处于平滑区域中,那么即便是一个小的且处于邻域状态的像素值,也会是相似的;还需要指出的是,在实现双边滤波器过程中,实为一个比较典型且标准化的域滤波,也就是平均掉小、弱相关像素值见存在不同而引起的噪音。从根本上来讲,其不仅可以运用双边平滑算法,而且还可根据实际情况,选择高斯平滑等算法来进行图像的平滑处理。

3.2.3 图像融合操作

现阶段,已经出现了许多用于图像融合的算法,而在现实应用领域,可依据实际情况及需要,选择最实用、恰当的算法。本文通过add Weighted函数的应用,使增益处理与平滑处理后所得到的图像融合在一起,并借助于给增益处理与平滑处理的图像赋予的各种权值,最终获得各种效果的图像。

3.3 编程环境下算法的实现

本文借助于遍历图像像素点方式,对由无人机所采集到的实时图像进行图像滤波、平滑、融合等操作。为了最大程度提高图像的处理速度,减少对相关硬件的过渡依赖与消耗;除此之外,还能储存实时图像序列,储存格式为Mat,运用指针对图像进行储存,然后用5领域像素、双边平滑以及高斯滤波等算法来处理,算法的步骤为:

(1)构建一个Video Capture结构,将无人机视频导入;

(2)用capture.set对开始与结束帧进行设置为了能够使整个视频播放有着比较好的流畅性,在各帧间,需根据实际情况,适当的增加时延,而时延值与帧率之间存在紧密关联;另外,针对帧率来讲,可借助于函数capture.get()来得到;

(3)对Open CV高斯滤波函数GaussianBlur()进行调用,此外,还调用融合函数add Weighted()、双边平滑函数bilateral Filter()等;

(4)对named Window("")进行调用,构建窗口,建立imshow()函数,将帧图像显示出来,外加设置一定延时,便能获得比较流畅的视频图像。

(5)对步骤(1)和(4)进行循环,便能对无人机采集到的视频信号进行连续处理。

3.4 实验结果及分析

运用Microsoft Visual Studio2010编程软件进行系统的整体开发,然后与Open CV库函数相搭配来实现;针对OpenCV库函数来讲,其能够为开发工作提供大量可以直接调用的函数,因而能够将重新封装函数花费的时间省去,此外,OpenCV还能提供以video文件、实时摄像机帧提取函数为基础对象的图像处理算法。因而能够最大程度降低开发难度,缩短开发周期。本文经过多次试验得知,当权重值为0.4或者0.6时,能得到最好的图像融合效果。

4 结语

综上,本文以OpenCV库函数为基础,在无人机实时视频处理当中,应用了图像增益技术、双边平滑算法及高斯滤波算法等,使得原本对视频画面造成影响的噪声得以消除,还实现了像素增益与画面的平滑,因而最终得到了比较美观、清晰的视频图像。

参考文献

[1]孙颖,丁庆生,陈静.一种基于OpenCV的飞机跑道及地平线检测算法[J].现代电子技术,2009,32(03):190-191.

[2]张永利,徐超.基于OpenCV图像对准技术在倒车定位系统中的应用[J].信息技术,2014(04):185-187.