黄 曦,丁友东,吴 兵
(上海大学 上海电影学院,上海 200072)
老电影全局闪烁修复系统的设计与实现
黄 曦,丁友东,吴 兵
(上海大学 上海电影学院,上海 200072)
针对老电影中褪色闪烁的现象,研究了一种基于颜色传递和色彩校正的全局闪烁修复方法。该方法主要分三个步骤对视频序列进行修复,首先对导入的图像序列进行分镜并判断是否存在闪烁,然后对闪烁序列进行参考帧选取,如果无参考帧,则采用色彩校正来产生参考帧,最后通过颜色传递进行全局颜色闪烁修复。在VS2013中使用OpenCV实现了相关算法,并详细介绍了系统实现的关键代码。实验表明,该系统能够较好地完成对老电影全局闪烁的交互式修复。
老电影修复;全局闪烁;颜色传递;色彩校正
电影是历史文化的缩影,也是一份极为珍贵的可视化资料,然而由于诸多原因导致老电影出现了不同程度的损伤,闪烁就是其中一个较为严重的问题。闪烁的本质是图像相邻帧在色彩、亮度上发生了不自然的变化[1],这些变化并非导演在拍摄时为营造某种氛围而特意加上去的,而是由于前期拍摄操作不当或后期保存时的诸多原因造成的。这些变化在时间和空间上是不确定的,单帧观看不易发现,只有连续放映时才能检测到这种缺陷[2-3]。
目前,大多数的修复方法都需要对图像序列中的闪烁进行建模,然后估计该模型的闪烁参数。谌安军等通过对图像序列中的局部闪烁进行基于余弦基的建模和逐次超松弛迭代的方法,实现了对严重局部亮度闪烁的电影的修复[4]。周磊等设计了一种基于块的局部区域参数估计和补偿方法,通过对图像序列进行基于块的闪烁模型参数估计和当前帧补偿模型的设计,实现了参照模型下的受损图像亮度修复[5]。赵培栋等提出了一种基于多帧参考的分块视频闪烁消除法,在有效去除闪烁现象的同时修正其带来的运动模糊现象[6]。Julie Delon基于尺度空间理论使用尺度时间均衡的方法实现了全局亮度闪烁的修复[7]。但已有的方法大都具有局限性,并不适用于由于褪色产生的颜色闪烁现象。
本文采用Visual Studio和OpenCV图像处理库,将图像领域的色彩校正、颜色传递等方法引入老电影序列的闪烁修复中,在实现传统方法的同时,通过方案整合和考虑不同情况,很好地解决了全局褪色闪烁修复问题,并设计了一套完整的自动化修复系统。
1.1 图像色彩校正
在图像序列的闪烁修复前,需要找到比照修复的参考帧,但如果整个镜头都产生了或多或少的褪色,没有符合要求的参考帧,那么就需要选定某一帧进行色彩校正,然后用其作为参考帧。Ruderman提出的lαβ空间具有通道之间最小相关性的特点,被广泛用于自然场景图像的色彩校正[8]。Reinhard在Ruderman的基础上,提出了在lαβ空间的色彩校正算法[9]。该方法假设图像的偏色现象是图像的RGB通道数值乘以未知常量Cr,Cg,Cb所引起的。此举不会改变图像在lαβ空间的方差,但会改变平均值。因此,色彩校正主要依靠修正通道的平均值。白色在lαβ空间中定义为(0,0,0),将表示色彩的α,β通道平均值调整至0,同时保留l通道的平均值和各通道的标准差,色彩校正就能实现。其算法的步骤为:
1)将需要校正的图像从RGB颜色空间转换到lαβ颜色空间。
2)计算出该图像在α,β两个通道的均值,记为mα,mβ。
3)计算出该图像总共的像素点,记为N。
4)利用式(1)调整图像的均值
(1)
式中:α,β表示lαβ颜色空间通道内所有像素的原始值;α′,β′表示处理好之后的所有像素值;mα,mβ分别表示α,β两个通道均值;Cα,Cβ分别表示α,β两个通道实际需求的通道均值,若图像仅需要色彩校正而不需额外添加色彩效果,则Cα,Cβ均为0。
5) 将处理好之后的图像转回RGB颜色空间。
1.2 全局颜色传递算法
颜色传递是一种改变图像颜色的算法,通过定义提供结构的源图像和提供色彩布局的参考图像,就可以得到既有源图像的形状又有参考图像颜色的合成图像。Reinhard提出了一种颜色传递算法,通过把图像转换到lαβ空间,继而进行统计学计算来实现全局的颜色传递[5],此种方法处理数据少,计算复杂度低,非常适合于大批量图像的处理。颜色传递算法具体步骤如下:
1) 将源图像和参考图像均从RGB颜色空间转换到lαβ颜色空间,这样就可以去除两图像之间的相关性。
3) 按式(2)将各个通道的所有像素值分别减去其均值,达到弱化源图像的整体色彩信息的目的。
(2)
4)将源图像与参考图像标准差之比作为通道值偏移量的系数,按式(3)将参考图像的细节信息映射到源图像中。
(3)
式中:l′,α′,β′表示合成图像在lαβ颜色空间的三通道的所有像素值。
5) 在所得合成图的基础上按式(4)加上参考图像各通道的均值,添加参考图像的整体信息以完成最终合成效果。
(4)
式中:l,α,β是合成图像最后得到的三通道所有像素值。
6) 完成颜色传递后将合成图像由lαβ颜色空间转换到RGB颜色空间。
2.1 修复方法的流程
本文通过对彩色老电影中的全局闪烁情况的分析,设计了一种采用彩色校正和颜色传递的闪烁校正方法,并设计了自动修复系统,方法的流程如图1所示。
图1 老电影全局闪烁修复系统流程图
由于本文所提方法适用于同一个镜头下的闪烁修复,对于导入的序列存在多个镜头的情况,需要进行分镜处理。在同一组镜头序列中,选择合适的一帧图像作为参考帧,若无恰当的选择则使用色彩校正算法处理褪色情况较轻的一帧,将处理后的结果作为参考帧。然后使用颜色传递算法将参考帧的颜色特性依次传递给同组每一帧图像。当同一组分镜处理好之后,重复上述过程直至导入序列的每一帧均处理完毕。
2.2 修复方法的实现
本文的系统采用VisualStudio2013作为开发工具,制作界面选择了基于对话框的MFC,同时配置了OpenCV2.4.9来支持算法的编写。
利用VC++和OpenCV实现的系统的具体过程和部分代码如下:
1)初始化
图像序列默认以uint8的格式导入系统,为了确保后续数据处理的精确度,将图像改为float格式,把图像数值从(0,255)映射到(0.0,1.0)区间:
src.convertTo(src,CV_32FC3,1.0f/255.0f);
2)RGB到lαβ颜色空间的转换
对于判定有闪烁特性的分镜序列,在整组序列找不到合适的参考帧时,选择一帧偏色情况较轻的图像进行色彩校正处理,将处理后的图像作为参考帧。
在色彩校正之前,需要将图像从RGB颜色空间转换到lαβ空间。转换的参考公式各异,对于本系统,选择了Reinhard等人提供的公式[9],其优点在于公式简洁,无需数值分段处理。核心代码如下:
L=0.3811*R+0.5783*G+0.0402*B;
M=0.1967*R+0.7244*G+0.0782*B;
S=0.0241*R+0.1288*G+0.8444*B;
l=(L+M+S)/sqrt(3.0);
a=(L+M-2*S)/sqrt(6.0);
b=(L-M)/sqrt(2.0);
3)色彩校正
对于转换到lαβ颜色空间的图像求取其平均值:
ScalarsrcMeans;
srcMeans=mean(srcLab);
再用上文提到的色彩校正公式进行计算:
Data[i]=Data[i]-srcMeans[0]+A/N;
Data[i+1]=Data[i+1]-srcMeans[1]+B/N;
4)颜色传递
对于转换到lαβ颜色空间的待处理帧和参考帧,首先求取每个通道的平均值和标准差:
meanStdDev(srcLab,srcMeans,srcVariances);
meanStdDev(refLab,refMeans,refVariances);
再用上文提到的颜色传递公式进行计算:
for(intchanel=0;chanel<3;chanel++)
{
dataTemp[chanel]=refVariances[chanel]/srcVariances[chanel];
}
Data[i]=dataTemp[0]*(Data[i]-srcMeans[0])+refMeans[0];
Data[i+1]=dataTemp[1]*(Data[i+1]-srcMeans[1])+refMeans[1];
Data[i+2]=dataTemp[2]*(Data[i+2]-srcMeans[2])+refMeans[2];
5)lαβ到RGB颜色空间的转换
处理好后的图像帧需从lαβ空间转回RGB空间,其计算过程是RGB到lαβ颜色空间转换的逆过程:
L=l/sqrt(3.0)+a/sqrt(6.0)+b/sqrt(2.0);
M=l/sqrt(3.0)+a/sqrt(6.0)-b/sqrt(2.0);
S=l/sqrt(3.0)-2*a/sqrt(6.0);
R=4.4679*L-3.5873*M+0.1193*S;
G=-1.2186*L+2.3809*M-0.1624*S;
B=0.0497*L-0.2439*M+1.2045*S;
值得注意的是,在颜色传递的过程中,单个像素的值可能会超出原定范围,故图像在转回RGB空间后,需检查值的溢出问题:
if(Data[i]>1.0)
Data[i]=1.0;
elseif(Data[i]<0.0)
Data[i]=0.0;
6)后处理
将最后的处理结果的格式转回uint类型,用于显示及存储:
dst.convertTo(dst,CV_8UC3,255)
3.1 系统界面
本系统由两个主界面组成,图2是整个系统的主界面,此界面主要用于展示使用颜色传递算法对整个序列的处理效果。界面分为3个区域,界面左边的2个图形框分别用于显示同一帧图像处理前与处理后的对比效果。界面右侧下部的2个图形框用于统计该序列处理前和处理后所有图像的RGB均值,用以说明颜色传递算法的实用性。右侧上部的按钮用以实现不同的功能。
图2 系统主界面1(截图)
图3是本系统针对单帧图像处理结果的界面。相对于主界面只能处理固定文件夹下的整个图像序列,此界面能对灵活载入计算机内任意位置的图像进行处理,并且该界面主要用于颜色传递算法与色彩校正算法的对比。界面分为2个区域,左边的4个图形框为展示区域,分别展现了源图像、参考图像、运用颜色传递进行处理后的合成图像,以及源图像经过色彩校正之后的图像。界面的右侧区域主要是算法的选取,当选取色彩校正时,需手动输入α、β通道的均值。
图3 系统主界面2(截图)
3.2 实验分析
本文选用动画电影《没头脑和不高兴》中的一组镜头序列作为实验用例,图像大小为2 048×1 556,该序列共有50帧图像,褪色闪烁现象较为严重。
由于实验序列中没有合适的参考帧,故选择偏色情况相对较轻的一帧图像,在色彩校正之后作为整段序列的参考帧。图4a选自实验序列第33帧图像,偏色不太严重,在进行色彩校正后如图4b所示,两幅图前后对比可见,经过校正后图像偏红的现象得到明显改善。
图4 色彩校正结果对比
将图4b所示结果作为实验序列的参考帧,在lαβ颜色空间内计算出参考帧及序列中其他待处理帧的颜色特性,按照本文第一部分给出的式(2)~(4)依次将参考帧的颜色特性传递给其他帧。图5b展示了经过颜色传递算法处理后序列的第30~35帧结果,相对于图5a的原始图像序列,褪色现象得到明显改善,图像的色彩基本达到一致。
图5 全局闪烁修复效果
图6a为实验序列原始图像的RGB通道均值的统计结果,总计共50帧。图6b为经过色彩校正和颜色传递处理后的统计结果。相对原始均值统计,处理后序列的均值曲线平滑,从客观上证明了颜色传递算法在处理褪色闪烁上有明显效果。
图6 处理前后序列均值统计对比
本文采用基于颜色传递和色彩校正的方法实现了对老电影中全局闪烁的自动修复。在VS2013中利用OpenCV2.4.9实现了视频序列处理的相关算法。针对分镜后老电影序列,在修复序列无参考帧的情况下,
采用色彩校正修复一帧图像,将修复后的图像作为参考帧,再使用颜色传递算法对该序列进行修复。实验证明,本方法对全局褪色闪烁的去除效果显著。
[1] 李志永,杜坤.电影数字修复中全局闪烁的去除[J].现代电影技术,2010(2):15-17.
[2]PITIEF,DAHYOTR,KELLYF,etal.Statisticalmethodsinvideoprocessing[M].Heidelberg:Springer, 2004: 153-164.
[3] 张然然,吴冏,丁友东,等.电影档案中亮度闪烁的修正[J].计算机工程,2010,36(5):272-273.
[4] 谌安军,滕升华,邹谋炎.图像序列中亮度闪烁去除[J].电子与信息学报,2007,29(1):39-42.
[5] 周磊.电影胶片修复及噪声处理关键技术的研究[D].上海:上海交通大学,2008.
[6] 赵培栋,韩军,闵友钢,等.基于多帧参考的分块视频闪烁消除算法[J].上海大学学报:自然科学版,2010,16(4):342-348.
[7]JULIED.Movieandvideoscale-timeequalizationapplicationtoflickerreduction[J].IEEEtransactionsonimageprocessing, 2006, 15(1):241-248.
[8]RUDERMANDL,CRONINTW,CHIAOCC.Statisticsofconeresponsestonaturalimages:implicationsforvisualcoding[J].OpticalsocietyofAmerica,1998(15):2036-2045.
[9]REINHARDE,ASHIKHMINM,GOOCHB,etal.Colortransferbetweenimages[J].IEEEcomputergraphicsandapplications, 2001(9):34-41.
黄 曦(1992— ),硕士生,主研图形图像处理;
丁友东(1967— ),博士,教授,博士生导师,主要研究方向为计算机图形学、数字影视技术等;
吴 兵(1983— ),博士生,主要研究方向为图形图像处理。
责任编辑:闫雯雯
Implementation and design of old film global flicker restoration system
HUANG Xi, DING Youdong, WU Bing
(ShanghaiFilmAcademy,ShanghaiUniversity,Shanghai200072,China)
Aiming at flicker phenomenon in old films, a method based on color transform and hue correction is presented. There are three key steps to remove flicker on the video sequence. Firstly, the imported sequence is grouped and then each group is judged whether there is flicker. Secondly, reference frame is chosen in each group. If there is no appropriate one, a frame is corrected with hue correction algorithm. Finally, global flicker is removed by using color transform algorithm in each sequence group. The relevant algorithm is designed by VS2013 and OpenCV, key codes are given as well. Results show that the method can effectively remove global flicker in old films, and is suitable for automated interactive restoration system.
old film restoration; global flicker; color transform; hue correction
黄曦,丁友东,吴兵.老电影全局闪烁修复系统的设计与实现[J]. 电视技术,2016,40(12):125-129. HUANG X, DING Y D, WU B. Implementation and design of old film global flicker restoration system [J]. Video engineering,2016,40(12):125-129.
TP391.4
A
10.16280/j.videoe.2016.11.024
国家自然科学基金项目(61402278:61303093);上海市自然科学基金项目(14ZR1415800);上海市科委科技攻关项目(14511108400);上海市教委科研创新项目(14YZ023);2015年度上海大学电影学高峰学科
2016-03-11