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.
Download

EP2 – Exercício para Rotulação de objetos em imagens binárias