计算二进制图像中的像素数

时间:2013-11-27 17:34:24

标签: image matlab binary pixels

我想计算连续二进制图像上的像素。但是,我需要计算我拥有的所有图层,黑色图层中的像素为黑色,图层中的像素为白色。

抱歉我的英文... 我的代码是:

I = rgb2gray(imread('pass_p.png'));
level = graythresh(I);
bw = im2uint8(im2bw(I,level));

imshow(bw);
[Nx, Ny] = size(I);
cP = 0;
cB = 0;

%Vectores
B = zeros(1,9);
P = zeros(1,9);
for k = 2:Ny-1
    index = 1;
    if(bw(((Nx-1)/2),k ) == 0) %preto
        cP = cP + 1;
        if(bw(((Nx-1)/2)-1, (k-1)) == 255)
            B(1,index) = B(1,cB);
            cB = 0;
            index = index +1;  
        end
      end
      if(bw(((Nx-1)/2),k) == 255) %branco
          cB = cB + 1;
      if(bw(((Nx-1)/2)-1, (k-1)) == 0)
          P(1,index) = P(1,cP);
          cP = 0;
          index = index +1;
      end
     end
    end

我的目标是探测人行横道。 谢谢你的消磨时间:)

修改

这是一个示例图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

我不确定这个问题,但有些东西可以计算bw图像中的黑色像素数。

I = rgb2gray(imread('pass_p.png'));

bw = im2bw(I,graythresh(I));

figure;imshow(bw);

[Nx,Ny] = size(bw);
BlackPixelCount = zeros(Nx,1);
WhitePixelCount = zeros(Nx,1);

for it = 1:Nx
   blackPixel = find(bw(it,:) == 0);
   BlackPixelCount(it) = size(blackPixel,1);
   WhitePixelCount(it) = Ny -  BlackPixelCount(it);
end

修改

这是一个愚蠢的例子。所以我们希望在人行横道的路上只选择一行或一列。

v = [1 1 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0];
w =[ 1 v 1];

InvV = ~v;

w2 = [1 InvV 1];


runs_zeros = find(diff(w)==1)-find(diff(w)==-1); % lenghts of runs of 0's
runs_ones= find(diff(w2)==1)-find(diff(w2)==-1); % lenghts of runs of 1's

nbBlackBand = size(runs_zeros,2);
nbWhiteBand = size(runs_ones,2);

所以在那之后你知道你拥有每个乐队的长度和每种乐队的乐队数量。你可以在你的图像中采取多行,并做到平均值,以获得每个像素的像素平均值。否则你只有1个样本。