camera密码错误_camera filter

camera密码错误_camera filter01flicker(banding)现象出现flicker(banding)问题时,从视频上看会发现有规律的明暗相间的条纹,这种现象也叫做牛顿环。如下图所示。02产生flicker(ban…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

01

 

flicker(banding)现象

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

camera密码错误_camera filter

02

产生flicker(banding)问题的原因

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

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

camera密码错误_camera filter

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

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

05

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

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

推荐阅读:

Android Camera 测光梳理

Android Camera2 对焦梳理

哪些坑爹的Android CTS测试

高通Camera数字成像系统简介

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

这可能是介绍Android UvcCamera最详细的文章了

参考资料:

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

camera密码错误_camera filter

欢迎关注我的个人博客:http://www.xiaochibiji.com

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟主机和云服务器有什么区别,我们应该如何选择?[通俗易懂]

    虚拟主机和云服务器有什么区别,我们应该如何选择?[通俗易懂]虚拟主机已经有了一段时间的历史,近几年随着其技术的不断成熟,以及其低廉的价格,成为众多站长的首选对象。但近两年云计算的出现,衍生出云服务器这个产物。这时,很多站长便对虚拟主机与云服务器应该如何选择感到困扰,不知是选择技术比较成熟的虚拟主机,还是选择最新的云服务器。虚拟主机与云服务器的区别:虚拟主机是利用虚拟技术将一台物理服务器划分成多个“虚拟”服务器,虚拟主机的出现大大节省了服务器硬件的成本,…

    2022年6月25日
    33
  • linux docker离线安装部署_下载安装包

    linux docker离线安装部署_下载安装包Docker离线安装部署

    2022年9月26日
    3
  • python怎么换行输出的数字对齐_python中如何使输出换行「建议收藏」

    Python的print()函数输出时,通常输出结果是整行显示出来的,这时候我们需要考虑一下,我们输出的结果需不需要换行?不需要换行的方法也是嗯容易的的,这里就不多赘述了,来说说如何做到输出换行:常用的转义符方式:\n#-*-coding:utf-8-*-A=”来看看能不能\n换行。”print(A)输出结果来看看能不能换行。使用三引号进行换行:”””value1;value2;value3…

    2022年4月9日
    116
  • C# 多线程使用lamda表达式编程

    C# 多线程使用lamda表达式编程C#多线程的实现方式使用的thread类1、最容易实现方式:Threadt=newThread(newThreadStart(ThreadFunction));publicvoidThreadFunction(){Console.WriteLine("我是线程!");}2、lamda表达式实现:Threadt=newThread(()=>Co…

    2022年5月29日
    35
  • 简述mux vlan的功能及应用场景_vlan的原理

    简述mux vlan的功能及应用场景_vlan的原理MuxVLAN是一种在交换机上的2层隔离技术,基于VLAN实现资源的控制。MuxVLAN技术中包含了主VLAN和辅助VLAN;辅助VLAN分为隔离VLAN和组VLAN。一个主VLAN中可以同时包含多个组VLAN,最多只能包含1个隔离VLAN。同一个组VLAN中的端口可以互相通信,不同组VLAN中的端口无法通信;同一个隔离组中的端口不可以通信;但是隔离VLAN与组VLAN中的端口,都可以与主VLAN中的端口进行通信。简述端口隔离的实现原理端口隔离是一种在

    2022年8月10日
    5
  • matlab多元函数极值_matlab求三元函数的极值

    matlab多元函数极值_matlab求三元函数的极值matlab求解二元函数极值命令:1、x=fminsearch(fun,x0)或x=fminunc(fun,x0)求极小值点x,初值选为x02、[x,fmin]=fminsearch(fun,x0)或[x,fmin]=fminunc(fun,x0)3、fminsearch采用单纯形法,fminunc采用牛顿法除了fminsearch和fminunc这两种命令外,建立函数还可以用不同的方法

    2025年9月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号