1. 光照校正概述

光照校正,说白了就是让图像恢复它「本来该有的样子」。我做了这么多年图像处理,遇到最多的坑反而不是算法多复杂,而是——输入图像的光照压根就不正常。

你想想看,一个均匀光照下拍出来的文档,OCR识别率能到98%。换到角落阴影里拍一张,直接掉到60%。这不是算法不行,是光照在捣鬼。

1.1 什么是光照不均

光照不均,就是图像里不同区域的亮度差异太大。正常图像应该亮度分布平滑,但光照不均的图像,有的地方亮得发白,有的地方暗得看不清细节。

我习惯把光照不均分成两类:

类型 特点 典型表现
全局不均 整体偏暗或偏亮 逆光人脸、欠曝文档
局部不均 部分区域异常 角落阴影、中心过曝
渐变不均 亮度从一端到另一端渐变 扫描仪边缘衰减、球面光照
纹理不均 光照在纹理上产生明暗条纹 褶皱文档、曲面物体

核心认知:光照不均不是噪声,它是图像采集时物理光照环境带来的系统性偏差。用滤波去噪的方法处理它,基本没用。

1.2 常见场景

我接触过的项目里,光照校正需求最集中的就三个方向。每个方向我都踩过坑,一个一个说。

文档扫描

这是最典型的场景。你拿手机拍一张合同,办公室顶灯在左上角,右下角就是阴影。或者扫描仪老化,中间亮两边暗。

我记得有一次做银行票据识别项目,客户说「你们的OCR怎么老识别错金额」。我一看原始图像——票据中间被手指压出一个弧形,光照在弯曲处形成了一条暗带。校正前识别率72%,校正后直接跳到94%。

文档光照校正的难点在于:

  • 文字和背景的对比度不能丢失
  • 不能把纸张本身的纹理当成阴影去掉
  • 校正后不能出现伪影(比如边缘发黑)

人脸识别

人脸识别对光照极其敏感。同一个人的脸,正面光下识别通过,侧光下直接拒识。我参与过一个安防项目,闸机装在走廊尽头,头顶只有一盏日光灯。人脸一半亮一半暗,识别率惨不忍睹。

为什么会这样?因为人脸是三维曲面,光照方向不同,鼻子、眼窝、颧骨产生的阴影完全不同。这些阴影在特征空间里被当成了「不同的人」。

我的经验:人脸光照校正不能做全局均衡。你强行把暗部提亮,会把眼窝阴影抹掉,反而丢失了关键特征。我一般建议用局部自适应方法,只校正光照趋势,保留细节纹理。

医学影像

医学影像的光照不均更隐蔽。X光片、CT、MRI,这些图像本身就不是「自然光照」拍的,但采集设备的不均匀性依然存在。

举个例子,MRI线圈的灵敏度从中心到边缘是衰减的。同一张片子,中心区域亮,边缘暗。如果不做校正,医生看边缘区域可能会漏掉病灶。

医学影像的特殊要求:

  • 校正不能改变像素值的医学意义
  • 不能引入伪影(伪影可能被误诊为病灶)
  • 必须保持组织间的相对对比关系

1.3 校正的难点

说了这么多场景,其实核心难点就三个。我一个个拆开讲。

  1. 光照和纹理分不开
    光照不均和物体本身的纹理在频域上经常重叠。你没法用一个简单的滤波器把它们完美分离。我试过高通滤波、同态滤波、小波分解,每种方法都有取舍。
  2. 校正过度比不校正更糟
    我曾经犯过一个错误:对一张暗部细节丰富的图像做全局直方图均衡,结果暗部噪声被放大了十倍,图像变得没法看。校正不是越强越好,要适可而止。
  3. 实时性要求
    很多场景需要实时处理,比如视频通话的美颜、闸机的人脸识别。复杂的校正算法跑不动,简单的算法效果又不够。这是个工程取舍问题。

注意:不要迷信「万能算法」。光照校正没有银弹。文档、人脸、医学影像,它们的物理模型完全不同。我建议你针对具体场景选方法,而不是拿一个算法硬套所有数据。

1.4 校正的意义

做光照校正到底图什么?我总结了三层价值:

层面 具体收益 我见过的案例
提升识别率 OCR、人脸识别、目标检测的准确率提升10%~30% 票据识别项目,校正后从72%到94%
减少数据依赖 不需要采集各种光照条件下的训练数据 安防项目,一套模型适配全天光照变化
改善视觉体验 图像更自然、细节更清晰 手机拍照的自动增强功能

说白了,光照校正是图像预处理里性价比最高的操作之一。你花10%的算力做校正,可能换来20%的识别率提升。这笔账,怎么算都划算。

1.5 本章知识体系

下面这张图是我自己梳理的光照校正知识框架。你可以把它当成整个课程的地图。

光照校正知识体系框架 光照校正知识体系 光照校正 问题来源 常见场景 校正方法 光照环境 设备不均匀 文档扫描 人脸识别 医学影像 全局方法 局部方法 三大核心难点 光照与纹理难以分离 校正过度导致质量下降 实时性与效果平衡 本课程将逐一攻克上述难点,从原理到工程落地

这张图把光照校正拆成了四个模块:问题来源、常见场景、校正方法、核心难点。后面的章节会沿着这个框架展开。你先把这张图记在脑子里,后面学起来会顺很多。

学习建议:第一章是概念铺垫,不用急着记细节。你只需要搞清楚「光照不均是什么」「为什么需要校正」「难点在哪里」这三个问题就够了。具体怎么做,后面有的是实战。