本发明涉及图像处理,尤其涉及一种基于稀疏与低秩矩阵分解的多幅图片反射光抑制方法。
背景技术
在生活中,当透过玻璃拍摄图像时,拍摄的照片既包括玻璃内想拍摄的场景,同时也包含了不需要的玻璃外部的反射光场景。反射光去除就是从拍摄图像中去除不需要的反射场景。目前大多数的方法是把玻璃图像看成是透射图像和反射图像的线性组合,通过抑制反射图像从而重构透射图像,例如下面所述方法:
第一类方法借助单幅图像。此类方法主要利用从玻璃生成的图像的先验知识和假设,如梯度稀疏,相对平滑,重像线索等。levin和weiss通过使用图像中的梯度分布模型来最小化代价函数,重构一幅优化的反射图像。li和brown借助反射光的梯度比折射光梯度更加平滑,模糊的特点,利用梯度域的反射能量抑制,达到去除反射成分的效果。然而这个假设不适用于光线非常强的场景。shin等人考虑到玻璃的多次反射特性,借助玻璃的前后两表面反射光的重像效果抑制反射。此类方法参考文献a.levinandy.weiss.userassistedseparationofreflectionsfromasingleimageusingasparsityprior.ieeetrans.imageprocess.,29(9):1647–1654,sept.2007;y.liandm.s.brown.singleimagelayerseparationusingrelativesmoothness.inproc.ieeecvpr,pages2752–2759,june2014;y.shih,d.krishnan,f.durand,andw.t.freeman.reflectionremovalusingghostingcues.inproc.ieeecvpr,pages3193–3201,june2015.
第二类方法借助多幅相关图像。这类方法可以借助特殊的拍摄装置,如偏振器、闪光灯等。利用偏振器去除反射光的原理在于折射和反射对光波偏振的差异性,通过调整偏振器的角度,拍摄多张图片,从而重构出理想的透射图。除此之外,也可以通过改变相机的视点,获取多幅相关图片。li和brown通过对齐这一系列不同角度拍摄的图像,分离出折射图像和反射图像的梯度,来分析多张图片梯度特征。xue等评估透射和反射场景各自的不同密集程度,优化出透射和反射图像。此类方法参考文献y.liandm.s.brown.exploitingreflectionchangeforautomaticreflectionremoval.inproc.ieeeiccv,pages2432–2439,dec.2013;t.xue,m.rubinstein,c.liu,andw.t.freeman.acomputationalapproachforobstruction-freephotography.acmtrans.graph.,34(4):79:1–79:11,july2015.
通常而言,利用多张图片的反射光去除获得的效果比基于单张图片的效果更理想,使用的场景也更广泛。
技术实现要素:
发明目的:本发明针对现有技术存在的问题,提供一种基于稀疏与低秩矩阵分解的多幅图片反射光抑制方法,该方法直接利用原图像和梯度进行最优化,可以得到对比度更高的图像,颜色不会失真。
技术方案:本发明所述的基于稀疏与低秩矩阵分解的多幅图片反射光抑制方法包括;
(1)获取在不同角度对于同一场景拍摄得到的多个图像;
(2)利用siftflow算法将多个图像对齐;
(3)从对齐后的图像中选取其中一个图像作为参考图像p0,并将参考图像p0划分为多个相同大小的patch;
(4)对于每个patch,执行如下步骤:
a、获取当前patch以及其他图像中与其相似的patch的rgb值形成的列向量,将所述列向量组成rgb矩阵;
b、获取当前patch以及其他图像中与其相似的patch中每个像素的最小梯度值所形成的列向量,将所述列向量作为每列的列向量组成最小梯度矩阵;
c、根据最小梯度矩阵和rgb矩阵进行稀疏矩阵与低秩矩阵分解;
(5)将所有patch对应的低秩矩阵重组,得到抑制反射光后的图像。
进一步的,步骤(4)中a具体包括:
a-1、将当前patch标记为ph0,并从其他每个对齐后的图像中匹配出一个与ph0最相似的patch,得到相似patch集合ph1={phj|j=1,…,k-1},其中,phj表示在图像pj中与ph0最相似的patch,k为所有图像的数目;
a-2、将ph0添加到集合ph1中,形成新的集合ph2={phj|j=0,…,k-1};
a-3、将集合ph2中每个patch的像素rgb值作为一个列向量,所有列向量组成rgb矩阵i=[pr0,...,prk-1],其中,prk表ph2中第k个patch的所有像素的rgb值所形成的列向量。
进一步的,步骤(4)中b具体包括:
b-1、将当前patch标记为ph0,并从其他每个对齐后的图像中匹配出一个与ph0最相似的patch,得到相似patch集合ph1={phj|j=1,…,k-1},其中,phj表示在图像pj中与ph0最相似的patch,k为所有图像的数目;
b-2、将ph0添加到集合ph1中,形成新的集合ph2={phj|j=0,…,k-1};
b-3、计算集合ph2中每一patch的每一像素的梯度值,得到集合▽ph2={▽phj(p)|p∈area,j=0,...,k-1},▽phj(p)表示patchphj在像素位置p处的梯度值,area表示patch的像素位置区域;
b-4、对于任意位置q,从所有patch的像素位置q的梯度值中选取一个最小值▽(q),即▽(q)=min{▽phj(q)|j=0,...,k-1},作为像素位置q的最小梯度值,并重复该步骤,得到所有像素位置的最小梯度值,并将所有像素位置的最小梯度值形成一个列向量t;,
b-5、将所述列向量组成最小梯度矩阵gmin=[t,...,t];gmin的列数与所述rgb矩阵列数相等。
进一步的,步骤(4)中c具体包括:
c-1、建立目标优化函数为:
s.t.i=t+r,r=h
式中,i表示rgb矩阵,t表示低秩矩阵,即图像中折射成分;r为稀疏矩阵,即图像中反射成分;gmin表示最小梯度矩阵;λ和τ是用户定义参数,用于调节优化目标函数中每一项的权重;h为辅助变量,▽h为h的梯度;
c-2、采用迭代增广拉格朗日函数方法求解所述目标优化函数,得到低秩矩阵t。
进一步的,步骤c-2具体包括:
c-2-1:将i,gmin作为输入;
c-2-2:初始化:t=i,h=t
c-2-3:按照下式更新:
tk+1=d1/(2u)[(i-rk+hk+(y1k-y2k)/u)/2]
rk+1=sλ/u[i-tk+y1k/u]
hk+1=(τgmin+y2k+utk-τ▽hk)/u
y1(k+1)=y1k+u(i-tk-rk)
y2(k+1)=y2k+u(tk-hk)
式中,下标k表示第k次迭代,d1/(2u)(x)=us1/(2u)(∑)v*,s1/(2u)(∑)=sng(∑)max(|∑|-1/(2u),0),∑为矩阵x的特征值组成的对角矩阵,u、v*为矩阵x进行svd分解对应的矩阵,即x=u∑v*,u是惩罚项的权重因子,y1和y2是拉格朗日乘子;
c-2-4:若迭代次数>20,或者||i-t-r||f与||t-h||f小于预定义阈值,则停止迭代,将此时的tk+1输出。
有益效果:本发明与现有技术相比,其显著优点是:本发明的方法直接利用原图像和梯度进行最优化,可以得到对比度更高的图像,颜色不会失真。
附图说明
图1是本发明的一个实施例的流程示意图;
图2是采用本发明方法进行图像处理的各个阶段的结果图;
图3是采用本发明方法以及其他方法进行图像处理的结果图。
具体实施方式
本实施例提供了一种基于稀疏与低秩矩阵分解的多幅图片反射光抑制方法,如图1所示,包括;
(1)获取在不同角度对于同一场景拍摄得到的多个图像。
设共拍摄k张图片,每个图像的像素点可以看成是反射图像与折射图像的线性组合:
pk(p)=tk(p)+rk(p),k=0,1,.....,k-1
pk(p)为第k张图像像素点p的值,tk为折射光值,rk为反射光值,共k张像。
(2)利用siftflow算法将多个图像对齐。
其中,对齐时选择第一张图像作为参考图像,将k个图像对齐。由于折射光强度比反射光强度大,因此对齐主要是通过折射光来进行的,这导致折射光在各个图像上相互匹配,而反射光则各个图像不同,于是得到下面关系:
其
(3)从对齐后的图像中选取其中一个图像作为参考图像p0,并将参考图像p0划分为多个相同大小的patch。
其中,划分时,假设参考图像p0的长度为l,宽度为w,patch为长度为patchsize的正方形,则把原图像分为(l/patchsize)*(w/patchsize)个patch。
(4)对于每个patch,执行如下步骤:
a、获取当前patch以及其他图像中与其相似的patch的rgb值形成的列向量,将所述列向量组成rgb矩阵。
a步骤具体包括:a-1、将当前patch标记为ph0,并从其他每个对齐后的图像中匹配出一个与ph0最相似的patch,得到相似patch集合ph1={phj|j=1,…,k-1},其中,phj表示在图像pj中与ph0最相似的patch,k为所有图像的数目;a-2、将ph0添加到集合ph1中,形成新的集合ph2={phj|j=0,…,k-1};a-3、将集合ph2中每个patch的像素rgb值作为一个列向量,所有列向量组成rgb矩阵i=[pr0,...,prk-1],其中,prk表ph2中第k个patch的所有像素的rgb值所形成的列向量。
b、获取当前patch以及其他图像中与其相似的patch中每个像素的最小梯度值所形成的列向量,将所述列向量作为每列的列向量组成最小梯度矩阵。
b步骤具体包括:b-1、将当前patch标记为ph0,并从其他每个对齐后的图像中匹配出一个与ph0最相似的patch,得到相似patch集合ph1={phj|j=1,…,k-1},其中,phj表示在图像pj中与ph0最相似的patch,k为所有图像的数目;b-2、将ph0添加到集合ph1中,形成新的集合ph2={phj|j=0,…,k-1};b-3、计算集合ph2中每一patch的每一像素的梯度值,得到集合▽ph2={▽phj(p)|p∈area,j=0,...,k-1},▽phj(p)表示patchphj在像素位置p处的梯度值,area表示patch的像素位置区域;b-4、对于任意位置q,从所有patch的像素位置q的梯度值中选取一个最小值▽(q),即▽(q)=min{▽phj(q)|j=0,...,k-1},作为像素位置q的最小梯度值,并重复该步骤,得到所有像素位置的最小梯度值,并将所有像素位置的最小梯度值形成一个列向量t;,b-5、将所述列向量组成最小梯度矩阵gmin=[t,...,t];gmin的列数与所述rgb矩阵列数相等。
其中,图像的梯度特征为:
①令▽代表图像x或者y方向梯度,可以得到:
②由于反射信号比折射信号弱,所以
③由上可知,当像素点p位于折射图像的显著边缘时,很有可能多张对齐后的图像在该像素点具有一致的折射图像梯度强度,而反射图像梯度强度的影响可以忽略不计,即
c、根据最近小梯度矩阵和rgb矩阵进行稀疏矩阵与低秩矩阵分解,得到当前patch对应的稀疏矩阵。具体包括:
c-1、建立目标优化函数为:
s.t.i=t+r,r=h
该公式的含义是:要求反射成分t尽可能低秩,且原图的梯度与上面求出来的近似梯度尽可能相同。式中,i表示rgb矩阵,t表示低秩矩阵,即图像中折射成分;r为稀疏矩阵,即图像中反射成分;gmin表示最小梯度矩阵;λ和τ是用户定义参数,用于调节优化目标函数中每一项的权重;h为辅助变量,▽h为h的梯度;
c-2、采用迭代增广拉格朗日函数方法求解所述目标优化函数,得到低秩矩阵t。
具体求解方法为:
获取目标优化函数的增广拉格朗日函数
将i,gmin作为输入;
初始化:t=i,h=t
按照下式更新:
tk+1=d1/(2u)[(i-rk+hk+(y1k-y2k)/u)/2]
rk+1=sλ/u[i-tk+y1k/u]
hk+1=(τgmin+y2k+utk-τ▽hk)/u
y1(k+1)=y1k+u(i-tk-rk)
y2(k+1)=y2k+u(tk-hk)
式中,下标k表示第k次迭代,d1/(2u)(x)=us1/(2u)(∑)v*,s1/(2u)(∑)=sng(∑)max(|∑|-1/(2u),0),∑为矩阵x的特征值组成的对角矩阵,u、v*为矩阵x进行svd分解对应的矩阵,即x=u∑v*,u是惩罚项的权重因子,y1和y2是拉格朗日乘子。
c-2-4:若迭代次数>20,或者||i-t-r||f与||t-h||f小于预定义阈值,则停止迭代,将此时的tk+1输出。
(5)将所有patch对应的低秩矩阵重组,得到抑制反射光后的图像。
下面采用本实施例的方法进行仿真验证。
拍摄的多张图像如图2(a)所示,以第一张为参考,对齐后的图像如图2(b)所示,根据对齐后的图像计算得到的梯度图像如图2(c)所示,最小梯度图像如图2(d)所示,最小梯度图像为在所有相似patch中每像素都选取梯度最小值,所形成的图像,最后通过本实施例方法得到的抑制反射光后的图如2(e)所示。
为了更好的比对本发明和现有技术中其他方法li和brown的效果,对同样的图片进行处理,结果如图3所示,可以看出,本发明方法明显优于li和brown的方法。
以上所揭露的仅为本发明一种较佳实施例而已,不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。