画像融合の最大ウェーブレット係数

%ウェーブレット係数の最大値は画像融合に使用されます

clc; clear
X1 = imread( 'lena64.bmp'); 
 X1 = imresize(X1、[184 184]);
I1 =(X1);%カラー画像をグレー画像に変換する
figure(1);
subplot(131) ; imshow(I1);%画像1の表示
title( 'MRI');
X2 = imread('21 .jpg ');
X2 = imresize(X2、[184 184]);
I2 = rgb2gray(X2 / 2);%カラー画像をグレースケール画像に変換します
subplot(132); imshow(I2);%display image 2
title( 'CT');

I11 = im2double(I1);
I22 = im2double(I2);

n = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
各周波数成分を取得するためのウェーブレット係数分解係数
[c1、s1] = wavedec2(I11、n、 'db4');
[c2、s2] = wavedec2(I22、n、 'db4');
%%%%%%%%%%%%%%% %% %%%%%%%%%%%%%%%%%%%最初の画像(MRI)の処理:
%[h11、v11、d11] = detcoef2( 'all'、c1、s1,1 );%2次元ウェーブレット分解の第1層の詳細なコンポーネントを抽出します(高周波係数)
%[h12、v12、d12] = detcoef2( 'all'、c1、s1,2);%第2層を抽出します2次元ウェーブレット分解の詳細成分(高周波係数)
%[h13、v13、d13] = detcoef2( 'all'、c1、s1,1);%2次元ウェーブレット分解の第3層の詳細成分を抽出します。 (高周波係数)
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2番目の画像(CT)の処理:
%[h21 、v21、d21] = detcoef2( 'all'、c2、s2,1);%最初の層の最初の2次元ウェーブレット分解の詳細な成分(高周波係数)を抽出します
%[h22、v22、d22] = detcoef2( 'all'、c2、s2,2);
[h23、v23、d23] = detcoef2( 'all'、c2、s2,1);
%%%%%%%%%%%%%%%% %%%%%%%%%%%%% %%%%%%%最上層(第3層)の低周波係数を抽出します
a31 = appcoef2(c1、s1、'db4'、1);%多層2次元ウェーブレット分解の近似成分を抽出します(低周波数係数)
a32 = appcoef2(c2、s2、 'db4'、1);%


A3 =(a31 + a32);

X = I22;
[SIZEX、SIZEY] = size(X);%画像サイズ
    
%マルチスケール
m = 1.0;
delta = 2 ^ m;
%ガウス関数の偏導関数の構築
N = 20;%フィルター長(必要調整するには、偶数である必要があります)
A = -1 / sqrt(2 * pi);
index_x = 1:Nの%振幅;
    index_y = 1:Nの場合;
        x = index_x-(N + 1)/ 2;
        y = index_y-(N +1)/ 2;
        phi_x(index_x、index_y)= A *(x / delta ^ 2)。* exp(-(x。* x + y。* y)/(2 * delta ^ 2 ));
        phi_y(index_x、index_y)= A *(y / delta ^ 2)。* exp(-(x。* x + y。* y)/(2 * delta ^ 2));
    end
end;
phi_x = phi_x / norm(phi_x);%エネルギー正規化
phi_y = phi_y / norm(phi_y);%エネルギー正規化
%画像上の行と列の畳み込み
Gx = conv2(X、phi_x、 'same');
Gy = conv2(X、 phi_y、 'same');
%勾配を見つける
Grads = sqrt((Gx * Gx)+(Gy * Gy));
%は、角度(勾配方向)検索
angle_array =ゼロ(SIZEX、SIZEY)を;%の
トラバース
I = 1の場合:SIZEX;
    = 1 jについて:SIZEY
        IF(ABS(Gxを(I、J))> EPS * 100)% xの絶対値は十分に大きい
            p = atan(Gy(i、j)/ Gx(i、j))* 180 / pi;%
            (p <0)%の場合に角度値(1,4象限)を見つけるためのアークタンジェント負の引数(4象限)
                p = p + 360;
            end;
            if(Gx(i、j)<0&p> 180)%2象限の特別扱い
                p = p-180;
            elseif(Gx(i、j) <0&p <180)%3象限の特別処理
                p = p + 180;
            end
        else%90または270度
            p = 90;
        end
        angle_array(i、j)= p;%引数割り当て
    end
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%振幅のウェーブレット分解
n = 1
[c4、s4] = wavedec2 (Grads、n、 'db4');
%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% %%%%%%高周波係数を抽出するだけでよい
%[h41、v41、d41] = detcoef2( 'all'、c4、s4,1);%2次元ウェーブレットの最初の層の詳細なコンポーネントを抽出する分解(高周波係数)
%[h42、v42、d42] = detcoef2( 'all'、c4、s4,2);%2次元ウェーブレット分解コンポーネント(高周波係数)の第2層の詳細を抽出します
[ h43、v43、d43] = detcoef2( 'all'、c4、s4,1);%2次元ウェーブレット分解の第3層の詳細なコンポーネントを抽出します(高周波係数)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CTエッジ画像の角度ウェーブレット分解を実行します
n = 1
[c5、s5] = wavedec2(angle_array、n、 'db4');
%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%高周波数係数を抽出するだけでよい
%[h51、v51、d51] = detcoef2( 'all'、c5、s5,1);%extract最初の2次元ウェーブレット分解の詳細なコンポーネント(高周波係数)
%[h52、v52、d52] = detcoef2( 'all'、c5、s5,2);%2番目の2次元の詳細なコンポーネントを抽出しますウェーブレット分解(高周波係数)
[h53、v53、d53] = detcoef2( 'all'、c5、s5,1);%2次元ウェーブレット分解の第3層の詳細成分を抽出します(高周波係数)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%角度検出  
%% %%%%%%%第3レベルの水平係数の検出。ここで、H3(i、j)は、融合後の第1レベルのウェーブレット係数の水平成分です。
%%%は、角度値を介して振幅値の方向を決定します。 、次に隣接する2つのポイント値の比較に接続し、最大値に対応する元のCT画像のウェーブレット係数を融合後のポイントのウェーブレット係数として取得します。
%%% h53は角度の水平成分、h43は振幅の水平成分
[SIZEX、SIZEY] = size(h53);
H3 = h23;
for i = 2:SIZEX-1
    for j = 2:SIZEY-1
        if((h53(i、j)> =(-22.5 )&h53(i、j)<= 22.5)| ...
            (h53(i、j)> =(180-22.5)&h53(i、j)<=(180 + 22.5)))%0/180
            if(h43(i、j)> h43(i + 1、j)&h43(i、j)> h43(i-1、j))
               H3(i、j)= h23(i、j);
            elseif h43 (i + 1、j)> h43(i-1、j)
               H3(i、j)= h23(i + 1、j); 
            else
                H3(i、j)= h23(i-1、j);
            終了

        elseif((h53(i、j)> =(90-22.5)&h53(i、j)<=(90 + 22.5))| ...
                (h53(i、j)> =(270-22.5)& h53(i、j)<=(270 + 22.5)))%90/270
            if(h43(i、j)> h43(i、j + 1)&h43(i、j)> h43(i、j- 1))
                H3(i、j)= h23(i、j);
            elseif h43(i、j + 1)> h43(i、j-1)
                H3(i、j)= h23(i、j + 1);
            それ以外の場合、
                H3(i、j)= h23(i、j-1);
            終わり

        elseif((h53(i、j)> =(45-22.5)&h53(i、j)<=(45 + 22.5))| ...
                (h53(i、j)> =(225-22.5)& h53(i、j)<=(225 + 22.5)))%45/225
            if(h43(i、j)> h43(i + 1、j + 1)&h43(i、j)> h43(i- 1、j-1))
                H3(i、j)= h23(i、j);
            elseif h43(i + 1、j + 1)> h43(i-1、j-1)
                H3(i、j)= h23(i + 1、j + 1);
            それ以外の場合、
                 H3(i、j)= h23(i-1、j-1);
            終わり

        else%135/215
            if(h43(i、j)> h43(i + 1、j-1)&h43(i、j)> h43(i-1、j + 1))
                H3(i、j)= h23(i、j);
            elseif h43(i + 1、j-1)> h43(i-1、j + 1)
                 H3(i、j)= h23(i + 1、j-1);
            それ以外の場合、
                H3(i、j)= h23(i-1、j + 1);
            終わり

        エンド
    エンド
エンド

。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

D-20

おすすめ

転載: blog.csdn.net/ccsss22/article/details/115273985