Jump to content
joao_info

[Resolvido] Imagem Binária - Algoritmo de Contagem

Recommended Posts

joao_info

O objectivo consiste em contar quantas camadas tenho a preto e a branco numa imagem binária (no meu caso, é um passadeira), e dentro destas camadas contar o número de pixels que existem apenas numa linha recta vertical, de preferência colocada no centro da imagem.

A linguagem é matlab.

O algoritmo que tenho neste momento é:

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

Deixo aqui o link de uma possivel imagem ->

http://www.urbanreviewstl.com/wordpress/wp-content/uploads/2011/08/crosswalk.jpg

Contudo, não se esqueçam que a imagem tem que ser favoravel, de modo, que eu recortaria o que nao interessa, deixando apenas a passadeira.

Gostaria de saber se alguém consegue resolver o problema :)

Desde já obrigado :D

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
Rui Carlos

Não percebi o problema, e também não percebi o que pretendias fazer com o código.

Por linha vertical queres dizer exactamente o quê? Uma coluna de pixeis todos da mesma cor? Em que situações é que não terias uma linha vertical no meio?

Colocar uns comentários no código, a explicar o que pretendes fazer nas diferentes instruções também torna possível alguém verificar se o código está efectivamente a fazer o que pretendes, ou se o algoritmo que estás a usar funciona.

Share this post


Link to post
Share on other sites
joao_info

Bem, o que eu pretendo é detetar uma passadeira.

Encontra-se aqui a imagem em questão:

https://drive.google.com/file/d/0B5tH_Qo3-GvhdGN4OWxBSDJVd0U/edit?usp=sharing

Vou tentar explicar-me melhor : A imagem é constituída por preto e branco, e considerando que esta é uma passadeira, vai ter banda pretas e brancas consecutivamente. O que eu pretende é contar quantas bandas tem a imagem e quantos pixeis tem cada banda detectada a preto e a branco.

Código:

[Nx Ny] = size(I); % tamanho da imagem
for k = 2:Ny-1 % Para k a começar em dois, incremento 1 a 1 verticalmente o Ny/2 (que na imagem é cerca de 300/2 = 150) , ou seja, centro da imagem
index = 1;
if(bw(((Nx-1)/2),k ) == 0) %vejo se o pixel em questão é preto
   cP = cP + 1; % se for, incremento 1 no contador
   if(bw(((Nx-1)/2)-1, (k-1)) == 255) % vejo se o pixel anterior é branco para detetar uma banda/camada
	   B(1,index) = B(1,cB); %se for, tento colocar esse valor no meu vetor B (nao sei se esta correto o codigo)
	   cB = 0;
	   index = index +1;  
   end
end

Espero ter clarificado algumas ideias :)

Desde já obrigado.

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
Rui Carlos

Já percebi o que pretendes.

Olhando para o teu código, penso que a inicialização do index devia estar fora do ciclo (assim estás sempre a escrever na mesma posição).

Adicionalmente, acho que devias ter B(1,index) = cB; em vez de B(1,index) = B(1,cB);.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.