2013-11-27 47 views
0

我想計算一行中二進制圖像的像素數。但是,我需要統計所有圖層,黑色圖層中的像素爲黑色,並且該層中的像素爲白色。計算二進制圖像中的像素數

對不起,我的英語... 我的代碼是:

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

+0

我真的不明白你在做什麼。你可以試着解釋一下自己嗎? – Shai

+0

目標是計算在二進制圖像中有多少層我有黑色和白色(在我的情況下,是人行橫道),並在這些層中計算存在的像素數。你明白 ? – NatsuDragonEye

+1

更好地包含圖像鏈接,以便我們可以運行您的代碼。你是什​​麼意思層? –

回答

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 

EDIT

。這是一個啞實例。所以我們希望在人行橫道上只選擇一行或一列。

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個樣本。

+0

嗨, 你算法找到我所有的黑色像素和白色像素,但我真正需要的是找到一個黑色像素序列,並統計有多少,在白色區域分層。 – NatsuDragonEye

+1

這就是爲什麼我說我不太瞭解這個問題。你能提供一個測試圖像,也許是一個小矩陣的啞例子嗎? – Vuwox

+0

我會嘗試...等一下litle :) – NatsuDragonEye