AndroidCamera2对焦梳理
这篇⽂章讲从下⾯⼏点展开讲解:
the creeps⼀、对焦的原理
foreigntrade
⼆、Android 中有关Camera2的对焦API
三、项⽬中的实践
四、总结
⼀、对焦的原理
通过相机镜头中镜⽚组的前后移动,改变像距的位置,使物像恰好落在底⽚或感光底⽚上。
1)焦点(focus)
平⾏光线射⼊凸透镜时,镜头将所有的光线聚集在⼀点,这个点,就叫做焦点;焦点和镜⽚光学中⼼的距离叫做焦距。
对于我们照相机来说,照相机的镜头就是⼀个凸透镜,胶⽚或者感光底⽚就是屏幕,它也符合凸透镜成像的原理。
2)凸透镜成像公式:
1/u + 1/v = 1/f
u:指物距,即物体到透镜组中⼼的距离
v:指像距,即成像⾄中⼼的距离
f:焦距
3)变焦(zoom)
是指改变焦距f。只有变焦镜头的焦距才能被改变,定焦镜头的焦距是固定的。
事实上,相机的镜头是由多⽚凸透镜和凹透镜组成,但从成像结果来看,可以把这⼀组镜头看成⼀个凸透镜。
变焦最直观的感受就是被摄物体在取景器离被放⼤或者缩⼩了。
4)调焦/对焦(focus)
指改变像距,也就是改变镜头光⼼到底⽚平⾯的位置。
光⼼是指光学中⼼。
“焦点对在xxx上⾯(Focus on xxx)”这个习惯说法(也即“合焦”),是指通过“调焦”,即改变像距v,使之与景物xxx到镜头的距离u、镜头焦距f,满⾜成像公式 1/u + 1/v = 1/f,也就是景物xxx能在底⽚上清晰成像。
相机的成像是在像平⾯,⽽不是在焦平⾯,调焦调的是感光元件离透镜光⼼的距离,使得感光元件与像平⾯重合。
在理想情况下,我们希望是通过凸透镜成像,都能成在⼀个点上,但是实际情况不是这样的,平⾏光通过⼀个凸透镜,根本就不是汇聚到⼀个点,⽽是越靠近中轴西安的光束聚焦得越远,越靠近透镜边缘的光聚集得越近,这其实是光学误差的⼀种,叫球差:
那么,在实际情况下,有那么多个光线和中轴线交汇的点,那么哪个是焦点/焦平⾯?
实际上,每个光线和中轴交汇的点都是焦点,所以焦平⾯也不⽌⼀个。
在所有的光线的焦点中,⼀般情况下,我们重点看两条:⼀条是聚焦在最远处的,叫近轴焦点,另⼀条是聚焦在最近处的,叫边缘光线焦点。
对于像平⾯,⼀般感光器件在哪⾥,像平⾯就在哪⾥。但是正常情况下,会把像平⾯放在焦点附近,
因为那⾥的成像相对清晰。具体是放在近轴焦点还是边缘光线焦点,还是放在⼆者之间的某个位置,就要看你是希望得到最终的光斑⼤⼩最⼩呢,还是均⽅根光斑⼤⼩最⼩等等⼀些判据的。
所以对焦的关键还是需要满⾜这个公式:成本管理会计
1/u + 1/v = 1/f
当被摄物体在⽆限远处时,我们的成像就在焦平⾯,此时像距⽆限趋紧焦平⾯,也就是像距=焦距。
离焦平⾯前后越远的物体,成像也就越模糊。
⼆、Android 中有关Camera2的对焦API
1)CONTROL_AF_MODE
当前是否开启⾃动对焦,以及设置它的模式。
它只有在 de = AUTO 和镜头没有固定焦距(i.e android.lens.info.minimumFocusDistance > 0)的情况下,才有⽤。当aeMode 为 OFF时,AF的⾏为取决了设备。
建议在将l.aeMode设置为OFF之前使⽤l.afTrigger锁定AF,或者在AE关闭时将AF模式设置为OFF。
它的值有:
lucus
F
.info.activeArraySize.height - 1)是活动像素阵列中的右下⾓像素。
对于⽀持de的设备来说,坐标系取决于mode的设置。当失真校正模式为OFF时,坐标系遵循
android.nsor.info.preCorrectionActiveArraySize,其中(0,0)是预校正活动数组的左上⾓像素,
(android.nsor.info.preCorrectionActiveArraySize.width - 1,android.nsor。 info.preCorrectionActiveArraySize.height - 1)是预校正有源像素阵列中的右下⾓像素。
当失真校正模式不是OFF时,坐标系遵循android.nsor.info.activeArraySize,其中(0,0)是活动数组的左上⾓像素,
(android.nsor.info.activeArraySize.width - 1,android.nsor.info.activeArraySize.height - 1)是活动像素阵列中的右下⾓像素。
If the metering region is outside the ud pRegion returned in capture result metadata, the camera device will ignore the ctions outside the crop region and output only the inte
rction rectangle as the metering region in the result metadata. If the region is entirely outside the crop region, it will be ignored and not reported in the result metadata.
你很漂亮权重必须在[0,1000]以内,⽽且代表的是这个区域中每个像素的权重。在 metering result 中,相同权重的 更⼤的mertring aream ⽐ 较⼩的区域有更多影响。metering 区域可以重叠,⽽且相机设备会叠加重叠区域的权重。
权重是相对于其他计量区域的权重,因此如果仅使⽤⼀个区域,则所有⾮零权重将具有相同的效果。 忽略0权重的区域。
这个权重是设置在MeteringRectangle中的。
对焦区域
1、⼴域对焦:
数量相机将对出现在取景器中的所有取景范围内的物体进⾏⾃定对焦,通常会选择对距离镜头最近的主体进⾏对焦。推荐在主体⽐较考前或者对对焦精度要求不⾼且相机快速做出对焦判断的情况下使⽤。
subject to
2、区:
对取景器画⾯中的⼀部分区域内的物体进⾏⾃动对焦的模式。它的对焦范围⽐较⼤,合适主体⽐较突出,在画⾯中位置⽐较集中的时候使⽤。
3、中⼼和⾃由点对焦:
对多有⾃动对焦点中的某⼀个点进⾏选取。中⼼,就是选取处于对焦屏中最中⼼的那个点。合适静物拍摄,对对焦精度有很⾼的要求下使⽤。
4)CONTROL_AF_TRIGGER
是否在这次请求中触发⾃动对焦。
When included and t to START, the camera device will trigger the autofocus algorithm. If autofocus is disabled, this trigger has no effect.
通常,应⽤程序对于a single capture 应该将此字段设置为START or CANCEL,然后返回变为IDLE。为连续多次捕获指定START意味着⼀遍⼜⼀遍地重新启动AF操作。
它的值:
IDLE:
上海插画班
START:⽴即触发⾃动对焦
the vergeCANCEL:⾃动对焦将转为初始状态,并且取消现在的任何active trigger
乘客英语CONTROL_AF_AVAILABLE_MODES
设备所⽀持的 对于 l.afMode 所⽀持的⾃动对焦模式列表。
所有LIMITED 和 FULL模式的相机设备都⽀持OFF模式,和具有可调焦点单元的所有相机设备(android.lens.info.minimumFocusDistance> 0)将⽀持AUTO模式。
只有当LEGACY设备⽀持聚焦到⽆穷⼤时(通过将android.lens.focusDistance设置为0.0f),它才会⽀持OFF模式。
5)LENS_FOCUS_DISTANCE
从镜头的最前⾯测量到的最锐焦距平⾯的所需距离。
此控件可⽤于在⽀持MANUAL_SENSOR功能的设备上设置⼿动对焦,并具有可变焦距镜头(e
android.lens.info.minimumFocusDistance)。
0.0 这个值意味着⽆限远焦点,值集将被限制为[0.0f,android.lens.info.minimumFocusDistance]。