图像在采集和传输的过程中,通常会产生噪声,使图像质量降低,影响后续处理。因此须对图像进行一些图像滤波、图像增强等预处理。为改善图像质量,去除噪声通常会对图像进行滤波处理,这样既能去除噪声,又能保持图像细节。
FPGA图像处理方法
1、图像增强
两大方法:空间域方法和时间域方法(以后再详述)
2、图像滤波
(1)平滑空间滤波器
(2)中值滤波算法
3、图像边缘检测
边缘指图像局部强度变化最显著的部分。边缘主要存在与目标与目标、目标与背景、区域与区域(不同色彩)之间,边缘检测是图像分割、纹理特征和形状等图像分析的基础。
4、图像目标提取算法
(1)相邻帧差法
对相邻的两帧图像求差,将图像中的目标位置和形状显示出来,差分后的图像不为零的即为目标。在两帧图像中,灰度值没有变化的部分被剪掉,主要是背景和一些小部分目标。
由检出的部分大致可以确定运动目标的位置,但是该方法的确定是当物体的位移较小时,难以确定目标的运动方向并且在目标的内部产生空洞。
(2)光流法
(3)背景帧差法
此方法选取一副图像作为背景图像,用采集到的图像与背景图像差分,在背景图像选取合适的时候,能比较准确地分割出目标物体。速度快,易于实现,并能提供完整的运动区域信息。
具体原理图:
如上图,首先将背景图像和当前图像进行差分,得到两幅图像的背景差图像(从存储器中提取出亮度分量得到灰度图像,经过图像的中值滤波等处理后,进入图像检测算法模块;然后只需将两幅图像中对应的像素相减后再取绝对值即可得到背景差图像),采用直方图统计的方法来确定图像的二值化阈值(阈值一般设定为G分量的平均值),最后对图像进行二值化处理,提取出目标的轮廓。
求背景差VHDL代码实现:
5、注意点
(1)视频输入设备的采样频率和FPGA的晶振频率通常不一样,因此会产生异步时钟域的问题,因此可以先将采集的图像数据存入到FIFO中,然后再存进SRAM中。
(2)不同时钟域之间会产生亚稳态情况:当信号通过两个时钟域的交界处时,将会分别由两个时钟来控制信号的值,此时如果两时钟信号的敏感延非常接近,将出现数据信号不稳定的情况。
图像数据存储
从摄像头采集的数据先进入FIFO缓冲器中,存满一行的数据后,再由SRAM控制器读取到SRAM中。注意:采集的视频图像数据是隔行扫描的,即先传奇数场再传偶数场,为了后续图像处理的方便操作,须将两场数据合并为完整的一帧图像。
具体方法:先将奇数场的数据以隔行的方式存在SRAM中,即奇数场的第一行存在SRAM的第一行,第二行存在SRAM的第三行,与第一行相隔一行的地址空间,直到行数据全都发送完毕,然后开始存放偶数场,第一行放在第二行等等。
内部控制器controller根据异步FIFO的满空状态来使能SRAM控制器,当FIFO满状态有效空状态无效时,SRAM开始从FIFO中读取数据。
使用FIFO的目的:避免亚稳态。由于采集频率和FPGA的时钟频率不同,为异步时序电路。且数据经FIFO后时钟信号统一为系统时钟。
异步FIFOzho中包含:写地址产生,读地址产生和一个双口RAM。