当前位置: 首页 > news >正文

【ISP】AWB的基本原理介绍(基于灰度像素检测)

🎨 基于灰度像素检测的自动白平衡(AWB)算法原理与实现

在图像处理中,自动白平衡(AWB, Auto White Balance)是调整图像色温、还原真实色彩的关键算法之一。本文介绍一种经典实用的 AWB 方法 —— 基于灰度像素检测(Gray Pixel Detection) 的算法原理,并附带经典论文及推导公式,适合工程实现与理论学习。


📷 为什么需要自动白平衡?

不同光源(如日光、白炽灯、荧光灯)具有不同的色温,会导致图像整体偏黄、偏蓝或偏绿。AWB 的目标是估计当前光源颜色,然后对图像进行反色偏处理,使图像中原本的“白色或灰色区域”真正呈现为中性灰。


🧠 灰度像素法(Gray Pixel Method)原理

✨ 核心假设

在真实场景中存在大量原本应呈现为灰色的像素,这些像素满足 R ≈ G ≈ B,但由于光照偏色导致它们的 RGB 通道出现不等。通过检测这些“灰度像素”的偏差,可推测当前光源色彩。


🧪 算法步骤

1️⃣ 灰度像素检测

选出图中满足如下条件的像素作为灰度像素候选:

|R - G| < T1 and |R - B| < T2 and |G - B| < T3

其中 T1~T3 是经验阈值,常设为 10 或更小,用于捕捉 R/G/B 差异较小的像素。


2️⃣ 统计灰度像素均值

对这些“灰点”分别计算 R、G、B 通道的平均值:

mean_R = average(R)
mean_G = average(G)
mean_B = average(B)

这些值反映了灰度像素在当前光源下的实际观测颜色。


3️⃣ 设置目标灰值

假设我们希望灰度像素修正后呈现为标准灰色 [ref, ref, ref]。我们可以选定 ref = mean_G 或固定为某个值(如 128 或 255)。


4️⃣ 计算增益值(Gain)

为了将图像矫正为中性色,我们对每个通道计算增益:

gain_R = ref / mean_R
gain_G = ref / mean_G
gain_B = ref / mean_B

通常以绿色通道为基准(gain_G = 1.0),计算相对增益。


5️⃣ 应用增益,矫正图像

对图像中的每个像素 (R, G, B) 应用增益:

R' = R * gain_R
G' = G * gain_G
B' = B * gain_B

最后 clip 到 [0, 255] 范围。


✅ 示例计算

假设从灰度点中得到:

mean_R = 180, mean_G = 160, mean_B = 140

目标灰值设为 ref = 160,则:

gain_R = 160 / 180 ≈ 0.89  
gain_G = 160 / 160 = 1.00  
gain_B = 160 / 140 ≈ 1.14

图像整体使用这组增益进行颜色校正,即可矫正偏色。


📚 相关论文与文献支持

论文标题作者贡献
Gray Pixel: An Effective Statistical Method for Illumination EstimationKao et al. (CVPR 2016)提出直接在图像中寻找灰度像素,用于估计光源色彩
On Finding Gray PixelsQian et al. (CVPR 2019)引入灰度指数(GI),提升灰像素检测精度
Revisiting Gray PixelQian et al. (VISAPP 2019)结合均值漂移聚类(MSGP)提升鲁棒性

这类方法在真实场景中比 Gray World、White Patch 更稳定,特别是在复杂光照或物体颜色丰富的场景中。


⚙️ 代码实现(Python + OpenCV 简化版)

import cv2
import numpy as npdef gray_pixel_awb(img):img = img.astype(np.float32)R, G, B = img[:,:,2], img[:,:,1], img[:,:,0]mask = (np.abs(R - G) < 10) & (np.abs(R - B) < 10) & (np.abs(G - B) < 10)mean_R = np.mean(R[mask])mean_G = np.mean(G[mask])mean_B = np.mean(B[mask])ref = mean_Ggain_R = ref / mean_Rgain_G = 1.0gain_B = ref / mean_BR = np.clip(R * gain_R, 0, 255)G = np.clip(G * gain_G, 0, 255)B = np.clip(B * gain_B, 0, 255)out = cv2.merge((B, G, R)).astype(np.uint8)return out

🧩 总结

  • 灰度像素法是一种统计学上鲁棒、无需训练的 AWB 方法。
  • 其核心在于:通过找出图像中应为灰色却被偏色污染的区域,反推出当前光源的偏移方向,从而计算出增益进行矫正。
  • 在嵌入式设备或无校准标定条件下,非常实用。

相关文章:

  • 【数据结构 · 初阶】- 带头双向循环链表
  • java Stream流
  • 【高阶数据结构】第三弹---图的存储与遍历详解:邻接表构建与邻接矩阵的BFS/DFS实现
  • PasteForm框架开发之Entity多级嵌套的表单的实现
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第八讲)
  • jupyter中切换Anaconda虚拟环境
  • 自定义类型之结构体
  • Charles 安装与使用详解:实现 App 与小程序 HTTPS 抓包
  • Linux进程
  • 网络协议TCP/IP、UDP、HTTP/HTTPS 完全指南
  • 数据库学习通期末复习一
  • C# + Python混合开发实战:优势互补构建高效应用
  • Day09【基于Tripletloss实现的简单意图识别对话系统】
  • Android学习总结之git篇
  • 根据pdf文档生成问答并进行评估
  • 集成电路流片随笔10:UART模块tinyriscv 通信协议和RIB接口总线区别
  • 【day5】调用AI接口,生成自动化测试用例
  • JVM 垃圾回收
  • 一个简单的Python文件MCP服务器
  • OpenAI 最新发布的 GPT-4.1 系列在 API 中正式上线
  • 用社群活动维系“不开发”古镇的生命力
  • 巴基斯坦军方:印度导弹袭击已造成至少3人死亡
  • 苏丹宣布与阿联酋断交
  • 机器人助力、入境游、演出引流:假期纳客千万人次城市有高招
  • 原四川省农村信用社联合社党委副书记、监事长杨家卷被查
  • 胡祥|人工智能时代:文艺评论何为?