图像融合是综合两幅或者多幅图像的信息,以获取同一场景下更加准确、更加全面、更可靠的图像描述。图像融合可以克服单一图像在几何、光谱、和空间分辨率等方面存在的局限性。
而小波变换具有的正交性、非冗余性以及完善的重构能力,有效弥补金字塔方法分解时的信息冗余性以及重构过程中的不稳定性。小波变换的基本原理是继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率的局部化分析,通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求。所以,小波分析在计算机科学、信号处理、图像处理等很多方面有重要作用。
在图像融合中,小波变换的基本原理是,先进行L层小波分解,得到(3L 1)层子带,包括低频的基带Cj和3L层的高频子带Dh、Dv、Dd。
用f(x,y)代表原图像,记为C0,设尺度系数和小波系数对应的滤波器系数矩阵分别为H和G,则二维小波分解算法可描述为:
其中,j表示分解层数;h、v、d分别表示水平、垂直、对角方向;和分别是H和G的共轭转置矩阵。
小波重构算法为:
根据小波变换进行的第一种图像融合方法:二维小波变换图像融合。
代码语言:javascript复制%二维小波变换图像融合
load woman;
X1=X;
map1=map;
load wbarb;
X2=X;
map2=map;
for i=1:256;
for j=1:256;
if(X2(i,j)>100)
X1(i,j)=1.3*X2(i,j);
else
X2(i,j)=0.6*X2(i,j);
end
end
end
%进行二层小波分解
[C1,S1]=wavedec2(X1,2,'sym5');
sizec1=size(C1);
for i=1:sizec1(2)
C1(i)=1.3*C1(i);
end
[C2,S2]=wavedec2(X2,2,'sym5');
C=C1 C2;
C=0.6*C;
%小波变换进行图像重构
x=waverec2(C,S1,'sym5');
subplot(1,3,1),imshow(X1,map1),title('woman');
subplot(1,3,2),imshow(X2,map2),title('wbarb');
subplot(1,3,3),imshow(x,map),title('融合图像');
根据小波变换进行的第二种图像融合方法:利用wfusimg函数进行融合。
代码语言:javascript复制%wfusimg
load mask;
X1=X;
map1=map;
load bust;
X2=X;
map2=map;
%通过调用matlab自带的wfusimg函数实现两种图像的平均融合
TU1=wfusimg(X1,X2,'db2',5,'mean','mean');
%通过调用matlab自带的wfusimg函数实现两种图像的最大值最小值融合
TU2=wfusimg(X1,X2,'db2',5,'max','min');
colormap(map);
subplot(2,2,1),imshow(X1,map),title('原图1');
subplot(2,2,2),imshow(X2,map),title('原图2');
subplot(2,2,3),imshow(TU1,map),title('平均融合');
subplot(2,2,4),imshow(TU2,map),title('最大值最小值融合');
并且,利用wfusimg函数可以将模糊图像进行恢复性融合。
代码语言:javascript复制load cathe_1;
X1=X;
map1=map;
load cathe_2;
X2=X;
map2=map;
%选择两张图片中的最大值进行融合
TU=wfusimg(X1,X2,'sym4',5,'max','max');
colormap(map);
subplot(1,3,1),imshow(X1,map1),title('原图1');
subplot(1,3,2),imshow(X2,map2),title('原图2');
subplot(1,3,3),imshow(TU,map),title('融合图像');
根据小波变换进行的第三种图像融合方法:小波变换进行彩色图像融合。
图像中原图1与原图2分别对焦于图像左侧与右侧,经过变换后对焦偏离照片中心位置的缺点已经不明显。由于原始图像为手机拍摄,存在一定误差,如果使用专业设备,融合效果会更加好。为了直观展示图像融合的具体效果,又选取两张不同照片进行融合,以便于观察。
对于图像融合有需要的和感情趣的朋友们,大家可以自己动手尝试,还可以应用于融合灰度图像与彩色图像,欢迎更多MATLAB爱好者、使用者前来交流!
参考资料:
[1] 陈怀琛.数字信号处理教程——MATLAB释义与实现.
[2] 孙明、孙红.数字图像理解与智能技术——基于MATLAB和VC 实现.
图片来源:MATLAB自带数据、作者自行拍摄