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?