基于FPGA的视频图像处理技术.docx
《基于FPGA的视频图像处理技术.docx》由会员分享,可在线阅读,更多相关《基于FPGA的视频图像处理技术.docx(15页珍藏版)》请在冰豆网上搜索。
![基于FPGA的视频图像处理技术.docx](https://file1.bdocx.com/fileroot1/2023-2/23/0cc0d7bc-d252-4805-abda-6ceafcd2531f/0cc0d7bc-d252-4805-abda-6ceafcd2531f1.gif)
基于FPGA的视频图像处理技术
2015年暑期实践报告
——基于FPGA的视频图像处理技术
1课题背景
人类接收的信息中约有70%来自视觉,周围景物在人眼视网膜上的映射是人类最有效、最重要的信息交流方式。
视频具有确切、直观、具体生动、真实和高效的特点。
随着计算机软硬件技术和电子技术的飞速发展,视频图像技术也得到了迅速的发展。
视频图像在商业、工业、军用以及民用领域内得到了广泛的应用,例如,监控系统、电视会议、多媒体通信、数字娱乐、可视电话等。
在视频应用系统的各个环节中,如采集、传送、转换和显示等,不可避免的造成图像质量的下降。
例如,在摄影时由于外界环境的影响如光照过强或不足,将会使图像过亮或过暗;光学系统由于电子设备等各种原因产生的失真、大气的流动等将会使图像变得模糊;信道的传输以及系统的硬件将会引入不同种类的噪声等。
这些问题不仅影响我们的视觉效果,而且对后续的处理带来了麻烦,如视频图像的存储、传输、跟踪与识别等。
因此图像处理技术相应产生了,对图像进行相应的处理和加工来满足人们的视觉要求和后续的应用需求。
由于视频图像处理技术要求对图像进行实时的数据采集、压缩处理、可靠传输和显示,整个过程对实时性的要求提到了一个很高的水平。
再者,视频图像往往数据量很大,对其进行处理会占用很多系统资源,如果处理器处理能力差会对图像的实时性传输造成很大影响,并且也会影响图像的质量。
为此,整个系统对处理器运算能力和数据的实时性优先考虑。
当前,DSP(数字信号处理器)或者FPGA(现场可编程门阵列)常作为视频图像处理的核心处理单元。
但是由于DSP本身的一些特性,使其不宜在此视频图像处理上得到广泛应用。
这包括DSP的指令执行采用速度相对较慢的串行通信形式,并且相对固定化的运算操作模块很难完全满足如此全面的需求。
因此在设计时选取了运行速度更快、设计更加灵活的FPGA控制芯片。
除此之外FPGA还具有开发周期相对较短,系统维护和扩展容易,对信号实时处理能力强,这些特征都可显著提高视频图像数据处理的速度,满足对系统实时性的要求。
所以,设计中优先选择了FPGA芯片作为系统的核心处理芯片。
在机载座舱中,由于使用环境的特殊性和复杂性,机载任务处理机给出的视频图像信号在最终输出显示前,需要进行一定的处理,以满足飞行员在不同环境下的观察需要,同时机载显示器对画面显示的实时性有着较高的要求。
基于FPGA硬件平台的图像处理方式不仅能够获得良好的处理效果,而且处理速度也远高于软件处理方法。
故该课题研究在机载座舱环境中有着较高的实用价值。
2课题安排
1)7.15-7.21查阅文献资料,了解图像增强、视频缩放方面的国内外进展;
2)7.22-7.31设计相关图像增强、视频缩放算法,采用MATLAB仿真实现算法,并分析算法的优缺点;
3)8.10-8.19对算法进行FPGA硬件移植,调试;
4)8.20-8.21总结,完成实践报告。
3课题拟采用算法
3.1图像增强
图像增强是图像处理技术中一个重要的分支,同时也是一个重要的环节,在图像处理和加工的过程中起到了相当重要的作用。
图像增强,即提高对图像中目标识别能力的技术,其目的在于提高图像的可辨识度或是将图像转换成更适合计算机辅助处理的形式。
彩色图像增强技术是在灰度图像增强技术的基础上慢慢发展而来,有必要学习灰度图像增强的基本方法。
图像增强方法分为两大类:
空域处理和频域处理。
下面主要讨论图像空域增强的方法,这类方法以直接处理图像像素为基础,即直接根据图像的空间信息(像素位置与像素值)进行图像增强。
由于不存在图像增强的通用理论,因此,在面向不同的对象时,需选择性的使用合适的技术来处理,使增强后的图像比原始图像更适合于特定的应用。
能否对图像进行实时处理是评定一个图像处理系统好坏的首要条件。
由于复杂的滤波器在对实际问题进行解决时运算速度慢,实时性差,所以通常情况下不采用复杂的滤波器。
本课题的研究内容主要是采用FPGA处理器来硬件实现对图像的增强算法。
其中表现出的优越性完全弥补使用PC机实现某种算法耗时严重的缺点。
采用FPGA处理器来硬件实现对图像的增强算法在提高处理器的工作速度,改善系统的实时性方面,具有一定的理论和实用价值。
3.1.1直方图修正(非线性处理)
直方图在空间域处理中有着举足轻重的地位,是空域图像处理的基础。
直方图修正能有效地用于图像增强中。
直方图表示为不同灰度级像素个数的条形图。
若将一幅图像的灰度级看成是一个随机变量,直方图则反映了图像中每个灰度级出现的概率,即随机变量概率分布的一个近似。
1、直方图的计算
对于灰度级范围为[[0,L-1]的图像,rk是第k阶灰度级,nk是第k阶灰度级的像素个数,直方图离散函数为h(rk)=nk,其中k=0,1,2,...,L-1。
通常,用图像的像素总数n来除每个对应的h(rk)得到归一化的直方图p(rk)=nk/n,即灰度级为rk发生的概率。
该过程对于最大灰度级为255的图像f(x,y),即设置255个计数器并初始化为0;对于每个像素,若f(x,y)=rk,则h(rk)=h(rk)+1。
图1所示为一幅灰度图像及其对应的直方图。
图1(a)灰度图像(b)图像对应的直方图
2、直方图均衡化
在灰度图像增强算法中,直方图均衡算法因简单、易于实现与能自动完成不需要人工设定等优点,成为一种最通用的算法之一。
直方图均衡算法的成立基于两个假设(令输入图像灰度级为经过归一化的r∈[0,1],输出灰度级s为输入灰度级r的函数,即s=T(r):
①T(r)在区间[0,1]上单调递增
②对于0≤r≤1,0≤T(r)≤1
以上两个条件保证了T(r)单值且反函数存在,保证输出图像灰度级的从黑到白的次序。
算法具体步骤如下:
①计算图像的概率密度函数(PDF)p(rk)(归一化直方图):
式中,f(x,y)为输入图像,M、N分别为图像的行数和列数,L为图像的最大灰度级(通常为256),同时,
。
②计算累积分布函数(CDF)sk:
③计算原始图像中每个灰度级对应的新灰度级值:
式中F(f(x,y))用来存储图像经直方图均衡后原始图像的像素灰度级所对应的变换后的像素灰度级。
图2直方图均衡化实例
(a)原始girl灰度图像;(b)直方图均衡化后图像;
(c)原始图像直方图;(d)直方图均衡化后图像直方图
如图2所示,可以看到,原始图像偏暗,像素主要分布在低灰度级区域,灰度级范围比较窄。
经直方图均衡化变换后,图像直方图范围扩展到整个灰度级允许的范围内,增加了图像的灰度级动态范围,结果就是增加了图像的对比度,使处理后的图像与原始图像相比更清晰,细节更突出。
3.1.2基于色调不变的图像增强
色调是反映彩色图像中色彩信息的重要参数,为了在进行图像效果增强的同时保持色调不变,通常的做法是先把图像从RGB转化到HIS色彩空间,然后在保持H变量(色调)不变的情况下,进行亮度I的增强。
但是这种方法由于需要进行色彩空间的相互转化,大大增加了计算量。
文献给出了通过RGB计算色调H的一种简化计算方法,即:
该方法在色调计算上所体现的最大特点是:
当对R、G、B三个颜色分量进行相同尺度的平移或比例伸缩的线性变换之后,依然能够保持色调不变,从而大大简化了计算,有利于实时图像处理。
图3灰度直方图
在保持色调不变的情况下,采用直方图拉伸技术扩展颜色分量的取值范围来直接增强彩色图像,以改善处理效果。
设某颜色分量z的直方图如图3(a)所示,通过直方图拉伸将其实际取值范围[a,b]扩展到[
],拉伸后的直方图如图3(b)所示,则式
可用于完成对[a,b]间任意值z的变换。
为了实现最大程度的拉伸,
应该尽量选取仪器所能表示的颜色的上、下限。
个人电脑R、G、B值各用8bit表示,范围在0到255之间,这时可取
=0,
=255。
式中,
和
分别称为对颜色分量z的拉伸系数和平移系数。
直方图拉伸是针对每个颜色分量分别进行的,为了保证色调不变性,应使三个颜色分量的拉伸系数和平移系数相等,即
β(R)=β(G)=β(B)=βα(R)=α(R)=α(R)=α
设颜色分量的最大取值范围为[0,M],某图像的R分量的取值范围为[aR,bR],G分量取值范围为[aG,bG],B分量取值范围为[aB,bB],在对RGB分量进行变换时,为了避免越界,α与β应该满足下列不等式:
βaI+α≥0且βbI+α≤M,I=R,G,B
化简不等式,同时考虑在图像尽可能大的范围内进行直方图拉伸,取
令amin=min[aR,aG,aB],bmax=max[bR,bG,bB],那么
图像中任意点z的变换只需按
进行。
3.2视频图像缩放
视频图像缩放实现视频图像的放大或缩小,解决系统中输入视频与输出视频分辨率不匹配的问题。
图像缩小对图像的质量要求不高,且应用场合较少;而图像放大时往往会降低图像的显示质量,应用场合较多,下面讨论用于视频图像放大的视频缩放算法。
在视频缩放算法中,待插值点由其时空邻域内的采样点加权求得。
由于系统要用FPGA来实现,算法复杂度不宜过高,因此选用空间插值算法来实现视频缩放,即对于需要计算的插值点仅利用当前帧中对应邻域的像素点来求得。
1、最近邻插值法
最近邻插值法对于需要插值像素点的灰度值取为原始图像中与其距离最近的像素点灰度值。
最近邻插值实现起来最简单快速,但是精度最低,缩放后图像质量最粗糙。
2、双线性插值法
用双线性插值法计算插值像素点灰度值时,首先将该点映射到原始图像中,取出该位置附近2×2个邻域像素的灰度值,将这4个点的灰度值加权平均后求出插值点的灰度值。
双线性插值算法比最近邻插值算法计算量大,它具有低通滤波器特性,缩放后图像质量高,在对边缘质量要求不是非常高的情况下是完全可以接受的。
3、立方卷积法
立方卷积法采用二次方多项式进行插值,可以近似表示sinc函数。
通过立方卷积法求插值点的灰度值时,由插值点映射到原始图像位置附近的4×4个邻域像素点灰度值加权平均后求出。
立方卷积法计算量最大,但精度高,能保持较好的图像边缘细节。
由以上分析可以看出,综合考虑逻辑资源使用、算法时间开销和图像缩放质量等因素,故选用双线性插值算法来实现视频缩放。
图4双线性插值算法
在双线性插值算法中,插值点的灰度值是由该点映射到原始图像中邻近的2×2个邻域像素的灰度值加权平均计算得出的,图4为双线性插值示意图。
假设某插值点映射到原始图像中的位置为点G,A、B、C、D为点G附近的4个像素点(即2×2个领域像素点),若已知A、B、C、D四点的灰度值,可以先在水平方向上进行线性插值由A、B两点灰度值求得E点灰度值,由C、D两点灰度值求得F点灰度值,最后在垂直方向上由E、F两点的灰度值线性插值求得G点灰度值。
根据双线性插值算法,图中像素点G(i+u,j+v)的灰度值y由其邻域的四个像素的灰度值P1、P2、P3、P4共同决定。
即:
其中,P1为点A的灰度值,P2为点B的灰度值,P3为点C的灰度值,P4为点D的灰度值。
u、v分别是目标像素点G与原始图像中邻近点的水平和垂直坐标方向上的两个增量。
4仿真结果与硬件实现
4.1仿真结果
在Pentium(R)2.1GHz双核、内存4GB的计算机,用MATLAB编程实现直方图均衡化和双线性插值算法。
4.1.1直方图均衡化
处理前处理后
处理前处理后
处理前处理后
图5直方图均衡化仿真结果
从图5中可以看到,图像处理前偏暗,像素R、G、B的灰度级范围比较窄。
经直方图均衡化变换后,图像直方图范围扩展到整个灰度级允许的范围内,增加了图像的灰度级动态范围,结果就是增加了图像的对比度,使处理后的图像与原始图像相比更清晰,细节更突出。
这种方法运算速度比较快,能获得一定的处理效果,但独立处理各分量忽略了各分量之间的关系,增强后的彩色图像可能会出现较大的色彩失真。
4.1.2双线性插值
原图:
处理前720×576处理后800×600
细节:
处理前处理后
图6双线性插值仿真结果
图6中,原始图像的分辨率为720×576,经过双线性插值算法计算后,图像分辨率拉伸为800×600,可以解决系统中输入视频与输出视频分辨率不匹配的问题。
同时可以看到,在细节的处理上,图像显示效果较好,在对边缘效果要求不是非常高的情况下是完全可以接受的。
4.2硬件实现
4.2.1直方图均衡化
如图7所示,FPGA通过视频采集模块对输入视频信号进行采样,采样后的视频流经过并行的两步处理,一步是对视频流的R、G、B分别进行直方图均衡化,另一步是把视频流存入帧存;在显示时,显示模块读取帧存中的视频数据,并根据直方图均衡化的结果进行调整后显示。
图7直方图均衡化硬件实现
直方图均衡化模块是基于RGB彩色空间的颜色通道独立增强方法,对每个颜色通道独立运用灰度图像中的算法进行增强处理,如图8所示。
图8基于RGB彩色空间的颜色通道独立增强方法
步骤如下:
(a)读取RGB彩色图像并提取R、G、B彩色分量;
(b)对R、G、B分量独立进行处理;
(c)将处理过的分量合成为新的RGB彩色图像输出。
4.2.2双线性插值
显示模块读取帧存储器中的视频数据,进行双线性插值,如图9所示。
图9双线性插值硬件实现
考虑视频显示的连续性,需采用流水线进行双线性插值。
算法采用反求的方式对原始720×576视频画面进行双线性插值。
为求得拉伸后800×600画面中坐标为
的像素点的颜色值,先通过下式求出该像素点在原始画面中对应的像素点
(其中,
和
为坐标的整数部分,
和
为坐标的小数部分),通过该对应点的信息进行双线性插值得出拉伸后画面的像素点颜色值。
考察式中的计算过程可以发现
和
的求取均可转换为移位运算,该运算可在一个时钟周期内完成,可作为流水线的一级。
得到
和
后,可知拉伸后画面中
的颜色值受
、
、
、
四点影响,如图10所示。
图10拉伸后的点在原始画面中的位置对应关系
由双线性插值及面积采样原理可知,图10中四个像素点对点
颜色的贡献量如下所示,进而可得出点
的颜色,其中
表示点
的某个颜色分量(即R、G或B)。
流水线的输出端每个时钟周期要输出一个计算完成的像素,考虑到帧存读取时的稳定性,每个时钟周期只能从帧存中读取一个像素点的数据,而每计算一个像素点需要4个原始画面像素点的数据。
那么需要在FPGA内部开辟一片RAM缓存上一行原始画面的像素点信息,其他像素点通过寄存器缓存,即可获取计算需要的四个像素点信息,通过计算就可以输出拉伸之后的像素点。
虽然计算过程比较复杂,但可拆解到多个时钟周期以分布到不同级流水线上,对计算出的中间量进行适当的延时即可满足流水线的设计要求。
5总结
课题前期通过查阅文献资料,对图像增强、视频缩放等内容进行了详细的学习和了解,中期通过对各种算法的优缺点比较,给出了拟采用的算法,最后对算法进行了软件仿真和硬件实现,验证了算法的可行性,实验结果表明能够获得良好的处理效果,从而实现了预期目标。