sensor逐行曝光原理

 关于帧、帧数、帧率的概念

Frame

简单的理解帧就是为视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。

具体地,在将光信号转换为电信号的扫描过程中,扫描总是从图像的左上角开始,水平向前行进,同时扫描点也以较慢的速率向下移动。当扫描点到达图像右侧边缘时,扫描点快速返回左侧,重新开始在第1行的起点下面进行第2行扫描,行与行之间的返回过程称为水平消隐(也叫行消隐,H_BLANK)。一幅完整的图像扫描信号,是由水平消隐间隔分开的行信号序列构成,称为一帧。

如下图所示,是一帧的结构图,在最下面部分有一部分是V_BLANK。V_BLANK的由来是因为扫描点扫描完一帧后,要从图像的右下角返回到图像的左上角,开始新一帧的扫描,会有一段间隔时间,这一时间间隔,叫做垂直消隐(也称场消隐,V_BLANK),V_BLANK的作用通常用来调节帧率。

帧数 Frames

帧数是帧生成数量的简称,可以解释为静止画面的数量,也就是说,如果一个动画的帧率恒定为 60 帧每秒(fps),那么它在一秒钟内的帧数为 60 帧,两秒钟内的帧数为 120 帧。值得说的是对于我们大多数手机视频拍摄能力,无论是 720P 还是 1080P 基本都只有 30 帧每秒,因为这个将涉及到手机 GPU 图形处理器的能力和存储能力,这都是受手机硬件条件的影响,当然一些手机也可以拍出 4K 视频,甚至可以使用 135 帧每秒的超高速拍摄功能。

帧率 Frame rate

帧率(Frame rate) = 帧数(Frames)/时间(Time),单位为帧每秒(f/s, frames per second, fps)

帧率是用于测量显示帧数的量度,测量单位为每秒显示帧数 Frame per Second FPS)或赫兹 Hz),一般来说 FPS 用于描述视频、电子绘图或游戏每秒播放多少幀。

FPS( Frame per Second)每秒显示帧数

FPS 是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。 FPS 是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。通常,要避免动作不流畅的最低是 30 。某些计算机视频格式,每秒只能提供 15 帧。

FPS 也可以理解为我们常说的刷新频率或者刷新率,使用赫兹 Hz)为单位。最简单的就是我们玩儿 LOL 英雄联盟、 CS 、以及手机上的王者荣耀等游戏中说的“ FPS 。而在显示器的刷新率中,如果你使用过那种很笨重的 CRT 显示器,那么你一定经历过将刷新率调低后,看着整个画面都是在闪烁的,所以当时的显示器的刷新率最大也就只有 60Hz,而现在子凡随便一看都是 150Hz 了,但是也会更具显卡来设置,当然 60Hz 也够了。其中子凡说的 60Hz 的刷新率刷也就是指屏幕一秒内只扫描 60 次,即 60 /秒。

 sensor逐行曝光基本原理

sensor逐行曝光从第一行开始曝光,一个行周期结束之后第二行才开始曝光。依次类推,经过N-1 行后第N 行开始曝光。第一行曝光结束后开始读出数据,读出一行需要一行周期时间(含行消隐时间,即H_Blank)。至第一行完全读出后,第二行刚好开始读出,依次类推,当第N-1 行读完后,第N 行开始读出,直到整幅图像完全读出。

与sensor曝光相关的计算

1. line_time的计算:

line_time的计算公式:line_time = line_length / pclk

和这个公式相关的是下面三个变量的定义先说下

    a). line_length: 一行的长度(包含h_blank)

    b). pclk: 是控制像素输出的时钟,即pixel采样时钟,单位MHz。表示是每个单位时间内采样的pixel数量

    c). line_time: 曝光一行的时间

所以,曝光一行的时间等于一行的长度除以曝光一个像素需要的时间。

2. exposure_time的计算:

exposure_time的计算公式:exposure_time = exposure_line * line_time

同样和这个公式有关的几个定义先说下:

    a). exposure_time: 曝光时间。指这一帧曝光了多长时间。

    b). exposure_line: 字面意思是曝光行。值得注意的是,曝光行不是指一次性曝光多少行,对于逐行曝光的sensor来说,永远都是一次曝光一行。所以,曝光行是指这一帧曝光了多少行。

    c): line_time: 曝光一行的时间

所以,可以用line_time即曝光一行的时间,乘以曝光了的行数exposure_line,等于整个曝光花费的时间。

注:

1) 调节exposure_time曝光时间是通过写exposure_line寄存器实现的;

2) 曝光时间以行长为单位

3. fps帧率的计算:

frame_length = Vsync = Dummy Line = VTotal = VTS = V_Size + V_Blank   // 帧长;   不占用曝光时间

line_length = Hsync = Dummy Pixel = HTotal = HTS = H_Size + H_Blank // 行长;    会增加曝光时间

fps的计算公式:fps =  pclk / (VTS * HTS )= pclk / (frame_length * line_length) = 1 / (frame_length * line_time)

注:fps即表示1秒内帧数,此公式中line_time单位是秒

同样和这个公式有关的几个定义先说下:

    a). pclk: 是控制像素输出的时钟,即pixel采样时钟,单位MHz。表示是每个单位时间内采样的pixel数量

    b). frame_length:  一帧的行数(包含v_blank)

    c). line_length: 一行的长度(包含h_blank)

这里frame_length * line_length的意思是用一帧的行数乘以一行的长度,即相乘得到一帧图像总共有多少像素。pclk是像素时钟,单位是MHz。如100MHz,就表示每秒钟可以采集100M个像数。用pclk除以frame_length * line_length两者之积,即是算1秒钟内采集的100M个像数点可以分成多少帧(frame_length * line_time = 曝光一帧的时间)。

注:

1). line_time一组setting只有一个值,一般是不变的,可看做常数,所以调节帧率是通过写frame_length寄存器,即调节frame_length实现的。

2). 同理,回到上一个知识点 2. exposure_time的计算:可以发现,exposure_time = exposure_line * line_time,而line_time一般是常数。所以,调节exposure_time曝光时间是通过写exposure_line寄存器实现的,即通过写曝光实现。

4.其他相关:

dummy_line:用来填充v_blank的行

frame_offset:最小的dummy_line,一帧曝光结束到下次准备好重新开始曝光的时间

frame_length = exposure_line + dummy_line

frame_length ≥ exposure_line +frame_offset

链接:https://www.jianshu.com/p/6d99bafd9a94

来源:简书

  手机自动曝光如何配置曝光表

行曝光时间的计算:由于帧率fps表示每秒显示的帧数,若帧率为30fps,则每曝一帧所需时间为T=1/30,若一帧图像的pixel数量为4080*3072,考虑到曝光时的行消隐和列消隐时间,则实际的列数=active width(4080)+blanking width=5910,实际的行数=active height(3072)+blanking height=3936,由此算得每一行的曝光时间为1/30/3936

由于sensor的最小曝光行数(minLineCount)为4,故最小曝光时间为4*行曝光时间

最短消隐时间计算(min preview vert blank time ):在传感器驱动程序中找到以下信息:每行的像素时钟(line_length_pclk),像素时钟 = 最大 FPS * 每帧行数(frameLengthLines),预览分辨率的垂直偏移 (vert_offset)预览的最短消隐时间(单位为纳秒)计算公式为: minPreviewBlankingtime = (1/ 像素时钟) * vertOffset * (10^9)。注: 10^9 是从秒转换为纳秒。

原文链接:https://blog.csdn.net/u014634637/article/details/84108589

sensor曝光都是逐行曝光,在国内,为了避免出现banding,曝光除了逐行曝光意外,还必须是10ms的整数倍,那么如何计算出10ms的整数倍的曝光是具体多少行呢,下面就说说这个。sensor的每一个pixel产生的数据都需要输出,输出就需要有能量,因此camera的主时钟MCLK,由BB提供,再由sensor处理后变成传输数据所需要的PCLK,PCLK给每一个pixel数据传输提供能量,它是一个频率,那么通过PCLK可以算出每一个pixel曝光需要的时间,就是1/PCLK,然后每一行有多少个pixel曝光(line_length_pclk)可以从sensor_lib.c里获取,这个值一般都会比sensor的output size会大,因为会加入dummy pixel(为啥需要加入空白的,都是为了调整曝光,从而达到消除banding的目的),有了这个值以后我们就可以很轻松的算出来10ms的整数倍到底具体是多少行,公式我还是列下来:
                                              (1/PCLK)*line_length_pclk*X = 10ms   ----(X表示10ms的曝光行数)


      再多说一点,其实通过PCLK可以算出来mipi数据总量,假如我们是10bit的数据输出,那么MIPI的数据总量就是PCLK*10,如果是MIPI 4lane的那么每条lane的数据量就再除以4就好。
 

 

  • 20
    点赞
  • 142
    收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 6

打赏作者

乐正倩彦

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值