stm32-摄像头模块

总结在 stm32 zx 开发板上使用摄像头模块的一些基础知识。

基础知识

图像传感器的种类

摄像头的图像传感器CCD与CMOS传感器主要区别如下:

成像材料

CCD与CMOS的名称跟它们成像使用的材料有关,CCD是“电荷耦合器件”(Charge Coupled Device)的简称, 而CMOS是“互补金属氧化物半导体”(Complementary Metal Oxide Semiconductor)的简称。

功耗

由于CCD的像素由MOS电容构成,读取电荷信号时需使用电压相当大(至少12V)的二相或三相或四相时序脉冲信号,才能有效地传输电荷。 因此CCD的取像系统除了要有多个电源外,其外设电路也会消耗相当大的功率。有的CCD取像系统需消耗25W的功率。 而CMOS光电传感器件只需使用一个单电源5V或3V,耗电量非常小,仅为CCD的1/81/10,有的CMOS取像系统只消耗20~50mW的功率。

成像质量

CCD传感器件制作技术起步早,技术成熟,采用PN结或二氧化硅(sio2)隔离层隔离噪声,所以噪声低,成像质量好。与CCD相比, CMOS的主要缺点是噪声高及灵敏度低,不过现在随着CMOS电路消噪技术的不断发展,为生产高密度优质的CMOS传感器件提供了良好的条件, 现在的CMOS传感器已经占领了大部分的市场,主流的单反相机、智能手机都已普遍采用CMOS传感器。

摄像头的种类

根据输出信号的类型、接口类型、分辨率可以对摄像头进行分类。

输出信号类型

数字摄像头输出信号为数字信号,模拟摄像头输出信号为标准的模拟信号。

接口类型

数字摄像头有USB接口(比如常见的PC端免驱摄像头)、IEE1394火线接口(由苹果公司领导的开发联盟开发的一种高速度传送接口, 数据传输率高达800Mbps)、千兆网接口(网络摄像头)。模拟摄像头多采用AV视频端子(信号线+地线)或S-VIDEO(即莲花头–SUPER VIDEO, 是一种五芯的接口,由两路视频亮度信号、两路视频色度信号和一路公共屏蔽地线共五条芯线组成)。

分辨率

模拟摄像头的感光器件,其像素指标一般维持在752(H)*582(V)左右的水平,像素数一般情况下维持在41万左右。 现在的数字摄像头分辨率一般从数十万到数千万。但这并不能说明数字摄像头的成像分辨率就比模拟摄像头的高, 原因在于模拟摄像头输出的是模拟视频信号,一般直接输入至电视或监视器,其感光器件的分辨率与电视信号的扫描数呈一定的换算关系, 图像的显示介质已经确定,因此模拟摄像头的感光器件分辨率不是不能做高,而是依据于实际情况没必要做这么高。

图像&视频的格式

图像输出的主要格式有:

  • RGB 格式:采用这种编码方法,每种颜色都可用三个变量来表示红色、绿色以及蓝色的强度。每一个像素有三原色 R 红色、G 绿色、B 蓝色组成。RGB 常用的数据格式有 RGB888,RGB565,RGB555 这几种。这个格式和RGB raw格式是不同的。

    RGB565,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感。

    其中A表示的是透明

  • RAW RGB格式:是 CCD 或 CMOS 在将光信号转换为电信号时的电平高低的原始记录,单纯地将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。这个格式的每个像素点只有一种颜色,而RBG每个像素点有三种颜色,每个值都在0-255之间。

  • YUV 格式:其中“Y”表示明亮度(Luminance 或 Luma),就是灰阶值;而“U”和“V”表示色度(Chrominance 或 Chroma),是描述影像色彩及饱和度,用于指定像素的颜色。这个格式由于其会保留最原始的数据信息,所以其所占的空间比较大,并且其进行后期优化修改的可造性也比其他格式好。所以这个格式对于专业的摄影师来说是常用的。这个格式需要使用特殊的软件才可以打卡

    • 分类方式根据采样的不同,分为 YUV444,YUV422,YUV420。
      • YUV444:每个像素点同时包含 Y/U/V 3个参数。
      • YUV422:每2个像素点共享一组 U/V 参数,同时每个像素拥有自己的 Y 参数。
      • YUV420:每4个像素点共享一组 U/V 参数,同时每个像素拥有自己的 Y 参数。

RGB格式和YUV格式

sensor(传感器)输出的数据格式,主要分两种:YUV(比较流行),RGB,这就是sonsor的数据输出;这其中的GRB就是Raw RGB,是sensor的bayer阵列获取的数据(每种传感器获得对应的颜色亮度);

但是输出的数据不等于就是图像的实际数据,模组测试时,就要写一个软件,完成数据采集(获得Raw data)->彩色插值(目的是获得RGB格式,便于图像显示)->图像显示;

支持 YUV/RGB 格式的模组,一般会在模组上集成 ISP(Image Single Processor),经过A/D 转换过的原始数据经过 ISP 处理生成 YUV 标准格式传到 BB。一般来说,这种设计适用于低像素 Camera 的要求,会在主板上省去一个 DSP,可降低成本。在调试过程中,YUV/RGB 格式的摄像头,其所有参数都可在 kernel 层通过寄存器来控制。调试一般由 sensor的原厂支持。

支持 RawData 格式的模组,由于感光区域的需求,不会再模组内集成 ISP 以最大程度的增大感光区域的面积,提高照片质量。模组把原始的数字信号传给 BB 上的 DSP 进行处理,MTK 自带的 DSP 一般包含 ISP、JPEG encoder、和 DSP 控制芯片。在调试的时候图像的效果需要 MTK 在 HAL 层的参数进行支持。

  • JPEG: 如果将图像原始格式直接存储到文件中将会非常大,比如一个50005000 24位图,所占文件大小为50005000*3字节=71.5MB, 其大小非常可观。如果用zip或rar之类的通用算法来压缩像素数据,得到的压缩比例通常不会太高,因为这些压缩算法没有针对图像数据结构进行特殊处理。

    于是就有了jpeg,png等格式,同样是图像压缩算法jpeg和png也有不同的适用场景。JPEG也称之为JPG。有些sensor(传感器),特别是低分辨率的,其自带JPEG engine,可以直接输出压缩后的jpg格式的数据,jpg全名是JPEG。JPEG 是与平台无关的格式,支持最高级别的压缩(这种压缩是有损耗的), 将像素信息用JPEG保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在[-1,100]之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够了。JPEG没有透明信息。jpeg比较适合用来存储相机拍出来的照片,这类图像用JPEG压缩后的体积比较小。

    • 其使用的具体算法核心是离散余弦变换、Huffman编码、算术编码等技术。

    • jpeg格式支持不完全读取整张图片,即可以选择读取原图、1/2、1/4、1/8大小的图片

    • jpeg没有透明信息。

    • jpeg比较适合用来存储相机拍出来的照片,这类图像用jpeg压缩后的体积比较小。

  • PNG格式,这个格式是无损压缩的。png可以有透明效果。png比较适合适量图,几何图。 比如本文中出现的这些图都是用png保存,比用joeg保存体积要小。

jpeg格式和png格式的异同

  • jpeg比较适合存储色彩“杂乱”的拍摄图片,png比较适合存储几何特征强的图形类图片。
  • jpeg,png文件之于图像,就相当于zip,rar格式之于普通文件(用zip,rar格式对普通文件进行压缩)。
  • jpeg没有透明信息。而png有。

视频的输出数据

OV5640模块

由于我在项目中使用的是微雪的OV5640模块,所以对其进行主要的介绍、总结。

这个模块使用的是OV5640的图像传感器。下面我们主要介绍这个ov公司的传感器芯片。

OV5640传感器

上图是该传感器的引脚定义,每个引脚的作用如下:

参考资料

Camera常见输出格式简介

相机的常见输出格式

野火官方教程

https://www.cnblogs.com/yuluoxingkong/p/10681253.html

RAW、RGB 、YUV三种图像格式理解

图像处理格式


stm32-摄像头模块
https://ysc2.github.io/ysc2.github.io/2024/03/07/stm32-摄像头模块/
作者
Ysc
发布于
2024年3月7日
许可协议