APP下载

实时DSP图像处理高斯滤波优化

2014-12-18王洪元虞祖耀

制造业自动化 2014年24期
关键词:像素点高斯滤波器

金 龙,王洪元,张 继,虞祖耀

(常州大学 信息科学与工程学院,常州 213164)

0 引言

高斯滤波是一种线性滤波,可以用于图像平滑处理和噪声的去除,但是有着庞大的计算量。因此,有必要对高斯滤波算法进行优化。目前,对算法硬件优化的研究已经取得了一定的进展。文献[1]、[2]介绍了DSP算法优化的思路,但没有给出实例;文献[3]优化了Sobel边缘检测等三种图像预处理算法,但也没有详细描述其优化方法;文献[4]对中值滤波算法在DSP上进行了优化,但是其优化方法仍然需要改进。

本文所用的平台是TMS320DM6446定点DSP处理器[5,6],它拥有ARM和DSP双核心处理器。在对高斯平滑滤波算法程序分析的基础上,分解运算高斯平滑滤波器,将程序的运行流程进行重新设计和规划,并进行内联函数优化,在算法设计和代码优化两方面提高了程序的运行效率。

1 高斯滤波

高斯滤波是一种低通滤波的方法器,这是它被用来对图像进行平滑处理的根本原因。图1是高斯低通滤波方法器的示意图。

高斯滤波掩膜二维形式如下:

式中,x和y表示的是到像素点间的距离,σ为分布函数,高斯滤波曲线的形状可以通过改变分布函数σ来完成。下面以如下5×5大小的高斯模板为例来说明本文的优化方法:

图1 高斯低通滤波方法器

2 基于DM6446高斯滤波实现及优化

2.1 数据相关性分析

高斯滤波器是一种相对简单的算法,如何充分利用DM6446 DSP良好的并行处理性能,来最快的实现算法是研究的重点。在高斯滤波算法计算过程中,每次像素点的计算都是相关联的。比如当前像素点和其周边各个像素点的计算便有着大量重复计算。而且计算相邻的像素点时获取的图像数据也有重复。使用DM6446芯片中的寄存器,一方面可以暂时存储中间计算结果,在计算下一个像素点时使用,如此便可有效地避免重复运算;另一方面,可以在计算像素点时将寄存器中相邻像素点计算所需的图像数据暂时存储,对新像素点进行计算时便只需读取新进入滤波窗口的图像数据,数据从内存到寄存器的传输量将会大大减少。

如图2所示,将计算像素点(点I33)时相对应的高斯滤波窗口所覆盖的像素点数据举出,而且将窗口外相邻的像素点数据也一一列出。

图2 滤波窗口覆盖区域示例

计算像素点I33时,利用式(1),在以像素点I33为中心点的图像区域上用高斯滤波器H覆盖,高斯滤波器H与图像区域内相对应的像素点数据相乘并累加,最后将所得结果与高斯滤波器系数的累加和相除,便可得到I33像素点的高斯滤波处理结果。计算I34像素点时,将高斯滤波器H向右移一个像素的位置,然后做出同样的操作。

_dotpsu4()内联函数是一种可以快速完成求点积和指令,可以完成同行中四个相邻的元素与滤波系数累加和的相乘并累加。因此,对图2中所示I33 像素点至I36像素点的图像区域,调用_dotpsu4()内联函数计算覆盖区域内像素点数据与高斯滤波器的卷积累加和,并与高斯滤波系数累加和相除,便得到高斯滤波结果G11、G12、G13和G14。

2.2 内联函数优化及高斯滑动模板的运用

内联函数(intrinsics)的作用是将复杂的C语言程序替换来使程序运行效率提高。内联函数的使用有两方面,一方面是将使用频繁调用的小函数改变为内联函数;另一方面则是使用C64X编译器所提供的内联函数。

不难发现因为在空间上相邻所以计算中的许多数据读取操作是可以避免的,还有很多中间结果是可以复用的。针对上述问题,利用内联函数_memd8(),可以一次读取8个原始图像像素数据。因此只需要八条数据读取指令,便可以对图2中全部的图像数据进行读取,同时还可以对多个像素点进行滤波处理。

通过_memd8()内联函数读取8个原始图像数据并与高斯平滑滤波模板进行卷积。将1×5的高斯模板[1,2,3,2,1]用0补全成1×8的模板,横向对8×8的图像数据分别做卷积之后再纵向做卷积,并按划分成高位模板和低位模板。计算I13像素点处的滤波结果时,如图3(a)所示对应原始图像数据都按照高位和低位划分。使用_dotpsu4()函数来计算图像数据高位或低位与滤波模板对应高位或低位的卷积和,其结果除以9,便可得出该像素点的处理结果。但当所需计算像素点改变时,数据中的高位和低位也会发生改变,高斯模板就需要随着变化。计算I15像素点时,原始图像数据如图3(b)所示划分高位和低位,为了方便计算,本文采用高斯滑动模板,1×8的模板同样划分高位模板和低位模板,如图4所示高斯模板发生滑动,根据所需计算像素点的位置变换而变换,这样大大方便了计算,提高了效率。

图3 像素点原始图像数据高、低位划分

2.3 高斯平滑滤波优化

图4 高斯模板滑动

高斯滤波掩膜具有可分解性的特点,二维高斯滤波模板可以分解成横向的一维高斯滤波模板和纵向的一维高斯滤波模板。这样将高斯滤波掩膜进行分解运算大大减少了计算量,提高了程序运行效率。

为了使算法耗时最短,应尽可能的减少对滤波处理过程中产生的中间结果进行存储或读取操作,所以卷积累加操作应在一次遍历中完成。所以就需对每次遍历处理所需读取的基本处理单元大小进行确定,从而让优化的效果最好。

要通过_memd8()内联函数对滤波处理结果进行迅速的存储,每次遍历得到的滤波处理结果在行方向上应相邻且为8的整数倍。为了通过_dotpsu4()内联函数完成对像素点数据与高斯滤波器系数的累加卷积处理,每次应读取相邻的8个同行像素点数据来进行横向卷积处理,与之类似,每次读取相邻的8个同列像素点数据来进行纵向卷积处理。经过以上分析,选择8×8大小的图像区域作为卷积处理的基本处理单元,首先进行横向卷积处理,再遍历其结果进行纵向卷积处理便可以得到8×8大小的滤波结果。

本文在存储滤波结果时选用纵向排列的方法,以大小为8×4的区域存储。这样做的好处是可以直接使用_memd8()函数对滤波结果进行读取,大大提高了程序读取效率。

2.4 滤波模块分解优化

因为在滤波处理过程中有着很多复运算和读取数据操作,所以需要对处理的运算过程进行优化。通过对滤波器进行的分析,滤波器H可作如下分解:

其中:

可以看出,对该滤波器H线性分解后,对图像的滤波效果和分解前是相同的。分解后的模板全部转换为0和1的形式,免去了计算中的乘法运算,只需加法运算,使代码运算效率大大提高。分解后的滤波器对图像进行滤波处理的计算如图5所示。

图5 滤波器线性分解后计算H1+H2+H3+H4+2H5+3H6

其中:I11,I12,…,I55等是读入寄存器中的像素点数据,而中间结果存储在寄存器A,B,C,…,E中。每次循环都可以得出K1、K2两个滤波处理结果,K1和K2分别为:

F、F(1)、F(2)、F(3)、F(4)、F(5)计算方法如图5中E、E(1)、E(2)、E(3)、E(4)、E(5)所示。计算得出K1、K2后滤波掩膜右移两个像素位置,以I53、T63像素点为中心,便只需计算新进窗口的像素点数据,计算K3、K4两个滤波结果时可以重复利用开始时已经计算出的中间结果,计算新进入窗口元素如公式(6)所示。

3 实验结果及分析

为了测试高斯平滑滤波的优化效果,利用式(2)所示5×5高斯滤波器应用到尺寸不同的图像进行高斯滤波处理,得到算法程序消耗时间与优化前作对比如表1所示。实验的仿真环境为CCSv3.3,处理器是TMS320DM6446/594MHz定点DSP。

表1 优化前后滤波耗时对比

如表1所示,对未优化的高斯滤波程序在-O3模式下进行编译,对不同尺寸的原始图像进行高斯平滑滤波处理所消耗时间都比较长。利用高斯滤波器可分解性的特点,对图像数据进行两次卷积处理并进行内联函数优化,先遍历图像数据进行横向卷积处理,再对其处理结果进行纵向卷积处理。这就使两次卷积处理能够在对原始图像的一次遍历中完成。本文采用高斯滑动模板,根据所需计算像素点的位置变换而变换,这样大大方便了计算,提高了效率。分析实验结果后发现,对尺寸不同的原始图像进行高斯滤波处理,处理效率提高了22倍以上,而且尺寸越大的原始图像,高斯滤波处理的优化效果就越显著。

对一幅240×180×8bit大小的原始图像,使用不同大小的高斯滤波器进行滤波处理,所得到算法消耗时间如表2所示。分析后可以看出,高斯滤波器的尺度越大,采用本文所述的优化方法进行高斯滤波处理,所得的优化效果就会越明显。

表2 不同尺寸掩膜优化性能对比

4 结论

本文以TMS320DM6446 DSP为平台,基于高斯平滑掩膜的可分解性,通过对滤波器进行线性分解,内联函数优化,优化高斯滤波模板,合理安排存储方式等技术,大大减少了高斯滤波算法的执行时间。实验表明,本文所述的优化方法可以明显提高高斯滤波算法运行效率,具有较好的应用价值。

[1]刁一平,赵晓群.基于TI C6000DSP的C/C++语言代码效率优化[J].微计算机应用,2007,28(5):544-548.

[2]杨光宇,高晓蓉,王黎,等.基于TI C6000 系列DSP C/C++程序优化技术[J].现代电子技术,2009,33(8):544-548.

[3]陈松,郑红,吴兴华,等.基于DSP 的数字图像预处理算法优化方法[J].仪器仪表用户,2010,17(3):58-60.

[4]黄德天,陈建华.DSP图像处理的程序优化[J].中国光学与应用光学,2009,2(5):452-459.

猜你喜欢

像素点高斯滤波器
基于局部相似性的特征匹配筛选算法
数学王子高斯
天才数学家——高斯
从滤波器理解卷积
基于像素点筛选的舰船湍流尾迹检测算法
开关电源EMI滤波器的应用方法探讨
一种微带交指滤波器的仿真
基于canvas的前端数据加密
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
基于TMS320C6678的SAR方位向预滤波器的并行实现