文献标识码:A
DOI:10.16157/j.issn.0258-7998.2015.07.004
中文引用格式:林宜丙,石守东,孙书丹. 基于OTSU算法的FPGA实时绕距测量系统[J].电子技术应用,2015,41(7):15-18,22.
英文引用格式:Lin Yibing,Shi Shoudong, Sun Shudan. The FPGA real-time distance measuring system based on OTSU algorithm[J].Application of Electronic Technique,2015,41(7):15-18,22.
0 引言
网线绕距指的是双绞线扭绕之后两个节点之间的长度,而双绞线之间相互缠绕的紧密程度一般通过其绕距来度量[1]。网线内部双绞线需要相互缠绕的原因是为了减少各线之间产生的信号串扰,而每对线对采用的绕距是不同的,有着各自的标准,因此需要在网线成缆制作的同时通过实时反馈绕距值来控制成缆机制作线对。
FPGA,即现场可编程门阵列,它是在PAL、GAL、CPLD等技术的基础上进一步发展的可编程器件。FPGA通过为每个功能单独地建立硬件,实现整个应用程序所需的功能,因此它具有并行处理的内在特点。硬件设计使其拥有较高的并行运行速度,同时又以其相对低廉的成本保持软件所具有的可重新编程的灵活性。这使得FPGA非常适用于图像处理,尤其在底层与中间层充分利用图像处理固有的并行性特点[2]。
1OTSU算法
1.1 OTSU算法原理
OTSU算法由日本学者大津展之提出,是一种自适应的阈值确定算法,又叫最大类间方差法。其基本思想是根据图像的灰度特性,将图像按类间距离极大准则分成目标和背景两个部分[3]。当目标和背景间的类间方差愈大,则表明构成图像的两个部分的差别就愈大,且其判断准则简单,易于移植至FPGA中实现,因此广泛应用于实时图像分割领域。
此方法的基本原理:设待分割图像包含L个灰度级(0,1,…,L-1),各个灰度值的概率为:
其中ni表示灰度值是i的像素数,N为总的像素数。给定图像I(x,y),目标与背景的分割阈值记作t,则属于目标区域A与背景区域B的像素点数占整幅图像比例分别记做:
当使得式(8)中的类间方差达到最大,此时的t即为阈值。
1.2 简化OTSU算法公式
将式(7)代入式(8)可得:
为了简化计算,将类间方差表达式改写成式(10)所示。而对每帧图像来说,N是一个常数值,可以忽略不计,从而式(10)可以进一步改写成式(11),便于FPGA并行实现OTSU算法。
2 FPGA实时绕距检测系统并行设计
2.1 硬件总体架构设计
系统整体电路以FPGA为核心,其外围的器件主要包括高速CMOS图像采集器、串口转无线模块以及FPGA芯片,并在整体电路内部设计一个电源模块为各个模块供电。嵌入式绕距测量系统的整体框架:图像采集部分采用高速CMOS图像采集器,由于其有效像素点较多,一般其分别率为百万级以上,且具有较短的曝光时间,因此被用来实时采集绞线图像。通过使用单一的线性光源对绞线进行照射,并将其投影到事先设置好的背景板上,接着通过高速CMOS图像采集器采集投影在背景板上的投影。最后将传感器系统采集的图像阵列传输至FPGA电路系统内,运用OTSU图像分割算法实时二值化图像,将二值化图像递交给绕距计算模块处理,统计二值图像的各列宽度,从而计算出相邻最窄位置(即绞线节点)之间的距离,得到绞线的绕距值并发送至上位机。
2.2 图像的灰度化处理
灰度图像是指不含彩色信息,只含亮度信息的图像,其像素点的值称为灰度值,范围为0~255。由于OTSU算法是基于灰度图像操作的,因此需要将CMOS摄像头采集的RGB格式图像转换成灰度图像。常用的灰度化处理方法有分量法、最大值法、平均值法与加权平均法。通过实验发现,分量法无法充分利用图像的原始信息,最大值法使得图像亮度偏高,而平均值法则使得图像亮度过于柔和,都不利于后续图像分割的进行。因此,本文采用加权平均值法实现灰度化处理。
摄像头采集的图像数据为3×8 bit的RGB信号,若采用常用的权值:ωr=30%,ωg=59%,ωb=11%,将使得FPGA内部进行浮点乘法运算,这在消耗大量的硬件资源的同时,也拖慢了整个算法的执行速度。而采用张鹏等提出的权重[4],可以有效避免浮点运算,其权重分配为:ωr=25%=2-2,ωg=62.5%=2-1+2-3,ωb=12.5%=2-3;则灰度值H=2-2×R+(2-1+2-3)×G+2-3×B,从而将整个运算过程转换为1次求和运算和4次移位运算。灰度处理模块的结构见图1,由于采用了流水线结构的设计,即在求和运算前加入了流水线寄存器,从而在每一个周期内都能输出一个像素点的灰度值。
2.3 OTSU算法的硬件并行实现
通过上述分析,可分为两个步骤来计算类间方差:
(1)在统计模块中计算一帧图像的直方图统计、灰度统计、累积直方图统计、累积灰度统计;
(2)依次将累积直方图与累积灰度统计中的数值传入计算模块计算类间方差。
硬件结构框图如图2所示,主要由统计模块与计算模块构成。
2.3.1 并行统计模块
首先,定义一个深度为256的双口RAM来保存每个灰度值的像素点个数,具体操作是将每个像素点的灰度值作为其中一个端口的读地址,读取RAM单元中的计数,将其值增加1,接着将更新后的计数从另一个端口写入同一单元[5]。
其次,由于在统计处理每个像素点时,都要执行3个步骤:读取计数、更新计数、写回计数。只有完成当前像素点的3个步骤之后,才能进行下一个像素点的处理。而FPGA的并行特性能够解决此类处理时延导致的低效率,即在OTSU模块内部构建3个功能相同的统计模块,每个模块各自负责相邻的3个像素点。如图2,通过逐个激活直方图统计1、2、3模块,从而构成一条流水线,使得每个子模块都有3个时钟周期来统计1个像素点。读取计数、更新计数、写回计数3个步骤的逻辑被划分到各自的时钟周期来完成,从而提高了处理的效率。用这种方式,保证了每个时钟周期能够统计1个像素点。
最后,在直方图输出时,使用两个加法器将3个直方图统计模块的输出结果相加,就可以计算得到完整的直方图统计。在得到完整的直方图之后,便可分别算出灰度统计、累积直方图统计、累积灰度统计。
2.3.2 流水线计算模块
把统计模块中的累积直方图统计和累积灰度统计的结果依次送入计算模块。对于计算模块,如图3,只需采用2个除法器和3个乘法器即可实现,并且构成一条四级流水线,这样只需5个时钟就能得到最终的类间方差。
3 绕距计算模块
在数字视频处理系统中,由于数据流量非常之大且对系统的实时性的要求也较高,因此系统有必要建立高速有序的视频数据输入/输出流,而乒乓缓存结构正是为平衡视频编解码与变速的图像处理过程之间的速度不匹配问题提供数据通道的。
乒乓缓存结构将输入数据流经由数据选择单元将数据流等时地划分至两个数据缓存区。采用乒乓操作[6]处理二值化后的图像数据如图4所示,设置两个BLOCK RAM:r1,r2;在第1个缓存周期,将第一帧线材每列的宽度存入r1中;待到r1存满后,在第2个缓存周期,继续将第二帧的线材宽度存入r2中,与此同时,对比r1中的线材宽度,找出宽度极小的n个节点,记录n个节点的列地址,记第n个节点的列地址A1,与n-1个节点的地址A0相减即得出该线材绕距,并判断其是否符合标准。这样,从模块的两端看,输入/输出的数据流都是连续的,从而达到了利用低速模块处理高速数据的目的,并加快了整个算法的实时性。
4 实验结果与分析
本文采用Verilog语言与C语言编写,采用的器件是Cyclone IV EP4CE1系列的芯片。OTSU算法执行结果如图5所示,通过换算比例尺可得出该双绞线绕距为16.59 mm。可以看出本文算法能够较好地分割双绞线图像,且具有快速的图像处理速度,能够实现双绞线图像的实时分割,使得系统能更好地检测双绞线绕距,达到了预期目的,而且这种方法还可以应用于其他各类线材的绕距、线宽等参数的检测。
通过QuartusII编译分析可知,二值化模块占用FPGA芯片逻辑单元不到5%,直方图统计模块占用了约16%,而计算模块占用了约7%的资源,这大大节约了芯片的硬件资源,节约了硬件成本,使得更多的资源可用于其他硬件算法。对于输入时钟为50 MHz、大小为640×480的双绞线图像,每帧处理时间为:T=×640×480=0.006 144 s,完全达到了实时进行双绞线图像处理的要求。
5 结论
OTSU分割算法通过不断计算得到使得类间方差达到最大值的阈值,其算法本身有大量操作可以并行实现。因此,相比普通的ARM平台的顺序执行方案,本文使用的FPGA方案更具实时性,能够胜任对于网线实时绕距测量的处理速度要求。通过在FPGA中构建3个直方图统计子模块,使得算法在1个周期内统计1个像素点的灰度值,并使用简化的计算公式,大大减少了算法的处理时间,并能很好地将双绞线目标从背景中分割出来。
参考文献
[1] 张国光.如何检查网线性能[J].铁道通信信号,2006,42(2):62-63.
[2] 原魁,肖晗,何文浩.采用FPGA的机器视觉系统发展现状与趋势[J].计算机工程与应用,2010(36):1-6.
[3] 齐丽娜,张博,王战凯.最大类间方差法在图像处理中的应用[J].无线电工程,2006(7):25-26,44.
[4] 张鹏,钟俊,郭安明,等.设备监控图像预处理算法改进及其FPGA实现[J].计算机应用,2011(6):1706-1708.
[5] BAILEY D G.基于FPGA的嵌入式图像处理系统设计[M].原魁,何文浩,肖晗,译.北京:电子工业出版社,2013.
[6] 吴继华,蔡海宁,王诚.Altera FPGA/CPLD设计,高级篇[M].第2版.北京:人民邮电出版社,2011.