APP下载

基于FPGA的直方图均衡化实现

2018-04-26苏州大学电子信息学院李成诚乔东海

电子世界 2018年7期
关键词:对照表灰度级均衡化

苏州大学电子信息学院 李成诚 乔东海

1.引言

灰度直方图描述了一幅图像的灰度级统计信息,是多种空间域处理技术的基础,主要应用于图像分割、图像增强及图像灰度变换等处理过程。在暗图像中,直方图的分量集中在灰度级的低端。相反,亮图像的直方图分量集中在灰度级的高端。直方图均衡化即灰度均衡化,在经过均衡化处理后的图像中,像素将占有尽可能多的灰度级并且均匀分布。因此,这样的图像将具有较高的对比度和较大的动态范围。

本文根据直方图均衡化的原理及算法,设计了一种基于FPGA+SDRAM+双口RAM+VGA的直方图均衡化硬件平台,通过电脑模拟摄像头向FPGA传输图像数据,该平台实现了图像的接收、缓存、直方图均衡化和图像显示的功能。经过多次试验测试,该平台能够有效增强灰度图像的对比度,实现直方图均衡化。

2.直方图均衡化简述

灰度直方图描述了一幅图像灰度级分布的情况,直方图均衡化的过程可以概括为四个步骤:

①统计一幅灰度图像所有像素点中相同灰度值的个数,如有一幅分辨率为800*600数据位宽为8位的图像,其灰度范围为0~255,则需统计每一个灰度值在图像中出现的次数;

②计算每一个灰度值的概率密度,即计算每一个灰度值的个数在全部灰度值个数中所占的比重;

④进行灰度均衡转换,即将原有的灰度值映射成新的灰度值,新的灰度值分布稀疏均匀且保持原图像的灰度排列次序不变。

经过以上四个步骤即可完成直方图均衡化,对于步骤二,灰度值的概率密度的表达式为(1):

其中,fi为概率密度,xi为灰度值的个数,A为图像的面积。

对于步骤三,累计概率密度的表达式为(2):

对于步骤四,灰度均衡转换的表达式为(3):

其中,Di为转换后的灰度值,Dmax为最大灰度值。

3.直方图均衡化的FPGA实现

3.1 硬件及开发平台

本文使用的测试图像分辨率为800*600,数据位宽为8位,其灰度级为256级。FPGA芯片使用的是Altera的Cyclone IV系列,开发平台为Quartus II,并用其自带的SignalTap II Logic Analyzer进行仿真调试。

3.2 系统模块组成

各模块组成如图1直方图均衡化系统框图所示。

图1 直方图均衡化系统框图

FPGA的时钟频率为50MHz,由于需要通过串口接收图片数据以及通过SDRAM缓存数据并通过VGA显示图片,每一个步骤都需要不同的时钟频率,故通过时钟锁相环生成40MHz和100MHz的时钟频率,分别用于VGA显示和SDRAM读写。不同模块之间的数据传输还涉及到数据的跨时钟域处理,对此创建了两个fifo(first input first output)模块分别为写fifo(wfifo)和读fifo(rfifo)。直方图均衡化的实现过程涉及对图片统计数据的读写,针对上文中所述的实现步骤,创建了三个双口RAM,分别为统计同一灰度值个数的ram_cnt模块,数据处理模块ram_process模块和生成灰度对照表的ram_reference模块。相应的还有串口接收模块uart_rec,SDRAM读写模块sdram_driver和VGA显示模块。

3.3 系统实现

直方图均衡化数据流图如图2所示。

图2 直方图均衡化数据流图

首先通过串口向FPGA发送图像数据,FPGA中串口接收模块的时钟频率为50MHz,SDRAM读写模块的时钟频率为100MHz,两个模块通过wfifo作为数据传输的桥梁。FPGA每接收一个像素数据就将其写入wfifo以供SDRAM缓存数据,同时每接收一位数据便统计一次灰度值并将其写入ram_cnt中。

ram_cnt模块的数据深度为256,数据位宽为19(即理论上的最大值480000),可以把ram_cnt的深度当做灰度值,每接收一个数据就把相应深度里的数据自加一,统计结束后RAM中相应位置里的数据便是相应灰度值的个数,通过此方法可以灵活的统计直方图。

如图3所示,FPGA接收到一个灰度值为25的像素点,读取ram_cnt的数据发现,在此之前灰度值为25的像素点共接收了1754个,故将1755写入ran_cnt中实现直方图统计。

图3 SignalTap II直方图统计

SDRAM写入来自wfifo中的数据,等待ram_reference生成灰度对照表后,将写入的数据读出送到ram_reference中。

等待FPGA接收完图像数据,ram_cnt模块统计完所有灰度值后,ram_process模块开始处理数据。由于当FPGA计算除法运算时会消耗大量的硬件资源,且表达式(3)中除数为480000,如果直接相除,无疑会消耗更多资源,故我们将表达式(3)进行优化以降低硬件资源消耗,提高运算效率,改写后的表达式见(4):

故ram_process模块数据深度为256,数据位宽为11(即理论最大值480000/235)。将ram_cnt中的数据依次读出,然后除以235,再依次写入ram_process中。这样便完成了除法运算,且大大降低了运算的复杂程度。ram_process模块的SignalTap II调试数据如图4所示。

图4 SignalTap II直方图统计数据处理

然后将ram_process中的数据依次读出,将其累加,并通过位运算提取累加后的数据的前8位写入ram_reference中,这样便完成了累加和移位运算,其SignalTap II调试数据如图5所示。至此灰度对照表已经完成,直方图均衡化算法均已实现。

图5 SignalTap II生成灰度对照表

接下来将SDRAM中读出的数据作为ram_reference的读地址,那么按此地址读出的数据便是原像素点灰度值对应的新的灰度值,实现灰度映射。如图6所示,SDRAM一次读出四个数据,这四个数据是原图像四个像素点的灰度值,将这四个数据拆分放在四个时钟周期,分别为18、21、15、12,两两之间的差值为3、6、3。通过查找对照表后,这四个灰度值对应的新的灰度值为99、109、87、74,两两之间的差值为10、22、13。对比之间的差值可以发现,原本区别不大的灰度值差异变大,即前后灰度对比度变大,且灰度值分布由密集变得稀疏,直方图均衡化由此可见一斑。

图6 SignalTap II查找对照表

最后将该数据写入rfifo中,VGA读取rfifo中的数据便可在屏幕上显示均衡化后的图片。

4.实验结果分析

将原图通过FPGA显示在屏幕上,如图7所示,可以发现图片整体偏暗,图片两边和上边几乎为黑色且无法分辨,右边建筑的线条也不明显。将均衡后的图像与之对比,如图8所示,可以清晰的看出图片左边粗糙的墙壁,以及图片右边的植物,还有图片上边的瓦片,亮暗分明。

图7 直方图均衡化前的图片

图8 直方图均衡化后的图片

图9 图片处理前后直方图

对比前后图片可以发现,通过FPGA实现的直方图均衡化,效果明显,细节突出,图片更加有层次感,更加清晰。对比前后的直方图可以发现,原本集中在一块区域的灰度级分布在整个区间,如图9所示。

5.结论

本文提出了一种基于FPGA实现直方图均衡化的方法,通过优化算法的实现方式,简化了算法实现的复杂度,提高了运算效率,节约了片上资源。实验结果表明,该方法高质量的实现了直方图均衡化,达到了预期的目标。

[1]牟新刚,周晓,郑晓亮.基于FPGA的数字图像处理原理及应用[M].电子工业出版社,2017∶167-213.

[2]Gonzalez R C,Woods R E.数字图像处理[M].电子工业出版社,2011∶72-88.

[3]侯大勇,曹峰,王昱煜.基于FPGA的灰度图像直方图均衡化实现[J].电子技术与软件工程,2016(14)∶100-101.

猜你喜欢

对照表灰度级均衡化
人眼可感知最多相邻像素灰度差的全局图像优化方法*
2019年成考院校招生简章审核对照表
基于灰度直方图的单一图像噪声类型识别研究
PSO约束优化耦合直方图均衡化的图像增强算法
ISO?9001:2015与ISO?9001:2008之间的对照表
制度变迁是资源均衡化的关键
直方图均衡化技术在矢量等值填充图中的算法及实现
基于混沌加密的DCT域灰度级盲水印算法
基于实测校正因子的实时伽马校正算法
本刊常用符号对照表