Camera 之水波纹和banding现象[通俗易懂]

Camera 之水波纹和banding现象[通俗易懂]预览画面中出现了一条明一条暗相间隔的竖条纹,这种现象叫做“水波纹”,并对原因进行了讲解,现记录如下。其实这些“水波纹”产生是因为手机的快门频率与灯光的频率不匹配导致的。首先,我们都知道手机拍照的时候都是有一定曝光时间的,例如假设手机的快门频率为50Hz,则其拍照时的曝光时间就是20ms。同理,屏幕或者日光灯不是一直在发光的,而是更隔一段时间就会刷新一次,我们生活中的日光灯为50Hz,国外的是60Hz。例如那个50Hz,就代表每秒刷新50次,因为刷…

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

Jetbrains全系列IDE稳定放心使用

        预览画面中出现了一条明一条暗相间隔的竖条纹,这种现象叫做“水波纹”,并对原因进行了讲解,现记录如下。

        其实这些“水波纹”产生是因为手机的快门频率与灯光的频率不匹配导致的。

        首先,我们都知道手机拍照的时候都是有一定曝光时间的,例如假设手机的快门频率为50Hz,则其拍照时的曝光时间就是20ms。同理,屏幕或者日光灯不是一直在发光的,而是更隔一段时间就会刷新一次,我们生活中的日光灯为 50Hz,国外的是 60Hz。例如那个 50Hz,就代表每秒刷新50次,因为刷新的频率太快,人类肉眼是完全察觉不出灯光是一闪一闪的。而手机拍摄屏幕的时候,多数也会有比较快的快门速度。当快门速度比刷新频率快的时候,就能捕捉到我们肉眼看不到的屏幕刷新过程,这就会产生“水波纹”。

        具体表现为,手机在记录一张照片时,不是一下子就记录了一张照片,而是从上往下,一行一行的进行曝光来记录信息。而我们的灯光是正弦电波,假设我们的灯光频率是50Hz,则其正弦周期就是20ms,这时假设我们的手机快门频率为80Hz,曝光周期就是12.5ms。

        这时假设记录第一行的时候对应的日光灯的周期内是[0,12.5]ms,记录第二行对应的日光灯的周期内是[1,13.5]ms,因为日光灯为正弦电波,在记录每行的曝光量就是在对应的周期内正弦的积分(也就是这段时间内的进入传感器的电子总量),显然第一行与第二行获得的曝光量是不同的,也就造成了记录的照片一行明一行暗。

        可为什么我们看到的照片是竖条纹的一明一暗呢,这是我们传感器获得的图像在手机界面上进行显示的时候进行了旋转,所以我们看到的图片是竖条纹的一明一暗。

banding的产生

        模拟视频的输出制式我们统一的用PAL和NTSC来表示,pal制代表cvbs和HD的720p25/50 1080P的25/50,NTSC包括 cvbs的59.94fps输出和720P30/60 1080p30/60.banding只会在按照一定频率亮度交替变化的场景内产生。在我国交流电的频率在50HZ,我们拿1080P25的制式来举例,50HZ的交流电如果用能量曲线来表示的话就是一个100HZ的|sinx|。每个周期的时间是1/100=10ms,我们视频输出的每帧的时间为40ms,在曝光时间的算法上每一帧的最大曝光时间是~=40ms的,我们按照40ms计算的话,当达到最大的曝光时间时每一帧接收的光的能量的积分值是相同的(因为是灯光的周期的整数倍)。当小于最大的曝光时间的时候每一帧曝光接收的光能积分值不同,这就是导致产生banding的原因。

banding的消除

        我们可以注意到,每一帧的曝光时间最大值是|sinx|的4倍,我们知道当能量曲线得积分值相同时banding就不会产生,这几个是我们消除banding的关键。即10ms 20ms 30ms ,那么我们思考如何才能在保证画面在消除banding的同时也能不影响曝光的准确性呢,我们用到的一种方法叫增益内插,例如当曝光在30ms和40ms之间的时候我们先把曝光的时间设在30ms上,算出实际需要的曝光时间和30ms的delta值,然后去乘以一个相应的增益。这样就做到了消除banding 的目的。

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

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

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


相关推荐

  • 计算机中的幂等性「建议收藏」

    [原创链接:http://www.smithfox.com/?e=16转载请保留此声明,谢谢]绝大部分网络上对幂等性的解释类似于:”幂等性是指重复使用同样的参数调用同一方法时总能获得同样的结果。比如对同一资源的GET请求访问结果都是一样的。”我认为这种解释是非常错误的,幂等性强调的是外界通过接口对系统内部的影响,外界怎么看系统和幂等性没有关系.就上面这种解释,

    2022年4月16日
    41
  • 条件运算符用法「建议收藏」

    条件运算符用法「建议收藏」别人的书上看到一个简单题目,刚开始学C的小伙伴们应该很熟悉,还记得当年在软件实验室那会儿,入学考试全是这个,做到吐。打印图形以下图形:* *** ***** ******* ********* *********** ************* *********** ********* ******* ***** *** *  一般方法:两重循环,里面是两…

    2022年10月2日
    0
  • 监听手机录音

    监听手机录音

    2021年11月14日
    160
  • kafka集群及与springboot集成

    kafka集群及与springboot集成linux搭建,kafkao3节点虚拟机为CentOS6,ip为192.168.1.128,192.168.1.129和192.168.1.130,域名分别为master,worker1,worker21.集群#192.168.1.128[root@masterlocal]#cd/home/gilbert/app/rar/[root@masterrar]#tarzxv…

    2022年4月25日
    40
  • Java安全之初探weblogic T3协议漏洞

    Java安全之初探weblogicT3协议漏洞文章首发自安全客:Java安全之初探weblogicT3协议漏洞0x00前言在反序列化漏洞里面就经典的还是莫过于weblogic的反序列化漏洞

    2021年12月12日
    46
  • imread怎么读取图片_opencv读不到图片

    imread怎么读取图片_opencv读不到图片Matimage_source=imread(“D:\program\xie.png”)直接放入图片的绝对路径只需要把图像文件放在工程文件夹下和.cpp文件放在一起就行了,读取的时候就可以直接用名字读取,如imread(“miao.jpg”);src=imread(argv[1],1);方法是:工程——属性——配置属性——调试——命令行参数,然后设置就行了。argv[1…

    2022年10月14日
    0

发表回复

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

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