跳到主要内容

05 视觉传感器

这节课学习镜头下方的图像传感器。OV5640 集成了很多功能,把落到感光像素上的光子,最终转变为图像数据输出。

1. 从感光像素到图像数据​

芯片中间的感光像素阵列由许多个像素单元组成。和其他传感器一样,它先把物理信号转成电信号,这里转换的是光信号。

OV5640的感光像素阵列、ADC、ISP流水与配置寄存器

图中可以看到,像素信号经过放大、ADC 采样后,还会经过 ISP 的处理,最后输出图像数据。ISP 是 Image Signal Processor,即图像信号处理器。

整个处理流程的参数由寄存器配置,OpenMV 底板上的 STM32H7 通过接口控制这些寄存器。OpenMV 又把相关操作封装到了 csi 模块中。

2. 一个像素的曝光周期​

下图把像素单元简化为光电二极管、开关和电容。RST、TX 都可以先理解为开关。

像素单元及预充电、曝光、采样、读出四个阶段

预充电​

预充电时,RST 和 TX 导通,光电二极管与电容 C 复位到初始状态。光电二极管本身也具有结电容。

预充电完成后,两个开关断开,进入曝光阶段。

曝光​

曝光期间,光照射到光电二极管上,产生并积累光生电荷。曝光时间和光照强度会影响积累的电荷量。

采样​

曝光结束后,TX 导通,把光电二极管中积累的电荷转移到读出节点,再断开 TX。

读出​

读出阶段,电压信号经过放大器,再由 ADC 转化为数字信号。这样就完成了图中一个像素单元的曝光周期。

3. 彩色滤光阵列​

前面的过程主要测量光照强度,但彩色图像还需要颜色信息。在像素阵列上方还有一层彩色滤光阵列:红色位置主要透过红光,绿色位置主要透过绿光,蓝色位置主要透过蓝光。

拜尔彩色滤光阵列与利用相邻像素补齐颜色的示意

每个像素位置只测量一种颜色,但最终的彩色像素需要红、绿、蓝三种信息。因此可以利用相邻像素进行插值。

以图中的绿色位置为例,它的红色信息可以由左右两个红色像素取平均,蓝色信息可以由上下两个蓝色像素取平均。其他位置也按照周围的颜色排列,补齐缺少的颜色。

图中每四个位置有两个绿色、一个红色和一个蓝色,这种布局叫作拜尔模式。由这些采样值还原完整颜色的过程叫作去拜尔化,上面的取平均是双线性插值的直观例子。

它是 ISP 处理中的一环。除此之外,ISP 还会进行增益、校正、缩放、裁剪等处理。

4. 像素格式​

获取颜色信息后,还要决定怎样把一个像素存进内存,这就是像素格式。本课程常用的是 RGB565 和 GRAYSCALE。

BINARY、GRAYSCALE、RGB565、YUV422与BAYER的像素存储示意

RGB565​

RGB565 每个像素占两个字节,共 16 位:红色 5 位、绿色 6 位、蓝色 5 位。

与它类似,电脑上常见的 RGB888 是每个颜色占 8 位,共 24 位。RGB565 占用空间更少,也便于按 16 位数据处理,所以在嵌入式图像处理中很常见。

GRAYSCALE​

灰度格式每个像素占一个字节,只表示亮度,效果类似黑白照片。

很多视觉任务主要关心亮度变化,例如边缘检测、扫码、模板匹配。分析彩色图像的某一个通道时,也可以把这个通道看成一幅灰度图。

图像文件​

平时在电脑上看到的 PNG、JPG 等,是图像文件格式。在保存图像时,会在像素数据的基础上进行编码、压缩和封装。

下一节使用 csi 模块配置图像传感器,并继续看图像如何进入缓冲区。