1. 程式人生 > >matlab使用小波變換進行影象融合

matlab使用小波變換進行影象融合

clc;
clear all;
X1=imread('cs1.jpg');
X1=double(X1)/256;     %這裡轉化成double型別,否則使用小波變換輸出的會有大量大於1的存在,會導致影象顯示有問題
% X1=rgb2gray(X1);  %原本以為小波變換隻能使用一維的,看來可以使用3維
figure;
imshow(X1),title('左焦距');
axis square;
 X2=imread('cs2.jpg');
X2=double(X2)/256;
%  X2=rgb2gray(X2);
 figure;
 imshow(X2),title('右焦距');
 axis square;

[c1,s1]=wavedec2(X1,2,'sym4');  %將x1進行2維,使用‘sym4’進行變換

sizec1=size(c1);
for I=1:sizec1(2);
    c1(I)=1.2*c1(I); 將分解後的值都擴大1.2倍
end
[c2,s2]=wavedec2(X2,2,'sym4');
c=c1+c2;     %計算平均值
c=0.5*c;
s=s1+s2;
s=0.5*s;
xx=waverec2(c,s,'sym4');  %進行重構
figure;
imshow(xx),title('融合後的');   

axis square;


結論:這裡沒有對影象進行特別的處理所以效果不是太好,只是演示小波融合影象的方法。

【c,s】wavedec2(x, n,'name')函式的使用

C是分解的各個係數,這裡分兩層,C中存的是【ABBCCC】的資料是按行存的,s中是存的的是:【A的行數,A的列數;B的行數,B的列數;C的行數,C的列數;原圖的行數,原圖的列數】。L層就有3L+1個小圖。