1.一种对谷歌眼镜图像过度曝光的校正方法,其特征在于该方法包括以下步骤:
(1)对过度曝光的谷歌眼镜图像进行直方图均衡化,具体包括以下步骤:
(1-1)计算过度曝光的谷歌眼镜图像的直方图:利用下式计算过度曝光的谷歌眼镜图像的直方图概率分布Pr(rk):
其中,N为一幅过度曝光的谷歌眼镜图像中的像素点总数,nk表示直方图中第k灰度级中像素点的个数,rk表示直方图中第k灰度级,Pr(rk)表示第k灰度级的直方图概率分布;
(1-2)对上述步骤(1-1)中的直方图概率分布进行改写,得到与上述灰度级rk相对应的新直方图概率分布数值Pr'(rk):
其中,对步骤(1-1)中的每一个灰度级对应的概率分布数值进行开根号处理;
(1-3)根据上述步骤(1-2)的新直方图概率分布数值,利用下式计算过度曝光的谷歌眼镜图像的直方图的累积分布函数,从而得到过度曝光的谷歌眼镜图像的直方图的原始灰度级rk和新灰度级r'k的映射关系:
Sr(rk)=Sr(rk-1)+Pr'(rk)
其中,Sr(rk)表示过度曝光的谷歌眼镜图像中从第一个直方图灰度级到第rk直方图灰度级的累积分布概率,设定新灰度图的灰度级个数为255,则基于累积分布概率得到最后输出图像的新灰度级如下:
r'k=cvRound(255*Sr(rk)+0.5)
上式中,cvRound(·)表示取整函数,r'k表示过度曝光的谷歌眼镜图像的直方图原始灰度级为rk所对应的新灰度级;
(1-4)根据上述步骤(1-3)得到的原始灰度级和新灰度级的映射关系,得到过度曝光的谷歌眼镜图像的新直方图,并通过新直方图输出处理后的过度曝光的谷歌眼镜图像;
(2)在色调饱和度亮度色彩空间内对上述步骤(1)得到的谷歌眼镜图像的I分量进行亮度修正,具体包括以下步骤:
(2-1)对谷歌眼镜图像从红绿蓝色彩空间到色调饱和度亮度色彩空间的转换,包括以下步骤:
(2-1-1)利用下式计算上述步骤(1)得到的谷歌眼镜图像中的每个像素点(i,j)的色调H分量:
其中,B是上述步骤(1)得到的谷歌眼镜图像的蓝色分量值,G是上述步骤(1)得到的谷歌眼镜图像的绿色分量值;
(2-1-2)步骤(2-1-1)的色调H分量公式中θ的求值公式如下:
其中,R是上述步骤(1)得到的谷歌眼镜图像的红色分量值,B是上述步骤(1)得到的谷歌眼镜图像的蓝色分量值,G是上述步骤(1)得到的谷歌眼镜图像的绿色分量值;
(2-1-3)利用下式计算上述步骤(1)得到的谷歌眼镜图像中每个像素点(i,j)的饱和度S分量:
其中,R是上述步骤(1)得到的谷歌眼镜图像的红色分量值,B是上述步骤(1)得到的谷歌眼镜图像的蓝色分量值,G是上述步骤(1)得到的谷歌眼镜图像的绿色分量值;
(2-1-4)利用下式计算上述步骤(1)得到的谷歌眼镜图像中每个像素点(i,j)的亮度I分量:
其中,R是上述步骤(1)得到的谷歌眼镜图像的红色分量值,B是上述步骤(1)得到的谷歌眼镜图像的蓝色分量值,G是上述步骤(1)得到的谷歌眼镜图像的绿色分量值;
(2-2)利用上述步骤(2-1)计算得到的谷歌眼镜图像中每个像素点的色调H、饱和度S、亮度I分量值,对谷歌眼镜图像的亮度I分量进行调整,具体包括如下步骤:
(2-2-1)利用下式等距压缩谷歌眼镜图像中所有像素点亮度I分量值的分布区间:
其中,Ii表示图像中第i像素点的原始亮度值,I'i表示图像中第i像素点压缩或提高后的新亮度值。μ1表示当图像中像素点亮度值Ii大于0.5时的压缩因子,而μ2表示当图像中像素点亮度值Ii小于0.5时的提升因子,此处取μ1=0.75,μ2=0.8;
(2-2-2)利用下式整体降低谷歌眼镜图像中所有像素点亮度I分量值的波动,首先计算出谷歌眼镜图像所有像素点亮度值的总体均值I'mean,然后再分别计算每个像素点经过步骤(2-2-1)处理后得到的新亮度值Ii'和总体均值I'mean之间的差值,再在这些差值的基础上求出总体的波动因子dif,计算公式如下:
根据上式,求dif的过程具体分为以下三步:
(2-2-2-1)分别对每个像素点的亮度值Ii'和亮度总体均值I'mean之间求差值,然后将这些差值相加得到总和∑|I'i-I'mean|;
(2-2-2-2)对(2-2-2-1)中得到的所有像素点对应的亮度差值求平均值,得到所有像素点亮度差值的平均值为其中N表示像素点总数;
(2-2-2-3)对(2-2-2-2)中得到的亮度差值平均值进行一定的压缩,最后得到总体波动因子dif,此处μ3为压缩因子,表示对亮度差值平均值的压缩程度,取μ3=2;
(2-2-3)在得到总体波动因子dif后,根据每个像素点的亮度值Ii'和总体亮度均值I'mean之间的差值大小分别对每个像素点的亮度值Ii'做如下处理:
其中,I'i为谷歌眼镜图像中第i像素点在第(2-2-1)步处理后得到的亮度值,I”i为谷歌眼镜图像中第i像素点在第(2-2-3)步处理后得到的最终亮度值;如果谷歌眼镜图像中第i像素点的亮度值I'i加上总体波动因子dif后不大于总体亮度均值I'mean,该像素点的最终亮度值I”i=I'i+dif;反之,如果谷歌眼镜图像中第i像素点的亮度值I'i减去总体波动因子dif后不小于总体亮度均值I'mean,该像素点的最终亮度值I”i=I'i-dif;其他情况下I”i=I'i不变;
(2-3)亮度I分量经过步骤(2-2)处理后的谷歌眼镜图像从HSI色彩空间到RGB色彩空间的转换:将经过步骤(2-2)处理后的谷歌眼镜图像的新的亮度I分量I”、色调H分量和饱和度S分量合并后得到新的HSI图,由于最后输出的图像应该是RGB图,因此输出最终谷歌眼镜图像前需要将新的HSI图转换成对应的RGB图;首先将代表谷歌眼镜图像色调H的横截面分为三个相隔120°的扇区,然后根据色调H的值在不同扇区的分布情况分别进行如下计算:
(2-3-1)RG扇区,0°≤H<120°,当H分量位于该扇区里时,对应的谷歌眼镜图像新的R、G、B三个通道的值R’、G’、B’分别可以用如下公式计算得到:
B'=I”(1-S)
G'=3I”-(R'+B')
其中,I”是经过步骤(2-2)处理后的谷歌眼镜图像的新的亮度I分量,R’是经过步骤(2-2)处理后的谷歌眼镜图像对应的新的红色分量值,B’是经过步骤(2-2)处理后的谷歌眼镜图像对应的新的蓝色分量值,G’是经过步骤(2-2)处理后的谷歌眼镜图像对应的新的绿色分量值;
(2-3-2)GB扇区,120°≤H<240°,当H分量位于该扇区里时,在计算谷歌眼镜图像新的R、G、B三个通道的值前先要对H分量的值做如下处理得到新的H’:
H'=H-120°
然后,对应的谷歌眼镜图像新的R、G、B三个通道的值R’、G’、B’分别可以用如下公式计算得到:
R'=I”(1-S)
B'=3I”-(R'+G')
(2-3-3)BR扇区,240°≤H<360°,当H分量位于该扇区里时,在计算谷歌眼镜图像新的R、G、B三个通道的值前先要对H分量的值做如下处理得到新的H’:
H'=H-240°
然后,对应的谷歌眼镜图像新的R、G、B三个通道的值R’、G’、B’分别可以用如下公式计算得到:
G'=I”(1-S)
R'=3I”-(G'+B')
(2-4)亮度I分量经过整体调整后的图像对应的HSI图转换成RGB图后就可以得到经过全局算法修复过后的过度曝光谷歌眼镜图像;
(3)基于CIELAB色彩空间对经过步骤(2)处理后得到的谷歌眼镜图像中依然过度曝光严重的区域进行局部亮度恢复,具体包括如下步骤:
(3-1)对经过步骤(2)处理后得到的谷歌眼镜图像进行RGB色彩空间到CIELAB色彩空间的转换,转换过程分为如下两个步骤:
(3-1-1)RGB转XYZ:设r、g、b分别代表经过步骤(2)处理后得到的谷歌眼镜图像中每个像素点(i,j)对应的R、G、B通道初始值,取值范围为[0,255],而r’、g’、b’分别表示经过这一步转换后得到的新值,转换的计算公式如下:
其中gamma函数是用于对图像进行非线性色调编辑的,它的目标在于对原始色彩分量的值进行校正,并提高图像的对比度,公式的作用如下:
在利用gamma函数对谷歌眼镜图像中每个像素点(i,j)对应的R、G、B通道初始值r、g、b进行处理后,可以进一步通过对R、G、B通道此时的新值r’、g’、b’进行进一步的处理来得到所要求的X、Y、Z的值,其中进一步处理对应的转换公式如下:
其中,矩阵M如下:
将矩阵M代入后,转换过程相当于如下公式:
X=r'*0.4124+g'*0.3576+b'*0.1805
Y=r'*0.2126+g'*0.7152+b'*0.0722
Z=r'*0.0193+g'*0.1192+b'*0.9505
(3-1-2)XYZ转LAB:通过对谷歌眼镜图像中每个像素点(i,j)对应的X、Y、Z的值进行进一步转换得到L*、a*、b*的值,转换的计算公式如下:
L*=116f(Y/Yn)-16
a*=500[f(X/Xn)-f(Y/Yn)]
b*=200[f(Y/Yn)-f(Z/Zn)]
其中,Xn、Yn、Zn一般默认值为95.047、100.0、108.883,而上面计算公式中出现的f函数如下:
此处计算得到的L*、a*、b*的值就是步骤(2)处理后得到的谷歌眼镜图像进行RGB色彩空间到CIELAB色彩空间转换后对应的LAB色彩空间三个通道的值;
(3-2)检测步骤(2)处理后得到的谷歌眼镜图像中依然过度曝光严重的区域:定义一个过度曝光映射矩阵M来记录谷歌眼镜图像中每个像素点被过度曝光影响的严重程度。谷歌图像第i个像素点在矩阵M对应的Mi值计算公式如下:
其中,Li代表了谷歌图像第i个像素点对应的L*值,Ci代表了谷歌图像第i个像素点对应的向量(a*,b*)T,LT和CT代表了谷歌眼镜图像中过度曝光区域像素点所能取的边界值,当LT和CT的值都等于过度曝光区域边界值时,M的值等于0.5;δ=1/60,LT=80,CT=40,谷歌眼镜图像中像素点对应的值Mi<0.5说明该像素点是正常曝光像素点,属于正常曝光区域反之像素点对应的值Mi≥0.5说明该像素点是过度曝光像素点,属于过度曝光区域Ω;
(3-3)对步骤(2)处理后得到的谷歌眼镜图像中依然过度曝光严重区域亮度L*的恢复分为如下步骤:
(3-3-1)采用色调映射的方法来压缩谷歌眼镜过度曝光图像中正常曝光区域的动态范围,步骤如下:
(3-3-1-1)定义一个过度曝光似然性矩阵P来衡量谷歌眼镜图像中过度曝光区域Ω的每个像素点i在亮度L*恢复后得到的输出图像中依然是过度曝光的可能性,通过如下计算公式得到每个像素点i的Pi值:
其中,K是归一化因子,K的取值使得针对经过步骤(2)处理后的谷歌眼镜图像中所有像素点在矩阵P中对应的值所能取到的最大值Pi=1,K的取值公式如下:
其中,Mmax代表了步骤(3-2)中计算得到的谷歌眼镜图像对应的过度曝光映射矩阵M中最大值;
(3-3-1-2)对谷歌眼镜图像中不同曝光类型区域内像素点i的梯度拉伸函数z(.)定义如下:
其中,▽Li表示谷歌眼镜图像第i个像素点亮度L*即Li的梯度,表示为▽Li分别在x轴和y轴的分量即(▽Li_x▽Li_y)T,对▽Li进行拉伸相当于对▽Li在x轴和y轴的分量进行同步拉伸。其中||·||等同于表示的是二范数。二范数的定义如下:
因此,||▽Li||的值可以表示成求Li的梯度时,在x轴方向上和在y轴方向上需要分别遵循如下公式(其中gradX(u,v)表示谷歌眼镜图像第u行第v列的像素点对应的L*值在X轴方向的梯度,gradY(u,v)表示谷歌眼镜图像第u行第v列的像素点对应的L*值在Y轴方向的梯度):
在X轴方向,
其中,L(u,v+1)、L(u,v)、L(u,v-1)分别代表谷歌眼镜图像第u行第v+1列、第u行第v列、第u行第v-1列的像素点对应的L*值,width表示谷歌眼镜图像像素点的列数;
在Y轴方向,
其中,L(u+1,v)、L(u,v)、L(u-1,v)分别代表谷歌眼镜图像第u+1行第v列、第u行第v列、第u-1行第v列的像素点对应的L*值,height表示谷歌眼镜图像像素点的行数;
另外,z(·)中的α和β是用于控制谷歌眼镜过度曝光图像中的像素点亮度L*压缩比例的两个参数。其中,α用于控制谷歌眼镜过度曝光图像中的像素点i亮度L*即Li被压缩的最小梯度值,因此一般设为平均梯度大小的十分之一。β用于控制谷歌眼镜过度曝光图像中的像素点i亮度L*即Li梯度压缩的压缩比例,取0.8;
β=0.8
在确定了L矩阵的梯度值▽L并对谷歌眼镜过度曝光图像的正常曝光区域进行适度的压缩后,接下来的步骤就是计算新的亮度矩阵L';
(3-3-2)计算能量公式:
计算得到的新亮度矩阵L'要满足如下两个条件:
(3-3-2-1)第一个条件是谷歌眼镜过度曝光图像处理后所得新图像的亮度梯度值要尽可能和原始图像的亮度梯度值相似。此处引入第一个需要进行最小化处理的能量公式ε1如下:
其中,▽Li表示谷歌眼镜过度曝光图像中第i像素点在原始亮度矩阵中对应的梯度值,▽Li'表示谷歌眼镜过度曝光图像第i像素点的在新亮度矩阵中对应的梯度值,表示是二范数的平方值,即
(3-3-2-2)第二个条件是谷歌眼镜过度曝光图像中过度曝光区域Ω的像素点i对应的新亮度值L'i和原始亮度值Li不会相差太大。此处引入第二个需要进行最小化处理的能量公式ε2如下:
其中|Ω|表示谷歌眼镜图像的过度曝光区域Ω中像素点的个数,Pi表示步骤(3-3-1-1)得到的谷歌眼镜图像中每个像素点i在亮度L*恢复后得到的输出图像中依然过度曝光的可能性;
(3-3-2-3)为了在满足(3-3-2-1)和(3-3-2-2)的两个能量公式最小化的条件基础上得出谷歌眼镜过度曝光图像处理过后对应的新亮度矩阵L',此处引入新的总能量公式εL如下:
εL=ε1+λε2
其中,λ用于平衡梯度值能量公式ε1和亮度值能量公式ε2之间的相对大小,取λ=5。
(3-3-2-4)谷歌眼镜过度曝光图像处理过后对应的新亮度矩阵L'中原本亮度就较小的像素点对应的亮度值L'应该和谷歌眼镜过度曝光图像对应的原始亮度矩阵值L差异不大,此处引入如下约束条件
L'=L if L<min(L)+r·(max(L)-min(L))
其中,r=0.1。
(3-3-3)能量公式转换:计算谷歌眼镜过度曝光图像处理过后对应的新亮度矩阵L'相当于在满足上述约束条件式的基础上求使总能量公式εL得到最小值的解。这个问题可以转化成一个凸优化问题(OPT),引入CVX,一个基于Matlab的模型,用于解决凸线性规划问题,为了求解使总能量公式εL最小化的新亮度矩阵L',将(3-3-2-3)中的能量公式εL和(3-3-2-4)中的约束条件式合起来转化成如下形式:
最小化
约束于Cx=d
x≥m
x≤n
能量公式和约束条件转换分为如下四个步骤:
(3-3-3-1)设m=L.width,n=L.height,m和n分别表示谷歌眼镜像素点的列数和行数,将谷歌眼镜过度曝光图像所对应的原始亮度L矩阵转换成一个n×m行的列向量矩阵在X轴和Y轴方向上的梯度分量矩阵分别为和谷歌眼镜过度曝光图像处理过后对应的新亮度矩阵L'同设为一个n×m行的列向量矩阵而在X轴和Y轴方向上的梯度分量矩阵分别为和
(3-3-3-2)将(3-3-2-1)中的第一个能量公式ε1转换成这样的形式,首先,将公式拆成如下形式:
其中和分别表示谷歌眼镜过度曝光图像每个像素点i所对应的在X轴和Y轴方向上的梯度值,和同理。由于在的梯度变换基础上将在X轴和Y轴方向上的梯度转换矩阵分别表示成如下形式:
设一个(n*m)×(n*m)大小的矩阵Px来表示的梯度转换矩阵,如下表示:
设一个(n*m)×(n*m)大小的矩阵Py来表示的梯度转换矩阵,如下表示:
此时将(3-3-2-1)中的第一个能量公式ε1转化成如下形式:
令
(3-3-3-3)将(3-3-2-2)中的第二个能量公式ε2转换成这样的形式,由于该能量公式只对谷歌眼镜过度曝光图像中的过度曝光区域Ω的|Ω|个像素点对应的亮度值L进行了处理,将这个能量公式拆成如下形式:
其中,P0,P1,…,P|Ω|-1表示的是谷歌眼镜过度曝光图像中过度曝光区域Ω里|Ω|个像素点在似然值矩阵P中对应的值。首先要构造一个|Ω|×|Ω|的矩阵P'如下,对角线上的值P'(i,i)依次表示过度曝光区域Ω中第i像素点对应的似然值:
然后再构造一个|Ω|×(height*width)的矩阵Q,用于记录谷歌眼镜过度曝光图像中过度曝光区域Ω中的像素点在亮度列向量中的位置,矩阵Q中的值满足如下要求:
如果Q(i,j)=1说明列向量中第j行的像素点是过度曝光的,反之则说明列向量中第j行的像素点是正常曝光的,不需要参与(3-3-2-2)中的第二个能量公式ε2的计算,因此矩阵Q也可以用来提取谷歌眼镜过度曝光图像中的过度曝光像素点在亮度矩阵中对应的值来进行(3-3-2-2)中的第二个能量公式ε2的计算;
将(3-3-2-2)中的第二个能量公式ε2转化成如下形式:
令
在将(3-3-2-1)中的第一个能量公式ε1和(3-3-2-2)中的第二个能量公式ε2均转换成的格式后,得到总的能量公式εL如下:
令
(3-3-3-4)将(3-3-2-4)中的约束条件式转换成Cx=d,首先遍历谷歌眼镜过度曝光图像对应的亮度列向量矩阵记录下所有像素点对应的亮度最小值和亮度最大值然后构造一个行和列数均为(height*width)的矩阵C,矩阵C里每个像素点的值都满足:
矩阵C用于提取出亮度列向量中亮度值小于
的像素点,并使它们的亮度值在谷歌眼镜过度曝光图像处理过后对应的新亮度列向量中保持不变,约束条件式转换成
设d为一个height*width行的列向量矩阵,令
(3-3-4)能量公式最小化:
在(3-3-3)中对总能量公式εL和约束条件式做了转换后,求解最优佳亮度列向量的问题就转换成了求解如下凸优化问题的解x:
最小化
约束于Cx=d
x≥0
x≤100
其中,x表示所要求的新亮度列向量矩阵而且
在Matlab上配置了CVX环境后,可以调用如下CVX的模型来解决这个凸优化问题:
cvx_begin
variable x(height*width)
minimize(norm(A*x-b,2))
subject to
C*x==d
x≥0
x≤100
cvx_end
从而计算得到谷歌眼镜过度曝光图像处理后所对应的新亮度列向量矩阵