Quadrados de marcha: Encontrando vários contornos em um campo de origem?

9

Principalmente, esta é uma pergunta de acompanhamento para um problema de algumas semanas atrás , mesmo que seja sobre o algoritmo em geral, sem aplicação ao meu problema real.

O algoritmo basicamente pesquisa em todas as linhas da imagem, começando no canto superior esquerdo até encontrar um pixel que seja uma borda. No pseudo-C ++:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

Quando encontra um, inicia o algoritmo de marchas e encontra o contorno para qualquer objeto ao qual o pixel pertence.

Digamos que eu tenho algo parecido com isto:

insira a descrição da imagem aqui

Onde tudo, exceto a cor branca, é uma borda.

E encontrou os pontos de contorno do primeiro blob:

insira a descrição da imagem aqui

Para o algoritmo geral acabou. Ele encontrou um contorno e fez seu trabalho. Como posso passar para os outros dois blobs para encontrar seus contornos também?

TravisG
fonte
precisa de ajuda com isso, consulte este stackoverflow.com/questions/17232672/…

Respostas:

7

Você poderia simplesmente apagar o polígono encontrado, desenhando-o na cor de fundo e repeti-lo até não sobrar nada?

Adão
fonte
11
É assim que deve ser feito. Flood-preencher o elemento encontrado com o fundo (ou outra cor) e continuar a busca (você pode continuar no ponto onde você encontrou o primeiro "match")
bummzack
uau Eu nem sabia sobre enchentes. obrigado.
TravisG
1

por que não salvar as informações do blob em outra matriz e verificar se os pixels recém-encontrados se enquadram na caixa delimitadora do blob anterior? Será necessário um pouco mais de manipulação para lidar com os blobs abaixo do centríodo do blob anterior e que caem dentro da caixa delimitadora.

Abe K
fonte