基于嵌入式平台的结构光检测算法的实现与优化

2018-03-01 03:22
单片机与嵌入式系统应用 2018年2期
关键词:皮带嵌入式灰度

(天地(常州)自动化股份有限公司,常州 213015)

引 言

煤炭生产中的采煤工作面由于照度低、粉尘大、水汽大,可见度极差。在这样的恶劣环境下,想要通过机器视觉实现对运输皮带上的物体特征进行检测、识别,就必须借助于外部辅助手段。本文借助线性结构光照射在皮带上,通过视觉传感器采集皮带图像,检测皮带上的结构光线型特征来识别皮带的特征。这里,算法是否能够准确地识别皮带上的结构光,是解决问题的关键技术之一。

Hi3516A是海思半导体针对高清IP Camera产品应用开发的一款专业高端SoC芯片[1]。它除了具有灵活的高性能ARM Cortex-A7架构以外,还具有高性能的智能分析加速引擎IVE。IVE主要作用是将智能视频分析算法运算中频繁调用且消耗资源较大的主要算子实现硬化,以减少底层运算对CPU资源的消耗,节省CPU资源来做更多的智能分析应用。本文以海思Hi3516A平台上结构光检测算法为例,详细介绍嵌入式平台上视频分析算法的实现与优化方案。

1 算法实现

1.1 算法原理

结构光检测算法包括图像预处理、图像分割、自动提取ROI(ROI:Region Of Interest的缩写,图像处理中的术语“感兴趣区”,就是在要处理的图像中提取出要处理的区域)、提取光条中心线4个模块。

由于采煤工作面照度低、粉尘大、水汽大,加上光照不稳定、物体本身的反射、成像噪声、采样误差等因素[2],采集到的现场视频图像往往夹杂大量噪声,所以在对图像进行算法分析之前,首先对图像进行处理,主要是灰度化和滤噪处理。

经过预处理后的图像,噪声得到明显抑制。图像分割模块通过阈值将结构光中心带从预处理后的图像中粗略提取出来。图像分割研究的重点在于阈值的选取,通过选取合适的阈值,将结构光中心光带提取出来。

嵌入式系统由于性能限制,算法设计时要在保证准确度的基础上尽可能减少运算量,以保证算法的效率。为了减少算法运算量,加快算法的运算速度,本文设计了自动将皮带监控图像上结构光所在区域提取出来的模块—自动提取ROI模块。

由于皮带特征的识别是基于光条中心线形变特征的,所以提取结构光条图像后,对光条进行中心线提取。完整提取结构光条中心线,即实现了结构光检测算法。

1.2 实现方案

1.2.1 图像预处理实现方案

为了保护图像的边缘信息,本文采用中值滤波消除图像噪声。中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值,其实现方法为通过从图像中的模板窗口取出奇数个数据进行排序,然后用排序后的中值取代要处理的数据即可。

1.2.2 图像分割实现方案

出于对算法自适应性的考虑,本文选用改进的Otsu法自动选取分割阈值。Otsu法又叫大津法或者最大化类间方差法,是一种图像灰度自适应的阈值分割算法。大津法按照图像上灰度值的分布,将图像分成背景和前景两部分,前景就是需要按照阈值分割出来的部分。背景和前景的分界值就是所出阈值。遍历不同的阈值,计算不同阈值下对应的背景和前景之间的类间方差,当类间方差取得极大值时,对应的阈值就是大津法所求的阈值。

遍历t使得φ(t)取得极大值时,获取的阈值即为最佳阈值。使用此阈值将图像进行分割,即可得到结构光图像。

1.2.3 提取ROI

由于拍摄现场摄像机与皮带位置是相对固定的,所以提取ROI模块只要在算法运行之初运行一次即可定位ROI区域。

提取ROI区域的算法处理思想为:

① 遍历步骤1.2.2中获取到结构光图像,求取结构光图像靠近皮带边缘的两个端点A和B,并连线;

② 由于皮带重力作用,结构光照射在皮带上有一定的弯曲弧度,求取偏离①中连线最远的点C;

③ 过C点做AB连线的平行线MN,其中M、N分别为平行线与皮带边缘的交点;

④ 连接AM、BN,则由AB、BN、NM、MA四段线段构成ROI。

1.2.4 提取光条中心线

常用的光条中心的算法主要有灰度重心法、极值法、阈值法、曲线拟合法、骨架细化法等[6]。考虑皮带视频中结构光亮度很高,与皮带灰度差别大的特点,本文采用极值法与阈值法相结合的方法获取光条中心。这种方法实现简单,运算量与单一的极值法或者阈值法相比,算法运算量更小,且精度更高。

其算法原理为:依次扫描ROI图像每列灰度,寻找该列灰度最大值,当找到的最大值超过设定阈值时,跳到下一列继续寻找。最后由每列最大值构成的图像即为光条中心线。

至此,运输皮带上的结构光被检测并提取中心线。结构光中心线的形变特征用来识别皮带上特定特征变化。

2 算法优化方案

为了保证算法在嵌入式平台上运行的实时性,需要对算法进行多级优化。上述算法开发过程中已经从算法实现的角度完成算法级优化,下面将逐一介绍其它层次的优化方案。

2.1 代码级优化

2.1.1 宏定义设计-使用宏定义常量替换只读变量

在嵌入式系统中,宏常量采用立即数寻址方式。而只读的变量占据存储空间,需要访问内存,相比宏常量寻址而言效率要低。

2.1.2 数据结构设计优化

数据结构是程序设计的基础。结构体是程序设计中最常用的数据结构。结构体定义时成员的排序直接影响到嵌入式CPU的执行效率,因此结构体定义时通过指定对齐方式、合理设计成员顺序、填充部分域、采用位域构造结构体的手段对算法中的数据结构进行优化。

2.1.3 函数设计优化

本文在算法设计时,充分考虑需要合理划分模块的层次结构,以提高内聚性,降低耦合度。在嵌入式平台上通过下面两个手段提高函数调用效率。

① 在函数设计时,嵌入式平台上的ARM处理器会利用寄存器来传递参数以提高访问效率。但ARM体系寄存器传递的参数最多4个,当多于4个时,剩余的参数需要用栈传递,调用性能大大下降。因此当参数之间紧密相连且通常需要在多个模块中联合使用时,应对参数进行封装,以便于参数的传递和变量的管理。

② 采用内联函数定义部分调用频繁的简单函数。由于内联函数只是在需要用到的时候才展开,取消了函数的参数压栈,减少了调用的开销,因此其执行速度比一般函数要快。

2.2 硬件级优化

本文的算法基于海思Hi3516A平台进行嵌入式移植与优化。Hi3516A拥有海思独创的IVE(即智能视频引擎)单元。IVE是将部分智能算法场景中常用的最消耗CPU资源的复杂计算硬件化,配合少量主控CPU参与即可实现各种智能算法。IVE硬化算子的出现,带来CPU运算性能的提升,更低的产品功耗和更低成本。

本文使用的硬件级优化主要是指使用海思提供的IVE算子取代部分算法子模块的实现,如图像滤波采用HI_MPI_IVE_Filter算子,图像的膨胀采用HI_MPI_IVE_Dilate算子,图像的腐蚀采用HI_MPI_IVE_Erode算子,图像的阈值化采用HI_MPI_IVE_Thresh算子等。

3 实验结果

为了更好地观察算法实现与优化的效果,本文采用1280×960分辨率的视频作为输入源,在海思Hi3516A平台上进行测试。

3.1 算法实现结果

皮带撕裂算法检测结果图1所示。算法在运行中,使用蓝色矩形框实时标出皮带撕裂的位置。

图1 皮带撕裂检测结果图

3.2 算法优化结果

表1为算法从PC移植到嵌入式平台后,代码级、硬件级优化前与优化后的算法处理时间对比。

通过上表数据可以看出,经过代码级优化和硬件级优化,算法处理一帧高清视频帧的时间提高了将近1倍。

表1 嵌入式平台上算法优化前后处理时间对比表

结 语

本文从算法的原理、算法设计与实现、算法移植与优化几个方面,结合一个高清的煤矿工作面现场皮带视频阐述了基于嵌入式平台的视频分析类算法的开发过程。实验数据表明,经过优化后算法对高清视频的处理速度仍然无法达到25 fps。

[1] 华为.Hi3516芯片手册,2015.

[2] 范建华,杨秋翔,安雁艳,等.嵌入式系统中的快速光条中心提取算法[J].计算机工程与设计,2014(11):3808-3812.

[3] 王晓霞,蒋东方,林智伟.嵌入式系统实时中值滤波的高效实现[J].微电子学,2012(12):852-856.

[4] 王磊,段会川.Otsu方法在多阈值图像分割中的应用[J].计算机工程与设计,2008(6):2844-2846.

[5] 张春明.基于线激光辅助的皮带撕裂视觉检测技术研究[D].秦皇岛:燕山大学,2012.

[6] 李丹,耿楠,亢娟娜.复杂背景下光条中心提取算法研究[J].计算机应用与软件,2013(3):271-173,314.

[7] 朱贵锋,金施群,卞铭.十字线结构光光条提取方法的研究[J].计量测试与检定,2006(3):12-14.

[8] 嵌入式系统程序可移植性设计及性能优化[EB/OL].[2017-11].http://www.doc88.com/p-1488573940259.html.

[9] 史子旺,叶超群,蔡建宇.嵌入式LINUX内存使用与性能优化[M].北京:机械工业出版社,2009.

徐辉(工程师),研究方向为智能视频分析在嵌入式系统上的应用。

猜你喜欢
皮带嵌入式灰度
采用改进导重法的拓扑结构灰度单元过滤技术
基于灰度拉伸的图像水位识别方法研究
搭建基于Qt的嵌入式开发平台
基于最大加权投影求解的彩色图像灰度化对比度保留算法
嵌入式软PLC在电镀生产流程控制系统中的应用
基于灰度线性建模的亚像素图像抖动量计算
松紧带和皮带
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
皮带运输机皮带撕裂原因及防治探析