OV9655图像传感器
OV9655图像传感器模块使用小结
经过了一段时间的忙碌,终于有时间可以发一下文章啦????(开心ing…)本次介绍的是广为人知的OV9655,作为OmniVision Technologies公司推出用于移动设备的130万CMOS图像传感器(CIS),它的优点还是足够吸引一些基础项目的采用的,它的传感器提供全帧,亚取样,缩放或各种格式的视窗8位/10位图像,通过串行照相机控制总线(SCCB)接口进行控制。而且通过本次文章的介绍,相信也会让新手朋友们建立良好的图像采集处理基础????,好啦,废话不多说,让我们开始进入正题吧!
图像采集处理
1. 图像采集处理系统概念
我们现在通过OV9655采集回来的信息也是需要处理的,这种处理笼统的可以称为图像采集处理,而要想真正掌握好这门技术可不简单????,在此笔者也稍微借鉴一下度娘的介绍——“图像采集是指图像经过采样、量化以后转换为数字图像并输入、存储到帧存储器。图像处理是指,用计算机对图像进行分析,以达到所需结果的处理,又称影像处理,一般是指数字图像处理。图片采集处理系统主要功能包括单片机控制ISP-PLD器件,实现对摄像头的图像高速采集与存储,单片机图像压缩与PC机串行通信实现图像数据的传输,在PC机端实现图像处理和显示等。”
相信初学者看了这些东西之后可能会对这个技术产生一个比较笼统的概念,其实放在这里也是作为一个引子,因为笔者本次介绍的东西其实只是一个基础,从某种方面来讲的话连一个系统都算不全,但只是为了给大家一个入门的引导而已。
OV9655图像传感器简介
OV9655图像传感器
作为图像处理的重头戏之一,传感器的选择可以说是重中之重了,而本次我们采用的就是OV9655图像传感器,为了节省大家查找资料的时间,在这里笔者就把该传感器部分信息分享给大家:
1、OV9655图像传感器主要特性
像素:130万像素
供电电压:3.3V
IO电压:1.7V ~ 3.3V
输出格式:
YUV/YCbCr4:2:2
RGB565/555
GRB4:2:2
RAW RGB data
最大图片输出速度:
SXGA 15fps
VGA 30fps
2、OV9655图像传感器引脚说明
A1:PWDN 休眠模式选择
0:正常模式 1:休眠模式
A2:AREF1 内部参考电压
A3:AGND 模拟地
A4:SIO_C SCCB串行总线时钟输入
A5:STROBE闪光灯输出信号
B1:RESETB复位引脚 复位所有寄存器值位默认值 0:复位模式1:正常模式
B2:AREF2 参考电压
B3:AVDD 模拟电压输入
B4:SIO_D SCCB串行总线数据输入
B5:VSYNC 列同步输出信号
C1: D0 图像输出数据第0位(只有在RAW RGB格式下有效)
C2:NC
C4:DOVDD 数字电源
C5:HREF 行同步信号输出
D1:D1 图像输出数据第1位(只有在10字节RGB格式下有效)
D2:D4 图像输出数据第4位
D4:NC
D5:D9 图像输出数据第9位(10位RAW RGB格式、8位YUV格式、RGB565
和RGB555的最高位)
E1:D2 图像输出数据第2位(8位YUV、RGB565和RGB555的最低位)
E2:XVCLK1 时钟输入
E3:DOGND 数字地
E4:D6 图像输出数据第6位
E5:D8 图像输出数据第8位
F1:D3 图像输出数据第3位
F2:D5 图像输出数据第5位
F3:PCLK 像素时钟输出
F4:DVDD 数字电源
F5:D7 图像输出数据第7位
本次采用的是微雪电子做好的模块,所以下面我也把模块的引脚发出来。
1:3.3V 电源输入
2:GND 内部参考电压
3:SIOC SCCB串行总线时钟输入
4:SIOD SCCB串行总线数据输入
5:VSYNC 列同步信号
6:HREF 参考电压
7:PCLK 图像时钟输出
8:XCLK 时钟输入
9:D9 图像数据第7位
10:D8 图像数据第6位
11:D7 图像数据第5位
12:D6 图像数据第4位
13:D5 图像数据第3位
14:D4 图像数据第2位
15:D3 图像数据第1位
16:D2 图像数据第0位
17:RET 模块复位
18:PWDN 睡眠模式选择
3、OV9655图像传感器操作相关概念
3.1 首先说明OV9655输出格式选择问题
OV9655支持YUV、YCbCr4:2:2、RGB565/555、GRB4:2:2以及Raw RGB data。
一般情况下如果输出数据直接显示在显示屏上,应当采用RGB格式。因为绝大数显示器都是三原色叠加来显示不同色彩。RGB565、RGB555的区别仅仅是色彩种类的区别。
如果输出数据进行图像压缩,应当采用YCbCr格式或YUV格式。因为图像压缩多数采用JPEG压缩算法,而JPEG压缩算法采用的是YCbCr颜色空间。
3.2 OV9655图像拍摄格式选择
OV9655支持VGA和SXVGA两种输出格式,一般的如果图像要求不高输出视频刷新频率不快采用SXVGA。而输出图像要求较高、刷新频率要求也比较高时就必须使用VGA格式。
3.3 OV9655带通滤波器的选择
一般情况下OV9655的带通滤波器取决于被拍摄物体光的频率,这里可以选择50Hz或60Hz,带通滤波器设置是否合理直接决定了画质是否良好。绝对大多数对图像要求不是和高的情况下设置为自动识别,这样可以自动的实现一幅图像中哪些区域该使用哪种滤波器。
3.4 OV9655白平衡设置
白平衡是指红、绿、蓝三基色混合生成后白色精准度的一项指标。OV9655支持白平衡设置,也可以自动白平衡,这里描述一个现象,在调试OV9655过程中出现图像闪烁的问题,在调整白平衡寄存器后可以实现降低闪烁频率。但是在官方手册以及白平衡相关理论中并没有相关说明。
OV9655操作主要是在配置寄存器,所以关于更详细的设置请大家查找寄存器说明解释即可。
OV9655操作说明
在图像传感器正常工作之前,必须配置好相应的寄存器才能使图像传感器完成指定的功能,如配置图像传感器的像素输出时钟、自动控制功能等。通过标准的SCCB时序就能配置,SCCB时序图如图所示。
在本次分享中,笔者将图像传感器的输出信号配置成RGB565格式信号,其数据输出时序图如图所示,图中为一行像素数据的时序,再配合场同步信号就能读取摄像头的输出信号,场同步信号在数据有效时地变低,在一帧数据结束后变高。
由于RGB565格式数据有十六位,而当OV9655的输出信号配置成RGB565格式时的数据位为8为,所以每个像素点的数据需要两个时钟信号才能读取完成,一个数据两个字节的数据格式如图所示。
因为本次笔者分享中所需要判断的图像色彩单一,仅仅只需要从黑白上判断即可,具体的操作方法是判断每一帧数据的前部分像素值,所以为了进一步判断识别的黑白色,可以设置一个黑色像素点计数器和一个白色像素点的计数器,当判定一个像素点为黑色时,则黑色像素点计数器加一,反之则白色像素点计数器加一。判断像素点是黑色还是白色的操作方法是提取出一个像素点数据的R、G、B分量,分别与特定值比较,然后通过特定的关系式做出判断。最后,如果黑色像素点计数器的值大于白色像素点计数器的值,则判定为黑色,且用LED灯做出相应指示,反之亦然。
过程代码分享
此次笔者用的就是微雪的模块,实践过程中主控选择的是赛灵思的XC3S500E,大家可以根据自己的兴趣与擅长选择自己的主控,思路和上面所说的一致即可。(硬件编程语言选择的是大学生本科都普遍接触过的VHDL语言)
建立寄存器配置文件篇幅很大,CD的这个界面放上去后很卡而且总崩溃,所以有兴趣的可以留言给我,我再发送。
图像数据采集文件
在设计的过程中,笔者建立了四个process进程进行判断,每个process分别对应四个led发光二极管中的每个单独的led进行判断,黑色判亮,白色判暗,将第一行的640个像素点分成四个部分,每个部分用19个像素点进行R、G、B等像素信息的数据比对,,并最终获得采集整张图片四个黑白模块并准且区分的功能。部分代码如下(篇幅也是很大,就只放一个process的一部分好了,其中采用的是一个状态机,判断19遍,大多数内容都是重复的故笔者只截取一个来大概说明,其中有很多东西没有截图,大家主要理解思想即可)。
最后就是一个总判断:
整个工程的建立很复杂,由于篇幅原因就介绍这么多了????。