基于VFW软件开发包实现声呐图像压缩存储系统的应用方案

描述

作者:董琎琎;金雪;夏伟杰;袁春辉

针对声纳系统图像实时存储过程中的大数据量问题,本文提了一种声纳视频压缩存储的工程实现方法。采用MPEG-4视频编码标准[1]及Xvid编码器,基于VFW数字视频软件开发包,在VS2010开发环境下实现了对声呐视频的高压缩率、高压缩质量的实时压缩存储。经过实际测试,本文设计方案能够满足成像声纳系统在100m满量程条件下,最高帧率15Hz的应用需求。

引言

声纳成像在海洋资源开发和海洋防卫等方面有着重要的意义,具有作用距离远、直观显示观测区域状况和识别目标等特点,被广泛地应用于军事、经济领域。在成像声纳系统的设计过程中,为了实现对目标更为细腻的刻画,系统的角度和距离分辨率指标往往都很高。本文设计的成像声纳的相关技术指标为:量程100m,视角90°×20°,波束数538,波束间距0.17°,量程分辨率:2.5cm,最高帧率:15Hz。在工程实践中,我们需要对声纳的实时画面进行存储,以便后期的查阅和分析,在15Hz的帧速率下,每小时产生的图像需要占据的存储空间为3600X[15X(100X40X538)]Byte=116.2085GB,对系统存储能力的要求将会非常苛刻,亟需引入图像压缩技术来解决这一问题。

1 VFW软件开发包

VFW(Video for Windows)是微软推出的关于数字视频的一个软件开发包,它围绕AVI文件标准,推出了一整套完整的视频采集、压缩解压缩、回放和编辑API。它可以实现从传统模拟视频源得到视频剪辑,还可以实现影像压缩和影音播放。由于AVI文件格式在数字视频技术中被广泛使用,因此VFW在将来一段时间内仍会有较高的实用价值。用户不必专门安装VFW,Windows系统本身就包含了VFW技术。安装Windows的时候VFW所需的相关组件就会同时被安装上。VS2010中提供了VFW的头文件Vfw.h和库文件Vfw32.lib。在VS2010开发环境中调用VFW,只需要将Vfw32.lib加入工程,并在主对话框源文件HAICADlg.cpp中包含Vfw.h文件。

2 声呐图像压缩存储的实现

要进行声呐图像压缩存储,在选择了Xvid编码器的基础上,还要进行一系列操作,主要包括:AVI文件的初始化、压缩参数设置、压缩前后位图格式设置、判断压缩支持、图像压缩和存储。软件实现流程如图 1所示。

分辨率

2.1 压缩前位图格式的设置

本文成像声呐系统无需进行视频采集,而是直接接收前端信号处理FPGA上传的数据。湿端设备上传的数据是波束形成后得到的,每个距离点处有538个波束,距离像上的点数由探测量程决定,距离分辨率为2.5cm。图像数据是一个矩阵。

如果直接显示图像数据,那么在屏幕上为一个矩形,和实际探测区域为90°视角的扇形区域不一致。为了符合人们的观察习惯,需要把图像进行坐标转换,将矩形视图转换成扇形视图,如图 2所示。除此之外,波束形成产生的是灰度图像,每个像素点由一个8bit的像素值表示,即0~255的灰度值。为了提高人眼对图像的分辨能力,在显示的时候需要将灰度图像映射成彩色图像,即每个像素点由三个8bit的值表示,分别为RGB强度值。这种彩色并非真正意义上的彩色图像,故而称之为伪彩色。图 3所示为伪彩色映射的bone、cool、copper、hot、jet五种映射方式。

分辨率

 

压缩前位图格式与转换后的扇形图像有关,它保存的是扇形图的位图信息,包括图像的宽度、高度、大小、每个像素点的位数等。最终显示的扇形图的宽和高与图像是否处于缩放状态有关。在MFC工程的头文件中定义了一个40字节的专有结构来保存压缩前的位图格式,根据图像是否处于缩放状态进行赋值。

2.2 压缩参数设置

该部分定义了一个COMPVARS结构的对象保存编码器的压缩参数。开发者可以自己手动设置该结构体中的各个成员变量,前提是你必须了解使用的编码器的参数值;也可以弹出一个对话框让用户选择编码器,如图 4所示,同时初始化COMPVARS结构。

本文中采用第二种方法来设置压缩参数。ICCompressorChoose()函数中的uiFlags参数可供开发人员进行不同应用的开发,可以设置为如表 1所示的五种值。

本文选择MPEG-4 Xvid编码器。如果用户成功选择了一个编码器,该函数返回TRUE,否则返回FALSE。通过一个指向COMPVARS结构的指针返回用户通过对话框选择的编码器的压缩参数信息并使用该压缩参数进行图像压缩。

2.3 压缩后位图格式的设置

在压缩前位图格式和编码器的压缩参数都已知的情况下,可使用ICCompressGetFormat宏来设置压缩器的输出格式,根据输入位图格式和选择的编码器的压缩参数,返回一种编码器支持的输出位图格式。传址调用要先定义一个结构的指针,作为函数的第三个参数。函数返回时,指针指向的结构就包含了编码器的输出位图格式。

在VS2010中调试程序时,通过变量监视查看到输出位图的信息头,如图 5 编码器输出位图格式所示。由此可见Xvid编码器将24位RGB格式仍然压缩成24位RGB格式。

2.4 判断压缩支持

在进行图像压缩之前需要判断是否支持该压缩方式。ICCompressQuery宏用来判断选定的编码器是否支持输入格式或者是否能够将输入格式压缩成输出格式,如果支持则返回ICERR_OK。使用时直接将设置好的压缩器句柄、输入位图格式、输出位图格式当作实参传递给ICCompressQuery宏即可。

这里定义了FrameStart函数来完成帧序列压缩的资源分配,为使用帧图像压缩函数做准备。它有两个参数:一个为编码器的压缩参数,另一个为输入数据的位图格式。初始化成功返回TRUE。具体形式如下所示:

BOOL ICSeqCompressFrameStart(

PCOMPVARS pc, //压缩参数

LPBITMAPINFO lpbiIn //输入位图格式 );

2.5 图像压缩与存储

这里定义了ICCompress函数来完成单帧图像的压缩,并定义了一系列辅助函数来完成资源分配、资源释放和压缩后数据的存储地址返回。每压缩完一帧数据,要先设置流的格式信息,然后就可以将压缩后的视频数据写入AVI数据流。压缩后的AVI文件通过普通的视频播放器解压播放,显示画面如图 6(b)所示,与干端显控软件实时显示的压缩前的声呐图像基本一致,如图 6(a)所示,人眼几乎看不出差别,压缩率达到10倍以上。由此可见,MPEG-4编码标准图像压缩质量高,同时压缩率也高。

3 声呐图像压缩效果评价

3.1 压缩率

设计了两种方法比较不同图像数据的压缩率,一种将标准正弦信号直接作为声呐接收的回波信号,进行信号处理以及波束形成后,干端实时接收显示的图像作为压缩源,另一种将真实水域中声呐接收到的回波信号,进行信号处理以及波束形成后,干端实时接收显示的图像作为压缩源。为了提高结果的可信度,在不同水域情况下压缩比较,得到的声呐图像的压缩率如表 2 所示。

分辨率

从表中可以看出,图像数据帧与帧之间、像素点与像素点之间冗余度越大,图像的可压缩程度越大,压缩率越高。总体来说,本文设计的成像声纳视频压缩存储方法的标准压缩率达到10倍以上,满足系统的存储需求。

3.2 压缩质量

目前视频图像压缩质量的检测方法一般采用峰值信噪比(PSNR)作为图像质量客观评价的指标。图像质量评价标准是针对单帧图像而言的,因此可以将视频图像分解为多个静止图像,通过计算单帧图像的峰值信噪比来得到视频图像的峰值信噪比。给定一幅大小为M×N的数字化图像

分辨率

在Matlab中根据公式(1)和(2)计算单帧图像的峰值信噪比,得到结果PSNR=37.1646 。通常情况下,PSNR值高于28,则待测图像和参考图像差异不明显,当高于35时,则人眼很难看出两幅图像的差异。由此可见,本文设计的成像声纳视频压缩存储方法在保证一定的压缩比例的同时,得到的图像压缩质量较高,可以基本无失真重现测试场景,以保证后期对数据的复查和分析。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分