飞卡日常进度之摄像头知识恶补
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个像素点。
相关文章
- 知识杂记
- SystemTap知识(二)
- Atitit 人工智能体系树 常用技术 2. 知识图谱 知识处理系统 2 知识发现 知识图谱 1. 1.NLP 2 自然语言处理文本处理 1.1. 语言理解 分词 2 抽取 (压缩文
- 苏宁基于服务层知识图谱的真假告警判定——本质上就是数据标注后 看上报事件和标注的误报、非误报事件相似度来消噪
- Linux |奇怪的知识---complete命令---你不知道的命令参数补全---kubectl命令的参数补全
- 服务器管理口IP及账号密码(知识汇总)
- FPGA知识汇集-ASIC移植中的FPGA芯片划分
- 知识抽取(一)
- 【数据结构】时间复杂度 | 空间复杂度 | 数据结构预备知识