1. 程式人生 > >小波影象融合的Matlab實現示例(新增圖片演示080428)

小波影象融合的Matlab實現示例(新增圖片演示080428)

% 函式 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是融合效果圖。