056、白平衡算法工程化:灰度世界、完美反射与色温曲线法的三合一方案一、从一次“翻车”调试说起去年夏天,我接手一个中端机型的Camera Tuning项目。客户反馈:室内暖光灯下拍人像,肤色偏黄得离谱;室外阴天拍天空,又蓝得发紫。我翻看Log,发现ISP的AWB模块只用了灰度世界法,而且色温估计区间被锁死在3000K-6500K。更离谱的是,当场景里出现大面积红色物体(比如一面红墙),灰度世界直接崩了——整张图偏青,像蒙了一层滤镜。后来我拆开代码一看,灰度世界法的增益计算是全局平均,没做任何异常检测。完美反射法倒是写了,但只在高光区域做了一次白点筛选,阈值写死,根本扛不住动态场景。色温曲线法更惨,查表用的还是实验室标定的数据,到了量产机,Sensor响应曲线变了,查出来的色温偏差500K起步。那次之后,我决定把三种方法揉成一个三合一方案。不是简单堆叠,而是让它们互相兜底、动态切换。今天这篇笔记,就聊聊这个方案的工程化落地细节。二、灰度世界法:别让它“傻白甜”灰度世界法的假设是:场景中RGB三通道的平均值趋于相等。这个假设在自然光下勉强成立,但遇到大面积单色物体(比如草地、蓝天、红墙),直接翻车。工程化改造的关键是加权重。别用全局平均,而是引入一个“色彩丰富度”权重。具体做法:把图像分成NxN块(我常用16x16),对每个块计算RGB均值,再算一个“色偏指数”——比如用R/G和B/G的方差。方差大的块,说明色彩丰富,权重高;方差小的块(比如纯色墙),权重
056、白平衡算法工程化:灰度世界、完美反射与色温曲线法的三合一方案
056、白平衡算法工程化:灰度世界、完美反射与色温曲线法的三合一方案一、从一次“翻车”调试说起去年夏天,我接手一个中端机型的Camera Tuning项目。客户反馈:室内暖光灯下拍人像,肤色偏黄得离谱;室外阴天拍天空,又蓝得发紫。我翻看Log,发现ISP的AWB模块只用了灰度世界法,而且色温估计区间被锁死在3000K-6500K。更离谱的是,当场景里出现大面积红色物体(比如一面红墙),灰度世界直接崩了——整张图偏青,像蒙了一层滤镜。后来我拆开代码一看,灰度世界法的增益计算是全局平均,没做任何异常检测。完美反射法倒是写了,但只在高光区域做了一次白点筛选,阈值写死,根本扛不住动态场景。色温曲线法更惨,查表用的还是实验室标定的数据,到了量产机,Sensor响应曲线变了,查出来的色温偏差500K起步。那次之后,我决定把三种方法揉成一个三合一方案。不是简单堆叠,而是让它们互相兜底、动态切换。今天这篇笔记,就聊聊这个方案的工程化落地细节。二、灰度世界法:别让它“傻白甜”灰度世界法的假设是:场景中RGB三通道的平均值趋于相等。这个假设在自然光下勉强成立,但遇到大面积单色物体(比如草地、蓝天、红墙),直接翻车。工程化改造的关键是加权重。别用全局平均,而是引入一个“色彩丰富度”权重。具体做法:把图像分成NxN块(我常用16x16),对每个块计算RGB均值,再算一个“色偏指数”——比如用R/G和B/G的方差。方差大的块,说明色彩丰富,权重高;方差小的块(比如纯色墙),权重