小波影象融合的Matlab實現示例(新增圖片演示080428)
阿新 • • 發佈:2019-02-03
% 函式 area_var_match 計算兩個輸入矩陣以點p為中心的區域方差以及區域方差匹配度
level=1; % 設定區域的大小
[subA,mpa,npa]=submat(A,p,level); % submat 函式取輸入矩陣中以點P為中心、階數為(2*level+1)的方陣作為子矩陣
[subB,mpb,npb]=submat(B,p,level);
[r,c]=size(subA);
w=weivec(subA,[mpa npa]); % 獲取子矩陣的權值分佈
averA=sum(sum(subA))/(r*c); % 計運算元矩陣的平均值
averB=sum(sum(subB))/(r*c);
Ga=sum(sum(w.*(subA-averA).^2)); % 計運算元矩陣的區域方差
Gb=sum(sum(w.*(subB-averB).^2));
if (Ga==0)&(Gb==0) % 計算兩個子矩陣的區域方差匹配度
m2p=0;
else
m2p=2*sum(sum(w.*abs(subA-averA).*abs(subB-averB)))/(Ga+Gb);
end
function [smat,mp,np] = submat(x,p,level);
% 函式 submat 取輸入矩陣中以點P為中心、階數為(2*level+1)的方陣作為輸出的子矩陣
[row,col]=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:down,left:right);
mp=m-up+1;np=n-left+1;
下面我們給出相應的圖片示例,圖1 是一幅遠景清晰近景模糊的圖片,圖2 是一幅遠景模糊近景清晰的圖片,圖3是融合效果圖。
level=1; % 設定區域的大小
[subA,mpa,npa]=submat(A,p,level); % submat 函式取輸入矩陣中以點P為中心、階數為(2*level+1)的方陣作為子矩陣
[subB,mpb,npb]=submat(B,p,level);
[r,c]=size(subA);
w=weivec(subA,[mpa npa]); % 獲取子矩陣的權值分佈
averA=sum(sum(subA))/(r*c); % 計運算元矩陣的平均值
averB=sum(sum(subB))/(r*c);
Ga=sum(sum(w.*(subA-averA).^2)); % 計運算元矩陣的區域方差
Gb=sum(sum(w.*(subB-averB).^2));
if (Ga==0)&(Gb==0) % 計算兩個子矩陣的區域方差匹配度
m2p=0;
else
m2p=2*sum(sum(w.*abs(subA-averA).*abs(subB-averB)))/(Ga+Gb);
end
function [smat,mp,np] = submat(x,p,level);
% 函式 submat 取輸入矩陣中以點P為中心、階數為(2*level+1)的方陣作為輸出的子矩陣
[row,col]=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:down,left:right);
mp=m-up+1;np=n-left+1;
下面我們給出相應的圖片示例,圖1 是一幅遠景清晰近景模糊的圖片,圖2 是一幅遠景模糊近景清晰的圖片,圖3是融合效果圖。