How to reduce the number of "for" loops (while implementing an overlapping block-wise processing on an image)?
    3 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
I have the following code section to implement overlapping blocks in any square image (my image size 128*128). For each block, I would like to find HOG (Histogram of Oriented Gradients) features and then concatenate them at last to use it for classification.
The block size = 64
The step size = 16 (Both Horizontal & Vertical)
How can I implement a faster version of the following code section without using "for" loops? :
      window_size=64;
      step_size=16;
      %the input image is stored in the variable "image"
      for k=0:4
            for n=0:4
                   for i=((step_size*n)+1):window_size+(step_size*n)
                       for j=((step_size*k)+1):window_size+(step_size*k)   
                              img(p,q)=image(i,j);     %get the block and store it in "img"
                              q=q+1;
                       end
                       p=p+1;q=1;
                   end
                   hog_block{k+1,n+1}=extractHOGFeatures(img);       %storing each block's HOG features in a cell
                   p=1;
             end
       end
             hog_blocks_mat=cell2mat(lbp);      %convert to matrix
           hog_vector=reshape(hog_blocks_mat',1,numel(hog_blocks_mat));    %convertto a row vector
Please help.
0 Commenti
Risposta accettata
  Jan
      
      
 il 13 Gen 2017
        These loops:
for i=((step_size*n)+1):window_size+(step_size*n)
  for j=((step_size*k)+1):window_size+(step_size*k)   
    img(p,q)=image(i,j);     %get the block and store it in "img"
    q=q+1;
  end
  p=p+1;q=1;
end
can be rewritten to:
iIni = (step_size*n) + 1);
iFin = window_size+(step_size*n);
jIni = (step_size * k) + 1;
jFin = window_size + (step_size * k);
img  = image(iIni:iFin, jIni:jFin);
Più risposte (1)
  Tohru Kikawada
    
 il 13 Gen 2017
        You can use blockproc for block processing. 'UseParallel' option enables to execute in parallel. See this link for details.
2 Commenti
  Image Analyst
      
      
 il 14 Gen 2017
				Yes to both questions. It will move in steps/jumps of window_size. You can change the value of window_size. You can also move sliding (not full jumps). See the help.
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



