资源可置换的实时直方图均衡结构设计
扫描二维码
随时随地手机看文章
引言
直方图均衡是一种有效的空间域图像增强方法。它通过灰度变换使得图像在每个灰度级上都具有相同多的像素点,以提高图像的对比度。
自原始直方图均衡算法提出以来,由于处理的需要出现了许多改进形式。如自适应直方图均衡(AHE),对比度受限的自适应直方图均衡(CLAHE)等。这些算法通过拉伸某个特定区域的灰度级动态范围来提高图像质量,很好的改善了图像的视觉效果。目前关于直方图均衡算法的硬件实现方法主要有两种:计数器阵列实现和存储器(RAM)阵列实现。但随着算法复杂度的增加,带来的硬件资源消耗也急剧上升。这严重影响在芯片上添加其它功能。
本文在考虑到FPGA中寄存器和RAM使用率平衡性的基础上,以原始直方图均衡算法为例,提出了一种资源可置换的实时直方图均衡结构,为解决工程实践中寄存器或RAM资源紧缺提供了一种有效的结构。
1FPGA中普遍采用的直方图均衡结构
直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均匀强度分布的图像,即使得图像在每个灰度级上都具有相同像素点数的过程叫算法中涉及到浮点运算,但由于FPGA本身构建浮点运算逻辑运算时间比较长,并且会加重硬件压力,所以为避免浮点运算,一般可以将算法按如下步骤进行拆分:
1.1直方图统计
统计每个灰度级的像素点个数,为避免小数运算,不对原始图像数据进行归一化,直接统计每个灰度级的像素点个
数作为原始图像的直方图:
nk的取值决定于图像的分辨率,最大值为一帧图像的像素总数。
目前普遍采用的两种方法是如图1所示的计数器阵列和存储器阵列法。
(b)存储器阵列
图1(a)给出的是计数器阵列结构,每个灰度级对应一个计数器,若每个像素点有n个比特,就有2"个计数器,译码器为n-2"译码器,计数器的位宽取决于一幅图像的分辨率。
图1(b)采用的是存储器阵列结构进行直方图统计,输入图像直接和RAM的地址线连接,这里RAM的时钟应该是图像时钟的2倍,图像时钟的一半用于读-修改操作,一半用于写操作。
1.2直方图均衡
进行直方图均衡化,可得到灰度级映射关系,输出时按照式(2)所给的新的映射关系对原始图像各像素点进行灰度转换:
以灰度级为0〜255,分辨率为1024X1024的灰度图像处理为例,公式(2)可以具体化为:
假设输入图像每一个像素的灰度值都相同,则统计的像素累加和最大,为1024X1024个,在FPGA中需要定义数据位宽为21位,容量为256的RAM来统计0〜255灰度级像素数目。
当一帧图像的直方图统计完毕时,在相邻两帧的时间间隔里,根据式(3)计算Sk的值存入RAM中,建立灰度级映射表。以原始图像数据为RAM地址,输出图像直方图后的数据。由于是灰度图像,所以此灰度级映射RAM大小为数
那么,在本文提出的结构中,寄存器个数为2nX256,RAM容量为2(21-N)X256,其中0<N<21。可根据实际情况调整N的大小,从而实现资源置换。具体操作流程如图3所示。
图3中,译码器接收原始图像并激活相应的计数器,对应的计数器加1,当计数器累加和等于1024时,RAM相应地址内容加1。RAM的地址对应256个灰度级,循环检测计数直到一帧结束。在等待下一帧到来的时间里,运算逻辑开始根据式(4)计算原始图像每一级灰度映射后的灰度值,取每个RAM单元中的高8位存放到灰度级映射RAM中,建立灰度级映射查找表。当下一帧原始图像到来时,将原始图像的灰度值和灰度级映射RAM的地址线相连,由于相邻两帧图像间对应像素点的灰度值相差较小,这样当前帧可以用前一帧图像的灰度映射表映射输出当前帧直方图均衡后的数据,满足
据宽度为8位,容量为256。
2资源可置换的实时直方图均衡结构
在上述结构中,随着图像的分辨率增大,用于直方图统计的RAM资源或计数器资源会呈指数增长。在FPGA中RAM和计数器资源很有限
且非常重要,只使用RAM或者计数器进行直方图统计,会导
了实时图像处理的要求。
致FPGA中对应资源的紧缺。为了解决这一问题,本文给出了一种改进的资源可置换的实时直方图均衡结构,可根据工程实践中剩余资源的情况动态分配资源,以达到FPGA中RAM和寄存器资源平衡。本文提出的资源可置换的直方图均衡结构如图2所示。
图2资源可置换的直方图均衡结构
在图2所给出的结构中,可将图2中256X20的直方图统计RAM拆分成256个11位的进位计数器(counter_00-counter_ff)和一个256X10的直方图统计RAM。在图2中,256个计数器对应256个灰度级,用来统计每个灰度级的像素个数,计数到1024时产生进位标志。FIFO用于缓存当前计数到1024个的像素点的灰度值,防止多个计数器同时满足条件时造成直方图统计错误。式(3)的形式可以变为:
那么,在本文提出的结构中,寄存器个数为 2N×256,RAM 容量为 2(21-N)×256,其中 0 ≤ N ≤ 21。可根据实际情况调整 N 的大小,从而实现资源置换。具体操作流程如图3 所示。
图3中,译码器接收原始图像并激活相应的计数器,对应的计数器加1,当计数器累加和等于1024时,RAM相应地址内容加 1。RAM 的地址对应 256 个灰度级,循环检测计数直到一帧结束。在等待下一帧到来的时间里,运算逻辑开始根据式(4)计算原始图像每一级灰度映射后的灰度值,取每个 RAM 单元中的高 8 位存放到灰度级映射 RAM 中,建立灰度级映射查找表。当下一帧原始图像到来时,将原始图像的灰度值和灰度级映射 RAM 的地址线相连,由于相邻两帧图像间对应像素点的灰度值相差较小,这样当前帧可以用前一帧图像的灰度映射表映射输出当前帧直方图均衡后的数据,满足
上述方法在统计直方图时会有截断误差。即若一个灰度级的像素有1023个,将不会产生进位。但是由于直方图均衡化后的图像质量主要是人主观判定的,微小的误差在视觉上不会造成影响,所以资源置换造成的截断误差可以忽略。
在上述改进的直方图均衡结构中,计数器的位数和直方图统计RAM的大小可以互相置换。假设一幅图像的分辨率为MXN,计数器的位宽为K,进位阈值为T(上述算法中T为1024),直方图统计RAM的位宽为L,统计最大值为S(上述算法中为1024),将MXN,T,S改写成指数格式:
对于灰度级范围固定的图像来说,若采用单一结构,则寄存器的个数和片内RAM的深度是固定不变的。但是由式⑻可知,采用本结构对分辨率为MXN的图像进行直方图均衡处理时,寄存器的位宽和RAM的位宽可以调节置换,相对于只用RAM或者只用寄存器进行直方图统计的结构,本文提出的结构可以通过选取合适的K,L值,对于具体工程找到一个硬件资源占用的平衡点。
图4给出了在三种图像分辨率下,用本文所给出的结构进行直方图均衡处理时,所需的寄存器资源和存储器资源关系图。在灰度级范围一定的情况下,寄存器个数和RAM的深度都等于灰度级数,所以K、L之和完全由图像的分辨率决定,且K和L呈线性关系。
图4资源可置换的直方图均衡结构性能图
3性能分析
为验证本文所提出的资源可置换直方图均衡结构的性能,我们比较本文所提出的结构与其它两种结构的性能。MatLab仿真中使用8比特灰度级图像,在分辨率为256X256、512X512以及1024X1024三种情况下,分别用上述三种结构实现直方图均衡,比较三种方法的处理时间和资源占用情况。
在上述三种方法中,当一帧图像的像素到来时,都可以对像素进行实时统计,当一帧的最后一个像素到达时,该帧的像素统计结束。因此,上述三种方法的处理时间相同。
在处理时间相同的前提下,上述三种方法的资源占用情况的比较如表1所列。
表1三种方法资源占用情况比较
方法 |
图像分辨率 |
占用寄存器个数 |
占用RAM容量 |
256X256X8 |
217X256 |
0 |
|
文献E,4] |
512X512X8 |
219X256 |
0 |
中的结构 |
1204X1024X8 |
221X256 |
0 |
256X256X8 |
0 |
217X256 |
|
文献[3,5] |
512X512X8 |
0 |
219X256 |
中的结构 |
1204X1024X8 |
0 |
221X256 |
256X256X8 |
2nX256 |
2X256 |
|
本文提出 |
512X512X8 |
2nX256 |
2⑴X256 |
的结构 |
1204X1024X8 |
2nX256 |
2⑵X256 |
分析上表可以得出,计数器个数和RAM深度由图像灰度级决定,单纯使用计数器阵列或者存储器阵列,随着分辨率的增加,计数器位宽或RAM深度呈指数增长。使用本文中提出的混合使用计数器阵列和存储器阵列,可根据具体寄存器资源和RAM资源使用情况合理选取N,得到计数器和RAM资源的一个平衡点,使工程的资源占用率达到最小。
4结语
本文提出了一种可平衡寄存器和存储器资源的直方图均衡结构,即资源可置换的实时直方图均衡结构。该结构混合使用计数器阵列和存储器阵列,可根据具体情况合理选择计数器位宽和RAM单元位宽,达到资源使用的平衡点。还可以根据设计需要以及资源的使用情况,最大化FPGA的资源利用率,有效解决硬件工程设计中寄存器或RAM资源不足的问题。同时也可用于其它寄存器和存储器互换而不影响整个系统的功能。
20211221_61c1b3554358c__资源可置换的实时直方图均衡结构设计