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

本讲是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颜色处理流程

AWB模式

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

CONTROL_AWB_MODE取值描述
CONTROL_AWB_MODE_OFFAWB算法Disabled,App通过修改CCM和AWB Gain来手动控制白平衡
CONTROL_AWB_MODE_AUTOAWB算法Enabled,白平衡由算法控制,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_FLUORESCENTAWB算法Disabled,使用荧光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源F2
CONTROL_AWB_MODE_WARM_FLUORESCENTAWB算法Disabled,使用暖荧光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源F4
CONTROL_AWB_MODE_DAYLIGHTAWB算法Disabled,使用日光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源D65
CONTROL_AWB_MODE_CLOUDY_DAYLIGHTAWB算法Disabled,使用多云白天作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_TWILIGHTAWB算法Disabled,使用黄昏作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_SHADEAWB算法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.control.awbMode == AWB_MODE_AUTO

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,3×3有理数矩阵,按行主顺序排列[ I0 I1 I2 I3 I4 I5 I6 I7 I8 ],每个元素的有效范围因不同的设备有差异,但[-1.5,3.0]范围内的值保证不会被裁剪。
  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android Camera2 API提供了自动白平衡AWB)功能,可以根据场景中的光线条件自动调整图像的颜色平衡。在Camera2 API中,AWB由CaptureRequest.CONTROL_AWB_MODE参数控制。常见的AWB模式有以下几种: - CONTROL_AWB_MODE_OFF:关闭AWB功能。 - CONTROL_AWB_MODE_AUTO:启用AWB功能,相机设备会自动调整图像的颜色平衡。 - CONTROL_AWB_MODE_INCANDESCENT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应白炽灯光源。 - CONTROL_AWB_MODE_FLUORESCENT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应荧光灯光源。 - CONTROL_AWB_MODE_DAYLIGHT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应日光灯光源。 - CONTROL_AWB_MODE_CLOUDY_DAYLIGHT:启用AWB功能,相机设备会自动调整图像的颜色平衡以适应多云天气下的光线条件。 以下是一个使用AWB自动白平衡的例子: ```java // 设置AWB模式为自动 mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO); // 发送请求 mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler); ``` 手动白平衡(Manual White Balance)是指用户可以手动调整图像的颜色平衡,以适应特定的光线条件。在Camera2 API中,手动白平衡由CaptureRequest.CONTROL_AWB_MODE参数和CaptureRequest.COLOR_CORRECTION_GAINS参数控制。手动白平衡需要先关闭AWB功能,然后设置COLOR_CORRECTION_GAINS参数为手动调整的值。以下是一个使用手动白平衡的例子: ```java // 关闭AWB功能 mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_OFF); // 设置手动调整的颜色平衡值 Rational red = new Rational(3, 2); Rational blue = new Rational(5, 4); mPreviewRequestBuilder.set(CaptureRequest.COLOR_CORRECTION_GAINS, new RggbChannelVector(red, blue, red, blue)); // 发送请求 mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deepinout_camera

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值