如何修改 sensor 输出帧率

      在项目中我们经常有修改 sensor 输出帧率的需求,目的可能是要通过降低帧率,来增加曝光时间,从而提升低照度下的图像质量、或者是通过降低帧率,来减少传输带宽、又或者是通过提高帧率,抓拍高速运动的物体等等。本文主要介绍的就是如何修改 sensor 的输出帧率。


1、问题需求
以我目前在做的一个项目为例,用的是格科微的 GC4653 这款 sensor, sensor 原厂提供的 setting 是30fps,现在要求降低到 20fps,具体该如何修改呢?


2、计算说明
修改帧率一般是通过修改 VTS(也就是帧长) 来实现的,一帧图像的曝光时间 = 帧长 * 一行时间。提高帧长,1帧图像的曝光时间就变大了,单位时间内可曝光的帧数就少了,也就是帧率就下降了。所以通常也会通过降帧,来提高低照度下相机的性能。因为降帧后,每帧图像的曝光时间就变长了,相同照度下相比未降帧前,用到的sensor gain 就小,噪声情况就会有所改善,只要噪声小,能做的事情就多了,比如增加清晰度、提高亮度、调高色彩饱和度等等。
修改帧率,首先要了解如下参数的计算公式:
pclk = frame_length ∗ line_length * fps
line_time = line_length/pclk
fps = pclk/(frame_length ∗ line_length)  = pclk /(frame_length ∗ pclk ∗ line_time) = 1/ (frame_length ∗ line_time)
注:公式中的参数不理解的话,可查看这篇文章,CMOS Sensor 的一些基本概念,及曝光相关的计算 。
主要就是通过如上公式计算出新的帧长,要求得帧长就必须先知道曝光一行的时间(line_time)和帧率,帧率是已知的,就是20fps。要求得一行时间(line_time),就必须知道行长 (line_length) 和pclk的值。
首先我们先求pclk的值:pclk = frame_length ∗ line_length * fps,公式里的帧长和行长就是 VTS 和 HTS,这两个值默认的setting里就有,因为pclk是不变的,我们可以通过初始的30fps的setting来计算出 pclk 的值。
如下图所示,从sensor datasheet 里可以找到对应VTS 和 HTS的寄存器地址,根据地址从 sensor 厂给的 setting 里找到其对应的值 VTS = 1500,HTS = 3200(datasheet中有注明,读出的值要 *2);

          


3、计算结果
pclk = frame_length ∗ line_length * fps = 1500 x 3200 x 30 = 144,000,000
line_time = line_length/pclk = 3200/144,000,000 = 0.022 ms
VTS = frame_length = (1/fps) /line_time = ( 1/20 )s / 0.022ms  =  50 / 0.022 = 2273
如上将 sensor setting 中 VTS 的值改成:0x0340 = 08,0x0341 = e1,sensor 输出帧率就由30fps 变为 20fps 了。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_35247586/article/details/126567136

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值