zl程序教程

您现在的位置是:首页 >  其它

当前栏目

飞卡日常进度之摄像头知识恶补

知识 摄像头 日常 进度
2023-09-11 14:20:36 时间

1、阈值

阈值其实就是0/1的分界。大于阈值被二值化处理成1,小于阈值被二值化处理成0。
可以类比单片机的TTL和CMOS两种电平。

2、显示摄像头图像

在界面指定区域显示 MCU 发送回来的图像数据。其中 1:1 显示像素点,即按照设定的分辨率进行原图显示;根据界面尺寸放大像素,即在根据显示区域的大小进行拉伸显示。

要注意有的上位机需要在这里进行设置,意义在于由于我们做智能车只需要采集摄像头的部分像素(隔行隔像素采集),因此如果 1:1 显示图像,图像可能很小,而根据界面尺寸放大像素,就能清楚得看到图像了。(山外不存在的!)

3、图像大小

这个要尤其格外非常注意,根据 MCU 的程序采集的像素分辨率进行设置,只有设置得和程序的一致了,上位机才能采集并正确地显示图像。

4、连续采集与采集一副图

上位机接收 MCU 上传的图像,根据协议,要先搜索到图像头 FF,才认为是一帧图像的开始,才开始显示图像。

5、什么是 RGB565

众所周知,RGB 是组成彩色的三基色,要想显示一个像素的颜色,每个像素
都需要 3 个 BYTE 数据的 R、G、B 来表示,那一副 320*240 的彩色图像,就需要320*240*3=230400B=225KB 的数据来存储,这样看来,存储图像的空间开销是极大的。而在一个像素 RGB 中,G 分量的比重是最大的,R 和 B 的比重相对小一些,因此人们又想出了用 R:G:B=5:6:5 的比例关系,来表示一个像素,这样一来,一个像素仅仅需要 2 个 BYTE 就可以表示其彩色信息(这个 2 个 BYTE 中,R 占 5bit,G 占 6bit,B 占 5bit),320*240 的彩色图像的存储空间也由 225KB 减小到 150KB

接着就不难想象它的存储方式了,
摄像头的数据是在每一个 PCLK 的上升沿去读取的。若摄像头默认输出的格式为 RGB565,那么摄像头在上电之后,每触发 2 个 PCLK,读取 2 个字节,才是一个像素。在这个像素中,RGB 的分布如下图所示:在第一个字节(First BYTE)中Y[7..3]为 R[4..0],Y[2..0]为 G[5..3];在第二个字节(Second BYTE)中Y[7..5]为 G[2..0]Y[4..0]为 B[4..0]

6、 YUV4:2:2

人的眼睛对低频信号比对高频信号具有更高的敏感度,事实上,人的眼睛对明视度的改变比对色彩的改变要敏感的多。
因此,人们将 RGB 三色信号改为 YUV来表示,其中 Y 为灰度,UV 为色差。如果是表示一副彩色图像,同样的道理,YUV444 是无损的存储方式,但是需要 3 个字节,存储空间开销很大。由于 Y 分量比 UV 分量重要的多,因此人们用 YUV422 来表示。这样一来图像被压缩了很多,一个字节就可以表示其彩色的信息。

7、常见的OV7670和7620的对比学习

OV7670

OV7670 是 RGB565 输出

对于 OV7670,由于它只有一组并行的数据口 Y[7:0],所有的像素数据都从
这个数据口出,因此每次读取一次数据口,可以读一个字节(BYTE)。下图给出
了 k 个像素(2K 个字节)输出的格式。

这里写图片描述

OV7620

OV7620 是 YUV422 输出

对于 OV7620,它有 2 组并行的数据口 Y[7..0]和 UV[7..0],其中对于数据口
Y[7..0],输出的是灰度值 Y,对于 UV[7..0]输出的色度信号 UV。下图给出了 k 个
像素(K 个字节)输出的格式。

这里写图片描述

如果从这两款选择一款做飞卡的话,赛道是白底黑线,因此我们只关心图像的灰度值,并不是需要他们的彩色值。
由此看来,对于 OV7670,它只有一组数据口,默认输出RGB 彩色图像,对我们来说并不是想要的;而对于 OV7620,它有两组数据口,一组数据口输出的正是灰度值 Y,我们无需去管 UV 引脚输出的信号,只采集 Y口的数据,就能完美地体现出赛道的信息来。对于全白的赛道背景,采集回来的数据是 255,对于黑色的赛道,采集回来的数据是 0,这样就能很好的区别开赛道与背景。

8、什么是 P 制,什么是 N制

当前在智能车竞赛中,我们用到的摄像头,基本只有 2 种制式 P(PAL)制和
N(NTSC)制。PAL 制式和 NTSC 制式有很多区别,其中最主要的两个区别就是 P 制标准的摄像头,每秒输出 25 帧图像;N 制标准的摄像头,每秒输出 30 帧图像。

常见的P制:OV6620、sonyCCD、LG CCD OV5116等
常见的N制:OV7620、OV7640等

9、视频是如何形成的

由于人眼看到的图像大于等于 24Hz 时人才不会觉得图像闪烁,所以 PAL
制式输出的图像是 25Hz,每秒钟有 25 幅画面,即每秒 25 帧;NTSC 制式的图
像是 30Hz,每秒钟有 30 副画面,即每秒 30 帧。不同制式的摄像头,在这种规
范下输出,人眼看到的图像也就形成了视频。

10、逐行扫描与隔行扫描

所谓逐行扫描,即摄像头的像素自左向右、自上而下,一行紧接一行扫描输

这里写图片描述

隔行扫描,就是在每行扫描点数不变的前提下,将图像分成 2 场进行传送,这两场分别称为奇场和偶场。奇数场传送 1、3、l 5、…奇数行;偶数场传送 2、4、6、…偶数行

逐行扫描:OV6620、OV7640 等
隔行扫描:OV7620 等

总结一下:OV7620YUV422灰度输出,30帧/s,隔行扫描,60场/秒。

11、什么是消隐信号

隐区的出现,在电视机原理上,是因为电子束结束一行扫描,从一行尾换到另一行头,期间的空闲期,这叫做行消隐信号;同理,从一场尾换到另一场头,期间也会有空闲期,这叫做场消隐信号。

这里写图片描述

12、时序分析

场中断信号 VSYN、行中断信号 HREF、像素中断信号 PCLK

拿OV7620举例,
这里写图片描述

VSYN 的周期是 16.64ms,高电平时间为换场时间,约 80us;低电平时间内,像素输出。我们在采集 VSYN 脉冲时,既可以采集上升沿,也可以采集下降沿,采集下降沿更准确些,这也是一场的开始。从 VSYN 的周期可以算出,1s/16.64ms=60 ,OV7620 是隔行输出,所以它的帧率是 30 帧/s,也是60场/s。

HREF 的周期 63.6us,高电平时间为像素输出时间,约 47us;低电平时间为换行时间,因此采集 HREF 一定要采集其上升沿,下降沿后的数据是无效的。从HREF 的周期可以算出,16.64ms/63.6us≈261,除去期间的间隙时间,可以算出每场图像有 240 行。

PCLK 的周期是 73ns,高电平输出像素,低电平像素无效。PCLK 是一直输出的,因此一定要在触发 VSYN 并且触发 HREF 以后,再去捕捉 PCLK 才能捕捉到像素数据。从PCLK 的周期可以算出,47us/73ns≈640,可以算出每行图像中有 640个像素点。