尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

树莓派相机自动白平衡详解(一)

树莓派相机自动白平衡详解(一) 目录1.AWB (Automatic White Balance)1.1Overview 概述1.2The Feasible Set 可行光源集合 CT 色温曲线核心概念CT‑Curve (Color‑Temperature Curve)白平衡增益计算公式Figure7 示意图解读1.3Bayes Theorem 贝叶斯公式1.4The Priors 先验概率 (P(I))2.后验计算 实现细节2.1 残差定义非常关键2.2 单色块二维高斯似然模型2.3 全图联合似然2.4 Log‑Likelihood 对数似然2.5 Implementation 8 条实现要点rpi/awb.cpp 源码逻辑3.完整算法执行链路4.关键误区对照表1.AWB (Automatic White Balance)自动白平衡目标消除光源色温带来的色偏实现颜色恒常性 (Color Constancy)。人眼可以自动抵消环境光颜色图像传感器输出的 Raw 图像没有这个能力AWB 算法必须算出当前光源然后施加红、蓝增益完成校正。1.1Overview 概述算法思路贝叶斯最大似然估计预先定义一组可行光源集合在当前图像数据下找出集合中最有可能的光源使用该光源对应的白平衡增益校正图像。⚠️ 所有参数、色温曲线必须由camere‑tuning‑tool调参生成不能硬编码。1.2The Feasible Set 可行光源集合 CT 色温曲线核心概念CT‑Curve (Color‑Temperature Curve)真实世界热辐射光源太阳、钨丝灯的白点色度落在普朗克黑体轨迹 (Planckian Locus)LED、荧光灯不完全贴合黑体轨迹但仍可以近似相机真实轨迹≠理论黑体轨迹文档重点CT 曲线不是直接使用标准黑体轨迹而是使用你的传感器实拍校准出来 在各种光源下拍摄麦克贝斯色卡的中性灰块取出 RGB 计算归一化色度以横轴 r纵轴 b 画出的折线就是该相机专属的色温曲线 CT‑Curve。 曲线上每一个控制点绑定一个色温值。白平衡增益计算公式白点校正目标让中性灰 RGB 三通道相等。G通道增益恒等于 1。Figure7 示意图解读X 轴8575K冷日光→2498K暖白炽灯控制点连成折线。曲线左边高色温日光区控制点密集色温变化小右侧低色温控制点稀疏。文档举例2911K / 2919K色度点明显分开。即使色温数值几乎一样不同类型光源荧光灯 / 白炽灯会产生不一样的白点因此校准采样的时候需要分开采集。1.3Bayes Theorem 贝叶斯公式目标求给定图像观测数据 D光源 I 的后验概率符号含义I候选光源对应 CT‑Curve 上某一色温点D图像观测数据16×12 网格色块均值(P(I))光源的先验概率即场景出现光源 I 的先验可能性P(D|I)似然假设光源是 I观测到当前图像 D 的概率P(I|D)后验概率最终最大化的目标(P(D))证据项和光源 I 无关搜索最优色温的时候是常数可直接丢弃因此优化问题简化为用图可以表示为1.4The Priors 先验概率 (P(I))先验是 AWB 最重要的调参旋钮之一高亮度环境lux 照度高调高日光高色温光源的先验权重算法更倾向选择冷色温低照度室内环境调高室内暖光源权重优先选择低色温。先验曲线在 tuning 配置文件中定义运行时基于 lux 估计插值得到。本质上先验概率就是根据不同lux/lv设置的权重值。MTK白平衡模块中也有类似的先验概率也就是不同LV下不同色温的权重设置值。如下图所示MTK白平衡模块中类似先验概率的权重值也有其他主控方案根据lux和R/G的比值进行先验概率值的设置。如下图地平线主控白平衡模块的先验概率设置原理。2.后验计算 实现细节2.1 残差定义非常关键选定候选光源 I它对应增益。 对网格色块归一化色度计算校正之后的偏差残差物理意义如果当前色块是一块完美中性灰光源恰好等于 I白平衡增益校正后R/G 1、B/G 1残差。实际情况下如果当前色块为当前色温下的白块实际计算的2.2 单色块二维高斯似然模型假设残差服从二维高斯分布❗这里不是色块到 CT 曲线的垂直距离之前讨论中「色块投影到 CT 曲线求垂直横向偏差」属于错误理解。原始粗搜索阶段算法根本不需要色块向 CT 曲线投影流程遍历候选光源 I色温点在 CT 曲线上→对每个网格色块算出校正后的残差→代入高斯打分。 每一个候选光源色块都会重新计算一遍残差、得到一个全新的似然分数。 色块打分结果依赖于当前遍历的候选光源 I。2.3 全图联合似然假设所有 192 (16×12) 网格区域互相独立概率相乘2.4 Log‑Likelihood 对数似然乘积→求和对数变换后数值稳定性大幅提升。 两边取负对数最大化概率等价于最小化负对数代价文档说明设置标准差相同该常数项可以合并进先验权重减少计算量。2.5 Implementation 8 条实现要点rpi/awb.cpp 源码逻辑先验 P (I) 由 lux 照度决定在两个相邻光源先验之间插值CT‑Curve 被存储成分段线性折线函数色温 T 输出白点坐标算法分两级搜索粗搜索 Coarse search大步长沿着 CT 曲线遍历所有候选色温点得到似然峰值位置精细搜索 Fine searchTransverse 横向搜索在粗搜索峰值附近允许白点离开 CT‑Curve 曲线横向偏移寻找最优解。这一步的 transverse 才是文档中提到的横向偏移不是色块打分阶段的参数历史误区纠正Transverse 横向偏差只存在于峰值求精阶段粗搜索打分阶段色块不会投影到曲线上。参考白点残差目标点默认 (0,0)调参可偏移白点实现偏暖画面精细搜索横向跳出 CT 曲线用来适配荧光灯等光源白点不在轨迹线上的场景当前实现仅使用中性 / 近中性色块蓝天、绿草等彩色色块不会为 AWB 投票残差平方项做钳位 clamp 截断一旦色块偏离中性灰超过阈值就不再继续扣分。目的彩色物体不会无限拉低光源似然无校准 fallback 方案灰度世界 (Grey World) 作为兜底算法。3.完整算法执行链路1.硬件ISP把图像切分成16×12网格输出每个网格平均R/G/B 2.计算lux光照估计值插值得到光源先验概率曲线P(I) 3.【粗搜索】沿着CT‑Curve色温曲线大步遍历每一个候选光源I 3‑1.取光源I的(r,b)白点 → 算出gain_r, gain_b 3‑2.每个网格色块Δr gain_r*r_i - 1Δb gain_b*b_i - 1 3‑3.累加所有网格的残差对数似然加上光源先验代价 4.找到似然得分最高的色温峰值点 5.【精细Transverse横向求精】以峰值点为中心允许白点沿着垂直CT‑Curve法线方向(横向)小幅偏移搜索全局最优白点 6.输出最终白平衡增益4.关键误区对照表之前错误理解文档给出的正确事实色块先投影 CT 曲线算出横向偏差似然固定不变粗搜索遍历光源 I每一个候选光源重新计算残差色块似然随 I 改变横向偏差 色块到色温曲线垂直距离色块打分阶段不存在色块投影transverse 横向偏移是求精阶段光源白点偏离 CT 曲线的偏移量不是色块的偏差。
返回列表