前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >camera密码错误_camera filter

camera密码错误_camera filter

作者头像
全栈程序员站长
发布2022-11-19 13:19:14
1.3K0
发布2022-11-19 13:19:14
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

01

flicker(banding)现象

出现flicker(banding)问题时,从视频上看会发现有规律的明暗相间的条纹,这种现象也叫做牛顿环。如下图所示。

camera密码错误_camera filter
camera密码错误_camera filter

02

产生flicker(banding)问题的原因

Sensor在日光灯作为光源下获取图像数据时会产生flicker,其根本原因是照在不同pixel上光能量不同产生的,所接受的光能量的不同也就是图像的亮度的不同。

电源的频率有两种标准:50Hz(大陆)和60Hz(台湾、日本)的正弦波形,当然能量是没有方向性的,因此对应的能量是一个频率为100Hz和120Hz的波形,如下图所示:

camera密码错误_camera filter
camera密码错误_camera filter

由于能量在时间方向上的波形,照在sensor上就使每一个pixel产生在时间方向上的相应波形,由于CMOS sensor的曝光方式是一行一行的方式进行的,任何一个pixel的曝光时间是一样的,也就是同一行上的每个pixel的曝光开始点和曝光的时间都是一模一样的,所以同一行的所有点所接受到的能量是一样的,而在不同行之间虽然曝光时间都是一样的,但是曝光的开始点是不同的,所以不同行之间所接受到的能量是不一定相同的。由此产生sensor出来的图像可能在图像高度方向上会有相应的波形,如下图:

camera密码错误_camera filter
camera密码错误_camera filter

为了使不同行之间所接受的能量相同,就必须找一个特定的条件,使得每一行即使曝光开始点不同,但是所接受的光能量是相同的,这样就避开了flicker,这个特定的条件就是曝光时间必须是光能量频率Hz的整数倍时间。

计算原理为:

50HZ交流电能量周期:T = 1/(50*2)

sensor曝光一帧所用的时间 T_frame = 1/FPS;

sensor曝光一行所用的时间 T_row = T_frame/Line_max (Line_max = Exp_max);

为了避免flicker,必须满足每一行获取的能量是交流电能量周期的整数倍,否则会因为获取的能量不一致,导致水波纹现象的产生。即:

T_row * Step = n * T

故:Step = (n * T)/T_row = n*(FPS *Exp_max) /100; (n取正整数)

这个是计算Banding Flicker的依据,具体计算方法如下:

50Hz

Banding Value = Total lines * fps / 100

60Hz

Banding Value = Total lines * fps / 120

03

如何规避flicker(banding)问题 — sensor的修改

相信在很多地方都可以了解到,只要曝光时间是光能量周期(100Hz)的整数倍,即可规避工频干扰导致的闪烁问题。

但是当曝光时间低于光能量周期(10ms)时,有应该如何规避这个问题呢?

假设帧率为10fps,那么设置一帧的时间间隔刚好为100ms,那么,每帧开始曝光开始时间都会是一致的,在相同的曝光时间,得到的光能量也就一致了。(由于有些提示是100ms的帧间隔,但是由于误差问题,不是准确的100ms,误差累计导致闪烁)。

通过设置帧率,使得每一帧之间的间隔为10ms的整数倍,每帧对应的每一行曝光得到的光能量一样(从能量波形来看,要使得每一行曝光所对应的能量一样,只需要确保对应的每一行时间内对能量波形积分,所得到的面积一样即可满足),从视频上来看,当曝光时间低于光能量周期(10ms)时,明暗相间的条纹位置固定不动,视频上看来不会有明显的频闪现象。

以50Hz为例说明,实现这个有两种办法:   1、设置曝光控制,强制为10ms整数倍变化,但是这样会浪费一部分曝光时间,导致曝光无法用满,在室内自然就会损失性能。

  2、修改桢率,使每桢图像分到的时间是10ms的整数倍,则可以用满每桢曝光时间在,室内效果更好。修改桢率可以插入Dummy Line或者Dummy Pixel。这需要一点点计算,具体计算需要看sensor输出Timing。   例如把桢率设置为7.14fps,则每桢曝光时间是140ms。如果是15fps,则每桢曝光时间是66.66ms,如果强制曝光为10ms整数倍,最大即60ms,则有6.66ms无法参与曝光,损失性能。   具体调整桢率方法得和sensor的FAE沟通,每个sensor都可能不一样,不能一概而论。调整桢率还有个原则要注意,预览一般不能低于 10fps,再低就很卡,常用14.28fps和12.5fps;抓拍不能低于5fps,否则用手就很难拍出清晰的照片,常用7.14fps。桢率是一个权 衡折中的选择

高了曝光时间不够,暗光效果太差,低了没法拍照,容易虚。

04

如何规避flicker(banding)问题 — app 的修改

banding现象,也叫做牛顿环,那防止这种现象,也就叫做防牛顿环,在Android 里面叫做anti banding。

针对banding问题,google也为我们提供了对应的接口,CONTROL_AE_ANTIBANDING_MODE, 这个参数,应用上一般要求设置为AUTO。

camera密码错误_camera filter
camera密码错误_camera filter

05

如何规避flicker(banding)问题 — hal 的修改

代码语言:javascript
复制
android/hardware/qcom/camera/QCamera2/HAL3/QCamera3HWI.cpp

从下面代码可以看到,property属性persist.vendor.camea.set.afd 控制的就是anti banding的值,如果上层设置下来是AUTO模式,那么代码里面默认值是5(AUTO_60HZ),实际上在我们国内,一般的灯光闪烁频率是50hz,所以如果是国内的产品,这个默认值我们需要修改为4(AUTO_50HZ)。

camera密码错误_camera filter
camera密码错误_camera filter

参考资料:

1. [关于cmos工频干扰导致的闪烁问题]

https://blog.csdn.net/weixin_41944449/article/details/94296676

2. [camera工频干扰问题]

https://blog.csdn.net/jzwjzw19900922/article/details/108508416

3.[Camera Sensor 的工频闪烁]

https://blog.csdn.net/lz0499

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182269.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01
  • 02
  • 03
  • 04
  • 05
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档