基于 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 的第一大基本功能——成像和采样原理,就介绍清楚了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot第37集:kafka,mqtt,Netty,nginx,CentOS,Webpack

image.png binzookeeper-server-start.shconfigzookeeper.properties.png image.png image.png 消费 image.png image.png image.png image.png image.png image.png image.png image.png image.png Netty的优点有很多: API使用简单,学习成本低。功能强大…

Pillow:Python的图像处理库(安装与使用教程)

在Python中,Pillow库是一个非常强大的图像处理库。它提供了广泛的图像处理功能,让我们可以轻松地操作图像,实现图像的转换、裁剪、缩放、旋转等操作。此外,Pillow还支持多种图像格式的读取和保存,包括JPEG、PNG、BMP、…

db2迁移至oracle

1.思路 (1)用java连接数据库(2)把DB2数据导出为通用的格式如csv,json等(3)导入其他数据库,比如oracle,mongodb。这个方法自由发挥的空间比较大。朋友说他会用springboot…

BananaPi BPI-6202工业控制板全志科技A40i、24V DC输入、RS485接口

Banana Pi BPI-6202“嵌入式单板计算机”采用工业级全志A40i四核Cortex-A7处理器,工业温度范围和长生命周期,2GB DDR3,8GB eMMC闪存,M.2 SATA插槽等。 这是自 Banana Pi去年推出Banana Pi BPI-M2 Ultra SBC 和BPI-M2 Berry以来&am…

算法通关村第8关【黄金】| 寻找祖先问题

思路:递归三部曲 第一步:确定参数和返回值 题目要求找到指定的结点,就需要返回结点。 题目又涉及到p,q就需要传入p,q,需要遍历传入root 第二步:确定终止条件 当遍历到结点为空说明到底没找到返回空 或者遍历到p,…

华为云新生代开发者招募

开发者您好,我们是华为2012UCD的研究团队 为了解年轻开发者的开发现状和趋势 正在邀请各位先锋开发者,与我们进行2小时的线上交流(江浙沪附近可线下交流) 聊聊您日常开发工作中的产品使用需求 成功参与访谈者将获得至少300元京…

Xshell7和Xftp7的下载、安装及连接服务器的教程

1.下载 1.官网地址: XSHELL - NetSarang Website 选择学校免费版下载 2.将XSHELL和XFTP全都下载下来 2.安装 安装过程就是选择默认选项,然后无脑下一步 3.连接服务器 1.打开Xshell7,然后新建会话 2.填写相关信息 出现Connection establ…

【算法】双指针求解盛最多水的容器

Problem: 11. 盛最多水的容器 文章目录 题目解析算法原理讲解复杂度Code 题目解析 首先我们来解析一下本题 题目中说到,要找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 那我们现在来看最外侧的两根,一个高度为8&#…

Databend 开源周报第 108 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 多源数据目录 …

无涯教程-Android - Intents/Filters

Android Intent 是要执行的操作的抽象描述。它可以与 startActivity 一起启动Activity,将 broadcastIntent 发送给任何BroadcastReceiver组件,并与 startService(Intent)或 bindService(Intent,ServiceConnection,int)与后台服务进…

华硕笔记本摄像头倒置怎么办?华硕笔记本摄像头上下颠倒怎么调整

笔记本电脑相较于台式电脑,更易携带,解决了很大一部分人的使用需求。但是笔记本电脑也存在很多不足,比如华硕笔记本电脑就经常会出现摄像头倒置的错误,出现这种问题要如何修复呢?下面就来看看详细的调整方法。 华硕笔记…

centos安装Nginx配置Nginx

1. 查看操作系统有没有安装Nginx which nginx 2. 使用epel的方式进行安装(方法二) 先安装epel sudo yum install yum-utils 安装完成后,查看安装的epel包即可 sudo yum install epel 3 开始安装nginx 上面的两个方法不管选择哪个&…

MySQL官网下载安装包

MySQL官网: MySQL MySQL 8.0官网下载地址: MySQL :: Download MySQL Community Server 2023-07-18 MySQL 8.1.0 发布,这是 MySQL 变更发版模型后的第一个创新版本 (Innovation Release) 。 如果在官网中找不到下载位置,点击第二个…

算法面试-深度学习面试题整理(2024.8.29开始,每天下午持续更新....)

一、无监督相关(聚类、异常检测) 1、常见的距离度量方法有哪些?写一下距离计算公式。 1)连续数据的距离计算: 闵可夫斯基距离家族: 当p 1时,为曼哈顿距离;p 2时,为欧…

新建Spring Boot项目

使用IDEA 来创建: 文件-新建-项目 填写项目元数据 选择依赖项 此处可以先选 web-spring web 关于这些依赖项,更多可参考: IDEA创建Spring boot项目时各依赖的说明(Developer Tools篇)[1] 项目结构介绍 展开项目,此时…

栈和队列(详解)

一、栈 1.1、栈的基本概念 1.1.1、栈的定义 栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。 栈顶(Top):线性表允许…

Tensorflow调用训练好的yolov5模型进行推理

文章目录 1、安装TensorFlow-GPU版本1.2、验证是否安装正常 2、将训练好的pt文件转换成onnx文件2.2、什么是Onnx模型和Tensorflow模型2.1、将onnx文件转换成pb文件 1、安装TensorFlow-GPU版本 1、创建虚拟环境python3.8 conda create -n TF2.4 python3.82、进入虚拟环境 conda…

Oracle 本地客户端连接远程 Oracle 服务端并使用 c# 连接测试

这里写自定义目录标题 前言Oracle 客户端安装先决条件下载 Oracle 客户端Oracle 客户端环境变量配置 PL/SQLPL/SQL 下载PL/SQL 配置 配置远程连接tnsnames.ora 文件配置 使用 PL/SQL 连接远程数据库使用 C# 远程访问 Oracle 数据库结语 前言 最近有一个需要使用本地的 Oracle …

即时通讯开发中的性能优化技巧

即时通讯开发在如今的数字化社会中扮演着重要角色,然而,随着用户对即时通讯应用的需求不断增长,开发者们面临着使其应用保持高性能和可靠性的挑战。本文将探讨即时通讯开发中关键的性能优化技巧,帮助开发者们提升应用的用户体验和…

C语言:指针类型的意义

1.指针的类型决定了解引用时访问几个字节 2.指针的类型决定了指针1、-1跳过几个字节 一、指针的类型决定指针解引用时访问几个字节 例如 int 型指针解引用时访问4个字节 char 型指针解引用时访问1个字节 详解代码如下: int b 0x11223344(十六进制&…