Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 计算二值图像中的像素数_Image_Matlab_Binary_Pixels - Fatal编程技术网

Image 计算二值图像中的像素数

Image 计算二值图像中的像素数,image,matlab,binary,pixels,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

我想计算一行二值图像上的像素数。但是,我需要计算我拥有的所有层,黑色层中的黑色像素和白色层中的白色像素

对不起,我的英语。。。 我的代码是:

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
我的目标是探测人行横道。 感谢您花时间:)

编辑

这是一个示例图像:


我不确定是否理解这个问题,但在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);

在这之后,你就知道了每个波段的长度和每种波段的数量。你可以在你的图像中画多条线,然后平均得到每个波段的像素平均值。否则你只有一个样品。

我真的不明白你想要什么。你能试着解释一下吗?目的是计算我在一个二值图像中有多少层是黑白的(在我的例子中,是人行横道),并在这些层中计算存在的像素数。你明白吗?最好包含一个指向图像的链接,这样我们就可以运行你的代码了。你说的层是什么意思?所以首先,你必须用Hough变换来检测人行横道的方向。之后,您将知道是否必须在行或列中计算频带。在这个示例图像中,您希望按列计数。在这之后,您只需选择一行或一列,您的掩码为0和1。一旦它完成了,你就可以做一个简单的循环或矢量化功能。嗨,你的算法可以帮我找到所有的黑像素和白像素,但我真正需要的是找到一个黑像素序列,然后按白区域分别计算每层有多少个。这就是为什么我说我真的不理解这个问题。你能提供一个测试图像和可能的小矩阵哑巴的例子吗?我会尝试。。。等一下:)你能检查一下这个链接吗,存在一个图像,你能理解我需要什么吗。只需在你的问题中添加编辑。因为我们需要谷歌硬盘的自动化。我不是唯一能回答你问题的人。