图像小波变换 VC程序实现
2012-09-12刘双红
刘双红,靳 鸿
(1.中北大学电子测试技术国家重点实验室, 山西太原 030051;2.中北大学仪器科学与动态测试教育部重点实验室,山西太原 030051)
0 引言
图像作为对客观物体一种相似性的生动模仿或描述,既反映物体的客观存在,又能够体现人的心理因素。图像处理的目的是通过对图像信息进行加工处理和分析,以满足人的视觉、心理需要和某种目的的要求。图像处理跨学科、跨行业的特性,与数学、计算机科学等许多学科都起到相互辅助借鉴的作用,是一个十分活跃的边缘学科[1]。
近年来,出现了一些图像处理的新方法,比如小波变换。小波变换是在傅里叶分析的基础上发展来的,但傅里叶变换丢失了时域和频域的联系,而小波变换可以把时域和频域联系起来,故在分析非稳定信号时小波变换更具有优势。一般,人们多运用MATLAB对小波进行构造处理,但人们在调用的过程中,往往忽略对底层函数的理解,阻碍了小波的进一步发展。基于这一弊端,本设计使用VC程序对图像小波变换进行编程,改进了在MATLAB中不足之处。
1 离散小波变换原理
小波分析的理论是在原子分解和无条件基等理论基础上发展来的。小波基的发现及多分辨率的研究推动了小波的进一步发展。小波变换与傅里叶变换相比,小波变换是局网域变换,经过伸缩和平移等运算后对函数或信号进行多尺度分析,可以有效地从信号中提取信息,解决了傅里叶变换的缺陷,是调和分析发展史上一大跨越式的进步[2]。由于小波变换可以分析不平稳信号,图像经过小波变换后,分割成高低两个频段。低频显示图像的基本特性, 高频部分显示细节方面的特性,有效地解决了傅氏变换在处理非平稳的复杂图像信号时所存在的局限性[3]。
离散小波变换能为信号分析与合成提供足够的信息,同时降低计算机的资源消耗与计算量。对于一维信号的小波变换,需要首先通过卷积运算完成信号的滤波,将信号分解为信号的初级估计近似和信号的细节信息,然后在不同的频带上利用不同的尺度因子对信号进行处理[4]。对于二维信号,相当于对其在列和行上进行一维小波变换,而对于图像的处理就是对二维信号的处理。
在实际编程中,人们一般采用离散小波变换的快速算法——Mallat算法,以提高计算速度及其使用程度,这种算法是基于图像分解和重构的塔式算法产生的。一般的二维信号Mallat算法为:在第一层上,先用低通滤波器和高通滤波器分别与信号的每行进行积分,并且只取偶数行。然后,用这个已得的矩阵的每列再和原先的低通和高通滤波器进行卷积,同样也只取偶数列,便可得到变换所要求的原先数组的1/4。Mallat算法分解步骤如图1所示。
图1 Mallat算法分解步骤
2 图像小波变换的C程序实现
2.1 图像小波在V C中的实现
二维图像的小波变换主要是应用算法的可分离滤波器方法,在实现过程中包括很多的步骤,如图像数据读取、算法的实现、图像分解和合成及图像变换后的实现。实质上,小波变换的实现过程只是在不同的层数上重复调用一维小波变换而已。二维小波变换步骤如图2所示。
图2 二维小波变换的步骤
由于Matllat算法在VC程序上实现的实质是图像信息与滤波器的函数的卷积[6],所以,本设计的核心就是利用VC编程来进行卷积运算。在实现过程中,首先要进行初始变量的定义,然后利用循环体对小波进行小波变换及逆变换,在进入循环体之前,图像数据用数组的形式表示出来,然后与既定的滤波器函数进行卷积运算,变换后的数据再作为原始参数,重新进行运算调整。小波变换中卷积的流程图如图3所示。
图3 小波变换中卷积的流程图
核心卷积程序代码如下:
小波变换的程序实现过程要反复用到卷积运算,故可反复调用卷积运算的子程序。小波变换流程图如图4所示。
图4 小波变换流程图
小波变换的代码如下:
2.2 程序运行后的图像示意图
小波变换在图像处理中有着突出的优势,它可以方便地改变小波变换所用滤波器的参数来对图像进行处理[7]。本文在此基础上作为落脚点,在Visual C++编译环境下实现对原始图像(见图5)的一层小波变换及复原(见图6)和二层小波变换及复原(见图7)。
图5 原始图像
图6 一层小波变换及复原
图7 二层小波变换及复原
3 总结
小波分析在不断的完善自身的同时,也推动着许多相关学科和领域的发展,使其本身具有多门学科相互结合、相互渗透的特点。本文重点介绍了图像小波变换在VC程序上的实现,它克服了仿真环境中直接利用现成的底层函数进行小波变换不能较好地体现小波变换本身过程的弊端,故运用VC语言来实现小波变换具有一定的现实意义,也只有这样才能进行小波应用的更广泛的研究。
[1]曹青,王保保.基于小波变换的图像处理算法研究[D].西安,西安电子科技大学,2008.
[2]百度百科.小波分析理论[EB/OL].http://baike.baidu.com/view/62228.htm.
[3]徐俊秒,戚宇林.基于小波变换的图像处理技术的研究[J].中国多媒体通信,2009,8:30-32.
[4]刘超,邢曙光,杨曦娥.小波变换VC6.0程序实现[J].电脑知识与技术,2010,6(3):615-616,627.
[5]邹筝,康晓林,袁建洲.Visual C++ 6.0 使用教程[M].北京:电子工业出版社,2008.
[6]沈飞,卞红雨.小波变换在图像处理中的应用[D].哈尔滨:哈尔滨工程大学,2009.
[7]刘国庆,林京.基于单层小波变换的自适应压缩感知图像处理[J].合肥工业大学学报,2012 35(1):141-143.