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:
Onde tudo, exceto a cor branca, é uma borda.
E encontrou os pontos de contorno do primeiro blob:
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?
Respostas:
Você poderia simplesmente apagar o polígono encontrado, desenhando-o na cor de fundo e repeti-lo até não sobrar nada?
fonte
Verifique isto:
http://en.wikipedia.org/wiki/Connected-component_labeling Após detectar os blobs, aplique os quadrados dos marchas alg para obter as margens de cada blob.
Tchau Lo
fonte
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.
fonte