linux video input子系统驱动实践2-camera基础

1. camera基本原理

1.光线通过镜头Lens进入摄像头内部

2.图像传感器转换光信息为电信息

3.原始的RAWData经过ISP转换成RGB/YUV数据

4. 应用层处理压缩变成常见的图片或者视频

Sensor输出格式是否RAW

可分为带ISP sensor和不带ISPsensor,市面上大部分sensor都是不带ISP的,Raw不能直接显示,必须经isp过处理才能正常显示。某些SOC不带isp就需要选用sensor内部带ispsensor

2. RAW图像格式

Raw图记录的就是CMOS或者CCD图像传感器将捕捉到的光源(光子)信号转化为数字信号的原始数据

感光阵列(Sensor)接受光子示意图:其中黄色小圆球代表光子大小,下面为光电转换矩阵

此处引入一个衡量电信号强度大小的概念——“比特深度(bit depth),比如一个16bit的模组意味着65536的灰度范围,8bit模组即表示28次幂即256raw8raw10raw12raw16

Raw是光电转换的结果,其无非就是一个灰度信号记录器。我们知道光由RGB三种基色组成,那么问题来了:怎样区分每个像素对于每个颜色通道(R channel, G channel, B channel)获取的量的多少?

为了获取各通道颜色分量,可以考虑给每个像素上面叠放一个颜色过滤器,即每个像素可以让相应的颜色分量通过,而丢弃掉不需要的颜色分量,如右图所示:

但每个像素点需要对于丢弃的颜色分量进行估计,以完成单像素点全部颜色分量的构建,构建算法在后面会有介绍。

已有的典型颜色Pattern很多,如:RGBE filterCYGM filterBayer filter等,其中工业界应用比较多的是Bayer滤波器。

典型的Bayer矩阵如右所示:

绿色明显多于红色和蓝色,这是因为BAYER矩阵实际上仿照了人眼对于绿色比较敏感的特点,绿色比红色和蓝色多会进一步降低噪声并可以让图像有更好的细节呈现

为了获取各通道颜色分量,可以考虑给每个像素上面叠放一个颜色过滤器,即每个像素可以让相应的颜色分量通过,而丢弃掉不需要的颜色分量,如右图所示:

但每个像素点需要对于丢弃的颜色分量进行估计,以完成单像素点全部颜色分量的构建,构建算法在后面会有介绍。

已有的典型颜色Pattern很多,如:RGBE filterCYGM filterBayer filter等,其中工业界应用比较多的是Bayer滤波器。

典型的Bayer矩阵如右所示:

绿色明显多于红色和蓝色,这是因为BAYER矩阵实际上仿照了人眼对于绿色比较敏感的特点,绿色比红色和蓝色多会进一步降低噪声并可以让图像有更好的细节呈现

3. Demosaicing去马赛克

上文提到采用Bayer Pattern之后,每个像素点需要对于丢弃的颜色分量进行估计,以完成单像素点全部RGB颜色分量的构建,关于构建的算法称为Demosaicing算法

Bayer格式插值有插值红蓝算法和插值绿值两种

插值算法容易导致图像出现失真,甚至出现摩尔纹。

去马赛克参考代码:10.0.210.2:/data/gaowj/uapi-app/rawbin2rgb

双线性插值、自适应插值算法图像对比

双线性插值法使图片变模糊,在图片中栅栏区域有大量的拉链效应和伪彩色失真;自适应插值算法拉链效应会好很多,还是有一点异常需要优化

4. raw存储格式

衡量电信号强度大小的概念——“比特深度(bit depth),比如一个16bit的模组意味着65536的灰度范围,8bit模组即表示28次幂即256raw8raw10raw12raw16

raw10raw12raw14 ddr中按16bit存储,可以选择低位补零或者高位补零

5. Camera硬件接口

GPIO

reset复位、PWDN上电、STROBE曝光输出

配置接口:

SCCBCCICSI协议中定义的)、I2C

用于控制和配置图像传感器的参数。它用于发送命令和控制信息,以调整传感器的设置,如曝光时间、增益、白平衡等。关注的是对传感器进行配置和控制的命令和数据,而不是图像本身。

图像物理层接口:

D-PHYLVDSDVPbt565bt1120

从传感器捕获的实际图像数据,如像素值、颜色信息等。

6. 逐行曝光

我们先理解一 Sensor爆光的时序, 有利于我们理解后面的计算。 逐行曝光的sensor只有一 ADC,所以噪光顺序保证ADC不被各行同时占用,也就是读出时间不重叠。

7. 常见参数计算

7.1. 一行时间计算:

line time=line length/pclk

我们这里先介绍几个变量的定义

PCLK:是控制像素输出的适中,表示单位时间内输出的pixel数量

linelength:一行的长度(包含HBLANK),可以理解为包含了hblank一行的像素数

linetime:就是噪光一行需要的时间

7.2. 曝光时间计算:

exposure_time = exposure_line*line_time

exposure_line:曝光时间一般是以line_time为单位的,exposure_line一般是一个寄存器,用来控制曝光时间是多少倍的line_time

exposure_time:噪光时间

line_time:一行时间

这里一定要理解,sensor是一行一行噪光的,VTS就是两行读出间隔,等于行数*每行AD转换的时间。

7.3. 帧长:

隐含一帧的行数,不占用曝光时间

frame_length = Vsync =Dummy Lines = VTotal = VTS = VSize+VBlank

7.4. 行长:

隐含一行Pixel个数,占用曝光时间

line length s Hsync = Dummy Pixel = HTotal = HTS = HSize+HBlank

7.5. 帧率:

Fps = pclk / (VTS*HTS)

       =pclk / (frame_length*line length

       =1 / (frame_length*line time

这里再说一下单位,pclk一秒内采样像素的个数,单位是HZVTSHTS都是行数和一行像素个数,没有单位,line_time的单位是s

一般line_time是一个常数,调节帧率一般是通过修改frame_length来实现

8. CSI输出帧结构

像素阵列 Pixel Array

特殊用法:调整X_ADDR_START或者Y_ADDR_START可以变换RAW格式:

COL+1:

BGGR->GBRG

ROW+1:

BGGR->GRBG

COL+1; ROW+1

BGGR->RGGB

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值