一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

直方图均衡系统及图像处理装置的制作方法

2021-12-01 00:48:00 来源:中国专利 TAG:


1.本发明涉及图像处理领域,尤其涉及一种直方图均衡系统以及一种图像处理装置。


背景技术:

2.直方图均衡(histogram equalization)是图像处理领域中的一种利用图像直方图调整对比度的方法,其可以用于增强局部的对比度而不影响整体的对比度。直方图均衡可用于增强背景和前景都太亮或太暗的图像(即动态范围偏小的图像)的对比度,而且可以用于对包括医学图像、雷达图像等高动态范围(high

dynamic range,hdr)图像进行色调映射。色调映射指的是压缩高动态范围图像使图像满足常规显示设备进行显示的动态范围的技术,其中尽可能地保留高动态范围图像内的对比度、颜色等信息。
3.实现直方图均衡的算法的基本操作包括统计每个灰度级在输入图像的全部像素中出现的次数,并进行运算处理,将每个像素的灰度级映射到新的灰度级。该算法可通过硬件电路实现,其中,利用一定频率的系统时钟信号控制直方图均衡系统中相应功能模块的操作,例如系统在接收到一帧输入图像的像素点后,接着进行灰度级统计,计数模块需要在系统时钟信号的一个时钟周期内,完成从存储器中读取相应灰度级的上一统计值、加1后再写入存储器的过程。
4.随着芯片制造工艺的发展,图形处理芯片的尺寸及耗电都在下降,如目前已经开发出40纳米低耗电(40lp)制程。同时,所采用的系统时钟信号的频率也在提高,如达到150mhz以上,甚至200mhz以上。这种情况下,如果要完成如上述灰度级统计的过程,且同时满足整体系统的时序,一种方法是采用两倍于系统时钟频率的高频电路对存储器进行读写操作,但这样系统时钟频率的两倍可能会达到300mhz以上,时序会非常紧张,容易导致输出错误;另一种方法是利用两个系统时钟周期分别进行读写,即算法上只对奇数列或偶数列的像素点进行灰度级统计,舍弃了对其它像素点的统计,存在统计精度差的问题。时序紧张及统计精度差的问题也会影响到色调映射的效果。


技术实现要素:

5.为了缓解在高频率时钟信号下出现的时序紧张问题,同时确保较高的统计精度,本发明提供了一种直方图均衡系统。另外还提供一种包括所述直方图均衡系统的图像处理装置。
6.一方面,本发明提供一种直方图均衡系统,包括直方图均衡电路、第一存储器和第二存储器,所述直方图均衡电路包括:直方图统计模块,所述直方图统计模块用于根据系统时钟信号逐行接收图像中各个像素点在给定灰度区间内的灰度级,并根据第一存储器时钟信号对所述第一存储器进行读写操作,以将关于奇数列像素点在所述给定灰度区间内的各灰度级出现次数的统计值存储到所述第一存储器,以及,根据第二存储器时钟信号对所述第二存储器进行读写操作,以将关于偶数列像素点在所述给定灰度区间内的各灰度级出现
次数的统计值存储到所述第二存储器;其中,所述第一存储器时钟信号根据所述奇数列像素点的接收信号设置,所述第二存储器时钟信号根据所述偶数列像素点的接收信号设置。
7.可选的,所述第一存储器时钟信号和所述第二存储器时钟信号中,对一个所述像素点的操作周期包括读出相应统计值的读操作时间和加1再写入的写操作时间,并且,对于同一行上依次排列的奇数列像素点和偶数列像素点,所述奇数列像素点的写操作时间与所述偶数列像素点的读操作时间重叠。
8.可选的,所述直方图均衡系统还包括第三存储器;所述直方图统计模块还用于分别读取所述第一存储器存储的各灰度级对应的统计值和所述第二存储器存储的各灰度级对应的统计值,分别加和计算,得到所述各灰度级对应的总统计值,并将所述总统计值存储到所述第三存储器。
9.可选的,所述第一存储器、所述第二存储器和所述第三存储器均为单口静态随机存取存储器(即单口sram)。
10.可选的,所述直方图均衡电路还包括直方图裁剪模块以及直方图累积模块;所述直方图裁剪模块用于在所述直方图统计模块接收下一帧图像之前判断所述各灰度级对应的总统计值是否超过裁剪阈值,计算超过所述裁剪阈值的总像素点数,并对所述总像素点数进行灰度级分配,直至所述各灰度级对应的总统计值均未超过所述裁剪阈值;所述直方图累积模块用于在所述直方图统计模块接收下一帧图像之前、根据所述直方图裁剪模块处理得到的所述各灰度级对应的总统计值进行累积计算,得到所述各灰度级对应的累积统计值;其中,0灰度级对应的累积统计值等于所述0灰度级对应的总统计值,大于0的灰度级对应的累积统计值为前一灰度级对应的累积统计值与所述大于0的灰度级对应的总统计值之和。
11.可选的,在对所述总像素点数进行灰度级分配的过程中,对于任一个所述灰度级,所述直方图裁剪模块基于所述系统时钟信号在连续三个时钟周期内依次完成以下三个操作:对所述第三存储器中相应地址进行的读操作、将读出的所述总统计值与一指定分配数进行相加的操作、以及根据相加值与所述裁剪阈值的比较结果将更新后的总统计值写入所述第三存储器中同一地址的写操作;其中,当读出的所述总统计值与所述指定分配数的相加值超过所述裁剪阈值时,以所述裁剪阈值作为所述更新后的总统计值,当读出的所述总统计值与所述指定分配数的相加值未超过所述裁剪阈值时,以所述相加值作为所述更新后的总统计值。
12.可选的,所述直方图裁剪模块两两一组地对所述第三存储器中的所述各灰度级进行所述三个操作;其中,在对同一组内的在前灰度级进行第二个操作的时钟周期,同时对同一组内的在后灰度级进行第一个操作。
13.可选的,对于任一个所述灰度级,所述直方图累积模块基于所述系统时钟信号在连续三个时钟周期内依次完成以下三个操作:对所述第三存储器中相应地址进行的读操作、计算所述灰度级对应的累积统计值的操作以及将所述累积统计值写入所述第三存储器中同一地址的写操作;并且,所述直方图累积模块两两一组地对所述第三存储器中的各个所述灰度级进行所述三个操作,其中,在对同一组内的在前灰度级进行第二个操作的时钟周期,同时对同一组内的在后灰度级对应第一个操作。
14.可选的,所述给定灰度区间为0~2047;所述系统时钟信号的频率大于或等于
150mhz;所述直方图均衡系统用于进行全局色调映射。
15.一方面,本发明提供一种包括上述所述直方图均衡系统的图像处理装置。
16.本发明提供的直方图均衡系统包括直方图均衡电路以及第一存储器和第二存储器,其中直方图均衡电路的直方图统计模块根据系统时钟信号逐行接收图像中各个像素点在给定灰度区间内的灰度级,并根据第一存储器时钟信号将关于奇数列像素点在所述给定灰度区间内的各灰度级出现次数的统计值存储到所述第一存储器,根据第二存储器时钟信号将关于偶数列像素点在所述给定灰度区间内的各灰度级出现次数的统计值存储到所述第二存储器,所述第一存储器时钟信号和第二存储器时钟信号分别根据所述奇数列像素点和偶数列像素点的接收信号设置,从而所述直方图统计模块实现了对奇数列像素点和偶数列像素点的分时统计,所述第一时钟信号和所述第二时钟信号的频率相对于系统时钟信号降低,可以缓解高频率系统时钟信号下读写数据容易出现的时序紧张问题,而且奇数列像素点和偶数列像素点都被统计,因而所述直方图均衡系统能够在确保较高的统计精度的情况下适应宽时钟频率范围工作。
17.进一步的,上述直方图均衡电路中,直方图裁剪模块和直方图累积模块均可以针对任一个所述灰度级,基于所述系统时钟信号在连续三个时钟周期内依次完成以下三个操作:对第三存储器中相应地址进行的读操作、根据读出值进行计算的操作以及将更新后的数据再写入第三存储器同一地址的操作,通过采用两两一组方式对各个所述灰度级进行这三个操作,并在对同一组内的在前灰度级进行第二个操作的时钟周期,同时对同一组内的在后灰度级对应第一个操作,便于将针对每个所述灰度级的平均处理时间缩短到两个时钟周期,从而相对于逐个灰度级进行这三个操作时平均需耗时至少三个时钟周期的情况,帧间时间可以被缩短,即帧率提高,从而可以提升所述直方图均衡系统的性能。
附图说明
18.图1是本发明实施例的直方图均衡系统的结构示意图。
19.图2是利用本发明实施例中的直方图统计模块分别将奇数列和偶数列的像素点的统计值存储到第一存储器和第二存储器的时序信号示意图。
20.图3是利用本发明实施例中的直方图统计模块将第一存储器和第二存储器存储的各灰度级对应的统计值相加并将总统计值存入第三存储器的时序信号示意图。
21.图4a和图4b为示例直方图的裁剪前后对比。
22.图5为本发明实施例的直方图均衡系统进行图像处理的时序信号示意图。
23.图6为利用本发明实施例中的直方图裁剪模块将超过裁剪阈值的总的像素点数向各灰度级分配的时序信号示意图。
24.附图标记说明:
25.100

直方图均衡系统;110

直方图均衡电路;111

直方图统计模块;112

直方图裁剪模块;113

直方图累积模块;120

存储模块;130

预处理模块;140

均衡输出模块。
具体实施方式
26.以下结合附图和具体实施例对本发明的直方图均衡系统及图像处理装置作进一步详细说明。根据下面的说明,本发明的优点和特征将更清楚。需说明的是,附图均采用非
常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。需要说明的是,说明书中的术语“第一”、“第二”等用于在类似要素之间进行区分,且未必是用于描述特定次序或时间顺序。要理解,在适当情况下,如此使用的这些术语可替换,例如可使得本文所述的本发明实施例能够不同于本文所述的或所示的其它顺序来操作。
27.本发明的直方图均衡系统采用了直方图均衡算法,可以用来实现全局色调映射(global tone mapping),以下实施例主要以实现全局色调映射的示例来对本发明的直方图均衡系统进行说明。全局色调映射指的是对整幅图像中全部的像素点采用相同的变换函数进行处理,也就是说原始图像中相同灰度级的像素点,在进行全局色调映射后仍然具有相同的灰度级。本发明实施例涉及的直方图均衡系统,可以缓解在高频率时钟信号下出现的时序紧张问题,从而能够适应宽时钟频率范围工作,同时确保较高的统计精度。需要说明的是,以下描述的所述直方图均衡系统用于进行全局色调映射,但本发明不限于此,根据所述直方图均衡系统的构思,在另外的实施例中其也可以被用于其它目的,如对动态范围偏小的图像进行直方图均衡处理。
28.图1是本发明实施例的直方图均衡系统的结构示意图。参照图1,本发明一实施例的直方图均衡系统100包括直方图均衡电路110,所述直方图均衡电路110进一步包括直方图统计模块111、直方图裁剪模块112以及直方图累积模块113。概括来讲,所述直方图统计模块111、直方图裁剪模块112以及直方图累积模块113分别为对应于直方图均衡算法中的直方图统计(hist)、直方图裁剪(clip)以及直方图累积(cdf)而设置的电路模块。所述直方图均衡系统100另外还包括存储模块120。所述存储模块120包括若干存储器,所述存储器例如采用的是静态随机存取存储器(以下简称sram)。sram不需要刷新电路即可以保存里面的数据,且读写速度很快,并且还可以采用可编程逻辑电路实现。为了缩小电路占用面积,本实施例中采用的存储器例如为单端口的sram,即针对同一sram的读操作或者写操作是分开进行的。
29.本发明的直方图均衡系统100要处理的图像数据例如来自摄像头的输出,参照图1,要处理的图像数据例如为高动态范围(hdr)的浮点rgb图像(raw格式),要处理的图像数据存储在缓存存储器(记为sram0)中。所述直方图均衡系统100还包括预处理模块130和均衡输出模块140。raw格式的原始图像数据在输入到直方图均衡电路110的直方图统计模块111之前,分别向两路传输,一路原始图像数据通过sram0向预处理模块130传输,另一路原始图像数据向均衡输出模块140输出,且向均衡输出模块140输出的图像数据比向sram0输出的图像数据延迟一帧。所述预处理模块130用于对要进行直方图均衡处理的图像的原始图像数据进行空间域转换并获得图像中各个像素点在给定灰度区间内的灰度级,以及根据系统时钟信号将所述各个像素点在所述给定灰度区间内的灰度级向所述直方图统计模块111输出。通过进行空间域转换,可以更容易地在直方图均衡电路110的通道上压缩和发送。本发明实施例中,可以对raw格式的原始图像进行转换得到每个像素点的像素值,所述像素值包括对数亮度(表示为logy),称为y变换,y变换后的图像例如在yuv色彩空间。y变换可以采用本领域公开的方法,例如3
×
3矩阵计算。作为示例,一帧原始图像中的每个像素点从raw格式经过y变换后,具有20bit位宽,所述预处理模块130还将像素点从20bit位宽压缩到11bit,以仅保留亮度数据,此处得到的亮度数据即相应像素点的灰度级。本实施例通过预处理模块130得到的像素点的灰度级例如均位于0~2047的灰度区间范围。但本发明不限于
此,在其它实施例中,本发明的直方图均衡系统也可以针对其它给定灰度区间(如0~255)进行直方图均衡,而且应用的系统时钟信号可以是高频率(例如150mhz以上),也可以是低频率(例如小于150mhz)。
30.所述均衡输出模块140用于对所述图像的像素点进行灰度映射,使得每个所述像素点具有新的灰度级,并输出采用均衡后的灰度级分布的图像。本发明实施例中,均衡输出模块140利用上一帧图像经直方图均衡电路110得到的直方图映射值来完成当前图像中每个像素点的灰度映射。
31.本发明实施例的直方图均衡系统100中,直方图均衡电路110的直方图统计模块111用于根据系统时钟信号逐行接收一图像(本实施例作为当前图像)中每个像素点的值并进行直方图统计,每个像素点的值通过该像素点在给定灰度区间内的灰度级表示。而且,为了缓解在高频率时钟信号下出现的时序紧张问题,同时确保较高的统计精度,所述直方图统计模块111采用了对奇数列和偶数列的像素点进行分时统计然后再加和的方法。
32.具体的,所述直方图统计模块111根据第一存储器时钟信号对所述存储模块120中的第一存储器sram1进行读写操作,以将关于奇数列像素点在所述给定灰度区间内(本实施例为0~2047)的各灰度级出现次数的统计值存储到所述第一存储器sram1。此处奇数列像素点指的是在同一行中位于奇数列上的像素点(如行方向上第1个像素点、第3个像素点、第5个像素点等),所述奇数列像素点对应的统计值是通过对奇数列像素点出现在所述给定灰度区间的各灰度级的次数进行统计得到的数值。所述直方图统计模块111还根据第二存储器时钟信号对所述存储模块120中的第二存储器sram2进行读写操作,以将关于偶数列像素点在所述给定灰度区间内的各灰度级出现次数的统计值存储到所述第二存储器sram2。此处偶数列像素点指的是在同一行中位于偶数列上的像素点(如行方向上第2个像素点、第4个像素点、第6个像素点等),所述偶数列像素点对应的统计值是通过对偶数列像素点出现在所述给定灰度区间的各灰度级的次数进行统计得到的数值。本实施例中,所述第一存储器时钟信号根据奇数列像素点的接收信号设置,所述第二存储器时钟信号根据偶数列像素点的接收信号设置。
33.图2是利用本发明实施例中的直方图统计模块分别将奇数列和偶数列的像素点的统计值存储到第一存储器和第二存储器的时序信号示意图。参照图1和图2,pclk表示系统时钟信号。pixy_valid表示经过预处理模块130处理(如y变换以及位宽压缩)的像素点的行输出信号,pixy_valid的一次高电平对应于一行像素点的输出。pixy<10:0>表示每个像素点的灰度级的输出时间(即直方图统计模块111接收像素点的时间)。y00表示在当前图像中的坐标为(0,0)的奇数列像素点的灰度级,y01表示在当前图像中的坐标为(0,1)的偶数列像素点的灰度级。坐标(0,1)中的0代表行方向的坐标,1代表列方向的坐标,例如,y08表示在当前图像中的坐标为(0,8)的奇数列像素点的灰度级,y10表示在当前图像中的坐标为(1,0)的奇数列像素点的灰度级。pixy_tmp0<10:0>示出了每个奇数列像素点的接收时间。pixy_tmp1<10:0>示出了每个偶数列像素点的接收时间。
34.本实施例中,第一存储器sram1或第二存储器sram2中均设置有对应于给定灰度区间(如0~2047)的每个灰度级的地址,该地址直接按照灰度级表示,即地址0、地址1、地址2、...、地址2046、地址2047。每个地址用于存储有关当前图像中有多少个接收的灰度级为该地址对应灰度级的统计结果(称为统计值),该统计结果通过直方图统计模块111对接收
的像素点逐个进行分类计数得到。在接收到各个像素的灰度级后,直方图统计模块111可以读取第一存储器sram1或第二存储器sram2中相应灰度级对应的地址中的统计值,加1(指数量)后再存入同一地址。sram1_addr<10:0>示出了按照每个奇数列像素点的接收时间选择第一存储器sram1中相应地址的时序。sram2_addr<10:0>示出了按照每个偶数列像素点的接收时间选择第二存储器sram2中相应地址的时序。
35.本实施例中,直方图统计模块111根据第一存储器时钟信号对所述第一存储器sram1进行读写操作,以将奇数列像素点在灰度区间0~2047内的统计值存储到第一存储器sram1。所述第一存储器时钟信号根据奇数列像素点的接收信号生成。参照图2,所述第一存储器时钟信号具体包括按照奇数列像素点的接收时间选择第一存储器sram1中相应地址的时序信号(如sram1_addr<10:0>所示)、所述第一存储器sram1的读出信号(如sram1_me所示)和写使能信号(如sram1_we所示)。当读出信号sram1_me在高电平时,直方图统计模块111根据sram1_addr<10:0>给出的地址读出第一存储器sram1中该地址的统计值(如sram1_rd_data<20:0>所示,作为示例,q02表示第一存储器sram1中与坐标为(0,2)的奇数列像素点的灰度值相同的地址存储的统计值),然后在写使能信号sram1_we由高电平转换为低电平时将读出的统计值加1后的值(作为更新后的统计值)写入原来的地址(如sram1_wr_data<20:0>所示)。由于直方图统计模块111按照系统时钟信号pclk的两倍时钟周期为间隔分别接收相邻的两个奇数列像素点的值,按照第一存储器时钟信号完成“读出统计值、 1再写入”的时间两倍于系统时钟信号pclk的时钟周期,因而可以缓解当系统时钟信号pclk为高频率时的时序紧张问题,减小由于时序紧张导致输出错误的风险。
36.本实施例中,直方图统计模块111根据第二存储器时钟信号对第二存储器sram2进行读写操作,以将偶数列像素点在灰度区间0~2047内的统计值存储到第二存储器sram2。所述第二存储器时钟信号根据偶数列像素点的接收信号生成。参照图2,所述第二存储器时钟信号具体包括按照偶数列像素点的接收时间选择第二存储器sram2中相应地址的时序信号(如sram2_addr<10:0>所示)、第二存储器sram2的读出信号(如sram2_me所示)和写使能信号(如sram2_we所示)。当读出信号sram2_me在高电平时,直方图统计模块111根据sram2_addr<10:0>给出的地址读出第二存储器sram2中该地址的统计值(如sram2_rd_data<20:0>所示,作为示例,q11表示第二存储器sram2中与坐标为(1,1)的偶数列像素点的灰度级相同的地址存储的统计值),然后在写使能信号sram2_we由高电平转换为低电平时将读出的统计值加1后的值(作为更新后的统计值)写入第二存储器sram2中原来的地址(如sram2_wr_data<20:0>所示)。由于直方图统计模块111按照系统时钟信号pclk的两倍时钟周期为间隔分别接收相邻两个偶数列像素点的值,按照第二存储器时钟信号完成“读出统计值、 1再写入”的时间是系统时钟信号pclk的时钟周期的两倍,因而可以缓解当系统时钟信号pclk为高频率时的时序紧张问题,减小由于时序紧张导致输出错误的风险。
37.利用上述方法,直方图统计模块111可以遍历图像(大小为w
×
h,w代表行方向的像素点数,h代表列方向的像素点数)中的每个像素点,共统计w
×
h次,在对一帧图像全部统计完之后,关于当前图像中奇数列像素点的统计值被存储到第一存储器sram1,关于当前图像中偶数列像素点的统计值被存储到第二存储器sram2。相对于只统计奇数列或偶数列的像素点的方式,统计精度较高。
38.参见图2,针对第一存储器sram1的第一存储器时钟信号和针对第二存储器sram2
的第二存储器时钟信号对每个像素点的操作周期包括读出统计值的时间和加1再写入的时间,并且,对于同一行上依次排列的奇数列像素点和偶数列像素点,所述第一存储器时钟信号用来完成对所述奇数列像素点进行加1再写入(即写入操作)的时间与所述第二存储器时钟信号用来完成对所述偶数列像素点进行读出统计值(即读出操作)的时间重叠,而所述第二存储器时钟信号用来完成对所述偶数列像素点进行写入操作的时间与所述第一存储器时钟信号对后一个奇数列像素点进行读出操作的时间重叠。
39.为了获得图像中的全部像素点的统计值(即,将图像中的全部像素点统计在内时,所述给定灰度区间内的各灰度级分别对应的像素点的数量),所述直方图统计模块111还用于分别读取所述第一存储器sram1存储的各灰度级对应的统计值和所述第二存储器sram2存储的各灰度级对应的统计值,加和计算得到对于当前图像所述各灰度级对应的总统计值。参照图1,本实施例的直方图均衡系统100还包括第三存储器sram3,第三存储器sram3与第一存储器sram1和第二存储器sram2类似,均设置有对应于给定灰度区间(本实施例为0~2047)的每个灰度级的地址,该地址可直接通过灰度级表示,与第一存储器sram1和第二存储器sram2不同的是,第三存储器sram3中每个地址用于存储将当前图像中全部像素点作为统计对象时累计得到的该灰度级的总的统计值,这可以通过读出第一存储器sram1和第二存储器sram2中同一地址的值并分别进行相加得到。所述直方图统计模块111将所述当前图像的统计值存储到第三存储器sram3。
40.图3是利用本发明实施例中的直方图统计模块将第一存储器和第二存储器存储的各灰度级对应的统计值相加并将总统计值存入第三存储器的时序信号示意图。参照图1和图3,直方图统计模块111在对当前图像的各个像素点逐个统计结束后,q00~q2047代表第一存储器sram1中各个灰度地址存储的统计值,p00~p2047代表第二存储器sram2中各个灰度地址存储的统计值。直方图统计模块111从第一存储器sram1和第二存储器sram2中分别将位于相同地址(即灰度级相同)的统计值读出,依次可以读出2048组数据,每组数据包括与同一灰度级对应的奇数列像素点和偶数列像素点的统计值,如q00和p00、q01和p01、q02和p02、......、q2047和p2047。在读出之后,直方图统计模块111将每组数据中的两个统计值相加,并逐个写入第三次存储器sram3,如图3sram3_wr_data<21:0>所示的k0、k1、k2、...、k2047,其中,k0=q00 p00,k1=q01 p01,k2=q02和p02,依次类推,k2047=q2047 p2047,共可以得到2048个总的统计值。存储在第三存储器中的这2048个总的统计值为直方图统计模块的统计结果(如图3中hist<21:0>所示)。
41.接下来介绍本发明实施例的直方图均衡电路110中的直方图裁剪模块112。所述直方图裁剪模块112用于在所述直方图统计模块111接收下一帧图像之前判断所述各灰度级对应的总统计值是否超过裁剪阈值,计算超过所述裁剪阈值的总像素点数,并对所述总像素点数进行灰度级分配,直至所述各灰度级对应的总统计值均未超过所述裁剪阈值。
42.图4a和图4b为示例直方图的裁剪前后对比,其中,横轴表示灰度级,纵轴表示各灰度级对应的统计值。图4a为一种裁剪前的直方图分布示意图。参照图4a,某些灰度级对应的像素点统计值很高,为了进行均衡,可以对该直方图分布进行“裁剪”(hist clip),并将“裁剪”下来的数量均衡地分配到像素点统计值较低的灰度级上,如图4b裁剪后的直方图分布示意图所示。
43.本实施例中,所述直方图裁剪模块112可包括分配数计算单元以及统计值分配单
元。所述分配数计算单元用于在上述直方图统计模块111将给定灰度区间内各灰度级对应的总统计值写入第三存储器sram3的同时,判断各个总统计值是否超过裁剪阈值(cliplimit),并对超过裁剪阈值的像素点的数量进行求和,以得到总分配数(sumhist),并通过总分配数和灰度级数量计算可以平均分配到每个灰度级的预分配数(aveval),若所述总分配数小于灰度级的数量,则不需要计算可以平均分配到每个灰度级的数量,直接按照所述总分配数进行分配即可(可参照下面的第三次分配)。所述裁剪阈值可以进行设定,代表各灰度级对应的最大总统计值。
44.利用上述分配数计算单元得到总分配数和预分配数后,所述统计值分配单元用于将超过所述裁剪阈值的总分配数向所述各灰度级进行至少一次分配,并更新所述第三存储器sram3存储的所述各灰度级对应的总统计值,直至所述各灰度级对应的总统计值均未超过所述裁剪阈值。
45.作为示例,所述分配数计算单元得到的总分配数大于灰度级数,理论上可以平均分配到每个灰度级的像素点个数记为预分配数(aveval),所述预分配数记为本次分配的指定分配数。首先进行如下第一次分配:所述统计值分配单元从第三存储器sram3中逐个读取2048个地址存储的总统计值,分别判断所述总统计值加上所述预分配数后是否大于等于裁剪阈值,若是,则将裁剪阈值作为该地址的灰度级对应的更新后的总统计值,若否,则将加上预分配数后的总统计值作为相应地址的灰度级对应的更新后的总统计值。第一次分配的计算过程如下式表示:
[0046][0047]
其中,hist[i]为第i个灰度级在分配前对应的总统计值,hist[i]

为第i个灰度级在第一次分配后对应的总统计值,i=[0,1,2,...,2047](表示i在范围0~2047内取值,i为整数)。cliplimit为裁剪阈值。
[0048]
若经过第一次分配后,未完全分配掉所述分配数计算单元得到的大于裁剪阈值的像素点总数(即总分配数),剩余像素点数记为res
hist
,若剩余像素点数res
hist
大于灰度级数量(本实施例即res
hist
>2048),可以平均分配到每个灰度级的像素点数记为avevalres,则再进行如下第二次分配:所述统计值分配单元从第三存储器sram3中逐个读取2048个地址存储的总统计值,分别判断加上avevalres后是否大于等于裁剪阈值,若是,则将裁剪阈值作为该地址的灰度级对应的更新后的总统计值,若否,则将加上avevalres后的总统计值作为该地址的灰度级对应的更新后的总统计值。第二次分配的计算过程如下式表示:
[0049][0050]
其中,hist[i]"为第i个灰度级在第二次分配后对应的统计值,i=[0,1,2,...,2047]。
[0051]
若经过上述两次分配后,仍未完全分配掉所述分配数计算单元得到的大于裁剪阈值的像素点总数(即总分配数),此时剩余像素点数记为remainder,若剩余像素点数remainder大于等于灰度级数量,则可以继续按照上述第一次分配或第二次分配的方法进行分配,若剩余像素点数remainder小于灰度级数(本实施例即remainder<2048),则进行如
下第三次分配:将剩余像素点按照灰度级从小到大的顺序分配,计算过程如下式表示:
[0052]
histclip[i]=hist[k]" 1,其中,i=k,hist[k]"不等于裁剪阈值,且k=[0,1,2,...,remainder

1]。
[0053]
从上述第一次分配到第三次分配的描述中可以看出,本实施例中,所述直方图裁剪模块112在对超过所述裁剪阈值的总的像素点数(即总分配数)进行灰度级分配时,对于任一个所述灰度级,依次完成以下三个操作:对所述第三存储器sram3中相应地址进行的读操作(简称“读操作”)、将读出的所述总统计值与一指定分配数进行相加的操作(简称“加操作”)、以及根据相加值与所述裁剪阈值的比较结果将更新后的总统计值写入所述第三存储器sram3中相应地址的写操作(简称“写操作”);其中,当读出的所述总统计值与所述指定分配数的相加值超过(即大于或等于)所述裁剪阈值时,以所述裁剪阈值作为更新后的总统计值,当读出的所述总统计值与所述指定分配数的相加值未超过所述裁剪阈值时,则以所述相加值作为该灰度级更新后的总统计值。可选实施方式中,由于该过程不存在同一地址复用的情况,更新后的各个总统计值可被存回到所述第三存储器sram3更新前的地址,可以避免设置新的存储器而增加电路体积。上述第一次分配、第二次分配及第三次分配中,将超过所述裁剪阈值的总分配数向各灰度级分配的三个操作可以基于所述系统时钟信号pclk的控制下分别在连续三个时钟周期内完成。
[0054]
图5为本发明实施例的直方图均衡系统进行图像处理的时序信号示意图。参照图5,每帧图像在帧信号的控制下向直方图均衡电路100输出(对应图5位于上方的时序曲线),直方图均衡电路110延迟一行接收相应的图像并开始进行直方图统计、直方图裁剪以及直方图累积过程(对应图5位于下方的时序曲线),其中,帧信号和直方图均衡信号的高电平代表帧中时间,而低电平代表帧间时间。本发明实施例中,所述直方图均衡电路110的直方图统计模块111在帧中时间进行奇偶列像素点的直方图统计,并在两帧图像之间的时间(简称帧间隔,对应图5中的低电平)对奇数列和偶数列像素点的统计值进行加和,将得到的总统计值存入第三存储器sram3。在将所述总统计值存入第三存储器sram3的过程中,所述直方图裁剪模块112可以并行计算上述总分配数和预分配数。然后,在直方图统计模块111接收下一帧图像之前,直方图裁剪模块112进行上述“裁剪”过程,例如针对每个灰度级执行上述“读操作”、“加操作”和“写操作”的分配过程,这三个操作中,如果在前一个地址的灰度级完成总统计值更新(即完成“写操作”)后再开始处理下一个地址的灰度级,直方图裁剪模块112完成上述三次分配过程需要((2048
×
3) (2048
×
3) (remainder
×
3))个时钟周期的时长,相应的帧间时间需要大于该时长,会导致帧率较慢。
[0055]
为了缩短帧间时间,优选方案中,所述直方图裁剪模块112在进行灰度级分配时,两两一组地对所述第三存储器sram3中的各个所述灰度级进行处理(即进行上述“读操作”、“加操作”和“写操作”);并且,在对同一组内的在前灰度级进行第二个操作(即“加操作”)的时钟周期,同时对同一组内的在后灰度级进行第一个操作(即“读操作”)。进一步说明如下。
[0056]
图6为利用本发明实施例中的直方图裁剪模块将超过裁剪阈值的总分配数向各灰度级分配的时序信号示意图。参照图6,具体的,在进行灰度级分配时,首先将要读取的各灰度级的地址发送给所述第三存储器sram3(对应于sram3_addr<10:0>),并且,为了能够两两一组地对所述第三存储器sram3中的各个灰度级进行操作,要读取的各个灰度级对应的地址按照两两重复一次的方式发送(如sram3_addr<10:0>所示的0、1、0、1、2、3、2、3的顺序),
然后第三存储器sram3在使能信号(sram3_we)以及读出信号(sram3_me)的控制下,两个两个地读出对应地址存储的总统计值。例如,参见图6中的sram3_me信号和sram3_rd_data<21:0>信号,例如以sram3_me转换到高电平作为系统时钟信号pclk的第一个时钟节拍(即第一个时钟周期),在该第一个时钟节拍,对0灰度级的地址进行读操作;在紧接着的第二个时钟节拍,0灰度级对应的总统计值q00被读出,并用于进行加和处理,即“加操作”,由于第二个时钟节拍时第三存储器sram3已为可读写状态,则在该第二个时钟节拍,还对1灰度级的地址进行读操作;在随后的第三个时钟节拍,0灰度级对应的“加操作”的结果(即读出的0灰度级的总统计值与指定分配数相加得到的相加值)已经得到,根据其与裁剪阈值的比较,选择“加操作”的结果或者裁剪阈值作为更新后的0灰度级对应的新的总统计值,设置sram3_we为高电平,在第三存储器中0灰度级的地址写入新的总统计值(参见图6中的sram3_wr_data<21:0>,用“p0 q0”表示),同时在该第三个时钟节拍,针对读出的1灰度级的总统计值q01进行“加操作”;在随后的第四个时钟节拍,将1灰度级对应的新的总统计值写入第三存储器中1灰度级的地址。因为1灰度级的“加操作”与0灰度级的“写操作”为同一时钟节拍,而对于单口sram,同时只能进行读操作或者写操作,因此2灰度级对应的“读操作”没有与1灰度级的“加操作”在同一时钟周期执行,而是将2灰度级和3灰度级作为另一组灰度级进行操作。由于在第四个时钟节拍,第三存储器sram需要执行对1灰度级地址的写入操作,因此对2灰度级的读操作可以设置在第五个时钟节拍进行。对于2灰度级和3灰度级,可以按照与0灰度级和1灰度级同样的方式,在执行2灰度级对应的“加操作”的同一时钟节拍,进行3灰度级对应的“读操作”。清楚起见,本实施例将0和1灰度级看作一个组,2和3看作一个组,依此类推,在将超过所述裁剪阈值的总分配数进行灰度级分配的“裁剪”过程中,使同一组中前一个灰度级的“加操作”与后一个灰度级的“读操作”利用同一时钟节拍完成。而对于相邻的两组灰度级,可以在对前一组的后一个灰度级完成“写操作”后紧接着的下一个时钟节拍,开始对下一组的前一个灰度级进行“读操作”。
[0057]
可以看出,利用如图6所示的时序方式,所述直方图裁剪模块112将超过裁剪阈值的总分配数进行灰度级分配时,在系统时钟信号pclk的四个时钟周期内即可完成对两个连续灰度级的总统计值的操作,即平均每个灰度级需要的时间为两个时钟周期,相对于每个灰度级均通过三个时钟周期分别进行三个操作的情况平均时间大大缩短,从而便于缩短帧间时间,提高帧率。
[0058]
经过直方图裁剪模块112的处理,输入图像的像素点的直方图分布被调整(可参照图4b),灰度级直方图分布较为均衡。参照图1,本实施例中,直方图均衡电路110还包括直方图累积模块113,所述直方图累积模块113用于在所述直方图统计模块111接收下一帧图像之前、根据所述直方图裁剪模块112处理得到的所述各灰度级对应的总统计值进行累积计算,得到所述各灰度级对应的累积统计值;其中,0灰度级对应的累积统计值等于所述0灰度级对应的总统计值,大于0的灰度级对应的累积统计值为前一灰度级对应的累积统计值与所述大于0的灰度级对应的总统计值之和。
[0059]
作为示例,设定经所述直方图裁剪模块112处理后得到的是第(n

1)帧图像的裁剪直方图,记为histclip
n
‑1,n为大于等于2的整数。直方图累积模块113根据所述裁剪直方图histclip
n
‑1来计算出累积直方图histcdf
n
‑1。后续由累积直方图histcdf
n
‑1可计算直方图映射值histcdfmap
n
‑1。histcdf
n
‑1的计算过程如下式表示:
[0060]
(1)当i=0时,histcdf
n
‑1[i]=histclip
n
‑1[i];
[0061]
(2)当i>0时,histcdf
n
‑1[i]=histclip
n
‑1[i

1] histclip
n
‑1[i];其中,i=[0,1,2,...,2047]。
[0062]
本实施例中,裁剪直方图histclip
n
‑1包括第(n

1)帧图像的像素点(包括奇数列像素点和偶数列像素点)经直方图统计及直方图裁剪后得到的所述给定灰度区间内各个灰度级对应的总统计值,而上述累积直方图histcdf
n
‑1对应于所述给定灰度区间内各个灰度级对应的累积统计值,其中,0灰度级对应的累积统计值与直方图裁剪处理后的0灰度级对应的总统计值相同,而大于0的灰度级对应的累积统计值为前一灰度级对应的累积统计值与所述大于0的灰度级对应的总统计值之和。
[0063]
所述各灰度级对应的累积统计值可以再存至所述第三存储器sram3中各灰度级对应的地址,以节省存储器的数量进而缩小电路体积。本实施例中,对于任一个所述灰度级,所述直方图累积模块113基于系统时钟信号pclk在连续三个时钟周期内分别进行对所述第三存储器sram3中相应地址进行的读操作、计算所述灰度级对应的累积统计值的操作以及将所述累积统计值写入所述第三存储器中相应地址的写操作。每个所述累积统计值可以存入第三存储器中原来存储总统计值的对应灰度级的地址。对于灰度区间0~2047,通过逐个对每个灰度级执行该三个操作,2048个灰度级需要经过2048的三倍即6144个时钟周期完成。
[0064]
本实施例中,所述直方图累积模块113获取各灰度级的累积统计值的过程也是在所述直方图均衡电路110接收下一帧图像之前完成,并且,为了缩短帧间时间,提高帧率,所述直方图累积模块113可以采用类似于直方图裁剪模块112对第三存储器sram3进行读写操作的时序配置方式,具体的,所述直方图累积模块113可以两两一组地对所述第三存储器sram3中的各个所述灰度级进行三个操作(对所述第三存储器sram3中相应地址进行的读操作、计算所述灰度级对应的累积统计值的操作以及将所述累积统计值写入所述第三存储器中相应地址的写操作);其中,在对同一组内的在前灰度级进行第二个操作(即计算所述灰度级对应的累积统计值的操作)的时钟周期(或时钟节拍),同时对同一组内的在后灰度级对应第一个操作(即对所述第三存储器sram3中相应地址进行的读操作)。在对同一组内的后一个所述灰度级也完成第三个操作后的下一个时钟周期,开始对下一组的前一个所述灰度级进行第一个操作。
[0065]
得到累积统计值后,后续需要对图像的各像素点进行映射,以得到新的灰度级。对于映射操作需要的直方图映射值(或映射表,给定灰度区间内的每个灰度级均对应于一个映射值),本实施例采用通过上一帧图像完善的直方图映射值作为当前帧图像在灰度级映射时采用的映射值,而当前帧图像完善的直方图映射值作为下一帧图像在灰度级映射时采用的映射值。
[0066]
作为示例,根据累积统计值(对应于累积直方图histcdf)计算第(n

1)帧图像完善的直方图映射值。计算过程如下式表示:
[0067]
其中i=[0,1,2,...,2047],w表示当前图像在宽度方向上的像素点数量,h表示当前图像在高度方向上的像素点数量。所述直方图映射值也可以存入第三存储器sram3。
[0068]
经过上述描述可以看出,本发明实施例中,直方图均衡电路110的直方图统计模块111根据系统时钟信号pclk逐行接收图像中各个像素点在给定灰度区间内的灰度级,并根据第一存储器时钟信号将关于奇数列像素点在所述给定灰度区间(例如0~2047)内的各灰度级出现次数的统计值存储到所述第一存储器sram1,根据第二存储器时钟信号将关于偶数列像素点在所述给定灰度区间内的各灰度级出现次数的统计值存储到所述第二存储器sram2,所述第一存储器时钟信号和第二存储器时钟信号分别根据所述奇数列像素点和偶数列像素点的接收信号设置。所述直方图统计模块111将对奇数列像素点的统计和偶数列像素点的统计分时进行,所述第一时钟信号和所述第二时钟信号的频率相对于所述系统时钟信号pclk的频率降低,可以缓解高频率系统时钟信号下读写数据容易出现的时序紧张问题,使得所述直方图均衡电路110能够在确保较高的统计精度的情况下适应宽时钟频率范围工作。
[0069]
而且,上述直方图均衡电路110中,针对任一个所述灰度级,直方图裁剪模块112和直方图累积模块113均可包括读取第三存储器sram3中相应地址的操作、对读出值进行运算的操作以及将更新后的数据再写入第三存储器sram3的操作,通过两两一组地对所述第三存储器sram3中的各个灰度级进行这三个操作,并在对同一组内的在前灰度级进行第二个操作的时钟周期,同时对同一组内的在后灰度级进行第一个操作,便于将针对每个所述灰度级的平均处理时长缩短到两个时钟周期,从而相对于逐个灰度级依次进行这三个操作时平均每个灰度级需要耗时至少三个时钟周期的情况,帧间时间可以被缩短,即帧率提高,从而可以提高所述直方图均衡系统100的性能。
[0070]
本发明实施例直方图统计系统100包括均衡输出模块140,所述均衡输出模块140根据当前图像的像素点的灰度级以及上一帧图像完善的直方图映射值得到当前图像各个像素点的新的灰度级,并输出采用均衡后的灰度级分布的图像。
[0071]
作为示例,给定灰度区间例如为0~2047,第n帧图像中的像素点坐标值记为(r,c),r表示像素点在行方向的位置,c表示像素点在列方向上的位置。像素点(r,c)在进行y变换后的像素值为imagey
n
(r,c),imagey
n
(r,c)位宽例如为20位,imagey
n
(r,c)>>9表示右移9位保留11位,并作为映射前的灰度级(表示为currentlevel)。在进行灰度映射时,先计算下一灰度级nextlevel,然后再计算相应像素点调整后的像素值imageynew
n
(r,c),具体满足下面的关系:
[0072]
currentlevel=imagey
n
(r,c)>>9;
[0073][0074][0075]
其中,mod表示取余数函数。所述均衡输出模块140另外根据imageynew
n
(r,c)以及各个像素点在y变换前的图像数据得到新的图像数据并输出图像,所述均衡输出模块140输出的图像采用了均衡后的灰度级分布。
[0076]
需要说明的是,在另外的实施例中,所述给定灰度区间也可能不同,本发明关于计
算所述直方图映射值及进行灰度级映射的过程不限于上述示例,该过程也可以采用本领域公开的有关直方图均衡映射操作的方法执行。
[0077]
本发明实施例还包括一种图像处理装置,包括本发明实施例上述的图像处理系统100。例如,所述图像处理装置可以装配有集成了所述图像处理系统100的芯片,可以用于增强背景和前景都太亮或太暗的图像即动态范围偏小图像的对比度,也可以对包括医学图像、雷达图像等高动态范围(high

dynamic range,hdr)图像进行色调映射。由于所述图像处理系统100可以缓解在高频率时钟信号下出现的时序紧张问题,同时确保较高的统计精度,因而所述图像处理装置具有较佳的图像处理性能。
[0078]
上述实施例中的直方图处理系统100及图像处理装置的处理、执行,一般是以软件程序的方式配合装置或设备来实施,不管是以软件或者硬件方式,其个别部分是熟悉电子、软件领域人员可以进行实施的,因此,其细节就不在本说明书中赘述。
[0079]
本实施例中的结构采用递进的方式描述,在后的结构重点描述说明的是与在前的结构的不同之处,相关之处可以参照理解。
[0080]
上述描述仅是对本发明较佳实施例的描述,并非对本发明权利范围的任何限定,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献