4、图像预处理技术:去马赛克、白平衡校正、伽马校正、直方图均衡化

各位同学,咱们今天聊点实在的。低光照环境下,传感器拿到的原始数据,说白了就是一堆「半成品」。你直接拿它去识别、去分析,效果肯定惨不忍睹。我做了这么多年图像处理,最深的体会就是:预处理做得好,后面省心一大半

这一节,我带你过一遍四个最核心的预处理步骤。它们就像做菜前的「洗、切、腌」,缺一不可。

核心逻辑图: 从RAW数据到可用图像的流水线

RAW 原始数据 去马赛克 Bayer → RGB 白平衡校正 色温归一化 伽马校正 亮度映射 直方图均衡化 低光照图像预处理流水线

4.1 去马赛克:从「黑白格子」到「彩色世界」

你想想看,CMOS传感器本身是色盲的。它只能感知光的强度,分不清红绿蓝。那彩色照片怎么来的?靠的是传感器前面那层「马赛克滤镜」——最常见的就是Bayer阵列。

每个像素只采集一种颜色(R、G或B),剩下的两种颜色靠猜。这个「猜」的过程,就是去马赛克。

常用的方法有几种:

  • 双线性插值:最简单,取周围相邻像素的平均值。速度快,但边缘容易糊。我在早期一个安防项目里用过,晚上监控画面全是锯齿,后来果断换了。
  • 边缘导向插值:先判断边缘方向,再沿着边缘插值。效果比双线性好不少,但计算量翻倍。
  • 基于深度学习的去马赛克:近几年的趋势。用CNN直接端到端恢复全彩图像。低光照下效果尤其好,但需要硬件支持。

我的经验: 低光照场景下,我建议优先考虑边缘导向插值。深度学习虽然强,但功耗和延迟在嵌入式设备上是个坎。别为了追求极致画质把帧率搞丢了。

4.2 白平衡校正:让「白色」回归白色

你有没有发现,在暖色灯光下拍的照片,整体偏黄?在阴天拍的照片,又偏蓝?这就是色温捣的鬼。

白平衡校正的目的,就是让图像中原本是白色的物体,在任意光源下都显示为白色。说白了,就是给RGB三个通道分别乘一个系数,把色温拉回来。

常见的白平衡算法:

算法 原理 适用场景
灰度世界法 假设场景平均颜色为灰色 色彩丰富的场景
完美反射法 假设最亮像素为白色 有高光区域的场景
色温估计法 基于色温曲线查表 已知光源类型

注意: 低光照环境下,灰度世界法容易翻车。因为暗部噪声大,平均颜色可能偏绿或偏紫。我曾经在一个夜间停车场项目里踩过这个坑,后来改用色温估计法+手动微调才搞定。

4.3 伽马校正:人眼不是线性传感器

人眼对暗部细节的敏感度远高于亮部。但摄像头传感器是线性的——它忠实记录光子数量。这就导致一个问题:直接显示线性数据,暗部看起来一片漆黑,亮部却过曝。

伽马校正就是解决这个矛盾的。它用一个幂函数把线性数据映射到人眼更舒服的非线性空间。

标准公式很简单:

V_out = V_in ^ (1 / γ)

其中γ通常取2.2。这是显示行业的标准值。

低光照下的特殊处理:

  • 如果场景整体偏暗,可以适当降低γ值(比如1.8),让暗部更亮一些。
  • 但要注意:降低γ值会放大暗部噪声。我一般会配合后面的去噪步骤一起做。

一个小技巧: 伽马校正最好在去马赛克和白平衡之后做。因为这两个步骤都是线性操作,先做伽马会破坏线性关系,导致颜色失真。嗯,顺序很重要。

4.4 直方图均衡化:把对比度「拉」出来

低光照图像最典型的问题是什么?对比度低。直方图均衡化就是用来解决这个的。它通过重新分布像素灰度值,让直方图从「挤在一起」变成「均匀分布」。

效果立竿见影:暗部变亮,亮部变暗,细节全出来了。

但要注意几个坑:

  • 全局均衡化:简单粗暴,但容易把噪声也放大。我见过有人把一张噪点图均衡化后,噪点比信号还明显。
  • 自适应直方图均衡化(AHE):分块处理,效果更好。但计算量大,而且块与块之间可能有接缝。
  • 限制对比度自适应直方图均衡化(CLAHE):在AHE基础上加了对比度限制,防止噪声过度放大。这是我最推荐的低光照处理方案。

代码实现其实不复杂,OpenCV里直接有函数:

import cv2
import numpy as np

# 读取低光照图像
img = cv2.imread('low_light.jpg', 0)

# 创建CLAHE对象
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))

# 应用CLAHE
enhanced = clahe.apply(img)

# 显示结果
cv2.imshow('Original', img)
cv2.imshow('CLAHE', enhanced)
cv2.waitKey(0)

总结一下: 这四个步骤环环相扣。去马赛克解决颜色缺失,白平衡解决色温偏差,伽马校正解决人眼感知差异,直方图均衡化解决对比度不足。少一步,效果都会打折扣。

我个人习惯在低光照项目里,把CLAHE放在最后一步。因为它对噪声敏感,前面三步把图像质量提上来后,CLAHE才能发挥最大作用。你想想看,如果前面噪声一堆,均衡化后岂不是雪上加霜?

专注资料整理