EP2 – Exercício para Rotulação de objetos em imagens binárias - 11/09/2003 Disciplina: MAC5749 - Analise e Reconhecimento de Formas: Teoria e Prática Prof: Roberto Marcondes César Junior Aluno: Milton Yutaka Nishiyama Junior Introdução Foi desenvolvido um programa para rotular objetos em uma imagem binária, a qual necessariamente estará no formato PBM ASCII, utilizando um algoritmo para rotulação por componentes conexos; o programa desenvolvido analisa objetos na imagen com 4conectividade e 8-conectividade, após a rotulação o programa gera uma nova imagem no formato PGM(níveis de cinza), em que cada componente conexa será representada por um nível de cinza diferente. Método Implementado O programa toma como entrada a imagem binária no formato PBM ASCII, o nome para a imagem de saída e o número de conectividades (4 ou 8), para fazer a busca dos objetos na imagem; em seguida transforma-se a imagem de entrada para o formato de Matriz, acrescenta-se inicialmente, 2 linhas e 2 colunas de zeros (“0”) uma no início e a outra no final da linha e da coluna da matriz, ou seja, é inserido uma moldura na matriz para poder ser feita a busca da conectividade nos pixels extremos “das bordas” da matriz “imagem”. O algoritmo de rotulação dos objetos da imagem de entrada consiste em percorrer a matriz da imagem a partir das linhas da esquerda para a direita e de cima para baixo, procurando por um pixel com valor “rótulo” igual a 1, quando este pixel é encontrado, a posição deste pixel é colocado em uma pilha e o valor original deste pixel que era n=1 é modificado “rotulado” para n+1 e todas as posições na matriz dos componentes conexos deste pixel, que satisfazem o critério de conectividade (4 ou 8) adotado, são empilhados também. Em seguida é desempilhada a posição que está no topo da pilha e o valor desta posição na matriz da imagem recebe o valor “rotulo” n+1 e são verificados os componentes conexos desta posição, os quais são empilhados se satisfizerem o critério de conectividade adotado, este processo é repetido enquanto houver posições na pilha. Quando não houver mais posições na pilha, ou seja, não houver mais componentes conexos, o programa continua a busca por um novo candidato com valor “rótulo” igual a 1, a partir da posição seguinte à posição inicial inserida na pilha, pulando as posições que possuem uma valor diferente de 1 pois, ou são iguais a zero (0) ou já foram rotuladas. Este processo é seguido pelas linhas da esquerda para a direita e de cima para baixo até o final da imagem. Quando este processo terminar, a matriz da imagem já estará com seus objetos rotulados e o programa salva a imagem final no formato PGM (níveis de cinza). O programa foi escrito em Linguagem de Programação C. Pode ser baixado pelo link da pagina : “Código Fonte”. Resultados O programa foi testado sobre três imagens em formato PBM ASCII, binárias (0 e 1´s), em que 0 está relacionado ao fundo da imagem e 1 está relacionado aos objetos na imagem. O teste para cada imagem foi feito com duas conectividades 4-conexo e 8conexo, gerando imagens para cada conectividade, estas imagens estão em níveis de cinza, os níveis de cinza para cada conjunto de componentes conexos é acrescido de uma unidade. Abaixo estão as imagens originais e resultantes para cada conectividade aplicada. Podemos perceber logo na primeira imagem quadriculada que utilizando componentes 4-conexos os objetos na imagem são mais separados pois a busca é feita apenas nas posições horizontais e verticais, havendo assim uma melhor seleção dos objetos, já utilizando 8-conexos ele irá procurar por componentes conexos não apenas na horizontal e na vertical mas também nas diagonais, considerando assim os quadrados pertencentes a um único objeto, diferenciados por uma mesma cor, isto ocorre pelos vértices dos quadrados que tocam-se por um ponto na diagonal. Imagens Binárias 4 – conexos 8 – conexos Conclusão O programa foi implementado utilizando-se pilha e mostrou ser bem eficiente para a rotulação de objetos em imagens binárias, não foi utilizado uma função de recursão devido a possibilidade de estouro da pilha de recursão, para componentes conexos muito grandes na imagem de entrada. A escolha da conectividade 4 ou 8 – conexo depende muito da aplicação e do resultado desejado, pelos resultados obtidos podemos concluir que a utilização de 4conexos mostra uma maior separação entre os objetos presentes na imagem de entrada, já o 8-conexo acabou diminuindo o numero de objetos e aumentando-os. Outros métodos de conectividade podem ser aplicados com 4-D, 4-Diagonaisconexos e outros mais complexos.