Question

After retrieving image coeffients (both approximate and detailed) in wavelet decomposition, i want quadtree structure for appoximate and detailed coefficients. but every time i am getting same error. Please help. I tried to make it power of 3 instead of 2 but it coudnt help. may be i am going wrong somehwhere.

code for image decomposition


X=imread('abc.tif');
close all
clf
image(X)
colormap('default')
axis ('image'); set(gca,'XTick',[],'YTick',[]); title('Original')
pause

dwtmode('sym')
wname = 'bior4.4'

t = wtree(X,2,'bior4.4');
plot(t)
pause
close(2)

[wc,s] = wavedec2(X,5,wname);

a1 = appcoef2(wc,s,wname,1);         
h1 = detcoef2('h',wc,s,1);           
v1 = detcoef2('v',wc,s,1);           
d1 = detcoef2('d',wc,s,1);           

a2 = appcoef2(wc,s,wname,2);
h2 = detcoef2('h',wc,s,2);
v2 = detcoef2('v',wc,s,2);
d2 = detcoef2('d',wc,s,2);

a3 = appcoef2(wc,s,wname,3);         
h3 = detcoef2('h',wc,s,3);           
v3 = detcoef2('v',wc,s,3);           
d3 = detcoef2('d',wc,s,3);           

a4 = appcoef2(wc,s,wname,4);         
h4 = detcoef2('h',wc,s,4);           
v4 = detcoef2('v',wc,s,4);           
d4 = detcoef2('d',wc,s,4);           

a5 = appcoef2(wc,s,wname,5);         
h5 = detcoef2('h',wc,s,5);           
v5 = detcoef2('v',wc,s,5);           
d5 = detcoef2('d',wc,s,5); 

For quadtree i am using:

S = qtdecomp(I,.27); %I is image in greyscale.
blocks = repmat(uint8(0),size(S));

for dim = [512 256 128 64 32 16 8 4 2 1];    
  numblocks = length(find(S==dim));    
  if (numblocks > 0)        
    values = repmat(uint8(1),[dim dim numblocks]);
    values(2:dim,2:dim,:) = 0;
    blocks = qtsetblk(blocks,S,dim,values);
  end
end

blocks(end,1:end) = 1;
blocks(1:end,end) = 1;

imshow(I), figure, imshow(blocks,[])

the error it is showing is:

??? Error using ==> qtdecomp>ParseInputs at 229
MAXDIM / MINDIM is not a power of 2

Error in ==> qtdecomp at 88
[A, func, params, minDim, maxDim] = ParseInputs(varargin{:});

or

??? Error using ==> qtdecomp>ParseInputs at 145
A must be two-dimensional

Error in ==> qtdecomp at 88
[A, func, params, minDim, maxDim] = ParseInputs(varargin{:});
Was it helpful?

Solution

The error is pretty clear. Your image must have dimensions that belong to a power of two. As such, you need to resize your image so that it follows this. qtdecomp computes the quadtree decomposition algorithm, and a pre-condition for this function is that it NEEDS to have an image that has each dimension as a power of two as input.

You asked something similar in another question that I provided an answer to. What is curious is that this other question you asked was 6 days ago before this one, and you accepted my answer for that other one. The issue that you were experiencing is more or less the same thing.

Quadtree decomposition

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top