利用小波融合对由聚焦失败导致的图像模糊进行修复

       图像的融合是将两幅或多幅图像融合在一起,以获取对同一场景的更为精确、更为全面、更为可靠的图像描述。融合算法应该充分利用各原图像的互补信息,使融合后的图像更适合人的视觉感受,适合进一步分析的需要。例如在实际摄影拍照时,由于焦距的缘故,近景或远景总有一者可能处于模糊不清的状态。此时运用图像融合技术就可以将两张模糊的图片(一张近景模糊,一张远景模糊)进行融合。小波变换是图像的多尺度、多分辨率分解,它可以聚焦到图像的任意细节。

       随着小波理论及其应用的发展,将小波多分辨率分解用于像素级图像融合也已经得到广泛的应用。具体实现时,首先对每一幅原图像分别进行小波变换,建立图像的小波塔型分解;然后对各分解层分别进行融合处理。各分解层上的不同频率分量可采用不同的融合算子进行融合处理,最终得到融合后的小波金字塔;最后对融合后所得的小波金字塔进行小波重构,所得到的重构图像即为融合图像。


利用小波融合对由聚焦失败导致的图像模糊进行修复_第1张图片

图1  用小波进行图像融合


在MATLAB中我们可以直接使用函数wfusimg()来实现图像的融合,下面给出它的常用语法形式:

XFUS = wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMETH)

[XFUS,TXFUS,TX1,TX2] =wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMETH)

       其中,X1和X2是待融合的两幅原始图像。参数WNAME给出要采用哪种小波,而LEVEL则给出了小波分解的层数。需要特别说明的是参数AFUSMETH和DFUSMETH,它们分别指定了低频(近似)信息和高频(细节)信息的融合方法。具体的可选项有'max'、'min'、'mean'、'img1'、'img2'或者'rand',它们分别表示近似和细节信息的融合方式为取X1和X2对应元素中的最大值、最下值、平均值、前者、后者或者随机选择。返回值XFUS是融合后的结果图像,而TXFUS、TX1和TX2则对应XFUS、X1和X2的小波分解树。

      下面这段代码演示了利用小波工具箱中的函数wfusimg()来实现图像融合的方法。小波变换的绝对值大的小波系数,对应着显著的亮度变化,也就是图像中的显著特征。于是选择绝对值大的小波系数作为保留细节所需的小波系数。低频部分系数可以选择二者之间的最大值,也可以采用二者之间的平均值。最后重构出图像即可。

X1 = imread('cathe1.bmp');

X2 = imread('cathe2.bmp');

XFUS = wfusimg(X1,X2,'sym4',5,'mean','max');

imshow(XFUS,[]);

       该段程序的运行结果如图1所示,第三幅图像就是将前两幅图像进行融合后的结果。易见,融合处理后的结果成功去除了前两幅图像中模糊不清的部分。

       当然,我们也可以不使用小波工具箱中给出的现成函数,而选择自己动手实现基于小波的图像融合算法。这对我们实际了解该算法是如何进行的大有裨益。下面这段示例程序实现了与前面代码段相同的作用,请读者留意注释说明的部分。另需说明的是,下面这段程序仅仅是为了演示算法实现而编写的,因此并没做异常处理的考虑,我们默认待处理的两幅原始图像的尺寸是一样的。

X1 = imread('cathe1.bmp');

X2 = imread('cathe2.bmp');

M1 = double(X1) / 256;

M2 = double(X2) / 256;

N = 4;

wtype = 'sym4';

[c0,s0] = wavedec2(M1, N, wtype);

[c1,s1] = wavedec2(M2, N, wtype);

length = size(c1);

Coef_Fusion = zeros(1,length(2));

%低频系数的处理,取平均值

Coef_Fusion(1:s1(1,1)) = (c0(1:s1(1,1))+c1(1:s1(1,1)))/2;

%处理高频系数,取绝对值大者,这里用到了矩阵乘法

MM1 = c0(s1(1,1)+1:length(2));

MM2 = c1(s1(1,1)+1:length(2));

mm = (abs(MM1)) > (abs(MM2));

Y  = (mm.*MM1) + ((~mm).*MM2);

Coef_Fusion(s1(1,1)+1:length(2)) = Y;

%重构

Y = waverec2(Coef_Fusion,s0,wtype);

imshow(Y,[]);

       上面这段代码中用到了小波重构函数waverec2(),函数waverec2()其实就是wavedec2()的相反过程,该函数的常用语法形式如下:

X = waverec2(C,S,'wname')

X = waverec2(C,S,Lo_R,Hi_R)

       其中,参数C、S、N和'wname'的意义都与二维小波分解函数wavedec2()中定义的一样,这里不再赘言。Lo_R是重构低通滤波器,Hi_R是重构高通滤波器。

       图像融合在工业图像采集中具有非常重要的应用。通常,在不同的焦距下,由工业摄像头拍摄的一组图像会因为景深的不同而产生局部模糊的现象,为得到全局的清晰图像,势必要对整组图像进行融合,这时小波变换无疑是首选处理技术。

       在图像融合过程中,小波基的种类和小波分解的层数对融合效果有很大的影响,对特定的图像来说,哪一种小波基的融合效果最好,分解到哪一层最合适,则是算法设计者需要研究的问题。


你可能感兴趣的:(matlab,图像处理,图像融合,小波变换)