图像的边缘包含了图像大量的信息,图像边缘检测作为图像处理领域中的重要内容,在实际应用中也具有重要意义。例如在工业生产线、车辆检测、车牌识别等实时应用中,通过边缘检测能够有效简化对图像的分析。由于实时数字图像处理系统具有数据量大、处理速度快、重复度高等特点,传统的软件方法显然无法满足。而由于FPGA具有丰富的逻辑资源和存储资源,能够实现并行和流水线处理,因此,使用FPGA来实现需要大量计算的数字图像处理算法,能够大大提高图像处理的效率。
本文介绍了一个基于FPGA的实时图像边缘检测系统。本篇重点介绍灰度转换、高斯滤波、Sobel边缘检测等经典数字图像处理算法的原理;分析了OV5640摄像头的时序;SDRAM芯片的工作原理及乒乓缓存原理。下篇主要介绍图像处理算法的实现;OV5640摄像头驱动模块的设计;SDRAM控制器的设计;相关模块的仿真和板级验证。
一。 数字图像处理算法原理
01
灰度转换
RGB颜色模型是由红(Red)、绿(Green)、蓝(Blue)三种基色以不同的比例叠加而成;而且每个像素分量(R、G、B)的值分布在0—255范围内,三种基色以不同的比例混合,能够显示出2563种颜色。
以RGB888格式的真彩色图像为例,表示1个像素点需要24bit二进制数据,在后续做Sobel运算时,计算量较大,所以为了简化后续计算,将摄像头采集的RGB565格式的彩色图像转化为1bit表示的二值图像,而后通过Sobel算子检测图像像素的梯度提取出图像的边缘点。对于彩色图像的二值化一般分为两个步骤:先将彩色图像进行灰度化得到灰度图像,然后对灰度图像进行二值化得到二值图像。
对于彩色图像转化为灰度图像,有一个著名的色彩心理学公式,即:
实际上,上述公式是一个加权求和的过程。但是在实际应用时,由于FPGA希望避免复杂的浮点运算,所以这里我们采用整数运算。将R、G、B三个分量对应的系数放大256倍得到整数结果:
在灰度转换过程中,可能会因为取整操作引入噪声,所以接下来使用高斯滤波算法来去除灰度转化过程中引入的噪声。
02
高斯滤波
在对图像进行误差评估时,往往认为传感器引入的噪声、灰度化处理引入的噪声都是服从正态分布(高斯白噪声),这时使用高斯滤波器就可以很好地消除高斯噪声。高斯滤波本质上是一种线性平滑滤波,即对整幅图像进行加权平均的过程,每一个像素点的值都是由其本身和邻域内的其他像素点加权平均后得到的。
高斯滤波的具体操作是使用一个N*N卷积模板对整幅图像扫描,用模板确定的邻域内的像素加权平均值代替模板中心像素点的值。本文使用的3*3卷积模板如下:
高斯滤波可以表达为:
其中,I(x,y)表示原图像中坐标为(x,y)的像素值;G(x,y)表示高斯滤波之后的值。这里为了计算方便,选取的模板H的权重系数都是2的系数。模板中心的权值最大,这样有利于克服边界效应,避免经过高斯滤波之后图像模糊。
03
二值化处理
在图像处理中,二值化的作用是把灰度图像的像素值设置为0或者255,即纯黑或者纯白。通过二值图像,能更好地分析物体的形状和轮廓,有利于后续使用Sobel算子检测图像的边缘。二值化有多种方法,其中最常用的就是采用阈值法进行二值化,根据阈值选取方式不同,又可以分为全局阈值法与局部阈值法。本文选用全局阈值法,即人为设定一个固定的阈值。
04
Sobel边缘检测
Sobel算子主要用于检测图像边缘,在物体的边缘通常都有像素的变化,反映了物体与背景之间的差异,或者两个物体之间的差异。它是一个离散差分算子,用来计算像素点上下、左右领域内像素点的加权差,根据在边缘处达到极值来检测边缘。另外,Sobel算子对噪声也有一定的平滑作用,检测出精确的边缘信息,但是边缘定位精度不高。
Sobel算子在水平方向和垂直方向各采用一个模板,检测各方向上的边缘,其优点是计算简单,速度快;但是对于纹理较为复杂的图像,检测效果不理想。水平方向模板Sx和垂直方向模板Sy如下:
将两个算子与图像做平面卷积,即可得到水平方向与垂直方向的梯度值;若以I表示图像矩阵,Gx表示水平方向图像梯度值,Gy表示垂直方向的梯度值,则Gx与Gy可以表示如下:
其中,I(x,y)表示模板掩盖的3*3图像中心的像素点。最终,图像中每个像素点对应的梯度值按照以下公式计算:
通常为了简化计算,会使用以下公式近似:
二。 OV5640摄像头介绍
摄像头按输出信号的类型可以分为数字摄像头和模拟摄像头,按照摄像头图像传感器材料构成可以分为CCD和CMOS。现在智能手机的摄像头绝大部分都是CMOS类型的数字摄像头。
OV564是一款CMOS类型数字图像传感器,该传感器支持输出最大为500万像素的图像 (2592x1944分辨率),支持使用VGA时序输出图像数据,输出图像的数据格式支持YUV(422/420)、YCbCr422、RGB565以及JPEG格式。它还可以对采集得的图像进行补偿,支持伽玛曲线、白平衡、饱和度、色度等基础处理。根据不同的分辨率配置,传感器输出图像数据的帧率从15-60帧可调。其内部有许多寄存器,用来配置摄像头的工作方式、图像格式等等;在实际应用时需要先使用SCCB协议或者是I2C协议配置寄存器,使摄像头按照常见的VGA时序输出图像数据。这里不对SCCB和VGA协议详细介绍。在本次设计中,使用I2C协议配置摄像头,并将OV5640分辨率配置为720P、数据格式为RGB565输出。
三。 SDRAM介绍
在图像处理系统中,需要对图像视频数据进行缓存,所以需要大容量存储器。SDRAM(Synchronous Dynamic Random Access Memory,即同步动态随机存取存储器)有价格优廉、容量大等优点,常作为FPGA的外挂存储器。同步是指其工作需要同步时钟,命令的发送与数据的传输都以时钟为基准;动态是指存储阵列需要不断的刷新来保证电容存储体中的数据不丢失;随机是指数据可以自由指定地址进行数据读写。本次设计中,使用的SDRAM芯片型号为:HY57V2562GTR,容量为256Mbit,数据位宽为16bit,最大工作频率为133MHz。
乒乓缓存是一种常用的双缓存机制,尤其是在图像处理中进行大量数据处理时,为了保证系统的吞吐量,使用两个缓存来存储数据;一个缓存用来保存旧的数据供图像处理模块读取,与此同时,另一个缓存保存图像采集模块产生的新数据;同时以包文的格式对数据进行缓存,有利于保证视频图像数据帧的完整性。
本次设计使用SDRAM的两个Bank来实现乒乓缓存,当向Bank0缓存数据时,从Bank3读数据,直到向Bank0写完一帧数据,且从Bank3读完一帧数据时,才切换Bank;当向Bank3缓存数据时,从Bank0读数据,直到向Bank3写完一帧数据,且从Bank0读完一帧数据时,才切换Bank。通过两个Bank循环读写即可实现数据的无缝缓冲与处理。在实际设计中对数据进行了丢帧处理,如果在不允许丢帧的情况下,可以对每个Bank缓存多帧数据。
乒乓缓存示意图
至此,本文主要对图像处理中的几种经典算法的原理进行了简要介绍,并介绍了我们使用的图像采集传感器OV5640摄像头、SDRAM存储器的一些特性。下一篇文章我们将继续讲述:几种算法的Verilog实现方案、摄像头传感器的配置与数据采集模块的设计方案、SDRAM芯片的控制器设计方案。
全部0条评论
快来发表一下你的评论吧 !