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

一种高动态图像增强方法与流程

2022-02-22 05:53:39 来源:中国专利 TAG:


1.本发明涉及机器视觉技术领域,尤其是涉及一种高动态图像增强方法。


背景技术:

2.目前,高动态范围图像显示具有广泛的应用,如夜晚有强光照情况下行车记录仪的图像记录和显示,工业焊接机器人对高动态焊接图像的显示等,其图像的亮度动态范围较大,图像比特数高,可以达到20比特及以上。而目前大多数的显示设备只可以显示8比特的图像,因此需要专门的算法来处理这样20比特以上的数据,使其能保留原始场景在人眼中的视觉效果。高动态图像增强技术的目的是将高动态图像的动态范围进行压缩,使其能够在低动态范围的显示设备上进行显示,并能用于后续的图像处理。现有的高动态图像增强技术由于其计算复杂,很难在嵌入式平台上应用。直方图均衡是一种图像增强算法,具有很好的效果,但是对于20位或更高位的超宽动态图像,其直方图过于庞大,计算量和存贮量都很大,一般的芯片难以满足要求。因此,对于现有技术来说,目前的高动态图像增强算法较难在嵌入式系统上实现高动态图像的实时增强处理。


技术实现要素:

3.本发明提出了一种基于低成本的嵌入式硬件平台实现高动态视频图像的实时增强处理算法,具有占用内存小且计算复杂度低的特点。
4.本发明的目的是通过以下技术方案来实现的:
5.一种高动态图像增强算法,包括以下步骤:
6.s1:对输入图像取高k1位统计图像的高位直方图h
f0

7.s2:根据直方图h
f0
计算直方图均衡变换函数m0;
8.s3:用直方图均衡变换函数m0对直方图h
f0
进行灰度变换,得到变换后的直方图h
g0

9.s4:在h
g0
上找到长度最大的n个零值区间,按零值区间长度从长到短排序为g1,g2,
…gn
;或在h
g0
上找到最大的n个值对应的左侧的n个零值区间,按该n个值的大小从大到小排序为g1,g2,
…gn
;每个零值区间包括所有连续的零值和右侧第一个非零值;
10.s5:对零值区间gi,i=1,2,

n分别找到输入图像的灰度区间端点,及其对应的输出图像的灰度区间端点;
11.s6:将找到的输入图像的各个零值区间gi,i=1,2,

n,分别线性变换到k2位,并分别统计各个区间的直方图h
f1
,h
f2
,

,h
fn

12.s7:用各直方图h
fi
,i=1,2,

n及其对应的线性变换函数,计算各自对应的直方图均衡变换函数mi,i=1,2,

n;
13.s8:用各直方图均衡变换函数对输入图像的每个像素的灰度值进行变换。
14.当输入图像为rgb彩色图像时,将图像转为hsv颜色空间,只对v分量进行处理。
15.当输入图像为rgb彩色图像时,将图像转为hsi颜色空间,只对i分量进行处理。
16.本发明还公开一种高动态视频图像增强方法,对输入的视频进行逐帧图像增强,
其特征在于包括如下步骤:
17.s11:对每一帧输入图像取高k1位统计图像的高位直方图h
f0

18.s12:用前一帧图像的高位直方图h
f0
计算直方图均衡变换函数m0;
19.s13:用上述直方图均衡变换函数m0对直方图h
f0
进行灰度变换,输出变换后的直方图h
g0

20.s14:在h
g0
上找到长度最大的n个零值区间,按零值区间长度从长到短或其右侧相邻非零值从大到小排序为g1,g2,
…gn
;或在h
g0
上找到最大的n个值对应的左侧的n个零值区间,按该n个值从大到小排序为g1,g2,
…gn

21.s15:对区间gi,i=1,2,

n分别找到输入图像的灰度区间端点,及其对应的输出图像的灰度区间端点;
22.s16:将找到的输入图像的各个区间gi,i=1,2,

n,分别线性灰度变换到k2位,对当前帧图像分别统计各个区间的直方图h
f1
,h
f2
,

,h
fn

23.s17:用各直方图h
fi
,i=1,2,

n,计算各自对应的直方图均衡变换函数mi,i=1,2,

n;
24.s18:根据直方图均衡变换函数mi,i=1,2,

n,和上一帧得到的变换函数m0,对下一帧输入图像的每个像素的灰度值进行变换,得到输出图像。
25.本发明的有益效果是,本发明的高动态图形增强方法占用内存小、计算复杂度低,能够使用低成本的fpga硬件设备或嵌入式处理器上实现高动态图像直方图均衡增强处理算法,进而实现超高动态图像的实时增强处理。
附图说明
26.图1是本发明中高动态图像增强方法的流程图。
27.图2是本发明中高动态视频图像增强方法的流程图。
28.图3是具体实施例中直方图hg0及其前4个零值区间,及其与高13位图像和20位图像值的对应关系。
具体实施方式
29.下面结合附图和具体的实施实例对本发明做进一步阐述。以下实例用于说明本发明,但不用于限制本发明的范围。
30.实施例一:
31.对于输入的高动态图像,具体的增强方法的流程图如图1所示,具体过程如下:
32.s1.对输入图像取高k1位统计图像的高位直方图h
f0

33.如果输入图像是没有亮度分量的彩色空间,则将其转到hsv或hsi等彩色空间后取图的亮度分量(v或i),其中转到hsv的v分量的公式如下:
34.v=max(r,g,b)
35.其中r,g,b分别代表高动态图像每个像素在红,绿,蓝三通道的分量,v表示输入图像的亮度分量。
36.如果输入图像为单色图像,则只包括亮度分量v。
37.然后对输入图像的亮度分量v,取其二进制数的高k1位,得到输入图像亮度分量的
高位v
scaled

[0038]vscaled
=v>>(k
max-k1)
[0039]
其中k
max
为输入高动态图像中最大的灰度值对应的二进制量化位数,或取输入图像的量化位数。
[0040]
然后统计输入图像量化后的亮度分量v
scaled
的高位直方图h
f0
。该直方图h
f0
也称为一级直方图。具体如下式所示:
[0041][0042]
其中m和n分别是图像的宽度和高度,δ函数定义为:
[0043][0044]
s2.用该直方图h
f0
计算直方图均衡变换函数m0。建映射函数m0(k)按下式计算:
[0045][0046]
其中t是图像的像素总数,n为显示设备的最高灰度级,通常取255或256。
[0047]
s3.用直方图均衡变换函数m0对直方图h
f0
进行灰度变换,得到变换后的直方图h
g0

[0048]
首先遍历直方图h
f0
,对直方图每个灰度值都根据m0映射到新的灰度值,得到变换后的直方图h
g0
,由于h
g0
取值范围为0~n,h
f0
的取值范围为k>8,因此会出现h
f0
不同的灰度映射到相同的新灰度值的情况,将相应的像素数合并即可,即将它们加在一起作为新灰度值的直方图值。
[0049]
s4.在h
g0
上找到长度最大的n个零值区间,按零值区间长度从长到短排序为g1,g2,...gn;或在h
g0
上找到最大的n个值对应的左侧的n个零值区间,按该n个值的大小从大到小排序为g1,g2,...gn;所谓找到长度最大的n个零值区间,是指从最大长度开始往下找到预设数量的n个零值区间;所谓找到最大的n个值,是指从最大值开始往下找到预设数量的n个值。
[0050]
具体为从0开始遍历直方图h
g0
,即从左至右遍历直方图h
g0
,在遇到直方图中像素点数量为0的位置开始记录区间,一直到遇到像素点数量不为0的位置,记录区间位置以及该区间长度;另一种方法是在直方图h
g0
中先找到左侧为0的最大的n个值,记录区间位置以及该区间长度或该取值。这样的区间称为零值区间,每个零值区间包括所有连续的零值和右侧第一个非零值。
[0051]
遍历完整个直方图后,会得到若干段像素点数量为0的区间,然后按照所记录的区间长度从长到短或其对应的右侧的值从大到小对区间进行排序。
[0052]
例如找到的区间为:
[0053]
[g
il
,g
ir
],i=1,2,...,n
[0054]
其中g
i1
,g
ir
分别表示区间的左右端点,g
ir
对应右侧第一个非零值,g
i1
对应左侧最初的零值(从左到右)。
[0055]
如图3所示为一幅图像的直方图h
g0
的区间示例,输入图像为20位图像,取高13位
(k1=13)计算高位直方图。
[0056]
s5.对零值区间gi,i=1,2,...n分别找到输入图像的灰度区间端点,及其对应的输出图像的灰度区间端点;
[0057]
设某个区间[g
il
,g
ir
],其g
il
和g
ir
对应原图直方图h
f0
灰度的最小值和最大值分别为v
i,min
、v
i,max
。一种方法是,根据灰度映射表确定区间端点值,首先可以根据灰度映射表中的值确定区间端点在输出图像中的取值;另一种方法是在步骤s3同时记录h
g0
的每个灰度值对应的原直方图h
f0
的灰度值范围,就能查得第i个区间[g
il
,g
ir
]对应h
f0
的区间。由于第一次均衡时只输入图像的高k1位,即对输入图像灰度值右移后的k1位的值统计得到直方图h
f0
,因此对应h
f0
对索引左移相应的位数即可确定区间端点对应输入图像的灰度值范围[v
i,min
,v
i,max
]。一幅示例图像的具体的区间端点的映射关系实例如图3所示,其中:0直接对应20位图像上的最小值0;65对应高13位图像的值是0,对应20位图像上的最大值为(0 1)*2
7-1=127;66对应高13位图像的值是1,对应20位图像上的最小值为1*27=128;138对应高13位图像的值是1,对应20位图像上的最大值为(1 1)*2
7-1=255;...;211对应高13位图像的值是10,对应20位图像上的最小值为10*27=1280;255对应高13位图像的值是8191,对应20位图像上的最大值为(8191 1)*2
7-1=1,048,575。其中高13位图像的[3,9]区间经直方图均衡后被合并到8位图像的值为210,高13位图像的[10,8191]区间变换到8位图像的[211,255]区间。
[0058]
s6.将找到的输入图像的各个零值区间gi,i=1,2,...n,分别线性变换到k2位,并分别统计各个区间的直方图h
f1
,h
f2
,...,h
fn

[0059]
对原图各灰度区间做线性变换,使第i个区间[v
i,min
,v
i,max
]映射到其中k2为用于统计直方图的范围对应二进制位数,它确定了直方图的大小,这个直方图称为二级直方图,k2可与k1相同。对[v
i,min
,v
i,max
]区间进行线性变换,将[v
i,min
,v
i,max
]区间变换到具体的线性变换方法为:
[0060][0061]
其中v为[v
i,min
,v
i,max
]区间内的原图像灰度值。
[0062]
然后分别统计各原图灰度值区间灰度变换后的y的直方图h
f1
,h
f2
,...,h
fn

[0063]
图3的例子中,将n=4个最长的非零区间,分别找到4个对应的原20位图像的取值区间:[0,127]、[128,255]、[256,383]和[384,1279]。
[0064]
s7.用各直方图h
fi
,i=1,2,...n计算各自对应的直方图均衡变换函数mi,i=1,2,...n,
[0065]
计算公式如下:
[0066]
i=1,2,...,n
[0067]
其中ni是输出图像区间长度:ni=t
ir-t
il
,其中ti是该区域内的总像素数:是该区域内的总像素数:该值与高位直方图上对应零值区间右侧第一个非零值相等;其中y按步骤s6中的公式根据所在区间计算。
[0068]
s8.用各直方图均衡变换函数对输入图像的每个像素的灰度值进行变换:
[0069][0070]
其中g(x,y)是各区间变换后的灰度值。
[0071]
如果输入图像是彩色图像,可利用变换后灰度值和步骤s1中得到的hsv或hsi空间中h和s变换回rgb彩色空间或其它彩色空间。
[0072]
在本实施例中,如果采用常规的直方图均衡算法对20位超高动态图像进行处理,则直方图大小为100多万个单元,需要用的内存为8mb,不仅占用内存大,直方图的清空也很花时间,很难实现视频的实时处理;若采用本发明方法,设区间个数为8,k1为13,k2为13,则其占用的内存为360kb。因此,本方法可以在成本较低的fpga或嵌入式处理器上实现实时超高动态图像直方图均衡处理。
[0073]
本发明为通过二级直方图均衡逼近常规直方图算法的处理效果,因此可以将常规直方图均衡处理结果作为基准,以本发明对高动态图像的处理效果对常规直方图均衡算法的处理效果的逼近程度作为本发明的性能指标。采用psnr计算的结果具体如表1所示,表中为本发明对7幅高动态图像的处理效果对常规直方图均衡算法的处理效果的逼近程度,当k1取值增加时,psnr值也增加,且当k1取13bit以上对这些图像的逼近效果都较好。
[0074]
表1各个场景下算法相对普通直方图均衡的psnr值(单位:db)
[0075][0076]
实施例二:
[0077]
对于输入的高动态视频逐帧进行直方图均衡增强处理,具体的增强方法的流程图如图2所示,与实施例一的主要差别是根据上上帧统计的高位直方图和上一帧统计的二级直方图对当前帧图像进行处理,具体过程如下:
[0078]
s11:对每一帧输入图像取高k1位统计图像的高位直方图h
f0

[0079]
高动态视频以逐帧方式输入图像数据,在硬件处理系统中难以储存一帧的图像数据直接处理,因此可以利用视频相邻帧图像内容相近的性质,对视频数据进行流水处理,将上一帧图像中计算的结果信息用于下一帧的处理。对输入系统的每一帧图像统计高k1位直方图h
f0
,具体步骤与s1相同。
[0080]
s12:用前一帧图像的高位直方图h
f0
计算直方图均衡变换函数m0。
[0081]
计算变换函数m0的具体操作与s2相同。
[0082]
s13:用上述直方图均衡变换函数m0对直方图h
f0
进行灰度变换,输出变换后的直方图h
g0
,具体操作与s3相同。
[0083]
s14:在h
g0
上找到长度最大的n个零值区间,按零值区间长度从长到短或其右侧相邻非零值从大到小排序为g1,g2,
…gn
;或在h
g0
上找到最大的n个值对应的左侧的n个零值区间,按该n个值从大到小排序为g1,g2,
…gn
;本步骤的具体操作与步骤s4相同。
[0084]
s15:对区间gi,i=1,2,

n分别找到输入图像的灰度区间端点,及其对应的输出图像的灰度区间端点;本步骤的具体操作与步骤s5相同。
[0085]
在实际应用时,步骤s11中得到高位直方图h
f0
后,可立即在到来的帧消隐期执行步骤s12、s13、s14和s15,用于下一帧处理。也即,在当前帧图像到来时,已根据上一帧图像的高位直方图找到排好序的n个零值区间,并找到各区间的左右端点。
[0086]
s16:将找到的输入图像的各个区间gi,i=1,2,

n,分别线性灰度变换到k2位,对当前帧图像分别统计各个区间的直方图h
f1
,h
f2
,

,h
fn
;本步骤的具体操作与步骤s6基本相同,所不同的是灰度区间是根据上一帧图像的高位直方图得到的。
[0087]
如果把上一帧图像记为第一帧,则当前帧图像称为第二帧图像。
[0088]
当前帧图像输入时,已经根据上一帧图像计算得到了各个区间及其左右端点,因此可以根据此端点判断输入像素的灰度属于哪个区间,并对输入的像素按照不同的区间统计直方图。
[0089]
s17:用各直方图h
fi
,i=1,2,

n,计算各自对应的直方图均衡变换函数mi,i=1,2,

n;
[0090]
步骤s16完成各个区间的直方图统计结束后,可以根据区间的直方图信息计算各个区间的直方图均衡变换函数,具体操作与步骤s7相同。本步骤在第二帧图像后的消隐期完成。
[0091]
s18:根据直方图均衡变换函数mi,i=1,2,

n(mi即二级变换函数),和上一帧(即第一帧)得到的变换函数m0(m0即一级变换函数),对下一帧(可记为第三帧)输入图像的每个像素的灰度值进行变换,得到输出图像。具体操作与步骤s8基本相同,所不同的是,对第三帧图像直方图均衡变换,利用了第一帧图像得到的变换函数m0,和第一帧图像得到的变换函数mi,i=1,2,

n。
[0092]
第三帧图像输入系统时,系统已经计算得到了各个区间的灰度映射表,因此当第三帧图像的像素输入系统时,可以根据像素的灰度判断属于哪个灰度区间,从而选择相应的灰度映射表,然后根据对应的灰度映射表得到灰度映射结果。
[0093]
上述过程对每帧图像循环处理,除最初输入的二帧外,其它图像都能实时地、几乎没有延时地输出处理结果。
[0094]
以上所表述的具体实施例的说明只适用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
再多了解一些

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

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

相关文献