Why does ISWT2 (R2017a) fail for coefficients in single precision?
    4 views (last 30 days)
  
       Show older comments
    
    Shogo Muramatsu
      
 on 14 May 2017
  
    
    
    
    
    Commented: Walter Roberson
      
      
 on 17 May 2017
            ISWT2 (R2017a) seems not to work properly for coefficients in single precision. The code below fails only for the single precision case.
nLevels = 1;
%%For image in double
X = im2double(imread('cameraman.tif'));
C = swt2(X,nLevels,'haar');
Y = iswt2(C,'haar');
psnr(Y,X)
%%For image in single
X = im2single(imread('cameraman.tif'));
C = swt2(X,nLevels,'haar');
Y = iswt2(C,'haar'); % <- error
psnr(Y,X)
Why does this phenomenon happen?
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 16 May 2017
        It is a bug in the code. If you look near line 110 of iswt2 you will see
    % Ambiguity:
    % (level=3 and indexed BW image) or (level=1 and truecolor image)
    % To suppress this Ambiguity, the function SWT2 in case of a true 
    % color image and a level 1 analysis, produce single for approximation
    % coefficients !!
So the swt2 code is encoding information about BW vs truecolor in the datatype (!) and then iswt2 flubs the reconstruction.
The work-around is to use
[A,H,V,D] = swt2(X,nLevels,'haar');
Y = iswt2(A, H, V, D);
3 Comments
More Answers (1)
  Ankit Bhatnagar
    
 on 16 May 2017
        Hi,
The ISWT2 works only with double precision as it uses functionality which expects the value to be double. Kindly use the double precision for this function.
1 Comment
See Also
Categories
				Find more on イメージ解析 in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!