基于 OV5640 摄像头理论知识讲解-成像和采样原理

基于OV2640/ OV5640 的图像采集显示系统系列文章目录:
(1)基于 OV5640 摄像头理论知识讲解-成像和采样原理
(2)基于 OV5640 摄像头理论知识讲解-数字接口和控制接口
(3)基于 OV5640 摄像头理论知识讲解-典型工作模式配置
(4)基于OV2640/ OV5640 的图像采集显示系统

文章目录

  • 前言
  • 一、OV5640 摄像头介绍
  • 二、硬件电路说明
  • 三、CMOS 图像传感器成像原理


前言

基于 OV5640 摄像头理论知识讲解-成像和采样原理。-

提示:以下是本篇文章正文内容,下面案例可供参考

一、OV5640 摄像头介绍

OV5640_V5( V5 是版本号,下面均以 OV5640 表示该产品)是芯路恒科技推出的一款高性能 500W 像素高清摄像头模块。该模块采用 OmniVision 公司生产的一颗 1/4 英寸CMOS QSXGA( 25921944)图像传感器 OV5640,配合高质量的光学镜头及为实现更高性能而精心设计的 PCBA,使该模块拥有了尽可能高的成像质量。OV5640 模块的特点如下:
 1.4μm
1.4μm 像素大小,并且使用 OmniBSI 技术以达到更高性能(高灵敏度、
低串扰和低噪声)
 自动图像控制功能:自动曝光( AEC)、自动白平衡( AWB)、自动消除灯光条纹、
 自动黑电平校准( ABLC)和自动带通滤波器( ABF)等。
 支持图像质量控制:色饱和度调节、色调调节、 gamma 校准、锐度和镜头校准等
 标准的 SCCB 接口,兼容 IIC 接口
 支持 RawRGB、 RGB(RGB565/RGB555/RGB444)、 CCIR656、 YUV(422/420)、 YCbCr
( 422)和压缩图像( JPEG)输出格式
 支持 QSXGA( 500W)图像尺寸输出,以及按比例缩小到其他任何尺寸
 支持图像缩放、平移和窗口设置
 支持图像压缩,即可输出 JPEG 图像数据
 支持数字视频接口( DVP)
 自带嵌入式微处理器
 集成 LDO, 仅需提供 3.3V 电源即可正常工作

二、硬件电路说明

OV5640 模块对用户提供一个 20 针的排针接口,模块的 2*10 接口信号图如下所示:
1
下表为该接口上各个信号的功能介绍。
2
注意:OV5640 芯片 DVP 接口本身拥有 10 位的数据线,可以输出 10 位的 RAW 数据,但是在大多数情况下,使用高 8 位数据即可,因此模组在设计时,仅使用了 OV5640 芯片的D9-D2 高 8 位,映射到模组上的 OV_D7~OV_D0。

三、CMOS 图像传感器成像原理

OV5640 是一个典型的 CMOS 图像传感器,作为一个图像传感器,其主要作用就是将现实中的各种光线转换为数字系统能够识别的数字信号,光线中三元色各个颜色的强度本身是模拟信号,所以图像传感器的最基本的原理就是进行模数转换,将光线这个模拟量转换为数字信号。
仅仅有模数转换功能还不够,我们还得先搞清楚另一个问题——光线是一种怎样的模拟量。
光线是一种怎样的模拟量呢,这个在初中物理中已经有过详细的介绍。我们都知道,自然界中的光,实际上是三种基本单色光的组合,这三种基本单色光为红(RED)、绿(GREEN)、蓝(BLUE),我们称之为三原色。通过将这三种基本颜色按照不同的比例混合,就可以得到其他的任意颜色。例如纯黄色是由红色和绿色按照一比一的比例混合得到的,蓝色量为 0。下图为三种颜色混合得到几种常见颜色的示意图。
1
既然已经知道,每一束光线都可以理解为三原色按照不同比例混合得到的效果,那么我们只要想办法知道该束光线的三原色的比例,然后用颜色加比例的表示方法,就能唯一确定这束光线的最终颜色了。所以图像传感器里面所谓的模数转换,实质就是对一束光线的三原色的强度进行转换,将三原色中每一种颜色的强度转化为数字信号。再用颜色加数字的方式来表示该束光线的真实颜色。
这里,假如我们对三原色中的每一种基本颜色的强度都分为 256 级,那么每一种基本颜色的强度就可以用一个 8 位的数字来表示,0 表示该颜色强度最弱,或者说无该颜色分量,255 表示该颜色强度最强。这样一来,我就可以用一个 24 位的数字来唯一表示该光线的颜色了。下表为上图中几种颜色的对应三原色的数值。
1
这种表示颜色的方法就是最常见的 RGB888 格式。所谓 RGB888 就是使用 3 个 8 位的数据表
示一种颜色,其中高八位表示红色分量,中八位表示绿色分量,低八位表示蓝色分量,上述 8 种颜色用 RGB888 格式表示就如下表所示:
1
行转换得到数字信号,就能唯一表示该颜色了,但是接下来,另一个问题又出现了。如何才能对一束自然光中的三原色的强度分别进行模数转换呢?这就涉及到对一束光的三原色分离。
所谓对光的三原色分离就是通过某种手段,将该束光线中的三种颜色分别独立提取出来,当三种颜色都独立的提取到之后,就能使用模数转换器对该颜色的强度进行转换了。三原色分离的原理其实非常简单,就是使用单色滤光片,
1
如上图,通过加入滤光片,就能让对应颜色的光线通过滤光片到达感光元件,通过这种方式,只需要三个不同颜色的滤光片,就能对一束入射的复合光线进行分离,得到三原色,然后使用模数转换器对感光元件感应到的单色光的光照强度进行转换,就能得到该单色光的强度数字值了。
但是,通过上述分析我们也发现一个事实,那就是一个感光元件只能对一种颜色的光进行感应,如果要对一束光线中的三种颜色分别感应,就需要三个感光元件。如果对应到CMOS 图像传感器里面的概念来说,这每一个滤光片加感光元件都是一个像素。注意这个概念,每一个滤光片加感光元件都是一个像素,那么从反面来说就是,每个像素都只能感应一种颜色的光线。所以,下次看到某某图像传感器宣传其有多少多少万像素大小时,作为半专业人士的我们,要在心里默念,这只是物理像素个数,实际上每个像素只能感应一种颜色。
既然每个像素只能感应一种颜色,那么新一个问题又来了——如何才能得到某束光线的三种颜色分量的值呢?答案就是使用至少 3 个像素,每个像素感应该束光的一种颜色,然后三个像素就能把该束光的三种颜色分量全提取出来了。但是,实际上使用 3 个像素来提取一束光的三种颜色分量,理论上可行,但是实际上却存在 3 个像素间摆放位置的物理限制,首先是如何让该束光线能够均匀的照射到感应三种颜色分量光线的像素上的问题,其次还要知道,一个图像传感器,并不是只感应一束光,是要感应成千上万束细小的光束,每一束光线都需要有对应的像素组来提取其三种颜色分量。因此,像素和像素之间的物理摆放问题也是需要认真考虑的问题。同时,还得兼顾考虑这种摆放模式下图像传感器的可生产性问题。
正是为了解决这些问题,诞生了著名的拜尔(以下简称 Bayer)矩阵。Bayer 矩阵定义,感光像素矩阵中,奇数行间隔放置绿色和红色感应像素,偶数行间隔放置绿色和蓝色感应像素,奇数列间隔放置绿色和蓝色感应像素,偶数列间隔放置红色和绿色感应像素,其输出数据格式如下图所示。
1
根据这种分布规律,在 Bayer 矩阵中,以相邻的四个像素作为一组,在该组中,有两个感应绿色分量的像素呈对角分布,另外两个像素则分别对应感应红色分量和感应蓝色分量。
通过这样一种方式,我们可以发现,任取一个像素,其与相邻的 3 个像素组成的矩阵中,总符合这样的规律。不同的只是三种颜色的像素所在的位置的差异。下图为图像传感器手册中给出的像素物理分布图。
1
而且通过对上述 88 的矩阵进行分析发现,在整个矩阵中,像素的位置关系有且只有下面四种情况:
1
所以,在实际颜色提取时,需要通过数据转换,将相邻四个像素的数据通过插值算法合并为一个 RGB 像素颜色,此种转换算法名为 RAW2RGB,这里取左上角四个像素点的数据为例,具体颜色转换算法如下所示:
在这里插入图片描述
保留相邻四个像素中的红色和蓝色分量,而对两个绿色分量求平均,得到新的绿色分量,此三种颜色分量组成一个新的 RGB 格式的像素,新的像素色彩组成如下所示:
1
按照这样的思路,整个图像传感器中的每一个像素都可以以不同的角色参与 4 次运算,并最终得到 4 个 RGB 颜色值,所以理论来说,还是可以认为一个图像传感器有多少个物理像素,就能得到多少个 RGB 格式的像素值,虽然每个物理像素都只能感应一种颜色。但是进过插值运算后,其能输出 RGB 的数据格式的像素数量还是等于其物理像素个数的。有了 Bayer 像素矩阵后,只需要使用一个模数转换器,依次对每一个像素的感光元件感应到的模拟量进行转换并输出,就能得到一幅完整图像的原始像素信息了。下图为OV5640 图像传感器的功能框图。
1
通过该图可以看到,该图像传感有一个基本的像素矩阵,在图中名为 image array,该像素矩阵共有 2592
1944 个物理像素,2592*1944=5,038,848,这也就是我们常说的 500 万像素的由来。在像素矩阵外围,有一个 row select 功能模块来选择当前输出哪一行的像素,和一个 column sample/hold 电路来依次采样每行像素中的每一个像素的感光元件感应结果(模拟信号)并输出到信号放大器(AMP),经由 AMP 对该信号放大之后,送给 10 位的模数转换器(10-bit ADC)进行模数转换。
至此,关于 OV5640 的第一大基本功能——成像和采样原理,就介绍清楚了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/94522.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

未来科技城携手加速科技 共建集成电路测试公共服务平台!

8月26日,2023未来产业发展大会在杭州未来科技城国际会议中心开幕!会上,发布了未来科技城培育发展未来产业行动计划,启动了未来产业发展共同体,进行了未来产业公共服务平台签约仪式。未来科技城与加速科技签约共建集成电…

系列十三、idea创建文件自动生成作者信息

File>Settings>Editor>File and Code Templates>Includes>File Header /*** Author : 一叶浮萍归大海* Date: ${DATE} ${TIME}* Description: */

24 WEB漏洞-文件上传之WAF绕过及安全修复

目录 WAF绕过上传参数名解析:明确哪些东西能修改?常见绕过方法:符号变异-防匹配( " ;)数据截断-防匹配(%00 ; 换行)重复数据-防匹配(参数多次)搜索引擎搜索fuzz web字典文件上传安全修复方案 WAF绕过 safedog BT(宝塔) XXX云盾 宝塔过滤的比安全狗厉害一些&a…

Django(9)-表单处理

django支持使用类创建表单实例 polls/forms.py from django import forms class NameForm(forms.Form):your_nameforms.CharField(label"Your name",max_length100)这个类创建了一个属性,定义了一个文本域,和它的label和最大长度。 polls/vi…

云服务器(Centos7系统)配置JAVA+mysql+tomcat 环境

文章主要内容来源云服务器(Centos7系统)部署javaweb项目(二)配置JAVAmysqltomcat 环境_man_zuo的博客-CSDN博客 模仿途中遇到的问题 连接无效 有时连接无法下载,可能是过期了,将其更换为官网给的下载连接即…

Java11(集合)

集合 1.集合框架 用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java集合可分为Collection和Map两种体系 Collection接口 Set:元素无序,不可重复的集合----(类似数学中的集合) List:元素有序,可重…

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2) 1. 安装npm2. 安装 Vue CLI3. 创建 vue_demo1 项目(官网)3.1 创建 vue_demo1 项目3.1.1 创建项目3.1.2 解决 sudo 问题 3.2 查看创建的 vue_demo1 项目3…

上门服务系统|上门服务软件开发|上门服务改善生活质量的便捷之选

随着现代生活的快节奏和社交距离的需求,我们越来越渴望能够以更便捷、高效的方式获得我们所需的服务。为了满足这一需求,我们公司开发了一款创新的上门服务系统,旨在将便利与质量相结合,为您提供无与伦比的体验。 无论您是忙碌的白…

layui框架学习(41:表单模块)

之前的文章《layui框架学习》14-16中介绍了通过预设类及部分layui属性设置表单的外观样式,layui中还提供有表单模块以对表单元素进行各类动态化渲染和相关操作,本文学习并记录表单模块form的常用属性、函数及事件的用法(如果内容已在之前文章…

MSLearn 开学季:AI 进阶系列|PromptFlow - 做一个教育行业的 Copilot 应用

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术&#xff0…

Ansible 自动化运维工具的使用

目录 一、Ansible简介 二、Ansible 的安装和使用 1.下载 2.使用 三、Ansible命令和模块 1.命令格式 2.命令行模块 (1)command 模块 (2)shell 模块 (3)cron 模块 (4)user 模…

wazuh初次理解-8-23

一、wazuh配置: 1、进入官网下载OVA启动软件: Virtual Machine (OVA) - Installation alternatives 2、进入虚拟机进行配置: 3、登录提示: 4、将网络连接模式更改为NAT,否则不能上网; 4、重启网络&#…

爬虫异常处理之如何处理连接丢失和数据存储异常

在爬虫开发过程中,我们可能会遇到各种异常情况,如连接丢失、数据存储异常等。本文将介绍如何处理这些异常,并提供具体的解决代码。我们将以Python语言为例,使用requests库进行网络请求和sqlite3库进行数据存储。 1. 处理连接丢失 …

NineData X SelectDB 联合发布会,即将上线!

8月30日晚上19:00,由 NineData 和 SelectDB 共同举办的主题为“实时数据驱动,引领企业智能化数据管理”的线上联合发布会,即将如期上线! 本次发布会将聚焦于实时数据仓库技术和数据开发能力,展示SelectDB新一代实时数据…

如何在VR头显端实现低延迟的RTMP或RTMP播放

技术背景 VR(虚拟现实技术)给我们带来身临其境的视觉体验,广泛的应用于城市规划、教育培训、工业仿真、房地产、水利电力、室内设计、文旅、军事等众多领域,常用的行业比如: 教育行业:VR头显可以用于教育…

ARM寄存器组

CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R0-R7,通用目的寄存器 R0-R7也被称为低组寄存器,所有指令可以访问它们,它们的字长为32位,复位后的初始值是不可预料的。 R8-R12,通用目的寄存器 R8-R12也被称…

Apple Configurator iphone ipad 设备管控 描述文件使用方法

一、准备 App Store 下载安装 Apple Configurator 二、Apple Configurator 注册组织, -----------这个组织可以是个人,或者其它组织导出-------再导入进来: 三、描述文件配置:“” 根据管控需求进行配置 “” 四、使用 Ap…

微前沿 | 第1期:强可控视频生成;定制化样本检索器;用脑电重建视觉感知;大模型鲁棒性评测

欢迎阅读我们的新栏目——“微前沿”! “微前沿”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 01. 强可…

数据结构之单链表java实现

基本概念 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中指针链接次序实现的。和数组相比较,链表不需要指定大小,也不需要连续的地址。 单链表的基本设计思维是,利用结构体的设置&#xff0c…

爬虫selenium获取元素定位方法总结(动态获取元素)

目录 元素 查看元素信息 元素定位 通过元素id定位 通过元素name定位 通过xpath表达式定位 绝对路径 相对路径 通过完整超链接定位 通过部分链接定位 通过标签定位 通过类名进行定位 通过css选择器进行定位 id选择器 class选择器 标签选择器 属性选择器 定位带…