OLED屏幕Demura补偿数据生成算法
2022-10-08周小健严银菓周自平
周小健,严银菓,周自平
(福州大学 物理与信息工程学院,福建 福州 350116)
0 引 言
有机发光二极管(Organic Light Emitting Diode,OLED)是一种由有机薄层构成的固态半导体设备。组成OLED的多层结构,包括阳极、空穴注入层、空穴传输层、有机发光层、电子传输层、电子注入层及阴极。根据各层材料能级分布情况,选择双层、三层、多层的掺杂结构,从而形成符合阶梯形状的能阶状态,有利于从阳极和阴极注入的空穴和电子传输与结合,而后发光[1]。OLED是一种高亮度、高发光效率的自发光器件,具有对比度高、超广视角、低耗电量、抗震性好、轻薄化、可制成弯曲面板的特性[2]。尽管在许多显示领域得到广泛应用,但是因为OLED屏幕制作过程和本身电致驱动的原因,导致亮度不均匀,是有机电致发光器件表现最频繁的一类缺陷,也称作Mura[3]。而与之对应的,消除亮度不均匀的操作就被称作Demura。Mura的产生主要是由于OLED采用低电导率的电极材料[4]。根据欧姆定律可知,导通的电流很小,极易发生不均匀分布的电信号,导致发光强度不均匀。此外,OLED显示屏亮度不均另一个原因是薄膜场效应晶体管(Thin Film Transistor,TFT)形成的寄生电容引起的Mura面缺陷。除此之外,也可能是掺杂过程中引入的不均匀掺杂材料导致面间发光亮度不均匀[5]。
在此背景下,对于OLED显示面板进行Demura显得尤为重要。目前主流补偿方案分为两种:一种是内部补偿,指在像素内部利用TFT构建子电路进行补偿;另一种是外部补偿,指通过外部驱动电路或设备感知像素电学或光学特性进行补偿的方法[6]。外部补偿可以满足大尺寸显示面板的补偿需求。外部补偿又可以细分为光学抽取式与电学抽取式两种。电学抽取式是指通过芯片感应电路将TFT和OLED电学信号抽取出来[7]。光学抽取式是指背板点亮后通过光学CCD照相方法将亮度信号抽取出来[8]。光学抽取方法具有结构简单、补偿方法灵活、易于和数字电路现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)相结合等特点,现阶段被广泛采用,也是本文所重点关注和优化的补偿方案。其基本操作可以简述如下:首先用驱动电路点亮面板显示数个画面(一般是灰阶图像),其次使用高分辨率与高精度CCD相机拍摄上述画面并收集亮度数据;再次,根据相应补偿算法对亮度数据进行处理和运算,生成相应补偿数据;最后将补偿数据烧录到非易失存储器中,对显示面板进行亮度补偿,并重新拍摄画面确认Mura已消除。
基于以上操作的补偿方案,需要在补偿效果和补偿数据大小之间做相应的权衡。为了保证显示质量,提高用户体验感,对每颗像素进行单独补偿是补偿效果最优的办法。然而,对中大型OLED屏幕面板进行补偿时,巨大的像素数量会产生海量的灰度补偿数据,势必带来更高的存储资源开销,同时也不利于后续算法进一步处理。
针对上述问题,本文基于OLED外部光学抽取式补偿方案,利用Python软件实现了每颗像素灰阶-亮度曲线拟合,在此基础之上,对整块屏幕每颗像素点所有灰阶构建统一补偿目标曲线,根据补偿目标曲线生成相应补偿数据。通过软件模拟补偿验证,最终生成补偿数据既满足了OLED屏幕Demura要求,又节省了后续算力以及硬件存储资源。
1 补偿数据生成算法设计
1.1 算法流程
算法框架如图1所示,算法主要执行流程概括如下。
图1 补偿数据生成算法框架图
(1)将CCD相机获取到的每颗像素特定灰阶下亮度数据用软件进行拟合。在实际补偿方案实施过程中,出于时间成本考虑,只会选取特定灰阶进行拍摄,通过算法拟合出每颗像素灰阶-亮度曲线获得其他灰阶下亮度数据。
(2)通过软件构建屏幕的补偿目标曲线。在OLED屏幕生产过程中,由于工艺、生产条件、加工环境及驱动电路等影响,实际每颗像素表现出来的灰阶-亮度曲线与标准的Gamma曲线存在偏差,因此要构建一条补偿目标曲线。补偿目标曲线可根据补偿效果、补偿速度及补偿所需算力等指标进行人为构建,之后屏幕所有像素灰阶-亮度都依照该条曲线进行补偿。
(3)依据每颗像素灰阶-亮度曲线和构造的补偿目标曲线反解出补偿后灰阶。根据特定灰阶亮度拟合出的灰阶-亮度曲线,在一定程度上反映了实际像素发光曲线。外部光学抽取式补偿就是在不改变像素本身发光曲线前提下完成补偿操作,根据输入灰阶所对应的目标亮度反解出在拟合的灰阶-亮度曲线条件下对应灰阶值,称为补偿后灰阶。驱动电路最终获取补偿后灰阶值进行显示,得到目标亮度。
(4)构造补偿前灰阶与补偿后灰阶的多项式关系。虽然每颗像素输入灰阶所对应的补偿后灰阶都可以通过计算机准确计算出来,但如果将其不加任何处理地存到存储介质中供后续补偿电路使用,势必会增加存储资源的开销。故本文采取多项式拟合构建补偿前灰阶的多项式关系,利用选定输入灰阶下的补偿后灰阶作为已知条件求解多项式系数,在后续存储过程中对多项式系数进行存储,在保证整体补偿效果条件下,牺牲一定的补偿精度,换取存储资源的节约。
1.2 灰度-亮度曲线拟合
在数值分析中,有诸如多项式拟合、指数拟合、高斯拟合等拟合曲线方法。其中,多项式拟合方法编程实现简单,含义清晰明了,可用线性方程组思想进行求解,在增加灰阶亮度信息后,只需在原有线性方程组基础之上进行扩充即可。考虑到最符合人眼感受力的发光曲线近似为Gamma(2.2)曲线[9],为使曲线更加贴合实际像素发光曲线,采用多项式与Gamma(2.2)进行复合构造,如式(1)所示:
式中:Lij为单颗像素点测量亮度,i为像素点行坐标,j为像素点列坐标,x为像素点输入灰阶(归一化);a,b,c,d,e为待求解相关系数。
本文在求解灰度-亮度曲线的相关系数时,利用了“克拉默”法则[10]。克拉默法则适用条件是未知数个数与方程个数相等且系数矩阵行列式不为零的情况。例如下面的线性方程组(2):
系数构成的行列式为该方程组系数行列式(3):
若线性方程组(2)的系数矩阵可逆即系数行列式D≠0,则线性方程组有唯一解,其解为式(4):
式中:Dj是把D中第j列元素对应地换成常数项而其余各列保持不变所得的行列式,j=1,2,…,n。
本文选取第16,32,64,128,192五个灰阶(归一化)下的亮度数据代入式(1),稍加变换得到下列方程组(5):
上述方程组右边为CCD拍摄的亮度数据。利用“克拉默”法则以及Python软件自带的库函数进行求解,从而得到单颗像素灰阶-亮度曲线五个待求解相关系数,代入式(1)就可得到单颗像素灰阶-亮度曲线。
1.3 构建补偿目标曲线
1.3.1 补偿目标曲线模型搭建
人眼对于光强度的感觉是非均匀的[11],国际照明委员会(International Commission on illumination,CIE)对人眼的视觉明度感知和物体亮度做出了如式(6)的定义。
式中:Y为亮度因数,是在规定光照条件下、给定的方向上,物体表面亮度与同一光照下完全反射漫射体的亮度之比;L*是均匀颜色空间的米制明度,Yn为完全反射漫射体的亮度因数,Yn=100。由式(6)可知,人眼相对物体亮度的感觉整体上是立方根函数,关系曲线可用图2来表示。
从图2中曲线的斜率变化可看出,人眼对较暗环境下亮度有较高的敏感度,而随着物体亮度增大,亮度敏感度有所下降。据此,微软和惠普公司于1996年发布了sRGB标准,规定了归一化像素亮度与灰阶为指数关系且指数约等于2.2,这也是最符合人眼对于灰阶感受力的取值,如式(7)所给出的描述:
图2 人眼对物体亮度感知曲线图
式中:LN为第N灰阶亮度(归一化),N为第N灰阶。又因为像素经过CCD相机拍摄的实际发光亮度没有进行归一化操作,所以本文构建的补偿目标曲线在式(7)基础之上添加一个去归一化参数C构成式(8)。
值得注意的是,去归一化参数C的选取并不会影响人眼对于显示画面灰阶的感受力。对同一幅显示画面来说,C的值越高,整体画面亮度越亮;反之,则越暗。但是人眼感受到的灰阶层次不变。即便如此,对于C的取值,本文仍然有后续考量。
1.3.2 迭代求解目标曲线的去归一化参数
虽然人眼对不同环境光具有不同的亮、暗适应性,即使在特定亮度下,人眼察觉亮度变化的能力仍然是有限的。如式(9)所描述的,对于不同亮度B,能察觉到最小亮度变化ΔBmin也是不同的。但在相当大范围内,可察觉的最小相对亮度变化ΔBmin/B等于常数δ。常数δ称为对比度灵敏度阈值或费赫涅耳系数[12]。费赫涅耳系数与环境光大小有关,通常在0.005~0.02内。因此,理论上,只要整块屏幕在同一灰阶下所有像素点的亮度最大值与最小值差值与最小值的比值在上述范围内,通过人眼观测,画面就具有良好均匀性。
基于以上原理,判断每颗像素与构建出的补偿目标曲线在同一灰阶下亮度差值与补偿目标曲线亮度的比值处在费赫涅耳系数范围内,则在后续灰阶补偿操作中将该像素舍弃不进行补偿。最后将每个灰阶下可以舍弃的像素点进行累加作为节省的算力。以本文采用的200×200屏幕下256灰阶为例,如果以每个像素点每个灰阶都需要进行后续补偿计算,所需的算力就是200×200×256等于1 024万。
补偿目标曲线的构建如图3所示,去归一化系数C在图中决定补偿目标曲线的高低,费赫涅耳系数决定了以补偿目标曲线为中心上下两条虚线构成的阴影区域大小。因此,去归一化系数C决定了阴影区域能否涵盖尽可能多的点。
图3 补偿目标曲线构建示意图
在近几年数据处理与分析领域中,Python语言因其简单、开源、可移植性强以及丰富的库函数被越来越多科研工作者使用。在语法上,Python与其他大多数语言(如C)的主要区别是一个模块的界限,完全是由每行的首字母在这一行的位置来决定,通过强制程序员们缩进使得程序更加清晰和美观。而在编程思路上,Python与C语言类似,有一定编程基础的人都可以在短时间内熟练使用。
本文通过Python软件迭代求解去归一化系数C。为使程序更加简洁清晰,本文展示的所有程序将相关变量定义与自建函数部分代码省去,只保留主功能语句。伪代码如下(#号符之后为注释)。
主要求解思想如下。
第1行start,stop,step分别为去归一化系数C的开始值、结束值和迭代步长。在迭代求解去归一化系数C之前,首先需要拟合出整块屏幕如式(1)的灰阶-亮度曲线,一般选取特定灰阶下屏幕的亮度值均值进行拟合求解,然后代入第255灰阶求得亮度最大值,将其设置为去归一化系数C的结束值。每循环一次,将输出一个sum值,用sum除以总算力即为可以节省的算力百分比。
第3行、第4行循环针对像素点的行、列,也就是像素点的坐标。本文OLED屏幕样品像素数为200×200。
第5行将list_16数组所存储的第16灰阶下亮度数据赋给L16,以list_16[11][175]为例,代表了第12行、第175列像素点第16灰阶下CCD所拍摄到的亮度数据。
第10行调用了自建函数product_ce,此函数的输入为单颗像素五个特定灰阶下亮度(括号中为输入参数),输出值为单颗像素公式(1)中的a,b,c,d,e五个系数。赋值给等号左边容量为5的一维数组z。
第11行到第15行为求解Y1(单颗像素在j灰阶下补偿目标曲线亮度)、Y(拟合的单颗像素第j灰阶下亮度)。
第16行与第17行利用判断语句判断单颗像素某一灰阶下的亮度与目标亮度的差值与目标亮度的比值是否满足式(9),括号里的判断条件即为费赫涅耳系数取0.005。因为拟合亮度有可能在补偿亮度之上或之下,所以利用abs函数取绝对值进行计算。每有一个像素某个灰阶不需要补偿,sum值即加1。
最终在费赫涅耳系数取0.005条件下,去归一化系数C与节省算力关系如图4所示。本文利用了图像的拐点加速迭代过程最终的迭代精度为0.001。如果再选取更小的步长进行迭代,可以节省的算力变化已经很小了。
图4 去归一化系数与节省算力关系图
1.3.3 费赫涅耳系数的选取
经过前文介绍,费赫涅耳系数δ的取值范围在0.005~0.02。本文以补偿目标曲线亮度作为参考,可以直观地在图3中看到,阴影部分之间亮度差与补偿目标曲线的比值其实是两倍的δ。故本文实际的δ取值范围在0.002 5~0.01。在去归一化系数选取0.763条件下,可以节省的算力与费赫涅耳系数之间的关系如图5所示。在δ取0.01时,最大可以节省15%的算力。
图5 费赫涅耳系数与节省算力关系图
1.4 补偿数据生成
在非线性方程数值解法中,有诸如二分法、不动点迭代法、弦截法及抛物线法等算法。其中二分法编程实现简单,含义清晰明了,最为重要的是二分法总是收敛的。在本文明确已知根的范围且没有重根的条件下,二分法尤为适合。
本文所生成的补偿数据并非每个像素点每个灰阶补偿后灰阶,而是在完成构建整块屏幕补偿目标曲线以及每颗像素灰阶-亮度曲线拟合之后,将每颗像素特定灰阶下对应的补偿目标曲线亮度通过每颗像素的灰阶-亮度曲线利用二分法反解出来。主要伪代码求解过程概括如下。
准备操作:将补偿目标曲线亮度与灰阶-亮度曲线相等关系进行移项变为二者相减等于零,将其设为f(x),计算f(x)在灰阶归一化区间[0,1]之间的区间端点值。M为区间精度。
二分操作:计算f(x)在区间中点(a+b)/2处的值f[(a+b)/2],以及左端点值f(a)、右端点值f(b)。体现在第3行到第5行,其中a,b,c,d,e为公式(1)中的五个系数。等号右边第一项为拟合出的亮度。Y为目标亮度。
判断操作:若f[(a+b)/2]=0或者已经达到近似要求,则(a+b)/2即是根,计算过程结束,否则检验若f[(a+b)/2]*f(a)<0,则以(a+b)/2代替b,反之则以(a+b)/2代替a。体现在程序的第6行到第15行。
反复执行二分和判断操作,直到区间[a,b]满足区间精度。并将区间精度的中点值进行输出。
以单颗像素为例,最终补偿后灰阶计算结果如表1所示。
表1 特定输入灰阶补偿后结果
然后根据表1构建如式(10)所示的多项式,将输入灰阶与补偿后灰阶之间的关系利用多项式进行拟合并利用“克拉默”法则求解相关系数。其中x为单颗像素任意输入灰阶,Y为补偿后灰阶。最终将每颗像素A,B,C,D,E五个有关灰阶的多项式系数进行存储,以供后续补偿电路使用。
2 实验结果分析
2.1 实验环境及数据集
实验环境参数为:CPU为Intel(R) Core(TM)i5-6200U,主频2.36 GHz,操作系统为Windows 7,编译环境为PyCharm 2020.1 x64。
为详细考察补偿数据生成算法的性能,选取的数据集为经高分辨率拍摄的200×200像素OLED屏幕显示在第16,32,64,128,192灰阶的亮度数据。数据集为.CSV文件,两个样品,共计10个文件。
实验中,使用的编程语言为Python语言,主功能调用了numpy库、math库、csv库。
2.2 验证模型的建立
构建的验证模型流程如图6所示。箭头上方为条件或输入的参数,箭头下方为功能模块,箭头右边为结果。验证模型建立用到的有整块屏幕全灰阶下亮度、每颗像素输入灰阶与补偿后灰阶多项式系数以及舍弃列表。具体操作如下。
图6 构建验证模型流程示意图
整块屏幕全灰阶下亮度是一个三维数组,第一维是灰阶,第二维是像素行坐标,第三维是像素列坐标。舍弃列表是将每一灰阶下不需要补偿的像素点置1,其余位置置0。
首先将输入灰阶代入公式(10)得到补偿后灰阶,其次将补偿后灰阶代入公式(1)得到补偿后屏幕亮度,最后根据舍弃列表中置0的位置,用该亮度替换原有亮度,得到整块屏幕全灰阶下的补偿后亮度。
本文最终验证模型输出为样品每个灰阶下亮度标准差。
2.3 样品补偿前后标准差
图7为样品一费赫涅耳系数在0.002 5~0.01每一灰阶下对应的亮度标准差。与未做补偿相比,在200灰阶前补偿后亮度标准差均值下降了85%以上,在200~250灰阶下亮度标准差均值下降了50%以上,整体屏幕亮度标准差均值下降了67%左右。在费赫涅耳系数取0.01时,最大可以节省15%算力。
图7 样品一亮度标准差
样品二特定输入灰阶补偿后结果如表2所示。值得注意的是,在准确已知补偿后灰阶的五个点(16,32,64,128,192)补偿后的亮度标准差要远低于其他灰阶。但是表3其他灰阶下的标准差才真实地反应出本文的补偿结果。这是因为,对于输入灰阶与补偿后灰阶之间多项式关系,本文是通过五个点进行拟合的。其他输入灰阶下补偿后灰阶多少都是偏离最准确的补偿后灰阶。这也是本文大部分补偿后灰阶情况。
由于灰阶-亮度曲线为指数关系,越在高灰阶下,亮度越参差不齐,且本文求解补偿后灰阶使用的二分法,只能求得近似解,构建出的输入灰阶与补偿后灰阶多项式关系虽然合理,但必然有误差。这导致在极高灰阶输入下,补偿后亮度标准差比未做补偿的标准差还要高,需进一步优化。样品二任选五灰阶补偿后的屏幕亮度标准差如表3所示。
表2 样品二特定输入灰阶补偿后结果
表3 样品二任选五灰阶补偿后的屏幕亮度标准差
3 结 语
针对现有OLED屏幕单颗像素外部光学抽取式补偿方案中对后续补偿电路算力和硬件存储资源要求较高的问题,本文通过选取合适的费赫涅耳系数来构造补偿目标曲线来舍弃一定的像素点不进行补偿,在保证了补偿效果的前提下,节省了后续所需的算力及硬件存储开销,能够为彩色Demura方案提供一些启发。