【问题标题】:Image Fusion using stationary wavelet transform (SWT) (MATLAB)使用平稳小波变换 (SWT) (MATLAB) 的图像融合
【发布时间】:2015-03-20 00:21:34
【问题描述】:

我正在尝试使用 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 的图像。当您在命令提示符或该脚本中执行 size(im1)size(im2) 时会发生什么?您总是可以在图像上执行imresize 以使其达到该大小......但该图像仍然非常小。肯定有些不对劲。
  • 尺寸为 1x5 的东西甚至不应该被称为“图像”。
  • @AnderBiguri - dat 的 ri 兄弟。它应该被称为 matx。
  • 现在我已经更改了图像及其工作方式。感谢您指出@rayryeng​​span>
  • @rayryeng 我使用 imshow(imf,[]) 来显示图像。空矩阵用于数据范围。图像完美显示。在接下来的步骤中,我将尝试存储该图像 imwrite(imf,Iname);这张图片是白色的。为什么图像会这样保存?如何正确保存图片??

标签: image matlab image-processing matrix wavelet


【解决方案1】:

为了解决您的第一个问题,该图像非常小。我假设这是一个 1 x 5 大小的图像。我建议更改您的图像以使其更大,或者在图像上做一个imresize。但是,正如 Ander 在对您的评论中所说的那样……我不会将 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,[]); 会为您执行此标准化并显示该结果,但不会修改图像。

【讨论】:

  • 现在它正在正确保存图像。感谢您的帮助@rayryeng​​span>
  • @PorkodiDevi - 我的荣幸。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2014-02-13
  • 1970-01-01
相关资源
最近更新 更多