ELECTRONICS WORLD・探索与观察
基于FPGA的直方图均衡化实现
【摘要】直方图均衡化又称灰度均衡化,是指通过某种灰度映射使输入图像转换为在每一灰度级上都近似相同的输出图像,可以很好的解
决灰度图像过亮或者过暗的问题。本文详细介绍了通过FPGA实现直方图均衡化的方法,优化了算法的实现方式,实验表明,该方法效果明
显,便于实现,达到了提高图像对比度及图像细节的目标。
【关键词】直方图均衡化;FPGA;图像增强;双口RAM
DOI:10.19353/j.cnki.dzsj.2018.07.04
7 1.引言
各模块组成如图1直方图均衡化系统框图所示。
灰度直方图描述了一幅图像的灰度级统计信息,是多种空间域
处理技术的基础,主要应用于图像分割、图像增强及图像灰度
变换
等处理过程。在暗图像中,直方图的分量集中在灰度级的低端
。相
反,亮图像的直方图分量集中在灰度级的高端。直方图均衡化
即灰
度均衡化,在经过均衡化处理后的图像中,像素将占有尽可能
多的
灰度级并且均匀分布。因此,这样的图像将具有较高的对比度
和较
大的动态范围。
本文根据直方图均衡化的原理及算法,设计了一种基于
FPGA+SDRAM+双口RAM+VGA的直方图均衡化硬件平台,
通过
电脑模拟摄像头向FPGA传输图像数据,该平台实现了图像的
接
收、缓存、直方图均衡化和图像显示的功能。经过多次试验测
试,
该平台能够有效增强灰度图像的对比度,实现直方图均衡化。
图1 直方图均衡化系统框图
2.直方图均衡化简述
灰度直方图描述了一幅图像灰度级分布的情况,直方图均衡化
的过程可以概括为四个步骤:
①统计一幅灰度图像所有像素点中相同灰度值的个数,如有一
幅分辨率为800*600数据位宽为8位的图像,其灰度范围为0~255,
则需统计每一个灰度值在图像中出现的次数;
②计算每一个灰度值的概率密度,即计算每一个灰度值的个数
在全部灰度值个数中所占的比重;
③
计算累计概率密度,设每一个灰度值的概率密度为
,则累计概率密
度为 ;
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所示。
经过以上四个步骤即可完成直方图均衡化,对于步骤二,灰度
值的概率密度的表达式为(1):
(1)
其中,
fi
为概率密度,
xi
为灰度值的个数,A为图像的面积。
对于步骤三,累计概率密度的表达式为(2):
(2)