我想计算连续二进制图像上的像素。但是,我需要计算我拥有的所有图层,黑色图层中的像素为黑色,图层中的像素为白色。
抱歉我的英文... 我的代码是:
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
我的目标是探测人行横道。 谢谢你的消磨时间:)
修改
这是一个示例图片:
答案 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个样本。