0 引言
随着电子技术的发展,嵌入式系统在图像处理领域的应用越来越广,但相关芯片却有明显不足:ASIC芯片开发周期长、成本高、灵活性差;DSP和ARM的串行结构难以满足图像的实时处理要求等。然而,FPGA融合了DSP和ASIC等芯片的优点,具有灵活的配置方式,因易于实现并行处理功能和流水线工作方式,使得FPGA在图像处理领域具有更高的应用价值[1]。
由于在空域中对模糊图像的模糊核估计手段有限,且处理精度不高,故大多采用频域转换的方式,在频域中对模糊图像进行处理。频域转换的硬件实现通常采用直接调用IP核或设计通用的信号频域转换器等方法,这样不仅在硬件资源消耗和处理效率上大打折扣,而且没有充分利用模糊图像及去模糊算法的特点来减少资源利用及处理时间。
本文结合模糊图像及频域去模糊算法的特点,采用图像数据预处理、原位计算、抛位、流水线处理等方法,设计实现了一种针对图像去模糊系统的频域处理方法。相比其他同类频域处理方法,其具有资源利用率高、硬件实现简单、针对性强等特点。
系统以DE2开发板为开发平台,以Altera的EP2C-35F672C6型号的FPGA芯片为核心处理单元,采用TRDB-D5M图像传感器进行图像数据采集。系统总体结构设计如图1所示。
图像传感器通过DE2平台的通用输入输出口与FPGA连接,FPGA通过I2C控制模块对其进行寄存器及工作方式的设定[2]。图像传感器获得Bayer图像数据流后,通过格式转换处理,将其转换成RGB数据。由于图像传感器工作时,内部各部分的时钟频率不同,为了使采样与显示协调一致,加入SDRAM存储模块对采集的图像信息进行缓存,SDRAM以四端口的形式存取数据,四个端口中两个为写端口,两个为读端口,使系统的读取效率提高了一倍。数据存入存储模块的同时,将图像数据送至RGB2Gray格式转换模块,在该模块中完成图像从彩色图像到灰度图像的转换,接着传送至频域转换模块,完成图像的频域变换,最后传送至图像处理模块,对模糊图像进行去模糊预处理后,存入存储模块,通过MATLAB平台对处理结果进行分析验证。
2 核心模块设计
2.1 图像灰度变换模块设计
考虑到直接对彩色图像进行频域转换时,需分三通道对图像进行存储及处理,故本文在对图像频域处理前加入灰度变换模块,既不损坏图像信息,又减少了数据量及存储空间。
从存储模块中提取采集到的图像信息,加入一个存取控制模块,控制将要读取的图像数据的地址。利用QuartusII创建ROM IP核,并将彩色图像数据分R、G、B 3个颜色通道存储在ROM中,根据式(1)彩色图像转换成灰度图像的算法公式,设计RGB2Gray处理模块。结构图如图2所示。处理完成后,将灰度图像数据存储在存储模块,待后面处理时读取即可。
2.2 一维FFT模块设计
在进行一维FFT设计时,本文采用按频率抽取(DIF)的FFT算法。由于各蝶形运算的输入与输出互不重复,任何一个蝶形的两个输入量经蝶形运算后可以实现同址运算。这种原位运算方式节省了大量的存储单元,降低了硬件资源的使用成本[4]。
本文参照CORDIC算法对蝶形运算单元进行设计,目的是充分利用FPGA的流水线结构,提高蝶形运算单元的处理速度。另外,考虑到数据在频域转换后主要对频谱中的亮条信息进行处理分析,故在蝶形运算单元中加入了抛位运算,这样既对模糊图像有效信息未造成影响,在资源消耗及处理速度上也进一步得到优化。
基-2FFT设计主要由存储单元、M(log2N,N为FFT输入序列的长度)级蝶形运算单元、倒位序转为顺序单元等部分组成,总体结构如图3所示。在模块输入时序的控制下,将待处理的数据流输入到模块中,通过数据流水线模块的控制,将有效数据按设定时钟依次输入到(M-1)级蝶形运算单元中,直到完成最后一级的蝶形运算后(最后一级无乘法器),经过顺序排序单元,即可将输出的倒位序数据按自然顺序输出到存储单元中。其中,为了保证资源的有效利用,且不影响算法的有效性,在顺序排序单元的设计中,本文设置了两个存储单元,既能保证数据流水线输入,又能避免在顺序排序单元的工作过程中出现数据交叉读取的问题。
2.3 二维FFT模块设计
由于傅里叶变换具有可分性的性质,处理图像的傅里叶变换时,通常将二维变换通过降维的方式转化为行和列的一维傅里叶变换。首先将图像数据以行为单位,依次进行行方向的一维傅里叶变换,待行方向数据处理完毕后,对结果矩阵进行转置处理,将处理后的数据再次进行傅里叶变换[6]。本文设计的二维FFT处理模块如图4所示,由于FFT处理速率与图像输入速率不匹配,故将图像数据经过FIFO缓存模块后,以数据流的模式进行行FFT处理。接着将处理结果存储在缓存器中,在存储器内进行数据的交换,完成矩阵转置处理。对转置后的矩阵再次进行FFT处理,同样将结果存储在缓存器模块中,重复之前的转置处理后,将结果送入到FIFO模块,输出结果即为图像的二维FFT处理结果。在图像的二维FFT处理中,行FFT和列FFT处理模块结构完全相同,只需在处理过程中加入转置算法及所需的存储模块。
由于FPGA均以定点数的形式对数据进行处理,本文将行(列)数据进行了如式(2)所示的算法处理,将两行(列)数据以复数形式转化成一组数据,这样在进行FFT处理时,使处理速度提高了一倍[3],结合相应的换算,对应的输出可用式(3)、式(4)表示。
2.4 去模糊算法简述
空域中,在忽略加性噪声的情况下,模糊图像可转化成清晰图像与模糊核的卷积过程。将空域转换到频域,卷积问题就变成了相乘问题,去模糊的核心就是对模糊尺度和方向的估计。对模糊图像进行频域转换后,图像的模糊核信息主要集中在频谱的亮条中[7]。借助相关算法将亮条信息进行提取,即可得到模糊图像的像素偏移角度和偏移距离,从而实现图像的去模糊。
3 系统测试
完成系统各模块设计之后,在QuartusII环境下使用Programmer软件,将图像采集与显示模块的工程文件下载到FPGA中。系统图像采集效果如图5(a)所示。从测试结果可以看出系统实时图像采集正常,条纹、细线等细节显示清晰,画面稳定,功能完全符合设计要求。采集的图像大小为320×240。
为了便于对系统处理结果进行分析比较,本文在MATLAB中,创建了一个运动位移为30像素、运动角度为10°的点扩散函数(PSF),使用PSF对采集的图像进行卷积操作,得到一幅简单运动模糊图像,如图5(b)所示。
将经模糊处理后的图像数据输入到灰度变换模块,将彩色图像分R、G、B三通道分别存储,接着进行相应算法处理后,即得到灰度图像,将结果数据在MATLAB读出,结果如图5(c)所示。
在FFT处理模块的工程设计中,使用Verilog HDL语言对该设计模块进行了行为级描述。以Altera DE2开发板的EP2C35F672C6为目标芯片,在Quartus II平台上进行综合、布局、布线。硬件器件使用报告显示此设计资源占用较少,仅用了9 162个逻辑单元,使用了73个引脚。
为了便于对图像进行FFT处理,将一行256点的数据输入到FFT模块,在经过9级蝶形运算单元后,对结果数据输入到顺序排序模块重新按自然顺序排序后,即可得到FFT处理结果。
在Modelsim环境下编写Testbench文件,对FFT模块进行仿真测试。由仿真结果可知,在旋转因子片选(rTwiCsEp)和写脉冲(rTwiWrEp)有效的情况下,将旋转因子(rTwiCoe)存入到FFT模块。待旋转因子输入完毕后,数据输入使能为高,开始输入待处理数据(rSrcFFT)。等到输入数据达到所设定的存储容量后,输出使能(rFftOutEn)变为高,开始输出FFT处理结果(fftout)。每当帧有效(frmval)给一个信号脉冲时,证明将输出一行(列)数据,待一整行数据输出完成后,将给下一个信号脉冲,形成流水线处理模式。具体时序如图6所示。从仿真波形看,时序符合预期设计。
4 系统分析
待图像数据完成二维FFT处理后,将生成的结果数据通过MATLAB软件读出,将之与通过MATLAB的fft2函数处理后的结果进行对比,如图7所示,结果是一致的。由图可知,经本文设计的频域处理算法处理后的数据保留了模糊图像的有效信息。
从两种方式处理的功率谱看,轮廓基本一致,少许差别的原因在于本文设计算法采用了块浮点及针对去模糊系统使用的数据抛位方法,而MATLAB采用的是纯浮点的处理方法。功率谱如图8所示。
对经本文设计的频域处理方法得到的结果与经MATLAB直接调用fft2得到的结果进行对比,统计对应像素点的绝对误差,结果如图9所示。从图可得,在不考虑定点与浮点数据处理方式的影响下,本文设计的频域处理方式在128×128点、256×256点和320×240点不同点数环境下的处理精度都保持在98.5%以上。
5 结论
频域处理对于图像去模糊系统的性能起着极重要的作用。本文针对去模糊系统在频域处理的硬件实现中遇到的资源利用高和处理精度低等问题,设计完成了一种基于FPGA的流水线型结构的频域处理方法。从实验结果及分析可见,相比于FPGA自带的IP核及其他处理方法,该方法在图像去模糊系统的频域处理,结合图像数据和模糊信息的特点,在频域处理的设计上降低了存储消耗,提高了处理速度,具有一定的工程价值与参考意义。
参考文献
[1] 杨帆,张皓,马新文,等.基于FPGA的图像处理系统[J].华中科技大学学报(自然科学版),2015,43(2):119-123.
[2] 朱奕丹,方怡兵.基于FPGA的图像采集与VGA显示系统[J].计算机应用,2011,31(5):1258-1259.
[3] 原魁.基于FPGA的嵌入式图像处理系设计[M].北京:电子工业出版社,2013.
[4] 高亚军.基于FPGA的数字信号处理(第2版)[M].北京:电子工业出版社,2015.
[5] 王旭东,潘明海.数字信号处理的FPGA实现[M].北京:清华大学出版社,2011.
[6] 杨军,于艳艳,陈成,等.基于FPGA的二维FFT处理器的研究与设计[J].云南大学学报(自然科学版),2013,35(6):750-755.
[7] 张德丰.数字图像处理(MATLAB版)(第2版)[M].北京:人民邮电出版社,2015.
作者信息:
袁 进,刘云飞
(南京林业大学 信息科学技术学院,江苏 南京210037)
1.《如何操作matlab里面功率谱 matlab如何操作数据库?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《如何操作matlab里面功率谱 matlab如何操作数据库?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3225522.html