MATLAB: la variable « sumt » dans la boucle for ne peut-elle pas continuer à ajouter des nombres

 
function out = blur(m,w)
[r,c] = size(m);
out = ones(r,c)*255;
for kk= 1:c
for ll = 1:r
out(kk,ll) = finddims(m,kk,ll,w,r,c);
end
end
end
function ave = finddims(mat,x,y,w,row,col)
sumt = 0;
cou =0;
i1= x-w;
i2 = x+w;
j1 = y-w;
j2 = y+w;
if i1<1
i1 =1;
elseif i2>col
i2 = col;
end
if j1<1
j1 = 1;
elseif j2>row
j2 = row;
end
for mm= i1:i2
for nn = j1:j2
sumt = sumt + mat(nn,mm); % sum doesn't keep on adding in the loop
cou = cou+1;
end
end
ave = uint8(sumt/cou);
end
 

Meilleure réponse

  • « Pourquoi la variable » sumt « de ma boucle for ne peut-elle pas continuer à ajouter des nombres? »
    En raison de la classe detapis.
    Probablementtapisa classeuint8(si vous avez affaire à des images), auquel cas vous devez faire attention à ce qui se passe lorsque vous ajoutez un double scalaire et un entier scalaire:
    scalar integer + scalar double => scalar integer
    Donc, bien quesumtcommence à être double (c’est-à-dire 0), la première fois que vous faites cette sommeproductionest un entier, ce qui signifiesumtest un entier, ce qui signifie qu’il est limité à 255 (ou le maximum pour la classe entière de vos données).
    La solution est simple: utiliserdoublepour convertir l’entier avant d’ajouter:
     

    sumt = sumt + double(mat(nn,mm));
    % ^^^^^^^ ^ you need this!