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

ISP Pipeline(5): Auto White Balance Gain Control (AWB) 自动白平衡

G_gain = 1.0  # 常作为参考通道
R_gain = G_avg / R_avg
B_gain = G_avg / B_avg

Auto White Balance Gain Control(AWB)自动调整图像中红色、绿色、蓝色通道的增益,使图像中灰白区域的颜色看起来为“中性白”或“灰白”,从而矫正因光源色温导致的色偏。

为什么需要 AWB?

  • 不同光源(如阳光、白炽灯、荧光灯)具有不同色温,直接影响图像颜色;

  • 例如,白炽灯下画面偏黄,荧光灯下偏绿;

  • AWB 自动估算当前场景的光照类型,并给每个颜色通道加上合适的增益,使图像白平衡自然

AWB 基本流程

  1. 统计图像中各通道平均值(或灰度区域);

  2. 估计场景色温或光源偏色

  3. 计算 RGB 增益因子,使图像偏色区域趋于灰白;

  4. 应用增益到图像每个通道

 

常见算法原理

1. Grey World 假设(经典基础)

假设图像中所有颜色平均后应为灰色(R ≈ G ≈ B)

计算通道均值:

R_avg = np.mean(R)
G_avg = np.mean(G)
B_avg = np.mean(B)

 计算增益:

G_gain = 1.0  # 常作为参考通道
R_gain = G_avg / R_avg
B_gain = G_avg / B_avg

代码实现: 

def AWB(aaf_img):"""inputs:aaf_img = bayer domain image after anti-aliasing noise filteroutputs:awb_img = bayer domain image after auto white balance"""awb_img = np.copy(aaf_img) # create a copy of the bayer image to apply auto white balancer = awb_img[::2, ::2] # use array splicing to extract r, gr, gb, and b pixels from the full bayer imagegr = awb_img[::2, 1::2]gb = awb_img[1::2, ::2]b = awb_img[1::2, 1::2]r_ave = np.mean(r) # compute averages of r, g, and b channelsg_ave = (np.mean(gr) + np.mean(gb)) / 2b_ave = np.mean(b)r_gain = g_ave / r_ave # compute gains for r, g, and b channelsg_gain = g_ave / g_aveb_gain = g_ave / b_aveawb_img[::2, ::2] = r * r_gain # apply gains to r, g, and b channelsawb_img[::2, 1::2] = gr * g_gainawb_img[1::2, ::2] = gb * g_gainawb_img[1::2, 1::2] = b * b_gainreturn awb_img.astype(np.uint16)

G 通道作为参考通道(基准白),用 G 通道的平均值去除以 R 和 B 通道的平均值,是为了计算出让 R、B 看起来和 G 一样“灰” 需要乘上的校正系数(增益)

为什么选 G 通道当基准?

  • G 通道在 Bayer 中占比最大(Gr + Gb 一共占 50%);

  • G 通道通常噪声更低、更稳定;

  •  人眼对绿色更敏感,图像质量也更依赖于绿色;

  •  所以大多数 ISP 里都选 G 通道为基准。

http://www.lqws.cn/news/532819.html

相关文章:

  • 数据结构大项目
  • react - ReactRouter—— 路由传参
  • 【STM32 学习笔记】PWR电源控制
  • Java 大视界 -- 基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(324)
  • 【linux】全志Tina配置swupdate工具进行分区打包
  • 《PT100两线制温度测量系统设计:从电路原理到嵌入式实现》
  • 【嵌入式ARM汇编基础】-ELF文件格式内部结构详解(二)
  • 香港政府发表《香港数字资产发展政策宣言 2.0》,提出「LEAP」框架
  • 星型模式(Star Schema)
  • lua脚本为什么能保证原子性
  • 云效代码仓库导入自建gitlab中
  • Redis核心知识详解:从全局命令到高级数据结构
  • 首款SUV小米YU7、小米AI眼镜等新品重磅发布,玄戒O1超大规模量产
  • 湖北理元理律师事务所:科学债务优化如何守护民生底线
  • MySQL 总是差八个小时,如何破?
  • Linux中部署Jenkins保姆间教程
  • 爬虫005----Selenium框架
  • 9. 回文数
  • MySQL (二):范式设计
  • Linux服务器部署Leantime与cpolar构建低成本团队协作环境
  • LRU缓存C++
  • kubernetes》》k8s》》滚动发布 、金丝雀发布 、
  • 医疗AI专科子模型联邦集成编程分析
  • 第一章-人工智能概述-机器学习基础与应用(1/36)
  • 时序分析未完待续
  • DeepSeek16-open-webui Pipelines开发填坑
  • 什么是财务共享中心?一文讲清财务共享建设方案
  • dlib检测视频中的人脸并裁剪为图片保存
  • centos 7 安装NVIDIA Container Toolkit
  • 鸿蒙原子化服务与元服务:轻量化服务的未来之路