小波变换-课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于小波变换的图像融合技术
简介
图像融合是多传感器信息融合领域的一个重要分支,它是指将来自同一目标的不同传感器的信息通过一定的算法融合到一幅图上,从而获得比在单幅图上更完整、更精确的信息。
图像融合在军事(如军事侦察、识别伪装)和非军事(如医疗诊断、遥感、计算机技术等)领域得到广泛的应用[1]。
这里使用基于小波变换的塔式结构的优点是小波变换具有紧凑性、正交性、很好的方向性,这使得小波变换可以很好地提取不同尺度上的显著特征,相对于高斯一拉普拉斯金字塔技术而言,不仅可以产生更好的融合结果,而且进行反向变换时稳定性更好;另外小波变换的塔式结构还使得不管原图像的长度是否2的幕次方,最终变换后的图像与原图像尺寸相同,这使得开发实用的并行算法系统成为可能。
1.图像的小波变换
1.1 图像多尺度分解
由于图像对象尺寸大小的不一,以及人类视觉系统对物体尺度的自适应性,在图像数据中引入一个尺度维,把图像在不同尺度下进行分解。
直观地来讲,客观的物体根据其与观察者的距离远近不同而呈现出不同的表现形式,比如,人在不同的距离观察同一目标对象时,在距离较远时,看到的是对象的整体轮廓,在近距离观察时,看到的是关于对象的更多的细节,便是对图像进行了多尺度分解。
1.2图像二维离散小波变换
图像的二维离散小波分解和重构过程如下图所示,分解过程可描述为:首先对图像的每一行进行 1D-DWT,获得原始图像在水平方向上的低频分量 L 和高频分量 H,然后对变换所得数据的每一列进行 1D-DWT,获得原始图像在水平和垂
直方向上的低频分量 LL、水平方向上的低频和垂直方向上的高频 LH、水平方向上的高频和垂直方向上的低频 HL 以及水平和垂直方向上的的高频分量 HH。
重构过程可描述为:首先对变换结果的每一列进行以为离散小波逆变换,再对变换所得数据的每一行进行一维离散小波逆变换,即可获得重构图像。
由上述过程可以看出,图像的小波分解是一个将信号按照低频和有向高频进行分离的过程,分解过程中还可以根据需要对得到的 LL 分量进行进一步的小波分解,直至达到要求。
图1.1 图像二维离散小波变换分解与重构示意图
1.3matlab仿真结果
一维数据一次分解:
function [L H]=haar_dwt(f) %显然,我没有做边界处理,图片最好是2^n*2^n型的 n=length(f);
n=n/2;
L=zeros(1,n); %低频分量
H=zeros(1,n); %高频分量
for i=1:n
L(i)=(f(2*i-1)+f(2*i))/sqrt(2);
H(i)=(f(2*i-1)-f(2*i))/sqrt(2);
end
end
对图像的一次离散小波变换
function [LL LH HL HH]=haar_dwt2D(img)
[m n]=size(img);
for i=1:m %每一行进行分解
[L H]=haar_dwt(img(i,:));
img(i,:)=[L H];
end
for j=1:n %每一列进行分解
[L H]=haar_dwt(img(:,j));
img(:,j)=[L H];
end
%本来分解不应该加mat2gray的,不过为了有好的显示效果就加上了
LL=mat2gray(img(1:m/2,1:n/2)); %行列都是低频
LH=mat2gray(img(1:m/2,n/2+1:n)); %行低频列高频
HL=mat2gray(img(m/2+1:m,1:n/2)); %行高频列低频
HH=mat2gray(img(m/2+1:m,n/2+1:n)); %行列都是高频
end
主程序:
img=double(imread('./data/lena512.bmp'));
[m n]=size(img);
[LL LH HL HH]=haar_dwt2D(img); %当然dwt2(img,'haar')是一样的,我只是想明白细节
img=[LL LH;HL HH]; %一层分解
imgn=zeros(m,n);
for i=0:m/2:m/2
for j=0:n/2:n/2
[LL LH HL HH]=haar_dwt2D(img(i+1:i+m/2,j+1:j+n/2)); %对一层分解后的四个图像分别再分解
imgn(i+1:i+m/2,j+1:j+n/2)=[LL LH;HL HH];
end
end
imshow(imgn);
imshow(imgn);
对lena.bmp(512*512)仿真结果图如下:
图1.2 图像小波变换一层分解结果图
图1.2 图像小波变换二层分解结果图
2.图像的融合原理
2.1 融合规则
规则一:系数绝对值较大法
该融合规则适合高频成分比较丰富,亮度、对比度比较高的源图像,否则在融合图像中只保留一幅源图像的特征,其他的特征被覆盖。
小波变换的实际作用是对信号解相关,并将信号的全部信息集中到一部分具有大幅值的小波系数中。
这些大的小波系数含有的能量远比小系数含有的能量大,从而在信号的重构中,大的系数比小的系数更重要。
规则二:加权平均法
权重系数可调,适用范围广,可消除部分噪声,源图像信息损失较少,但会造成图像对比度的下降,需要增强图像灰度。
规则三:局部方差准则
设A(x,y)和B(x,y)分别为高频子图像数据值,F(x,y)为相应高频子图像融合值,将A(x,y)和B(x,y)分成若干个M×N子块图像。
对每个子块图像进行数值分布统计,计算其方差。
确定A和B图像每个子块图像加权系数K1和K2。
如果A图像子块方差大于B图像子块方差,则K1≥K2,否则K1<K2。
确定每个子块图像的数据融合数值为:F(i,j)=K1A(i,j)+K2B(i,j)。
2.2 融合应用
若对二维图像进行N层的小波分解,最终将有(3N+1)个高低频带,其中包含3N个高频带和一个低频带。
图像融合的基本步骤如下。
1)对每一源图像分别进行小波分解,建立图像的小波金字塔分解。
2)对各分解层分别进行融合处理,采用不同的融合算子对各分解层的不同频率分量进行融合处理,最终得到融合后的小波金字塔。
低频:加权平均,高频:绝对值取大。
3)对融合后所得的小波金字塔进行小波逆变换,所得到的重构图像即为融合后的图像。
图2.1基于小波变换的图像融合原理图
2.3Matlab 仿真结果
源代码:
clc;
clear all;
close all; % 清理工作空间
clear
[imA,map1] = imread('./data/A.tif');
M1 = double(imA) / 256;
[imB,map2] = imread('./data/B.tif');
M2 = double(imB) / 256;
zt= 4;
wtype = 'haar';
% M1 - input image A
% M2 - input image B
% wtype使用的小波类型
% Y - fused image %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 小波变换图像融合%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 小波变换的绝对值大的小波系数,对应着显著的亮度变化,也就是图像中的显著特征。
所以,选择绝对值大
%% 的小波系数作为我们需要的小波系数。
【注意,前面取的是绝对值大小,而不是实际数值大小】
%%
%% 低频部分系数采用二者求平均的方法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[c0,s0] = wavedec2(M1, zt, wtype);%多尺度二维小波分解
[c1,s1] = wavedec2(M2, zt, wtype);%多尺度二维小波分解
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 后面就可以进行取大进行处理。
然后进行重构,得到一个图像
%% 的小波系数,然后重构出总的图像效果。
%% 取绝对值大的小波系数,作为融合后的小波系数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
KK = size(c1);
Coef_Fusion = zeros(1,KK(2));
Temp = zeros(1,2);
Coef_Fusion(1:s1(1,1)) = (c0(1:s1(1,1))+c1(1:s1(1,1)))/2; %低频系数的处理
%这儿,连高频系数一起处理了,但是后面处理高频系数的时候,会将结果覆盖,所以没有关系
%处理高频系数
MM1 = c0(s1(1,1)+1:KK(2));
MM2 = c1(s1(1,1)+1:KK(2));
mm = (abs(MM1)) > (abs(MM2));
Y = (mm.*MM1) + ((~mm).*MM2);
Coef_Fusion(s1(1,1)+1:KK(2)) = Y;
%处理高频系数end
%重构
Y = waverec2(Coef_Fusion,s0,wtype);
%显示图像
subplot(1,3,1);imshow(M1);
colormap(gray);
title('input2');
axis square
subplot(1,3,2);imshow(M2);
colormap(gray);
title('input2');
axis square
subplot(1,3,3);imshow(Y,[]);
colormap(gray);
title('融合图像');
axis square;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
图2.2 基于小波变换的图像融合结果图
参考文献
[1] /silence-hust/p/4193480.html
[2] /daisy9212/article/details/49184271
[3] /xiaojidan2011/article/details/8099433。