Hi,
I want to find mean value of a mammogram only by choosing the values greater than zero. I used for loops with condition but it gives 255 as answer constantly. I don't know what's the mistake i have done.
Code:
[x,y] = size(I);
s = 0;
for i = 1:x
for j = 1:y
if I(i,j) > 0
s = s + I(i,j);
end
end
end
disp('s = ');
disp(s);

 Respuesta aceptada

Walter Roberson
Walter Roberson el 6 de En. de 2013

0 votos

Change to
s = s + double(I(i,j));
Question: when you are calculating the mean, are you going to be dividing by the number of values in I, or by the number of non-negative values?
Also are you sure that I will be two-dimensional and not 3 dimensional?

1 comentario

Thank you walter. It works. I am going to divide the sum by no. of non-negative values.
Corrected Code:
[x,y] = size(I);
s = 0;
cnt = 0;
for i = 1:x
for j = 1:y
if I(i,j) > 0
s = s + double(I(i,j));
cnt = cnt + 1;
end
end
end
m = s/cnt;

Iniciar sesión para comentar.

Más respuestas (2)

Image Analyst
Image Analyst el 6 de En. de 2013

0 votos

Why are you doing two loops, which will make it slow? Why not just do:
nonZeroPixels = yourImage > 0;
meanValue = mean(yourImage(nonZeroPixels));
The way above is vectorized, faster, and very MATLABish.
Jan
Jan el 6 de En. de 2013

0 votos

Alternative method without loops:
s = mean(double(I(I > 0)));

2 comentarios

Walter Roberson
Walter Roberson el 6 de En. de 2013
mean() works even without the double()
Jan
Jan el 6 de En. de 2013
Yes, Walter, because the underlying SUM uses the DOUBLE format as default, when 'native' is not specified. I would prefer to let functions reply the same type as the input as default, therefore I tend to cast more often than needed.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrices and Arrays en Centro de ayuda y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by