2016年9月27日 航空航天和国防

VxWorks上的高性能信号和图像处理

作者:Ka Kay Achacoso

Kakay照片

VxWorks平台包括英特尔集成性能基元(IPP)。这组库用于信号处理、图像处理、视频处理、密码学和其他涉及大向量和矩阵的计算。Intel IPP使VxWorks应用程序包括航空照片中的文本和目标检测、自动化制造中的机器视觉、飞机中的音频信号处理、信号的高速加密和解密。

Intel IPP库旨在利用英特尔流式SIMD扩展(SSE)和英特尔高级矢量扩展(AVX)指令。这些指令处理128,256和512位数据中的单个指令,并加速矩阵处理。

为了优化英特尔架构,VxWorks平台还包括英特尔C ++编译器(ICC)。VxWorks库、内核、驱动程序和应用程序都可以用ICC为Intel架构构建。

最近,VxWorks平台升级到ICC 16版和Intel IPP 9版支持。这个新版本的英特尔IPP包含优化的大多数图像处理,颜色转换,和计算机视觉功能的SSE 4.2和英特尔AVX2。下面详细介绍Intel IPP v9的一些特性和这个版本升级的好处。

图像处理

在机器视觉中,处理的第一步通常是降噪和边缘检测。一旦边缘被识别出来,计算机就可以通过一系列的模式识别步骤来识别物体、文本和人脸。英特尔IPP图像处理库有一套功能,支持机器视觉的一些简单步骤。

我从一张600万像素的飞机图像开始,用Intel IPP的计算机视觉库在VxWorks中查看边缘检测的结果。典型的高清(HD) 1920 × 1080的图像是200万像素,所以我使用的图像是典型高清图像的3倍大小。图1显示了每个Intel IPP矩阵转换的结果。第一步是将彩色图像转换为灰度图像。然后使用5×5低通高斯滤波器去除图像噪声。最后,利用Canny边缘检测函数创建边缘检测图像。

图一,airplaneIppiProgression_fragmentsmall

图1- 使用Intel IPP的Canny Edge检测。显示的图像是600万像素图像的较小版本的一部分。从左到右:原始图像,灰度转换后图像和低通滤波器,最终边缘图像。

SNIP20160927_5

图1中的图像是600万像素图像的减小的飞机图像的片段。单击以下缩略图图像以查看具有其边缘的更大版本。边缘检测看起来像原始图像边缘的良好表示。

开发时间的优势

作为比较,我尝试复制边缘检测功能,而不使用Intel IPP。Intel IPP中使用的边缘检测算法是Canny算法。这维基百科页面给出了算法的良好描述。

英特尔IPP的第一个明显优势是实现边缘检测所需的开发时间的大幅减少。即使在互联网上搜索了现成的Canny Edge检测C库,它仍然花了很多时间才能让应用程序正确地检测到边缘。我发现的一个类似的图书馆原来有几个错误。为了解决它们,我最终研究了深度的Canny Edge检测算法,以修改代码以遵循实际算法。结果源代码几乎无法从其原始来源识别,尤其是当我应用VxWorks C应用程序的典型低级阵列访问优化时。

性能优势

英特尔IPP的第二个明显优势是其性能。在顺序处理中,自我写入处理在一个像素中处理了一个像素。应用程序在单个处理器核心上运行,在单个VxWorks任务上,并未使用Intel AVX指令。它将增加或增长我的开发时间,以重新制作代码以利用VxWorks多核处理和英特尔AVX。

我在一个核心i7-4700EQ处理器上运行VxWorks,它来自4th运行在3.4GHz的新一代英特尔核心处理器系列。这个处理器有AVX-2扩展。对于一个没有很多边缘需要检测的600万像素的图像,VxWorks上的Intel IPP从彩色图像到边缘图像花了28.8毫秒。这在Intel IPP上是35帧每秒。相比之下,我在VxWorks上的顺序处理实现需要1.4秒,即每秒0.7帧——相差一到两个数量级。

我还在早期版本的Intel IPP上运行了相同的图像处理应用程序。英特尔ipp8耗时119毫秒,而英特尔ipp9耗时28.8毫秒。因此,随着从英特尔IPP 8升级到英特尔IPP 9,我看到性能有了很大的提高。

FIG2  -  AirplanperFormance.

图2。对比图像处理速度为600万像素的图像

一个优势写的Canny边缘检测算法作为一个C应用程序我自己是能够看到Canny边缘检测算法的一步一步的过程。该算法首先生成一个梯度幅值图像,这是一个显示与相邻像素颜色强度变化幅度的图像。较大的震级大致显示了边缘的位置。然后使用两个方向梯度图像,使用边缘细化过程称为非最大抑制。然后根据高阈值和低阈值将边缘细化图像中的梯度分为强边缘、弱边缘和无边缘。在图3的图#5中,红线表示强边,蓝线表示弱边。在一个称为滞后阈值的过程中,只有当弱边接触到一条与强边相连的线时,所有弱边才被识别为真边。

图3中的图像是减小尺寸图像的片段。单击以下缩略图图像以查看更大版本的边缘图像。

就知道——airplanesmallraster_progressionfragment

图3。从顺序处理C应用中检测Canny Edge检测。从左到右,顶行:原始图像,灰度转换,渐变图。底行:边缘变薄,边缘分类强弱,最终边缘图像使用滞后阈值

Snip20160927_11

使用等效的阈值,Intel IPP应用程序和顺序处理VxWorks实现产生了大致相同的边缘。最大的区别在于它的性能和开发时间。

值得注意的是,在VxWorks上使用Intel IPP会减少应用程序堆栈的大小。在Canny边缘检测算法的滞后阈值阶段,其中弱边缘与强边缘接触进行跟踪,序列处理实现使用递归跟踪程序。即使在最小化跟踪例程中的参数列表之后,对于大型稠密边缘检测图像,应用程序堆栈很容易占用比Intel IPP应用程序多5倍的空间。

边缘密度

Canny Edge检测算法中的滞后阈值处理过程涉及大量的线路跟踪。应用程序中的边缘越多,申请需要越长。这是另一个图像,略小于5.1百万像素,但有更多的边缘来识别。

图5显示了具有许多边缘的图像片段。红线表示检测到边缘的位置。

Fig5 - cockpitIppi_edgeOverlayColor - fragment

图5。500万像素的驾驶舱图像的一部分,边缘更密集

Snip20160927_10

单击缩略图查看图像的放大版本。

虽然全尺寸的座舱图像比全尺寸的飞机图像小18%左右,但小尺寸图像的帧率略低。所以处理帧率会受到图像内容的影响。

图像大小

通常使用机器视觉的应用,如航空测绘和自动化制造,对图像大小有不同的要求。我运行了VxWorks边缘检测应用程序,对比了许多其他图像大小,看看它对性能的影响。

FIG6  - 埃迪迪迪迪斯(Edisonippi_EdgeOverlayColor)

图6。英特尔爱迪生arduino板。0.5百万像素的图像在7.1毫秒的vxworks上以7.1毫秒处理。(点击图片更大的版本)

Snip20160927_12

图7。空中地图的一部分。全尺寸图像是23.2毫秒的Intel IPP在VxWorks上处理了2百万像素。(点击图片更大的版本)

图8显示了英特尔IPP图像处理对各种图像尺寸的性能。作为一般指南,以更高的帧速率处理较小的图像。但是,实际帧速率取决于图像内容。

Fig8——图象尺寸

图8。使用VxWorks在Intel ipp9上实现各种图像大小的帧速率

信号处理

到目前为止,我专注于英特尔IPP的图像处理库。VxWorks还附带Intel IPP信号处理库。

图9显示了一个音频信号。利用Intel IPP快速傅里叶变换(FFT)程序在VxWorks上对信号进行处理,将音频信号转换为如图所示的频率剖面。在语音识别中,应用程序的下一步是通过模式匹配算法来识别音素。一系列的音素可以识别为一个单词。

图9  - 信号分析

图9。基于Intel IPP的VxWorks信号处理。左侧:音频信号。右侧:频率剖面。(点击图片更大的版本)

如果我收集FFT例程的性能度量,我无疑会发现Intel IPP 9将表现出与Intel IPP 8相同的性能改进。信号处理库的详细性能比较可以作为不同博客条目的主题。

你可以找到更多关于VxWorkshttp://www.windriver.com/products/vxworks/。Intel ICC和Intel IPP是每个VxWorks平台的一部分。风河继续提供用于VxWorks的高度优化的软件库,包括那些在Intel架构上的。

以前的Wind River最新的VxWorks产品为嵌入式开发带来了Java的好处
下一个SAE航空航天系统和技术大会2016年