摘要:为实现对LED显示屏的亮色度校正,研究了一种可自动对LED显示屏死灯位置进行补点,并适用于图像采集过程中存在图像倾斜情况的灯点定位排序算法。首先对图像进行二值化处理,计算出所有灯点的中心坐标;然后通过极值法和二向排序法完成了图像中4角灯点的预定位;接着利用线性归类排序法对边界点进行定位排序,通过差值筛选法定位死灯并自动补点,利用边界点坐标与死灯位置理论坐标对所有直线进行归类排序,完成显示屏所有灯点的定位排序。最后介绍了LED显示屏亮度均匀性计算方法,通过亮度校正实验验证灯点定位排序结果的准确性。实验结果表明,校正前显示屏亮度均匀性为73.7%,校正后显示屏的亮度均匀性提高至98.7%。显示屏亮度均匀性已经达到人眼可接受的范围内,校正效果较好,灯点定位排序精度较高。
关 键 词:LED显示屏;灯点定位排序;死灯位置自动补点;亮度均匀性校正
1 引 言
LED(Light Emitted Diode)显示屏由于其尺寸灵活、亮度高、寿命长、视角大等优点,在展会、商场、影院、地铁、演播室、医院等场所被广泛地应用[1-4]。但由于LED经过长期使用后发光元件和驱动元件老化[5]、模块和箱体存在安装误差等因素,会对亮色度均匀性造成影响[6],所以需要对显示屏进行校正处理[7]。而校正过程中图像上灯点定位排序的精度将直接影响最终校正的效果。
传统的亮色度检测方法同一时间只能检测一个点,对于LED显示器百万级像素点检测来说效率低下[8]。而采用CCD(Charge Coupled Device)面阵检测器单次测量的像素点数量很大,在相同时间内,检测效率大幅提高[9]。LED显示屏内部的灯点分布存在一定的规律性,但是通过相机拍摄出来的图像由于畸变、图像倾斜等原因并不能保证图像中灯点严格按照理想的棋盘格形状分布。而且在LED显示屏中会出现某些灯珠不能点亮,即死灯的情况,给灯点的定位造成极大的干扰。针对这种情况国内外相关学者通过对二值图像进行水平和垂直投影,确定灯点位置[10-11]。
本文利用机器视觉检测技术来测量LED显示屏亮度[12-13],通过对图像中所有灯点的4个角点进行预定位、对4条边界点按照直线方程归类排序、对死灯位置自动补点、反馈角点和边界点死灯处的理论坐标、对所有直线进行归类排序完成显示屏所有灯点的定位排序。在提高了亮度采集效率的同时,补充了死灯位置的坐标,为生成系数矩阵及亮色度校正提供了更精确的灯点坐标。
2 LED灯点中心坐标提取
LED亮度校正的前提是找到图像上的灯点与显示屏灯点之间位置的一一对应关系,所以在校正前要确定图像中各个灯点的中心坐标,然后将所有坐标按照实际显示屏的灯点排列顺序进行坐标重排。
在确定灯点的具体位置之前,先要对采集到的图像进行灰度分布统计,在所获取的感光图像中,由于灯点一般由矩阵的方式排列,且灯点区域与背景区域的灰度值存在明显的差异,有时还会产生环绕光的现象[14]。因此需对图像进行二值化处理[15-16]。首先将拍摄图像转化为灰度图像,在灰度图像中的非图像点区域提取部分像素灰度值的平均值。然后以二倍非图像点区域灰度值的平均值为阈值,将灰度图像中小于阈值的像素灰度值赋值为0,大于阈值的像素灰度值赋值为1。由于灯点位置像素灰度值较高,高于阈值的点分布密集且分布形状趋近于圆形,所以将灰度值高于阈值且密度较高的区域取该区域的中心为灯点坐标,完成灯点中心坐标的提取。
3 LED灯点定位排序
由于拍摄过程中存在图像坐标系与像素坐标系的坐标轴线不能保证平行的情况,在灯点较多、倾斜角度较大的情况下,会出现坐标排序错误。因此本文针对由图像倾斜导致排序混乱的问题给出了一种LED灯点精准排序的算法(本文仅校正由于相机和LED显示屏没有对准导致图像在一定范围内倾斜的情况,如果倾斜非常严重可能出现校正失败,此时则需要调整相机重新获取图片)。
因为图像中所有灯点的坐标由于镜头畸变、相机倾斜、定位误差等因素并不是严格按照规律排列的,但总体排列形状趋向于棋盘格点型分布,因此本文的定位排序算法总体思路为先确定4个角点坐标,再根据斜率分别将所有点归类到各条直线上并排序。
3.1 角点坐标预定位
在以图像左上角为坐标原点的像素坐标系下,无论是镜头畸变、相机倾斜还是其他因素导致拍摄图像的LED灯点不能严格按照规律排列,其拍摄所得图像的左上角和右下角顶点分别为到坐标原点的最近点和最远点(图1(a),1(b))。但是经过大量实验发现,如果位于4个角点的LED灯珠出现死灯的情况,则无法完成角点定位。因此本文在定位排序的基础上将死灯所在位置按照周围点坐标排列规律进行了自动补点。
图1 屏幕顺时针偏移(a)和逆时针偏移(b)时定位距离原点最远和最近的两点
Fig.1 Two points lecated furthest and closest to the origin while the screen being shift clockwise (a) and coanclock wise (b)
首先设原点坐标为O(0,0),坐标轴横向为X轴,向右为正方向;纵向为Y轴,向下为正方向,计算所有点坐标到坐标原点之间的距离,并取极小值所在点设为XiYi,极大值所在点设为XaYa分别作为图像左上角和右下角的定位点。然后找出所有点中最大的Y值设为Ymax,找出所有点中Y值小于Ymax-3l的点(l为两个连续点之间的理想距离),如图2(a)所示。将图2(a)中框选的点按照X从小到大排列并选取框内X值与最小X值的绝对值小于l/2的点,筛选结果如图2(b)所示。最后再从小框中选取Y值最大的点即为左下角顶点,并将此点设为XiYa。
图2 初步筛选左下角顶点(a)和精确定位左下角顶点(b)
Fig.2 Preliminary screening of the lower left vertex (a) and precise positioning of the lower left vertex (b)
同理可证,找出所有点中最大的X值设为Xmax,并找出所有点中X值小于Xmax-3l的点,如图3(a)所示。将图3(a)中框选的点按照Y从小到大排列并选取框内Y值与最小Y值的绝对值小于l/2的点,筛选结果如图3(b)所示。最后再从小框中选取X值最大的点即为右上角顶点,并将此点设为XaYi,至此通过二向排序,完成另外两个角点的定位。
图3 初步筛选右上角顶点(a)和精确定位右上角顶点(b)
Fig.3 Preliminary screening of the top right vertex (a) and precise positioning of the top right vertex (b)
以上是在4个角的顶点不是死灯的情况下进行的初步定位,如果在4个角点处出现死灯则需进一步进行补点并重新定位。
首先将初步定位的4个角点相邻之间两两连线,得到4条直线并分别设为D1、D2、D3、D4(图4),得出理论上图像点最外围4条边的直线方程的参数。
k1=(yXaYi-yXiYi)/(xXaYi-xXiYi),
(1)
b1=yXaYi-k1xXaYi,
(2)
k2=(yXaYa-yXiYa)/(xXaYa-xXiYa),
(3)
b2=yXaYa-k2xXaYa,
(4)
k3=(yXiYa-yXiYi)/(xXiYa-xXiYi),
(5)
b3=yXiYa-k3xXiYa,
(6)
k4=(yXaYa-yXiYa)/(xXaYa-xXiYa),
(7)
b4=yXaYa-k4xXaYa.
(8)
图4 无死灯情况下定位4条直线
Fig.4 Positioning four straight lines without dead lights
然后根据公式(9)分别计算所有点到4条直线之间的距离:
(9)
当xXaYi=xXiYi,或xXaYa=xXiYa时,k值不存在,所以此时用公式(10)和(11)计算点到直线之间的距离:
d=|xXiYi-x|,
(10)
d=|xXaYa-x|,
(11)
将点到直线距离小于l/2的点分别归类到4条边线上,然后将属于D1、D2两条边的点按照X值从小到大排列,将属于D3、D4两条边的点按照Y值从小到大排列,完成线性归类排序,并得出每条边上点的数量m1、m2、m3、m4。
由于图像点行列数已知,并设为p行q列,且每条直线所属点个数也可以通过计算获得,所以通过对比图像点真实行列数与计算行列数是否相等可知角点处是否为死灯。但实际情况中4条边界线上也有可能出现死灯的情况,所以我们先计算边线上的死灯个数。
通过公式(9)、(10)、(11)的筛选可以得到属于4条边界线的点坐标,分别以m1、m2、m3、m4行两列的矩阵形势表示,并将坐标矩阵分别设为A1、A2、A3、A4,通过Ai的后mi-1行与前mi-1行做差,寻找有多少x或y差值大于1.7l的点来确定每条线上死灯的个数(=1,2,3,4)。设:
则有:
Bi=Ami-Ami-1,
(12)
设B1、B2中第二列有n1、n2个大于1.7l的值,B3、B4中第一列有n3、n4个大于1.7l的值,即n1、n2、n3、n4代表每条边界线上死灯的个数(不包括顶点)。
由于左上角顶点和右下角顶点是按照顶点到原点距离确定的,如果出现死灯则会分别出现两种情况;而左下角和右上角的点是通过边界排序计算的,所以只会出现一种情况(图5)。
图5 左上角顶点是死灯,预定位顶点为第二行第一列(a)和第一行第二列(b);右上角顶点是死灯,预定位顶点为倒数第二行最后一列(c)和最后一行倒数第二列(d);左下角顶点是死灯(e);右上角顶点是死灯(f)。
Fig.5 Top left vertex is a dead lamp, the pre-positioning vertex is the second row, first column (a) and the first row, second column (b); The top right vertex is a dead lamp, the pre-positioning vertex is the last column of the second to last row (c) and the second to last column in the last row (d); The vertex of the lower left corner is the dead light (e); The vertex of the upper right corner is the dead light (f).
以图5(a)为例,左上角顶点为死灯,且第二行第一列为到原点最近的点,此时直线D3上的点个数m3加上死灯个数n3加上一个顶点死灯等于图像点总行数p,直线D2上的点个数m2加上死灯个数n2等于图像点总列数q,直线D4上的点个数m4加上死灯个数n4等于图像点总行数p。如果满足公式(13)则可以确定左上角顶点为死灯,此时为了后续的定位,需要在顶点处按照点间距和排列顺序补充一个点坐标。
(13)
同理可算出其余5种顶点死灯的坐标,完成角点坐标的定位。
3.2 灯点排序
角点坐标定位完成后,按照公式(3)、(4)、(7)、(8)可以计算出D3、D4两条直线方程,再按照公式(9)设立阈值将属于直线附近的点归类到直线上并按照X值大小分别对两条直线排序,若直线中出现死灯则按照规律自动补点。此时获得两个p行两列的坐标矩阵E1、E2。其中,
虽然像素点总体排列接近棋盘格分布,但经过实验发现如果按照某一行的斜率分别赋予每一行,再根据点间距确定直线方程中的参数b这种方法计算所有行的直线方程,结果会出现误差,所以需要分别对每一行单独计算直线方程。矩阵E1,E2中每一行的点是相对应的,所以根据公式(14)、(15)可以计算出p个直线方程。
ki=(yiq-yi1)/(xiq-xi1),(i=1…p),
(14)
bi=yiq-ki·xiq,(i=1…p),
(15)
然后根据公式(16)分别计算所有点到每条直线之间的距离:
(16)
如果出现斜率不存在的情况则有:
di=|xi1-x|,
(17)
至此将所有点分别归属到每条横向直线上,再将每条直线上的点按照Y值从小到大排列即完成所有点的正确排序。
4 亮度校正
4.1 计算校正系数矩阵
LED显示屏的每个像素点是由红、绿、蓝3种颜色的发光二极管组成的,所以需要对每一种颜色的发光二极管进行校正。常见的方法中将亮度最低值作为目标值会导致显示屏校正以后亮度降低严重,影响观看效果。为了获得校正的系数矩阵,本文首先需要获取灯点的亮度值。具体方法为:将显示屏分别显示红、绿、蓝3种颜色,并将亮度调节至最大,方便CCD相机采集显示屏图像。对灯点的亮度值提取采用亮度值积分法,即统计灯点的方框内所有像素点值之和,然后将所有灯点的亮度值相加求平均数,将亮度值的平均数乘以0.85得到的亮度作为校正亮度的目标值。确定目标值以后让所有灯点亮度通过一个变换矩阵变为这个目标值以达到亮度一致的目的。最后将目标亮度值与所有灯点的亮度值相除得出系数矩阵:
(18)
式中Ri、Gi、Bi分别为红色、绿色、蓝色的第i个灯点的校正系数;Irc、Igc、Ibc为3种颜色的目标亮度值;Iri、Igi、Ib为3种颜色第i灯个点的亮度值。如果存在有灯点的亮度值小于目标亮度值的情况,则该点的校正系数赋值为1。至此可得出每个灯点对应的校正矩阵为
4.2 检测亮度均匀性
亮度均匀性的计算过程如下:
(1)在最高灰度级、最高亮度级下显示白场。
(2)用亮度计测量图6所规定的P0~P8各个点的亮度值L0~L8,并计算平均值
(3)用公式(19)计算各点亮度均匀性Pi。
(19)
式中i为0~8中任意一点。
(4)取(3)中最小值来表示LED显示屏的亮度均匀性Lp。
图6 亮度均匀性测量点示意图
Fig.6 Schematic diagram of brightness uniformity measurement points
5 实验结果与分析
为了验证本文提出算法的有效性,本文进行了一系列实验。实验选用尺寸为320×180的矩形LED显示屏进行检测,计算出了所有LED灯点的位置信息,并根据目标亮度值计算出系数矩阵,对显示屏进行亮度均匀性校正,校正前后显示屏的白场显示效果如图7所示,其中(a)为校正前显示效果,(b)为校正后显示效果。
图7 校正前(a)和校正后(b)显示屏白场显示效果对比图
Fig.7 Comparison chart of the white field display effect of the screen before (a) and after (b) calibration
对比图7(a)和图7(b),可以看出校正前显示屏存在亮度不一致的块状区域,经过校正后亮度趋于一致。最终经过亮度检测和计算可以得出校正前白场灯点亮度均匀性约为73.7%,而经过校正后白场灯点亮度均匀性约为98.7%。校正前后显示屏为白场和红、绿、蓝3种基色时测试点亮度值以及亮度均匀性结果如表1、表2所示。
表1 校正前亮度值与亮度均匀性
Tab.1 Brightness value and brightness uniformity before correction
表2 校正后亮度值与亮度均匀性
Tab.2 Brightness value and brightness uniformity after correction
6 结 论
本文针对LED显示屏校正过程中相机拍摄的图像存在一定程度的倾斜问题,提出了灯点定位排序的算法。通过二向排序和归类排序的方法完成了灯点坐标的预定位,然后根据差值检测和周围点坐标对死灯位置进行了补足。最后根据灯点的定位排序对LED显示屏进行了亮度校正实验,校正前后显示屏白场的亮度均匀性由73.7%提高至98.7%,达到人眼可接受的范围内,且亮度在可接受的范围内,从而验证了本文提出的灯点定位排序法的准确性。