RZ/A2M DRP实现二维码编码格式的快速检测

描述

在上一篇文章中我们介绍了如何使用RZ/A2M和它独有的DRP技术实现工业自动化中的目标物体检测与追踪。现在让我们看一下RZ/A2M的DRP如何实现在8ms时间内检测5中不同编码格式的二维码。

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上非常流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。除了这种常见的QR Code之外,还有一些其它编码格式的二维码,例如Micro QR Code, DataMatrix, AZTec和汉信码等等,因此要求扫码枪能够识别多种不同编码的二维码。 常规的操作是循环调用不同解码器,逐一用不同的解码器进行检测和解码,但导致的问题是解码时间不稳定性与解码时间偏长,如果能够在解码之前快速识别出二维码的编码格式,然后有针对性的调用对应的解码器,则会大大提高解码效率。

瑞萨的RZ/A2M微处理器可以利用其独特的动态可配置处理器(DRP)完美解决这一问题,实现了1280x720(1百万)摄像头输入时,在8ms时间内完成QR ,Micro QR, DataMatrix, AZTec 和汉信码5种编码格式的快速识别,下面让我们看一下DRP是如何实现的。

以下是示例中用到的5种二维码的图例,我们将利用DRP的图像处理加速功能识别每种编码格式的特征

cpu

我们将通过9个步骤的数据处理,逐步从MIPI接口输入的图像数据中提取出我们希望得到的特征标识。

在这9个数据处理环节中,大部分由DRP硬件加速模块处理(蓝色),少量过程由CPU进行处理(绿色),在此期间我们可以看到硬件DRP处理和软件CPU处理之间的灵活搭配与无缝对接。

cpu

步骤1

为了加快图像的处理速度,我们会先载入一个Bayer2GrayThinning的DRP加速库将图像的分辨率降采样为原始大小的1/4,同时完成图像格式从Bayer到灰度图的转换并统计每帧图像的亮度值,我们会将这个亮度的统计结果反馈给CMOS传感器用于调整自动曝光参数。

cpu

由于Bayer2GrayThinning库只占用1个Tile的DRP硬件资源,在此步骤中利用DRP的多Tile并行处理特性将每一帧1280x768的图像分成6个1280x128的区域,由6个DRP处理单元进行并行化处理,这样处理速度可增加为原来的6倍,而且每个处理单元内部的像素级处理也是并行化的。

cpu

利用DRP的这两个并行化特性,我们可以在0.6ms的时间内完成1帧1280x768分辨率图像的处理,包含0.2ms的DRP库载入时间和0.4ms的图像数据处理时间。经过步骤1的处理我们得到一个320x192的灰度图。

步骤2

得到灰度图后我们加载一个binarization_adaptive的DRP库,将图像转换为只有0x00和0xFF两种颜色的黑白图像。这个DRP库可以根据每个8x8像素区域的灰度值平均值动态计算二值化的阈值,这样可以有效解决不同亮度的场景中二值化阈值该如何选择的问题。

cpu

我们可以设置二值化转换的参数,控制输出图像以反转方式输出,即二维码图像中黑色部分输出为白色,这样方便下一步对白色部分提取轮廓信息。步骤2的总处理时间是0.9ms左右,包含0.6ms的DRP库载入时间和0.3ms的图像数据处理时间。

cpu

步骤3

得到二值化图像后我们再载入一个Dialte的DRP库实现膨胀功能,其基本实现原理如下;

cpu

用3x3区块以步长为1像素扫描输入图像

扫描窗口中心点的新数据输出值为3x3范围内的最大值

实现效果:将白色扩展,吞并被包围的黑色区域

 可配置迭代次数,次数越多,白色扩展范围越大

经过膨胀处理后的图像中,包含二维码数据的区域基本被联通,形成一个包含整个二维码的大区域。总处理时间是0.4ms左右,包含0.2ms的DRP库载入时间和0.2ms的图像数据处理时间。

cpu

步骤4

此时我们对膨胀之后的图像调用openCV的FindContour方法,它将得到这一帧图像中所有高亮部分的外轮廓以及每个轮廓的最小外接矩形。我们会逐一判断轮廓的宽高比,面积,位置等信息,筛选出最有可能包含二维码的轮廓。如果条件不匹配则采集下一帧图像。此步骤由CPU实现,时间约为4ms。

cpu

图中带有旋转角度的矩形为二维码区域的轮廓,后面我们会将这个旋转的矩形调整为倾角为0度的图形,用于更精细的特征检测。而最小外接矩形的四个顶点坐标将被换算成原始输入图像的坐标,用于从原始图像中裁剪包含二维码的区域。

cpu

步骤5

为了保证二维码标识特征提取的精度,我们会从MIPI输入buffer中裁剪Bayer格式的原始二维码图像。此时我们载入一个bayer2gray_cropping的DRP库从MIPI buffer进行图像裁剪,裁剪的位置就是步骤4中最小外接矩形4个顶点在MIPI buffer中对应的坐标。

这个bayer2gray_cropping只占用1个Tile的硬件资源,它具备6个tile并行运行的能力,因此我们会用6个Tile的DRP并行处理。

此步骤的执行时间约为0.6ms,DRP的载入时间为0.25ms,执行时间约为0.35ms

cpu

步骤6

下图左侧为裁剪出的带有旋转角度的灰度图,其中4个绿色顶点可以从步骤4的轮廓信息得到。在此步骤中我们由CPU实现一个简易的Keystone和缩放功能,将4个绿色顶点中的有效图像映射到右侧的buffer中,这里的梯形校正只是简单抽取或重复原有像素点,不生成新的点,因此属于有损但快速的算法。更精确的算法可用使用DRP的仿射变换(affine)功能,但会消耗更多的时间。

cpu

步骤7

得到一个无旋转的图像后,我们重复步骤2中的binarization_adaptive处理,得到一个无旋转角度的二值化图像。这一步耗时约0.5ms

cpu

步骤8

此时载入FindContour DRP库,检测二值化后的二维码图像中所有高丽部分的轮廓,检测结果为图像中蓝色的矩形区域。

cpu

FindContour DRP库会输出每个轮廓的位置,大小信息。所有的轮廓信息将被保存起来用于下一步的二维码标识检测。此过程总耗时约1.4ms,包含0.4ms的DRP库载入时间及1.0ms的处理时间。

cpu

步骤9

此时我们已经得到二维码图像中所有轮廓的坐标信息,我们可以很容易的通过轮廓相对于二维码的对应位置,是否是正方形轮廓,是否包含对称的子轮廓,是否包含偏心的子轮廓等信息来判断出QR code, Micro QR code, 汉信码,Aztec code。

对于DataMatrix的检测,我们可以利用DRP运行时不消耗CPU负载的特性,在步骤8的DRP处理过程中(1ms的DRP执行期间)同时由CPU计算图像每行和每列的求和统计,这样可以让DRP和CPU的处理也并行起来。

让我们回顾以下以上9个步骤的处理:

cpu

我们可以在8ms的时间内完成5种不同编码的二维码类型的检测主要得益于:

加载具有并行化处理能力的DRP库

同时加载多个DRP库对一帧图像的多个区域同时进行处理

DRP处理期间,并行运行CPU运算

硬件DRP加速处理与openCV软件处理无缝对接

此时如果将裁剪出来的二维码图像交给后续对应的解码器进行解码,将极大的缩短多类型二维码解码的处理时间。

审核编辑:郭婷

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

全部0条评论

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

×
20
完善资料,
赚取积分