本发明涉及图像处理,尤其是涉及一种基于fpga的clahe图像增强实时处理方法及系统。
背景技术:
1、clahe(contrast limited adaptive hitogram equalization)限制对比度自适应直方图均衡化,是一种图像增强算法。
2、clahe算法是在全局直方图均衡化he(hitogram equalization)的基础上改进而来,具有更佳的局部对比度增强效果,可显著抑制噪声、丰富图像细节。
3、clahe算法在pc上已得到广泛实现,但在fpga可编程逻辑器件上并行处理还鲜有研究,尤其是当前帧计算出来的所有区域直方图仅对当前画面有效,实现真正意义上的视频实时处理,难度较大,因此需要进一步的研究和探索基于fpga的clahe图像增强实时处理方法。
技术实现思路
1、本发明主要是解决了clahe算法缺乏在fpga上的应用,无法实现视频实时处理的问题,提供了一种基于fpga的clahe图像增强实时处理方法及系统。本发明将图像的行以窗口高度为大小乒乓缓存在ddr中,待逻辑完成区域化直方图统计、阈值裁剪、分布积分后,读取ddr中缓存的图像行像素,结合直方图sram实时获得四个映射灰度值,最后通过双线性插值的组合逻辑运算完成对每个像素点的增强处理。
2、本发明的上述技术问题主要是通过下述技术方案得以解决的:一种基于fpga的clahe图像增强实时处理方法,包括以下步骤:
3、s1.采集视频流进行yuv色彩空间转换;
4、s2.根据设定窗口对视频流图像进行直方图区域划分;
5、s3.至少建立三个基于乒乓操作的顶层例化,对三个顶层例化循环输入第一图像行进行直方图cdf曲线计算,并结合输入第二图像行进行像素点邻域直方图灰度映射计算,输出像素点四个邻域直方图映射灰度;
6、第一图像行为基于直方图区域划分的窗口高度图像行,
7、第二图像行为两个顶层例化对应的第一图像行上半部和下半部结合的图像行;
8、s4.根据像素点所在图像坐标计算对应四个邻域直方图映射灰度权重,对四个邻域直方图映射灰度进行双线性插值计算,获得增强像素点灰度;
9、s5.基于增强像素点灰度的图像数据,进行rgb色彩空间转换,进行视频流输出。
10、本发明提出了基于fpga的clahe图像实时处理方法,对视频流图像进行直方图区域划分,将图像行以窗口高度为大小乒乓缓存在外部ddr中,通过建立三个顶层例化,顶层例化采用乒乓操作进行缓存,对顶层例化循环输入第一图像行完成区域化直方图统计、阈值剪裁、分布积分,并读取外部ddr中缓存的第二图像行像素,结合直方图cdf曲线、裁剪累计值实时获得像素点邻域映射灰度,并根据三个顶层例化输出数据最终获得像素点四个邻域映射灰度,最后通过双线性插值的组合逻辑运算完成对每个像素点的增强处理。本发明实现了在fpga上进行clahe图像增强处理,对图像进行实时处理,实现了真正意义上的视频实时处理。
11、本方案中fpga采集到的视频流均从rgb转到yuv的色彩空间,图像的增强是对于亮度分量y进行的处理,rgb到yuv的色彩空间采用转换公式进行转换。通过预设窗口大小,由窗口对视频流的图像进行直方图区域划分,窗口大小设置以像素点为单位,根据视频的分辨率进行划分。视频像素流以窗口高度为大小的行数乒乓存储在外部ddr中,同时以第一图像行方式输入顶层例化进行直方图统计,第一图像行为基于直方图区域划分的窗口高度图像行,输入进行直方图统计,依次对每个直方图进行统计,统计数据缓存在相应的sram地址空间,在统计过程中对像素点灰度进行裁剪并将超出的像素点个数在寄存器中进行累加,采用的sram地址空间大小可以根据每次处理的图像行大小进行相应设置。在对图像行进行直方图统计后,启动对每个直方图sram的积分运算即统计数据的积分运算,计算得到一排直方图cdf曲线(cumulative distribution function,累计分布),对应第一图像行的所有直方图,cdf曲线以离散的方式存储在sram中。cdf曲线计算在顶层例化中进行,本方案至少建立三个顶层例化,其中两两顶层例化确保sram能够缓存两排直方图cdf数据,为后续像素点灰度映射计算能够同时获取上下邻域直方图的映射灰度,灰度映射过程需要从外部ddr中读取相应行数的图像即第二图像行,第二图像行为两个顶层例化对应的第一图像行上半部和下半部结合的图像行,保证了第二图像行像素点四个邻域直方图的完整性。三个顶层例化为乒乓操作,循环缓存逐行输入的第一图像行直方图cdf曲线数据,结合输入相应的第二图像行计算该第二图像行像素点相应的邻域直方图映射灰度,最后结合三个顶层例化的结果最终输出像素点四个邻域直方图映射灰度。然后根据像素点所在图像坐标计算权重,对四个映射灰度进行双线性插值运算得到最终增强像素点灰度。增强后的像素灰度,结合原有的uv分量,还原到rgb色彩空间,进行视频流输出。
12、作为一种优选方案,所述的直方图区域划分,具体包括:
13、根据设定窗口的大小,对图像进行直方图区域划分;
14、若图像横向或纵向像素点个数无法被窗口大小整除,则获取相邻的部分行数或列数,结合余数的行或列拼接成完整的直方图区域。
15、以像素点为单位设定窗口大小,根据视频流的分辨率对其每帧图像进行直方图区域划分。当图像分辨率宽度或高度无法被设定的窗口宽度或高度整除时,则需要重复利用图像的部分行数或列数,结合相除后的余数来拼接成完整的直方图区域。
16、作为一种优选方案,所述直方图cdf曲线计算包括直方图统计和直方图积分运算,
17、直方图统计包括,根据输入的窗口高度图像行数据,统计直方图各灰度的像素点个数,累计各灰度下超过设定裁剪阈值的像素点个数,得到裁剪累计值;
18、所述的获得裁剪累计值包括,设定裁剪阈值,检测各灰度像素点个数,若像素点个数超过裁剪阈值,将裁剪阈值作为该灰度像素点个数,超过裁剪阈值的像素点个数进行累加,得到裁剪累计值;
19、直方图积分运算包括,设定灰度累计值,遍历当前直方图灰度统计数据,将当前灰度累计值与当前灰度像素点个数相加作为新的灰度累计值,并将新的灰度累计值作为当前灰度的数值,遍历完毕获得直方图所有灰度累计值。
20、本方案通过设定裁剪阈值对直方图的灰度像素点数量进行裁剪,将各灰度被裁剪的像素点个数在寄存器中进行累加,最终获得该直方图所有灰度被裁剪的像素点的总和即裁剪累计值
21、本方案对每个直方图统计数据进行积分运算,将直方图每个灰度像素点个数依次进行累加,每次累加的累计值作为当前灰度像素点个数即得到灰度值累计值。其中灰度包括0-255,累加过程从灰度0开始,依次累加至灰度255,获得所有灰度累计值,积分运算后灰度i则表示灰度0~i所有像素点个数的总和。
22、作为一种优选方案,步骤s3中顶层例化计算像素点四个邻域直方图映射灰度,具体包括:
23、a.根据第一图像行排列逐行输入对应顶层例化,进行直方图cdf曲线计算,读取第二图像行分别输入各顶层例化;
24、b.各顶层例化判断像素点邻域直方图分布位置与其当前第一图像行是否对应重合匹配,若存在匹配,则计算相匹配的邻域直方图映射灰度,获取所有顶层例化的邻域直方图映射灰度,输出像素点对应四个邻域直方图映射灰度;
25、c.读取下一行第二图像行分别输入各顶层例化,同时对应当前最上行第一图像行的顶层例化输入下一行第一图像行;以完成直方图cdf曲线计算的乒乓操作。
26、d.重复步骤b和c,直至输入最末行第二图像行。
27、作为一种优选方案,计算像素点在邻域直方图的映射灰度,具体包括:
28、根据当前像素点灰度获取邻域直方图对应灰度的灰度累计值,并获取邻域直方图裁剪累计值;
29、灰度值累计值与256的乘积值和裁剪累计值相加,相加后的值与窗口面积值相除,相除的值为像素点在邻域直方图的映射灰度;
30、分别在四个邻域直方图进行灰度映射计算,获得四个邻域直方图的映射灰度。
31、本方案对读取图像数据中每个像素点计算其在四个邻域直方图的映射灰度,映射灰度计算公式为:
32、y(i)=(sramrd(i)*256+exceednum)/windowsize
33、其中y(i)为灰度i在直方图均衡化映射后的灰度值即映射灰度,sramrd(i)为sram实体中地址为i的读取数据,即邻域直方图灰度i的灰度累计值,exceednum为邻域直方图裁剪累计值,windowsize为窗口面积值。
34、作为一种优选方案,将直方图进行四个象限划分,根据像素点所在象限获取与该象限相邻的三个直方图,以及获取像素点所在直方图,获取的直方图为像素点四个邻域直方图。
35、对直方图进行四个象限划分,根据像素点所在象限位置来获取对应相邻的直方图,与像素点所在直方图共同构成四个邻域直方图。本步骤在cdf曲线计算顶层模块中进行。
36、作为一种优选方案,当像素点所在直方图位于图像四角位置,且像素点所在象限位于图像四角位置,则将像素点所在邻域直方图的映射灰度作为另外三个邻域直方图的映射灰度;
37、当像素点所在直方图位于图像边框顶部或底部位置,且像素点所在象限相邻图像边框顶部或底部位置,则将像素点所在邻域直方图的映射灰度作为与其垂直相邻的邻域直方图的映射灰度,将与像素点所在邻域直方图水平相邻的邻域直方图的映射灰度作为与其垂直相邻的邻域直方图的映射灰度;
38、当像素点所在直方图位于图像边框左侧或右侧位置,且像素点所在象限相邻图像边框左侧或右侧,则将像素点所在邻域直方图的映射灰度作为与其水平相邻的邻域直方图的映射灰度,将与像素点所在邻域直方图垂直相邻的邻域直方图的映射灰度作为与其水平相邻的邻域直方图的映射灰度。
39、当像素点位于图像四周边框位置,则不存在完整的四个邻域直方图,因此需要对部分直方图重复利用。第一种情况是像素点位于图像左上、右上、左下或右下四角位置,且当像素点所在象限同样对应位于图像左上、右上、左下或右下四角位置,则除了像素点所在邻域直方图,其他三个邻域直方图为不存在,此时重复利用像素点所在邻域直方图,将像素点所在邻域直方图的映射灰度作为另外三个邻域直方图的映射灰度。第二种情况是像素点位于图像边框顶部或底部位置,非四角位置,并且像素点所在象限同样相邻图像边框顶部或底部位置,则存在像素点所在邻域直方图和与其水平相邻的邻域直方图,另外两个邻域直方图不存在,此时重复利用当前存在的两个邻域直方图,如记像素点所在邻域直方图为a,与其水平相邻的邻域直方图为b,则将邻域直方图a的映射灰度作为与邻域直方图a垂直相邻的邻域直方图的映射灰度,同样将邻域直方图b的映射灰度作为与邻域直方图b垂直相邻的邻域直方图的映射灰度。第三种情况是像素点位于图像边框左侧或右侧位置,非四角位置,并且像素点所在象限同样相邻图像边框左侧或右侧位置,则存在像素点所在邻域直方图和与其垂直相邻的邻域直方图,另外两个邻域直方图不存在,此时重复利用当前存在的两个邻域直方图,如记像素点所在邻域直方图为c,与其垂直相邻的邻域直方图为d,则将邻域直方图c的映射灰度作为与邻域直方图c水平相邻的邻域直方图的映射灰度,同样将邻域直方图d的映射灰度作为与邻域直方图d水平相邻的邻域直方图的映射灰度。
40、作为一种优选方案,所述s4具体包括:
41、基于像素点坐标计算四个邻域直方图映射灰度权重,根据权重计算双线性插值的中间值,计算如下:
42、bia=(windoww/2-δx)*( windowh/2-δy)* ya
43、bib=(windoww/2+δx)*( windowh/2-δy)* yb
44、bic=(windoww/2-δx)*( windowh/2+δy)* yc
45、bid=(windoww/2+δx)*( windowh/2+δy)* yd
46、其中bia、bib、bic、bid分别为双线性插值中间量,δx为像素点距离四个邻域直方图中心点的横向距离,δy为像素点距离四个邻域直方图中心点的纵向距离,ya、yb、yc、yd分别为像素点在四个邻域直方图的映射灰度,windoww为窗口宽度,windowh为窗口高度;
47、根据双线性插值中间量计算增强像素点灰度,计算如下
48、y’=(bia+bib+bic+bid)/( windoww* windowh)。
49、对于待增强的像素点,根据像素点的灰度获得四个邻域直方图,进而获得四个不同的映射灰度,结合像素点的坐标来计算四个映射灰度的权重,其中像素点坐标的∆x和∆y决定四个映射灰度的权重,最后经fpga组合逻辑乘法器运算后获得双线性插值结果,为像素点最终增强结果,即增强像素点灰度。
50、一种基于fpga的clahe图像增强实时处理系统,包括,
51、yuv色空间转换模块,对视频流进行yuv色彩空间转换;
52、直方图划分模块,根据设定窗口对图像进行直方图区域划分;
53、外部存储模块,以窗口高度大小行数对视频像素流进行存储;
54、cdf曲线计算顶层模块,至少包括三个采用乒乓操作的cdf曲线计算顶层模块,对三个顶层模块循环输入第一图像行进行直方图cdf曲线计算,并结合输入第二图像行进行像素点邻域直方图灰度映射计算,输出像素点四个邻域直方图映射灰度;
55、双线性插值模块,根据像素点所在图像坐标计算对应四个邻域直方图映射灰度权重,对四个邻域直方图映射灰度进行双线性插值计算;
56、rgb色空间转换模块,对视频流进行yuv色彩空间转换。
57、作为一种优选方案,所述cdf曲线计算顶层模块包括直方图统计单元、积分单元、灰度映射单元,其中,
58、直方图统计单元,根据输入的窗口高度图像行数据,统计直方图各灰度的像素点个数,累计灰度下超过设定裁剪阈值的像素点个数的裁剪累计值;
59、积分单元,对每个直方图各灰度的像素点个数依次累加,得到直方图cdf曲线;
60、灰度映射单元,读取外部存储模块图像,结合直方图cdf曲线、裁剪累计值计算第二图像行每个像素点对应四个邻域直方图的映射灰度。
61、因此,本发明的优点是:对视频流图像进行直方图区域划分,将图像行以窗口高度为大小乒乓缓存在外部ddr中,通过建立三个顶层例化,顶层例化采用乒乓操作进行缓存,对顶层例化循环输入第一图像行完成区域化直方图统计、阈值剪裁、分布积分,并读取外部ddr中缓存的第二图像行像素,结合直方图cdf曲线、裁剪累计值实时获得像素点邻域映射灰度,并根据三个顶层例化输出数据最终获得像素点四个邻域映射灰度,最后通过双线性插值的组合逻辑运算完成对每个像素点的增强处理。本发明实现了在fpga上进行clahe图像增强处理,对图像进行实时处理,实现了真正意义上的视频实时处理。