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

use*_*843 1 matlab for-loop image image-processing 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;
      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)
Run Code Online (Sandbox Code Playgroud)

jme*_*etz 7

为什么你的代码不起作用

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

disp(A(1:10,1:10))
disp(size(A))
% possibly also the min and max...
disp(min(A(:))
disp(max(A(:))
Run Code Online (Sandbox Code Playgroud)

只是为了确保格式符合A您的预期 - 如果图像是彩色读取的,或者图像可能在区间[0,1]中,imread可能会给您一个512x512x3矩阵.

更好的方法

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

mask = A > 11;
numabove11 = sum(mask(:));
avabove11 = mean(A(mask));
Run Code Online (Sandbox Code Playgroud)

同样在你的代码中你使用>=ie大于或等于,但你说'大于' - 选择你想要的并保持一致.

说明

那么这三条线做什么呢?

  1. 产生一个逻辑矩阵,同样大小Atrue哪里A > 11,否则false.
  2. 求和逻辑矩阵,这意味着1无处不在的和值A > 11,否则为0(布尔值转换为浮点数用于此求和).
  3. 使用逻辑索引索引到矩阵A ,并取这些值的平均值.

避免阴影内置

在你的代码中你使用变量sum- 这是不好的做法,因为有一个内置的matlab函数具有相同的名称,如果你使用相同名称的变量,它将变得无法使用.