当前位置: 首页 > news >正文

海思AE模块Lines_per_500ms参数的意义

 基础知识

1秒(S)=1000毫秒(ms)=1000_000微妙(µs)=1000_000_000纳秒(ns)

1GHz=1000Mhz=1000_000KHz=1000_000_000Hz

1Hz=1/s

抗频闪原理

海思AE模块参数中有一个LinesPer500ms的参数,意思为500ms对应的曝光行数。此个参数和抗频闪有关。

我们知道:

50HZ交流电能量周期:T = 1/(50*2)ssensor曝光一行 line_time = line_length/pclk=HTS*(1/pclk),line_length = pclk * line_time;fps=pclk/(VTS*HTS)= pclk/(frame_length*line_length)line_time = 1/(frame_length *fps ) = 1/(VTS *fps )为了避免flicker,必须满足每一行获取的能量是交流电能量周期的整数倍,否则会应为获取的能量不一致,导致水波纹现象的产生。即:line_time* Step = n * T故:Step= n*T/line_time=n*T/(1/(VTS *fps ))=n*T*VTS*FPS=n*VTS*FPS/100       (n取正整数)

Fps为一秒内的帧数,因此line_time应该以秒为单位。或者说是pclk 以MHZ为单位需要转换为Hz为单位,才与50Hz在同一个度量水平。而1Hz=1/s,所以line_time参数也是以s为单位。

linesPer500ms参数主要是进行以曝光行为单位的曝光时间和微妙为单位的曝光时间的转换。AE自动曝光算法内部还是以曝光行为单位进行AE的调整,而调试工具界面除了曝光时间上下限是以曝光行为单位,其他时间相关的都是以微妙为单位。

https://i-blog.csdnimg.cn/direct/324194f1fb9f4b3e863218486456f48b.png

海思抗频闪方式描述如下:

https://i-blog.csdnimg.cn/direct/7999ed23d2be4d819431d47942587bf3.png

Lines_per_500ms=pclk/(Picture_width+Width of the horizontal blanking region)/2=pclk/HTS/2

上述公式怎么得到的呢?

我们知道sensor一行的曝光时间为line_time=HTS/pclk,那么500ms需要对应曝光多少曝光行呢?

1/line_time=x/0.5   注意等式两边时间单位是以s为单位

x=0.5/line_time=pclk/HTS/2

即500ms对应的需要曝光pclk/HTS/2曝光行才行。

抗频闪参数(Lines_per_500ms)定义的问题

以50HZ抗频闪为例,50HZ抗频闪每行需要曝光10ms,也即是pclk/HTS/100,也即VTS*fps/100

那为什么不直接定义一个linesPer10ms(10ms对应的曝光行数)的参数去进行抗闪时间计算呢?如果定义linesPer500ms的参数,那还需要再此参数的基础上再除以50才能以转换为以每10ms为步进进行曝光。本质上linesPer10ms和linesPer500ms在此情景中是一样的作用。实际内部计算中用linesPer10ms去计算曝光时间根据方便些。

抗频闪参数(Lines_per_500ms)定义的问题

原因1

再继续思考定位。发现海思内部计算工频闪烁类型的时候有用到Lines_per_500ms参数。如下图描述:

https://i-blog.csdnimg.cn/direct/b01754d3f94847f9aded5d920b755f5b.png

https://i-blog.csdnimg.cn/direct/f2fdda6ab6064f10b5d889f2599448d8.png

https://i-blog.csdnimg.cn/direct/097a48646a194084be4bfed3f603e086.png

大概意思是利用获取到的3帧图像数据根据LinePerSecond变量,计算出当前环境是有无工频闪。有工频闪时候,是50HZ还是60Hz工频闪,亦或是未知类型的工频闪。

计算工频闪烁的时候需要LinePerSecond,即1秒的最大总曝光行数。

我们知道1s=0.01*100s=0.5*2s。假设当前帧率为8帧,VTS等于1124为偶数我们以Lines_per_500ms=VTS*fps/2,Lines_per_10ms=VTS*fps/100分别计算得到:Lines_per_500ms = 1124*8/2=4496Lines_per_10ms =  1124*8/100=89然后以Lines_per_500ms 、Lines_per_10ms分别计算LinePerSecond,分别得到4496*2=8992,、89*100=8900。
以上以Lines_per_10ms计算得到的LinePerSecond存在误差,而以Lines_per_500ms计算得到的LinePerSecond无误差假设当前帧率为8帧,VTS等于1125为奇数我们以Lines_per_500ms=VTS*fps/2,Lines_per_10ms=VTS*fps/100分别计算得到:Lines_per_500ms = 1125*8/2=4500Lines_per_10ms =  1125*8/100=90
以上以Lines_per_10ms计算得到的LinePerSecond无误差,而以Lines_per_500ms计算得到的LinePerSecond无误差

即使是帧率为奇数帧,VTS为奇数,根据Lines_per_500ms 、Lines_per_10ms分别计算LinePerSecond时,以Lines_per_500ms计算得到的LinePerSecond也会比以Lines_per_10ms计算得到LinePerSecond误差要小些。

通过图像帧数据和LinePerSecond判断当前是否有误频闪的时候,LinePerSecond参数越精确越好。如果以Lines_per_10ms为抗闪参数,在计算LinePerSecond时会有些许误差。最后将导致判断频闪类型的时候可能会出现误判或者漏判的情况。所以海思的抗闪参数定义为Lines_per_500ms。

原因2:

基于同样精度的原因,在下述海思曝光行转换为微秒的关系式中,由于Lines_per_10ms计算的值相对比Lines_per_500ms 计算得到的值误差要大些,再按照下述关系转换为微秒的时候误差也较大;相反的,由微秒为单位的曝光时间转换为对应以曝光行为单位的曝光时间的时候,前者转换后的结果所带来的误差也比后者大。

在应用层面上,由于带来的误差可能将导致一些应用逻辑失效或者出错。

https://i-blog.csdnimg.cn/direct/68d673f840e14b668091c5e3606d54cb.png

​所以,以Lines_per_500ms 为抗频闪参数,为的是尽量减小精度保证相应逻辑正确的的前提下所设计的参数值。

其他原因:?? 欢迎讨论补充

http://www.lryc.cn/news/419350.html

相关文章:

  • 【代码随想录】区间和——前缀和方法
  • Bug 解决 | 前端项目无法正确安装依赖?
  • 【mysql 第四篇章】bin log 的作用是啥呢?
  • Linux 操作系统:基于环形队列的生产者消费者模型
  • python求解二次方程
  • Spring框架面试总结
  • java之网络编程篇
  • stm32f103c8t6与TB6612FNG解耦测试
  • 2253336 - 资源库 - OAC0 中的脱机状态
  • uni-app总结
  • 【JavaEE初阶】线程安全的集合类
  • 关于Vue项目npm快捷键,点击run启动报错,及npm i也报错的解决办法
  • React中,className属性自定义组件不生效的问题
  • Ubuntu22.04搭建fabric开发环境、开发环境下运行链码
  • [BSidesCF 2019]Kookie1
  • LCM红外小目标检测
  • 振德医疗选择泛微千里聆RPA,助力电商、人事业务流程自动化
  • VBA高级应用30例应用3在Excel中的ListObject对象:创建表
  • IP 地址在 SQL 注入攻击中的作用及防范策略
  • Unity VR黑屏
  • Vue.js 中使用 Watcher 的强大场景和案例
  • 《实现 DevOps 平台(2) · GitLab CI/CD 交互》
  • 【机器学习sklearn实战】岭回归、Lasso回归和弹性网络
  • Python 爬虫项目实战六:抓取猫眼电影排行榜的数据
  • YOLO系列:从yolov1至yolov8的进阶之路 持续更新中
  • 欧拉系统离线安装界面ukui
  • Milvus向量数据库的简介以及用途
  • 恒创科技:IPv4 和 IPv6 之间的主要区别
  • TinyWebserver的复现与改进(1):服务器环境的搭建与测试
  • 【Python】练习题附带答案