Android Camera 测光梳理

   转载:本文为CSDN博主「vivianluomin」的原创文章,整理:york.zhou

   原文链接:https://blog.csdn.net/qq_36391075/article/details/90602302

这篇文章将从下面几点展开:

      一、什么是测光?

      二、测光的原理

      三、测光方式

      四、Android中的测光

      五、拍摄样张

一、什么是测光 ?

我们所看到的,不是物体本身,而且这个物体上反射出来的光,我们想要看东西,我们的眼睛就需要接受这个光,同理,相机想要拍出照片,也需要接收这个光。人眼是可以自动调节进光量的,但是相机是做不到的,所以,我们需要控制这个光的进入,光进入多了,照片会过曝,光进入少了,照片会欠曝,这个时候,我们就需要测光了。

测光就是测光线的明暗,使相机实现正确曝光的过程。

也就是组合曝光参数:光圈,ISO,快门

二、测光的原理 

相机在测光过程中,会将拍摄的所有物体都默认为反射率18%的灰色,专业术语叫“中级灰”,并以此作为测光的基准,曝光的目的是为了正确还原这种灰色。因为18%灰与人皮肤平均反射光的色调一样。但是18%灰也不是准确的,对于纯白,纯黑,会导致画面的影调和色彩的失真。

三、测光方式

1)评价测光 

是最常用的一个测光模式,也叫多区域测光。对画面的整体亮度进行平均测定,对逆光主体也有效。

2)局部测光 

是对画面的中央部分进行测光,相机的测光元件会对画面中心约占画面12%的范围进行测光,并最终进行平均加权而得出测光数据。

3)点测光

比局部测光更为精确,测光元件仅测量画面最中心1%-3%的极小范围区域进行测光。

4)中央重点平均测光

将画面中央约60%的区域作为测光的重点,同时并兼顾画面的边缘。与评价测光的区别在于相机会根据拍摄者的需要强调对某个区域进行重点测光,所获得的图像会很少有某个区域欠曝或过曝的问题出现,对于一些重点主体部位,图像也能很清晰地进行反映。

四、Android中的测光

1)CONTROL_AE_ANTIBANDING_MODE 用于抗闪烁的

对于某些类型的照明装置,例如一些荧光灯,以电源频率的速度闪烁,如果曝光时间不正确,则可能最终的成像中,闪烁成了图像上的一组亮带。

它的值有:OFF 50HZ 60HZ AUTO 可使用CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES查询支持的值。

2)CONTROL_AE_EXPOSURE_COMPENSATION 设置曝光补偿,可调节图像亮度

它是以step进行调整的,step的大小通过CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP进行查询,曝光补偿范围通过CameraCharacteristics#CONTROL_AE_COMPENSATION_RANGE进行查询。例如,如果曝光值(EV)步长为0.333,则“6”表示+2 EV的曝光补偿; -3意味着-1 EV的曝光补偿。一个EV表示图像亮度加倍。

只有在CaptureRequest#CONTROL_AE_MODE != OFF的情况下才有效。或者在CaptureRequest#CONTROL_AE_LOCK == true时也有效。

在曝光补偿改变的情况下,相机设备可能需要几帧才能到达新请求的曝光目标。

在此期间,CaptureResult#CONTROL_AE_STATE字段将处于SEARCHING状态。达到新的曝光目标后,CaptureResult#CONTROL_AE_STATE将从SEARCHING更改为CONVERGED,LOCKED(如果启用了AE锁定)或FLASH_REQUIRED(如果场景太暗而无法进行静态捕捉)。

3)CONTROL_AE_REGION 设置自动曝光测量区域

权重必须在[0,1000]以内,而且代表的是这个区域中每个像素的权重。

在 metering result 中,相同权重的 更大的mertring aream 比 较小的区域有更多影响。metering 区域可以重叠,而且相机设备会叠加重叠区域的权重。

权重是相对于其他计量区域的权重,因此如果仅使用一个区域,则所有非零权重将具有相同的效果。

忽略0权重的区域。这个权重是设置在MeteringRectangle中的。

手动曝光设置:只有在CaptureRequest#CONTROL_AE_MODE为OFF并且支持时才可以使用。

4)LENS_APERTURE:光圈 

支持的光圈范围可使用CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES查询。在光圈正在改变时,LENS_STATE会被设置为MOVING。

5)SENSOR_EXPOSURE_TIME:快门/曝光时间 

只有在CaptureRequest#CONTROL_AE_MODE or CaptureRequest#CONTROL_MODE为OFF时才有效。

可以通过CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE进行范围查询。

6)SENSOR_SENSITIVITY:ISO/灵敏度 

可通过 CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE进行范围查询。

只有在CaptureRequest#CONTROL_AE_MODE or CaptureRequest#CONTROL_MODE为OFF时才有效。

7)SENSOR_FRAME_DURATION:从帧曝光开始到下一帧曝光开始的持续时间。

五、拍摄样张

项目中:对于设置不同的曝光补偿:4,2,0,-2,-4 

对于华为nova2s,step为1/2,范围在-4~4

设置曝光补偿为2,AE_REGION建设一半(左图为曝光补偿为2,AE_REGION = FOCUS_REGION,右图为不设置曝光补偿)

推荐阅读:

ISP图像处理流程介绍

Camera CMOS工作原理

高通Camera数字成像系统简介

高通CamX架构

高通CamX关键流程

高通CamX术语全称

一篇文章带你了解Android 最新Camera框架

深圳上班,

生活简简单单,

14年开始从事Android Camera相关软件开发工作,

做过车载、手机、执法记录仪......

公众号记录生活和工作的点滴,

点击关注“小驰笔记”,期待和你相遇~

 觉得不错,点个赞呗~ 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android实用控件自定义逼真相机光圈View 作者:佚名 来源:吾爱源码 2016-08-12 14:46:40 0 最近手机界开始流行双摄像头,大光圈功能也应用而生。所谓大光圈功能就是能够对照片进行后期重新对焦,其实现的原理主要是对拍照期间获取的深度图片与对焦无穷远的图像通过算法来实现重新对焦的效果。 在某双摄手机的大光圈操作界面有个光圈的操作图标,能够模拟光圈调节时的真实效果,感觉还不错,于是想着实现该效果。现在把我的实现方法贡献给大家,万一你们公司也要做双摄手机呢?( ̄┰ ̄*) 首先,百度一下光圈图片,观察观察,就可以发现其关键在于计算不同的光圈值时各个光圈叶片的位置。为了计算简便,我以六个直边叶片的光圈效果为例来实现(其他形式,比如七个叶片,也就是位置计算稍微没那么方便;而一些圆弧的叶片,只要满足叶片两边的圆弧半径是一样的就行。为什么要圆弧半径一样呢?仔细观察就可以发现,相邻两叶片之间要相互滑动,而且要保持一样的契合距离,根据我曾今小学几何科打满分的经验可以判断出,等径的圆弧是不错滴,其他高级曲线能不能实现该效果,请问数学家( ̄┰ ̄*)!其他部分原理都是一样的)。 制作效果图: 先说明一下本自定义view的主要内容: 1.本效果的实现就是在光圈内六边形六个角上分别绘制六个光圈叶片 2.根据不同的光圈值计算出内六边形的大小,从而计算每个六边形的顶点的位置 3.设计叶片。也可以让美工MM提供,本方案是自己用代码画的。注意预留叶片之间的间隔距离以及每个叶片的角度为60° 4.定义颜色、间隔等自定义属性 5.上下滑动可以调节光圈大小 6.提供光圈值变动的监听接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值