2011-12-03 4 views
0

J'ai un masque logique de pixels e1 qui doit être "blended". Quelle que soit la valeur que je mets pour k, la boucle exécute k fois mais l'image n'est affectée qu'une seule fois. code:Problème avec une simple boucle dans Matlab

for k=1:5 %I want to do it 5 times but it does the action only once. 
    for i=2:rows-1 
     for j=2:cols-1 
      if e1(i, j) == 1 %if mask == 1, I take "marked" pixel, 8 pixel surrounding it, and avg them. 
       I2(i, j, 1) = (I2(i, j-1, 1) + I2(i, j+1, 1) + I2(i-1, j, 1) + I2(i-1, j-1, 1) + I2(i-1, j+1, 1) + I2(i+1, j, 1) + I2(i+1, j+1, 1) + I2(i+1, j-1, 1))/8; 
       I2(i, j, 2) = (I2(i, j-1, 2) + I2(i, j+1, 2) + I2(i-1, j, 2) + I2(i-1, j-1, 2) + I2(i-1, j+1, 2) + I2(i+1, j, 2) + I2(i+1, j+1, 2) + I2(i+1, j-1, 2))/8; 
       I2(i, j, 3) = (I2(i, j-1, 3) + I2(i, j+1, 3) + I2(i-1, j, 3) + I2(i-1, j-1, 3) + I2(i-1, j+1, 3) + I2(i+1, j, 3) + I2(i+1, j+1, 3) + I2(i+1, j-1, 3))/8; 
      end 
     end 
    end 
end 
+0

Ce comportement sera attendu si tous vos éléments '1' dans l'image e1 est sans lien. Si c'est le cas, plus d'un passage sur I2 ne produira pas de résultats différents, car aucun point voisin n'est changé. – Vidar

Répondre

0

Je pense que vous devriez essayer:

for k=1:5 
    I2=convn(I2,[1 1 1;1 0 1;1 1 1]/8); 
end