采用FPGA实现图像算法,本质上是为了追求更高的处理速度,通过HDL设计专用电路并在FPGA上运行,可实现CPU或者DSP架构达不到的数据吞吐量。
图像采集。涉及到大量的数据存储、前处理、传输,对带宽要求很高。如果未处理好,一定程度上会限制图像处理功能。除去一些简单算法可以实现实时处理图像数据流外,大部分图像处理算法需要大量的存储带宽作保障。广义的图像采集可能涉及到将捕捉的图像高速编码并发送出去。FPGA主要用于接口的适配,包括两个方面,一是将输出的数据接口转换成标准的或者后端芯片可以接受的格式,二是如果速度太快后端无法接收的还需要FPGA做缓存然后传给后端的芯片或设备。
使用算法对图像进行分析、计算则是FPGA的强项。但用HDL语言实现复杂算法较CPU或DSP平台常用的C语言代价较高。要改变FPGA上的电路结构,需要写新的HDL并对其重新编程。一般用于对实时性要求较高的领域,主要是ASIC不提供但是实际中需要用的的功能。
通过对基本图像算法在FPGA上实现,加深对HDL语言的认识,为设计超大规模集成电路实现图像处理加速打下基础。
制作要求:
(1)图像处理前夕
①通过SCCB通信总线协议对OV7725摄像头进行初始化。
②将RGB888格式的视屏流转换为YUV格式的视屏。
③提取Y分量信号,作为灰度信号源。
(2)图像处理
①用移位寄存器IP核获得3*3像素阵列,通过修改宏定义使每个像素为8bit深
度。
②对三行像素阵列同时处理实现均值滤波,即提取三个最大值中的最小值,三个
最小值中的最大值,以及三个中间值的中间值。
③对上述三个值再取均值获得九个像素点的均值。
④行、场像素时钟相应移动相应时钟保持同步。
⑤利用离散差分算子——Sobel算子来运算图像亮度函数的灰度近似值,产生对
应的灰度矢量。
(3)处理结果
最终得到实时处理显示的黑白边缘图像。
视频图像处理大致分采集、存储、运算、再现四个部分,如图3-1。以下分别从这四个部分简介基本原理。
选用 OmniVision 的 OV7725 Sensor 作为视频图像源。
图3-2为其内部功能模块框架:
OV7725 上电会默认输出 YUV422 格式的视频流,但为使传感器能够按照预期的模式工作,需要对分辨率,内部时钟,亮度、 色差、 3A 等参数进行配置。因此我们需要一个接口,来完成 OV7725 寄存器的配置——这就是 SCCB 接口,即 Serial Camera Control Bus,串行相机控制总线。
OV7725的 SCCB 接口有两个信号,即时钟信号 SCL、数据信号 SDA。OV7725通过这两个信号,完成寄存器的配置,实现预期配置的视频流输出。
SCCB 总线通过串行方式发送 8Bit 数据,先发送 MSB,再发送 LSB,与 SPI总线协议的数据发送很类似(除了不需要 SPI_CS)。 在发送完 8Bit 数据后,通过器件的响应信号,完成一次数据的传输。如图3-3所示。
OV7725 总共有