第46讲 AWB自动白平衡 - Android Camera2 API

本讲是Android Camera专题系列的第46讲,我们介绍Android Camera2 API专题的AWB自动白平衡,包括如下内容:

  1. 为什么要做白平衡
  2. 什么是自动白平衡
  3. Android Camera颜色处理流程
  4. AWB模式
  5. AWB Lock
  6. AWB Region
  7. AWB State
  8. Manual AWB

视频在线观看:

加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815

为什么要做白平衡

人眼:在不同的光源下,人眼看到的白色物体总是白色的
图像传感器:在不同光源下,白色物体成像在Sensor上是不一样的
因此需要把Sensor的RGB相应各乘以一个系数来使得RGB相等

R’ = R x R_Gain
G’ = G x G_Gain
B’ = B x B_Gain

使得 R’=G’=B’

什么是自动白平衡

自动白平衡 (Auto White Balance): 通过算法根据统计数据自动计算出R/G/B的Gain值

Android Camera颜色处理流程

Android Camera颜色处理流程

AWB模式

CaptureRequest#CONTROL_AWB_MODE,通过CameraCharacteristics#CONTROL_AWB_AVAILABLE_MODES判断支持哪些Mode

CONTROL_AWB_MODE取值 描述
CONTROL_AWB_MODE_OFF AWB算法Disabled,App通过修改CCM和AWB Gain来手动控制白平衡
CONTROL_AWB_MODE_AUTO AWB算法Enabled,白平衡由算法控制,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_FLUORESCENT AWB算法Disabled,使用荧光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源F2
CONTROL_AWB_MODE_WARM_FLUORESCENT AWB算法Disabled,使用暖荧光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源F4
CONTROL_AWB_MODE_DAYLIGHT AWB算法Disabled,使用日光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源D65
CONTROL_AWB_MODE_CLOUDY_DAYLIGHT AWB算法Disabled,使用多云白天作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_TWILIGHT AWB算法Disabled,使用黄昏作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_SHADE AWB算法Disabled,使用阴影光作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略

AWB Lock

判断是否支持

  • 读取CameraCharacteristics#CONTROL_AWB_LOCK_AVAILABLE
    Capability为MANUAL_POST_PROCESSING 或 BURST_CAPTURE 的设备必须支持

控制AWB Lock

  • 通过控制CaptureRequest#CONTROL_AWB_LOCK完成AWB Lock,设置为TRUE后意味着AWB算法的输出会固定在最新结果
  • 只有当AWB Mode为AUTO时才能Lock,其他模式不存在Lock
  • App在Auto AWB和Manual AWB间切换时,如果发现有闪烁现象,可通过如下流程解决
    1. AWB 模式运行
    2. Lock AWB
    3. 从CaptureResult中等待Lock完成
    4. 从CaptureResult中读取WB gain和CCM
    5. 使能Manual WB并将step4读取到的CCM和WB Gain设置下去
    6. 继续调整CCM或WB Gain,进入Manual WB流程

AWB Region

判断是否支持设置AWB Region

  • 读取CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
  • 大于0则表示支持控制AWB Region

设置AWB Region

  • 通过CaptureRequest#CONTROL_AWB_REGIONS来设置,坐标系同AE/AF Region

AWB State

读取CaptureResult#CONTROL_AWB_STATE

android.control.awbMode != AWB_MODE_AUTO

Android Camera AWB 状态切换

android.control.awbMode == AWB_MODE_AUTO

Android Camera AWB 状态切换

Manual AWB

手动白平衡 – 设置Gain

  • 需要将android.control.awbMode设置为OFF,android.colorCorrection.mode设置为TRANSFORM_MATRIX
  • 通过设置 android.colorCorrection.gains 来控制WB Gain: [R_gain, G_even_gain, G_odd_gain, B_gain], gain的取值范围[1.0, 3.0]

手动白平衡 – 设置CCM

  • 需要将android.control.awbMode设置为OFF,android.colorCorrection.mode设置为TRANSFORM_MATRIX
  • 通过设置android.colorCorrection.transform来控制CCM,3x3有理数矩阵,按行主顺序排列[ I0 I1 I2 I3 I4 I5 I6 I7 I8 ],每个元素的有效范围因不同的设备有差异,但[-1.5,3.0]范围内的值保证不会被裁剪。

赞(5)
未经允许不得转载:极客笔记 » 第46讲 AWB自动白平衡

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Android Camera2参考
Android Camera2参考概述
Android Camera2参数参考
Android Camera2参数参考概述
Android Camera2指南
Android Camera2指南概述
Android Camera HAL开发
Android Camera HAL开发概述
Android Camera2 API
第2讲 Android Camera 架构介绍第3讲 Camera2 API 概述第4讲 Open和Close Camera流程第5讲 GeekCamera2介绍第6讲 Open和Close Camera代码实现第7讲 Hardware Level详解第8讲 AVAILABLE_CAPABILITIES详解第9讲 StreamConfigurationMap详解一第10讲 StreamConfigurationMap详解二第11讲 StreamConfigurationMap实战一第12讲 StreamConfigurationMap实战二第13讲 为什么需要OutputConfiguration第14讲 OutputConfiguration API详解第15讲 Surface Sharing实战第16讲 Deferred Surface实战第17讲 Reprocessable Capture Session详解一第18讲 Reprocessable Capture Session详解二第19讲 App如何实现ZSL功能第20讲 SessionConfiguration详解第21讲 createCaptureSession详解第22讲 SessionParameter实战第23讲 CaptureRequest详解第24讲 如何操作VendorTag第25讲 获取Physical Camera数据流第26讲 CameraCaptureSession详解第27讲 CameraCaptureSession.CaptureCallback详解第28讲 GeekCamera2连拍实战第29讲 SlowMotion实战第30讲 CaptureResult详解第31讲 AE自动曝光 Part 1第32讲 AE自动曝光 Part 2第33讲 AE自动曝光实战第34讲 AE手动曝光第35讲 AE手动曝光实战第36讲 Flash闪光灯控制第37讲 拍照打闪实战第38讲 通过CropRegion控制Zoom缩放第39讲 通过ZoomRatio控制Zoom缩放第40讲 Digital Zoom缩放实战第41讲 Touch AE实战第42讲 AF自动对焦第43讲 AF自动对焦 第二部分第44讲 AF自动对焦实战第45讲 手动对焦实战第46讲 AWB自动白平衡第47讲 AWB自动白平衡实战第48讲 FD人脸检测第49讲 Android13 Camera2 New APIs介绍