I have the following code (recognizing individuals pixels of a matrix). For a high number of images, this is very time consuming. Therefore, ¿Could the loop be avoided ? Thanks!
    7 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
V=zeros(x,y,num_images,'uint16')
for k=1:num_images
for i= 1:x
for j= 1:y
    if B(i,j,k)==0
        V(i,j,k)= A(i,j,k)/3
    else
        V(i,j,k)= A(i,j,k)/3+(2^15)
    end
end
end
end
1 Commento
  KSSV
      
      
 il 22 Dic 2016
				First you terminate the outputs with ;. Else it will take hell lot of time, because it will print result on the screen.
V=zeros(x,y,num_images,'uint16') ;
for k=1:num_images
    for i= 1:x
        for j= 1:y
            if B(i,j,k)==0
                V(i,j,k)= A(i,j,k)/3 ;
            else
                V(i,j,k)= A(i,j,k)/3+(2^15) ;
            end
        end
    end
end
Risposta accettata
  David Barry
      
 il 22 Dic 2016
        
      Modificato: David Barry
      
 il 22 Dic 2016
  
      It's difficult to know the relationship between A, B and V from your example code but I am assuming they are of equal dimensions. In which case I think you probably want something like this instead of the loop.
V = zeros(size(B));
V(B == 0) = A(B == 0)/3;
V(B ~= 0) = A(B ~=0)/3 + 2^15;
0 Commenti
Più risposte (2)
  John BG
      
 il 22 Dic 2016
        there is no need to initialise the void V, go straight to the indices returned from functions
- find( zeros())
- find( nonzeros())
A=A/3
V(find(zeros(B)))=A(find(zeros(B)))+2^15
V(find(nonzeros(B)))=A(find(nonzeros(B)))
if you find my answer useful would you please mark it as Accepted Answer by clicking on the ACCEPT ANSWER button?
thanks in advance for time and attention
John BG
1 Commento
  Jan
      
      
 il 19 Feb 2017
				
      Modificato: Jan
      
      
 il 20 Feb 2017
  
			Both lines do not work:
- nonzeros() replies the vector of the non-zero elements and the information about the position inside B is lost.
- zeros() creates an array of zeros with the elements of B as dimensions. Therefore find(zeros(B)) will reply the empty matrix.
Vedere anche
Categorie
				Scopri di più su Logical in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



