基于小波变换的图像融合程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
set(handles.text4,'visible','on')
pause(1)
[X,map]=imread('C:\Users\Administrator\Desktop\matlab\image1.jpg') ;
%map是色谱,map每一行分别代表R、G、B,涵盖了图像中出现的所有颜色组合。
%X是像素颜色值,数据矩阵X的值指向map的某一行。
X1=X;
map1=map;
subplot(2,2,1);
image(X1);
colormap(map1);%指当前显示的figure窗口色图按照指定map1进行搭配,用MAP矩阵映射当前图形的色图title('原始图像1')
axis square
[X,map]=imread('C:\Users\Administrator\Desktop\matlab\image2.jpg') ;
X2=X;
map2=map;
subplot(2,2,2);
image(X2);
colormap(map2);
title('原始图像2');
axis square
if ndims(X1)==3 %表示三位矩阵
X3=rgb2gray(X1);%满足这个条件时,把X1转换成灰度图赋值给X3
else
X3=X1;%·否则直接赋值
end
if ndims(X2)==3
X4=rgb2gray(X2);%满足这个条件时,把X2转成灰度图赋值给X4
else
X4=X2;
end
X3=double(X3);%转换成双精度数据
X4=double(X4);
%matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,如果不转换,计算会产生溢出
%%进行小波变换
[C1,L1]=wavedec2(X3,2,'sym4');%小波变换
[C2,L2]=wavedec2(X4,2,'sym4');%小波变换
%wavedec2:二维信号的多层小波分解
%2:就是小波包的层数,小波分解可以按照树形结构一层一层的往下分解,分解到多细,主要看你想分析的频段是什么,如果是2层小波包分解的话,就是把频率分成了4等分,显示出每个频段的小波系数
&sym4:是小波的名字,小波分解不同于傅里叶分解,他可以自己选取“基”,这里就是选取sym4小波作为函数空间的基。这个不是重点,对于一般的函数,选不同的基差别不大。只有一些比较极端的函数,需要特殊的基来分析。
%%融合
C=(C1+C2)*0.5;%给C赋值
X=waverec2(C,L1,'sym4');%调用函数waverec2
% waverec2:二维信号的多层小波重构
X=uint8(X);%把矩阵转化成uint8类型,uint8(8位无符号整数),
subplot(223)%画2行2列第3个图
title('基于小波变换的图像融合');
imshow(X);%画图
set(handles.text4,'visible','off')
set(handles.pushbutton1,'visible','off')