3、光学补偿基础:Mura缺陷成因、DeMura原理、Demura流程

各位好,我是老赵。在OLED驱动这行摸爬滚打了十几年,今天咱们聊聊一个让所有面板厂又爱又恨的话题——Mura补偿。

你想想看,一块OLED屏,像素级发光,每个子像素的亮度、色度天生就有差异。工艺再牛,也做不到100%均匀。这就是Mura的根源。我当年在产线调试第一块柔性屏时,点亮后满屏的云斑纹,心里那个凉啊……后来才明白,没有DeMura,高端OLED根本没法量产。

3.1 Mura缺陷:它到底是什么?

Mura,日语里是“斑”的意思。说白了,就是显示画面上的局部亮度或颜色不均匀。它不是坏点,也不是线缺陷,而是那种“看着别扭”的云团状、条纹状或网格状的差异。

我习惯把Mura分成三类,这样在分析根因时思路更清晰:

Mura类型 典型成因 表现特征 我踩过的坑
亮度Mura TFT阈值电压漂移、OLED材料蒸镀厚度不均、EL老化 低灰阶下最明显,像水渍一样 曾有一批屏,低灰阶下全是“云斑”,查了两个月发现是蒸镀源距偏差
色度Mura RGB发光材料寿命差异、CF光阻厚度不均、微腔效应 白画面下偏红或偏蓝,局部色温不一致 某次客户投诉白屏偏绿,最后定位是蓝色子像素的微腔深度偏了0.5nm
条纹Mura Gate驱动IC输出偏差、数据线RC延迟、Mask阴影效应 水平或垂直的明暗条纹 FHD分辨率下,Gate线负载不均导致每隔32行出现一条暗带
⚠️ 注意: 千万别把Mura和残像搞混。Mura是静态不均匀,残像是动态烧屏。补偿策略完全不同——Mura用空间域补偿,残像用时间域补偿。我见过有人把残像当Mura做DeMura,结果越补越糟。

3.2 DeMura原理:怎么把不均匀“抹平”?

DeMura的核心思想很简单:先测出每个像素的偏差,再反向补偿回去。但实现起来,门道很深。

我个人习惯把DeMura分为两个阶段:

  1. 测量阶段:用高精度相机拍下屏在不同灰阶下的亮度/色度分布,生成一张“偏差地图”。
  2. 补偿阶段:根据偏差地图,修改每个子像素的驱动数据,让最终发光均匀。

补偿的数学本质,其实就是一个查表映射。我举个例子:

// 伪代码:DeMura补偿核心逻辑
// 原始数据:8bit,0-255
// Mura偏差:-10% ~ +10%

for each pixel (x, y) {
    // 读取该像素的偏差系数
    float gain = mura_map[x][y];  // 0.9 ~ 1.1
    
    // 补偿后的灰阶
    int compensated = round(original_gray * (1.0 / gain));
    
    // 钳位到有效范围
    if (compensated > 255) compensated = 255;
    if (compensated < 0)   compensated = 0;
    
    // 写入驱动IC
    write_pixel(x, y, compensated);
}

你看,原理上就是乘一个倒数。但实际工程中,要考虑的东西多着呢:

  • 灰阶非线性:OLED的Gamma曲线不是线性的,低灰阶补偿精度要求更高。我建议至少用64个灰阶点做标定。
  • 温度漂移:Mura偏差会随温度变化。我曾经在冬天调试好的补偿参数,夏天一测全偏了。后来加了温度补偿系数。
  • 视角依赖:大视角下的Mura和小视角不一样。高端产品会做多视角补偿。
💡 经验之谈: 补偿精度不是越高越好。我曾经把补偿做到12bit精度,结果驱动IC的寄存器不够用,反而引入了量化噪声。一般来说,8bit面板用10bit补偿数据就足够了,留2bit做过驱保护。

3.3 DeMura流程:从产线到模组

完整的DeMura流程,我把它画成了一张流程图。你看完就明白为什么DeMura这么烧钱了——每一步都是精度和成本的博弈。

DeMura标准流程图 DeMura标准流程(产线级) ① 面板点亮 & 老化 ② 多灰阶高精度拍摄 ③ Mura偏差提取 ④ 补偿参数计算 ⑤ 烧录 & 验证 ⑥ 判定:Pass / Fail Fail → 返修或报废 Pass → 出货 整个流程约30-60秒/片,其中拍摄环节最耗时。产线节拍紧张时,可只拍3-5个灰阶做插值

流程看着简单,但每个环节都有坑。我挑几个重点说说:

3.4 关键环节详解

第一步:面板点亮与老化

新出厂的OLED,电学特性还没稳定。直接拍Mura,数据不准。我建议至少老化30分钟,让TFT阈值电压和OLED发光效率稳定下来。产线上为了赶时间,经常只老化5分钟,结果补偿参数到了用户手里就变了。

第二步:多灰阶拍摄

相机选型很关键。我踩过最大的坑是用了普通工业相机,结果低灰阶下信噪比不够,Mura没拍到,反而把相机噪声补偿进去了。后来换了科学级CMOS,动态范围14bit以上,才算搞定。

拍摄灰阶的选择,我一般这样定:

  • 低灰阶(0-63):每16阶拍一张,共4张
  • 中灰阶(64-191):每32阶拍一张,共4张
  • 高灰阶(192-255):拍1张255全白

总共9张,既能覆盖Gamma曲线拐点,又不会太慢。

第三步:Mura偏差提取

这一步的核心是“去背景”。拍出来的图像包含:面板Mura + 相机响应不均匀 + 环境光。我习惯用多项式拟合或高斯滤波做背景分离。举个例子:

// 背景分离算法(简化版)
// 输入:raw_image 拍摄的原始图像
// 输出:mura_map 纯Mura偏差

// 1. 低通滤波提取背景(相机+环境)
background = gaussian_blur(raw_image, sigma=50);

// 2. 相减得到Mura成分
mura_component = raw_image - background;

// 3. 归一化为增益系数
mura_map = mura_component / background;

这里sigma的选取很关键。选小了,会把Mura当背景滤掉;选大了,背景分离不干净。我一般根据Mura的空间频率来定——低频Mura用大sigma,高频Mura用小sigma。

第四步:补偿参数计算

算出mura_map后,要转成驱动IC能用的格式。不同IC厂家的格式不一样:

驱动IC厂商 补偿数据格式 存储方式 我遇到的坑
厂商A 8bit增益系数,每像素1字节 OTP烧录 OTP容量有限,只能存4个灰阶的补偿
厂商B 10bit偏移量,每像素2字节 Flash外挂 Flash读取速度跟不上,导致画面撕裂
厂商C 分段线性拟合,每段2个系数 寄存器配置 拟合精度不够,低灰阶补偿有台阶感
📌 核心原则: 补偿数据要经过“平滑处理”。直接使用原始mura_map,会因为像素级噪声导致补偿后出现“颗粒感”。我习惯用3x3或5x5的中值滤波做一次后处理,效果立竿见影。

第五步:烧录与验证

烧录完成后,一定要做二次验证。我见过最惨的一次,烧录器时序有问题,补偿数据写错了地址,结果整批屏补偿后Mura更严重了。所以验证环节不能省:

  • 拍一张补偿后的全灰阶画面
  • 计算均匀性指标(U'值或ΔE)
  • 对比补偿前后的Mura幅度

验证通过的标准,我一般定在:补偿后亮度均匀性 < 3%,色度均匀性 Δu'v' < 0.003。达不到就返工。

⚠️ 避坑指南: 我曾经遇到过一批屏,DeMura验证全Pass,但用户用了三个月后Mura又回来了。后来发现是OLED材料老化速度不均匀导致的。所以,DeMura不是一劳永逸的——对于长寿命产品,建议预留在线补偿接口,允许用户端做二次校准。