資源簡介
小波圖像融合matlab實現源代碼 ,利用小波實現了圖像融合。含圖片

代碼片段和文件信息
function?y=imfus(I1I2);
st=cputime; %?程序開始運行時的cpu時間
I1=imread(‘untitled3.jpg‘);
I2=imread(‘untitled4.jpg‘);
I1=I1(::1);I2=I2(::1);????%讀取彩色RGB圖像的第一顏色分量
[r1c1]=size(I1);?????????????%?讀取圖像分解后的小波分解系數矩陣的大小
[r2c2]=size(I2);
if?(r1~=r2)||(c1~=c2)
????error(‘Images?dimension?mismatch.The?image?size?must?be?the?same!‘);
????return;
end
dim=3;
figure;?????????????????????%?對模糊化后的兩幅圖像進行小波分解
y1=mywavedec2(I1dim);
figure;
y2=mywavedec2(I2dim);
[rc]=size(y1); %?根據低頻融合算法進行圖像融合
for?i=1:r %?首先取兩幅源圖像相應的小波分解系數最大值作為融合圖像的分解系數
????for?j=1:c
????????if?(?abs(y1(ij))?>=?abs(y2(ij))?)
????????????y3(ij)=y1(ij);
????????elseif?(?abs(y1(ij))?????????????y3(ij)=y2(ij);
????????end
????end
end
LLa=y1(1:r/(2^dim)1:c/(2^dim)); %?調用lowfrefus函數對低頻部分的小波分解系數進行融合
LLb=y2(1:r/(2^dim)1:c/(2^dim));
y3(1:r/(2^dim)1:c/(2^dim))=lowfrefus(LLaLLb);
yr=mywaverec2(y3dim);????%?調用mywaverec2函數重構融合圖像
et=cputime-st %?計算程序運行所用的時間
averEntropy1=averEntropy(I1)
averEntropy2=averEntropy(I2)
averEntropy3=averEntropy(yr)
aveGrad1?=?avegrad(I1)
aveGrad2?=?avegrad(I2)
aveGrad3?=?avegrad(yr)
function?y=upspl(x);
N=length(x);????????%?讀取輸入序列長度
M=2*N-1;????????????%?輸出序列的長度是輸入序列長度的2倍再減一
for?i=1:M???????????%?輸出序列的偶數位為0,奇數位按次序等于相應位置的輸入序列元素
????if?mod(i2)
????????y(i)=x((i+1)/2);
????else
????????y(i)=0;
????end
end
function?[smatmpnp]?=?submat(xplevel);
%?函數?submat?取輸入矩陣中以點P為中心、階數為(2*level+1)的方陣作為輸出的子矩陣
[rowcol]=size(x);
m=p(1);?n=p(2);
if?(m>row)||(n>col)
????error(‘Point?p?is?out?of?matrix?X?!‘);
????return;
end
if?((2*level+1)>row)||((2*level+1)>col)
????error(‘Too?large?sample?area?level?!‘);
????return;
end
%?設置子矩陣的邊界值
up=m-level;?????down=m+level;
left=n-level;???right=n+level;
%?若子矩陣的某一邊界值超出輸入矩陣的相應邊界,就進行邊界處理,
%?即超出邊界后往相反方向平移,使其恰好與邊界重合
if?left<1
????right=right+1-left;
????left=1;
end
if?right>col
????left=left+col-right;
????right=col;
end
if?up<1
????down=down+1-up;
????up=1;
end
if?down>row
????up=up+row-down;
????down=row;
end
%?獲取作為輸出的子矩陣,并計算點p在輸出的子矩陣中的位置
smat?=?x(up:downleft:right);
mp=m-up+1;np=n-left+1;
function?y=mywaverec2(xdim)
xd=uint8(x);????????????%?將輸入矩陣的數據格式轉換為適合顯示圖像的uint8格式
[mn]=size(x);??????????%?求出輸入矩陣的行列數
for?i=1:dim?????????????%?對轉換矩陣xd進行分界線處理
????m=m-mod(m2);
????n=n-mod(n2);
????xd(m/21:n)=255;
????xd(1:mn/2)=255;
????m=m/2;n=n/2;
end
figure;
subplot(121);imshow(xd);title([?num2str(dim)?‘?層小波分解圖像‘]);??%?畫出帶有分界線的分解圖像
xr=double(x);???????????%?將輸入矩陣的數據格式轉換回適合數值處理的double格式
[rowcol]=size(xr);?????%?求出轉換矩陣xr的行列數
for?i=dim:-1:1??????????%?重構次序是從內層往外層進行,所以先抽取矩陣?xr?的最內層分解矩陣進行重構
????tmp=xr(1:floor(row/2^(i-1))1:floor(col/2^(i-1)));???????%?重構的內層矩陣的行列數均為矩陣xr的2^(i-1)
????[rt1ct1]=size(tmp);?????????????????????????%?讀取待重構矩陣?tmp?的行列數
????rt=rt1-mod(rt12);ct=ct1-mod(ct12);
????rLL=tmp(1:rt/21:ct/2);????????????????????%?將待重構矩陣?tmp?分解為四個部分
????rHL=tmp(1:rt/2ct/2+1:ct);
????rLH=tmp(rt/2+1:rt1:ct
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11700??2009-04-19?11:23??WaveletImageFusion.m
?????文件????????725??2011-08-03?16:01??新建?文本文檔?(3).txt
-----------?---------??----------?-----??----
????????????????12425????????????????????2
評論
共有 條評論