簡體   English   中英

使用平穩小波變換(SWT)(MATLAB)的圖像融合

[英]Image Fusion using stationary wavelet transform (SWT) (MATLAB)

我正在嘗試使用SWT融合兩個圖像。 但是我得到這個錯誤:

分解等級1
和圖像的大小(1,5)
不兼容。
建議尺寸:(2,6)

如何更改圖像的大小以使其兼容轉換?

我使用的代碼是:

        clc
        i=1;
        fol=1;
        n=0;          


      for fol=1:5
      f='folder';
      folder = strcat(f, num2str(fol)); 
      cd(folder)
      d= numel(D);
      i=(n+1);
      Fname1 = strcat(int2str(i),'.bmp');
      Fname2 = strcat(int2str(i+1),'.bmp');

      im1 = imread(Fname1);
      im2 = imread(Fname2);

      im1=double(im1);
      im2=double(im2);
      % image decomposition using discrete stationary wavelet transform
     [A1L1,H1L1,V1L1,D1L1] = swt2(im1,1,'sym2');
     [A2L1,H2L1,V2L1,D2L1] = swt2(im2,1,'sym2');

     %  fusion start
     AfL1 = 0.5*(A1L1+A2L1);
     D = (abs(H1L1)-abs(H2L1))>=0;
     HfL1 = D.*H1L1 + (~D).*H2L1;
      D = (abs(V1L1)-abs(V2L1))>=0;
     VfL1 = D.*V1L1 + (~D).*V2L1;
     D = (abs(D1L1)-abs(D2L1))>=0;
      DfL1 = D.*D1L1 + (~D).*D2L1;

      % fused image
     imf = iswt2(AfL1,HfL1,VfL1,DfL1,'sym2');
     figure; 
     imshow(imf,[]); 
     Iname= strcat(int2str(fol),'.bmp');  
     imwrite(imf,Iname);
     end

為了解決您的第一個問題,該圖像很小。 我假設這是一張尺寸為1 x 5的圖像。我建議您更改圖像,使其更大,或者對圖像進行imresize 但是,正如安德在對您的評論中所說的那樣……我不會將1 x 5矩陣稱為圖像。

為了解決第二個問題,一旦最終加載圖像,小波變換很可能會為您提供超出任何有意義的浮點精度圖像的動態范圍的浮點數。 因此,最好先對圖像進行標准化 ,然后再將其保存到文件中。

因此,請在保存圖像之前立即執行以下操作:

%// ...
%// Your code...
imshow(imf,[]); 

%// Normalize the image - Change
imf = (imf - min(imf(:))) / (max(imf(:)) - min(imf(:)));

%// Your code again
%// Now save
Iname= strcat(int2str(fol),'.bmp');  
imwrite(imf,Iname);

上面的轉換對圖像進行了歸一化處理,因此最小值為0,最大值為1。執行此操作后,應將其正確可視化。 FWIW,執行imshow(imf,[]); 為您執行此歸一化並顯示結果,但不會修改圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM