Image 用MATLAB对图像中的某些像素进行计数和平均

Image 用MATLAB对图像中的某些像素进行计数和平均,image,matlab,image-processing,for-loop,count,Image,Matlab,Image Processing,For Loop,Count,我有一张bmp格式的图像,大小为512*512。我想计算值大于11的像素数,然后求这些像素的平均值。这是我的密码。我不知道是什么问题,但像素值的总和是错误的,它总是255。我尝试了不同的图像 你能帮我弄清楚吗 A=imread('....bmp'); sum=0; count=0; for i=1:512 for j=1:512 if (A(i,j)>=11) sum=sum+A(i,j); count=count+1;

我有一张bmp格式的图像,大小为512*512。我想计算值大于11的像素数,然后求这些像素的平均值。这是我的密码。我不知道是什么问题,但像素值的总和是错误的,它总是255。我尝试了不同的图像

你能帮我弄清楚吗

A=imread('....bmp');

sum=0; count=0;

for i=1:512    
   for j=1:512
      if (A(i,j)>=11)
        sum=sum+A(i,j);
        count=count+1;
      end
   end
end

disp('Number of pixels grater than or equal to 11')
disp(count)

disp('sum')
disp(sum)

disp('Average')
Avrg=sum/count;
disp(Avrg)
为什么你的代码不起作用

很难说,你能用类似的方式显示矩阵的一部分和大小吗

disp(A(1:10,1:10))
disp(size(A))
% possibly also the min and max...
disp(min(A(:))
disp(max(A(:))
只是为了确保A的格式与您期望的一样-如果图像是以彩色读取的,imread可能会给您一个512x512x3矩阵,或者图像可能在间隔[0,1]内

更好的方法

一旦确定矩阵确实是512x512,并且其值大于11,那么最好生成一个掩码,即

mask = A > 11;
numabove11 = sum(mask(:));
avabove11 = mean(A(mask));
同样在代码中,您使用>=即大于或等于,但您说“大于”-选择您想要的并保持一致

解释

那么这三条线是做什么的呢

生成一个逻辑矩阵,其大小与a相同,a>11时为真,否则为假。 对逻辑矩阵求和,这意味着在A>11的地方求和值都是1,否则0个布尔值将被转换为该求和的浮点值。 使用索引到矩阵A,并取这些值的平均值。 避免遮挡内置物

在您的代码中使用变量sum-这是一种糟糕的做法,因为有一个内置的matlab函数具有相同的名称,如果使用相同名称的变量,该函数将变得不可用

为什么您的代码不起作用

很难说,你能用类似的方式显示矩阵的一部分和大小吗

disp(A(1:10,1:10))
disp(size(A))
% possibly also the min and max...
disp(min(A(:))
disp(max(A(:))
只是为了确保A的格式与您期望的一样-如果图像是以彩色读取的,imread可能会给您一个512x512x3矩阵,或者图像可能在间隔[0,1]内

更好的方法

一旦确定矩阵确实是512x512,并且其值大于11,那么最好生成一个掩码,即

mask = A > 11;
numabove11 = sum(mask(:));
avabove11 = mean(A(mask));
同样在代码中,您使用>=即大于或等于,但您说“大于”-选择您想要的并保持一致

解释

那么这三条线是做什么的呢

生成一个逻辑矩阵,其大小与a相同,a>11时为真,否则为假。 对逻辑矩阵求和,这意味着在A>11的地方求和值都是1,否则0个布尔值将被转换为该求和的浮点值。 使用索引到矩阵A,并取这些值的平均值。 避免遮挡内置物


在您的代码中使用变量sum-这是一种糟糕的做法,因为有一个内置的matlab函数具有相同的名称,如果使用相同名称的变量,该函数将变得不可用

我也遇到了类似的问题,事实上,解决方案在于matlab以uint8格式存储Ai,j,其最大值为255,因此,只需更改语句:

sum=sum+A(i,j);


我希望这会有所帮助。

我也遇到了类似的问题,事实上,解决方案在于matlab以uint8格式存储Ai,j,其最大值为255,因此,只需更改语句:

sum=sum+A(i,j);

我希望这有帮助