基于FPGA和OV5640的图像采集和处理系统设计
扫描二维码
随时随地手机看文章
引言
基于FPGA的图像采集和处理系统具有功耗低、体积小、处理速度快的优势,在图像采集和数据处理方面有广泛应用。本次设计主要解决了视频流数据实时显示和图像预处理问题,图像采集和处理系统基于FPGA和OV5640摄像头,通过OV5640摄像头进行图像数据的采集,然后将其传输至FPGA内部,FPGA首先控制视频流数据存储在SDRAM中,再将其传输至TFT显示屏进行实时视频流显示。与此同时,内部集成图像处理模块能实现视频数据的中值滤波、高斯滤波、边缘检测等功能。该图像采集和处理系统结构如图1所示。
1摄像头
本次设计摄像头选用OV5640,支持MIPI和DVP两种接口。DVP接口是并行总线接口,MIPI接口是LVDS低压差分接口。现拟采用DVP接口驱动该摄像头。
OV5640所使用总线为SCCB,该总线类似于I2C总线,总线时序分为写时序和读时序。
写时序:Start一deviceid一ac一一kaddr一ac一一kdata一ac一一Stwp:
读时序:Start一deviceid一ac一一raddr一ac一一Start一ac一一rdata一nac一一Stwp。
其中,Start表示启动总线:deviceid是设备ID,最后一位表示读写操作码,低表示写,高表示读:ac一是写操作应答信号:kaddr表示寄存器地址:raddr表示写对应的寄存器数据:kdata表示写寄存器数据:rdata表示读对应的寄存器数据:Stwp表明关闭总线。
使用OV5640,需首先进行上电初始化,然后对其关键寄存器进行配置以实现寄存器初始化。经过上述两个步骤后,即可操作该摄像头进行图像采集。拟选择的视频采集参数为480dpi,刷新率60fpS,图像格式为RGB565。由此算出PCLK时钟频率至少为PCLK=800×480×(16bit/8bit)×60=46.08MHz,而从时序可知图像显示会有一定比例无效像素点,故PCLK实际频率大于46.08MHz。
在视频流数据实时采集到FPGA再通过VGA接口实时显示于链路中,二者数据速率存在偏差,故需要在其中添加图像数据缓冲单元。图像的每个像素点为16bit,计算可知一帧有效图像的数据量大小6.144Mbit,片内ram无法满足要求,故选用外部存储方式。外部存储选择SDRAM,并将SDRAM的存储空间分为两个子空间,每个子空间存储一帧数据,实时通过乒乓操作进行切换,从而达到视频流数据的无缝传输。
2SDRAM
SDRAM全称为同步动态随机存储器。同步指其工作频率与对应控制器的系统时钟频率相同,且内部命令的执行与数据传输都是以该时钟为基准。本设计选用HY57V281620SDRAM,共有128Mbit存储空间,4个Bank。
为控制SDRAM,首先需对其进行上电初始化,然后便可对SDRAM进行操作,即读、写以及刷新。根据数据手册中读写刷新操作的说明,最终完成SDRAM的控制器设计,能够实现FPGA外挂SDRAM的读、写、刷新操作。
3TFT显示器
视频显示器选择RGB接口TFT屏,RGB接口的TFT屏扫描方式和VGA标准类似,都为行列扫描。TFT屏扫描方式与VGA差异在于VGA显示器接收模拟信号,而TFT屏则省略了此过程,直接接收数字信号。故可以按照设计VGA显示器的方法驱动该显示屏。
为驱动VGA接口,需了解其时序,其分为行扫描、列扫描。扫描从屏幕的左上方开始,从左到右,从上到下进行扫描,每扫完一行,电子束都回到屏幕的下一行左边起始位置。在这期间,CRT对电子束进行消隐。每行结束时,用行同步信号进行行同步:扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕左上方。同时进行场消隐,预备下一场(帧)的扫描。
不同VGA显示屏之间除了时序参数不一样外,其他并无差异,可按同一方式设计。在设计VGA驱动代码时,可将时序指标进行参数化设计,这样在更换显示屏时只需改动参数便可完成驱动。
3图像处理模块
图像处理模块用于实现视频流数据的图像预处理,包括中值滤波、SObe1边缘检测等。不同于ARM、DSP等通用CPU,FPGA进行图像处理能高速并发,重复设计,流水线控制。
中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广泛应用于数字图像处理的边缘提取,其基本原理是把数字图像或数字序列中一点的值用该点邻域内所有点的中值来代替。
在FPGA中实现中值滤波,首先利用移位寄存器生成3×3像素矩阵,然后使用当前待滤波像素领域的9个像素的中值代替该像素。求中值的方法是:(1)对3×3矩阵的每行按从大到小进行排序。(2)利用排序法求出最大值那一列的最小值,求出数那一列的中间值,求出最小值那一列的最大值。(3)将求出的三个值再排序,这三个值的中间值就是这个3×3矩阵的中间值。
45SOb1边缘检测
SObe1算子主要用作边缘检测,在技术上,它是离散型差分算子,用来计算图像亮度函数灰度的近似值。SObe1边缘检测的核心在于像素矩阵的卷积,卷积运算的本质就是对制定的图像区域的像素值进行加权求和的过程。其计算过程为图像区域中的每个像素值分别与卷积模板的每个元素对应相乘,将卷积的结果做求和运算。
与中值滤波一致,采用移位寄存器实现3×3像素矩阵。SObe1算子的实现划分为3个步骤:(1)计算Gx、Gy:(2)求GEQ \* jc3 \* hps10 \o\al(\s\up 3(+GEQ \* jc3 \* hps10 \o\al(\s\up 3(:(3)求GEQ \* jc3 \* hps10 \o\al(\s\up 3(+GEQ \* jc3 \* hps10 \o\al(\s\up 3(的平方根。其中,Gx、Gy为原图像3×3像素矩阵与横向纵向高斯模板卷积后矩阵,求平方根时调用成熟稳定可靠的CORD1C1P核实现。
原图与经过中值滤波和SObe1边缘检测的图像分别如图2、图3、图4所示。由图2、图3对比可知,中值滤波后清晰度较好,有效过滤了椒盐噪声。由图3、图4对比可以看出边缘的部分显示为黑,其余部分显示为白,这样可以清楚看到图像边缘。
6结语
本文对图像采集系统的各个分模块做了独立设计,并将其整和、协调控制,完成了实时视频流数据的高速采集、高清显示以及图像预处理功能,并能够对实时视频流数据进行中值滤波、SObe1边缘检测等处理。