A Visão Computacional
Por: leodz9 • 20/11/2018 • Trabalho acadêmico • 1.829 Palavras (8 Páginas) • 154 Visualizações
Universidade de Brasília
Faculdade de Tecnologia
Departamento de Engenharia Mecânica
Disciplina: VISÃO COMPUTACIONAL – 364622
Professor: José Maurício S. T. Motta
Período: 2016/02
Aluno: Humberto Cascardo Demolinari
Matrícula: 16/0155932
2º Trabalho de Avaliação
Dia de entrega: 20/10/2016
1(a): Implementação da transformada Hough para detecção de retas.
O programa para a detecção de retas (hough_lines.m) inicia limpando a tela de trabalho do MATLAB e excluindo todas as variáveis existentes. Para a entrada do algoritmo de detecção de bordas é feito um pré-processamento da imagem selecionada pelo usuário de forma a se reduzir o ruído (Filtro Gaussiano) e uma detecção de bordas com o filtro LoG.
Os valores são inicializados com ρ=[-diag,+diag], sendo ‘diag’ a diagonal da imagem; θ=[0,π], a resolução de θ foi selecionada arbitrariamente como 0.01. Para acelerar o processo de cálculo, foi utilizada uma inicialização de matriz dos cossenos e senos já multiplicados pelas variáveis x e y respectivamente que serão utilizados pelo programa. A matriz houghSpace representa o acumulador de ocorrências de ρ (histograma) para todos os valores de θ. Para plotar o resultado da análise, foi utilizada a função pcolor, que identifica e plota os pares [θ,ρ] e plota no espaço definido pela matrix houghSpace.
Em seguida o programa busca por máximos locais e os organiza em dois vetores: Vetor dos valores máximos (maxX) e vetor de índices (indx), os índices são lineares e foram obtidos pela função sort. Para converter os índices máximos de volta para a notação [linha,coluna] foi utilizada a função ind2sub. A Figura 1 mostra a comparação da função implementada com a função houghpeaks do Matlab.
[pic 1]
Figura 1: Comparação entre as Transformadas Hough.
A Figura 1 deixa claro uma grande diferença entre os dois algoritmos, que é a eliminação de submáximos. A função houghpeaks implementa um algoritmo recursivo que elimina todos os máximos que estão localizados muito próximos de máximos já contabilizados. Com essa abordagem, o algoritmo não detecta retas incorretamente. Essa detecção incorreta pode ser causada pela discretização do espaço avaliado, por pontos alinhados da imagem (sem representarem uma reta verdadeira) ou até por ruído. Por outro lado, nota-se que os pontos de concentrações de máximos de ambos os processos ficaram alocados (aproximadamente) nas mesmas regiões.
O passo seguinte foi plotar as retas resultantes das máximos analisados. Entretanto, deve-se levar em conta que o algoritmo implementado manualmente detectou todos os ‘submáximos’ e que essa detecção gera uma sobreposição das retas com coeficientes angulares muito próximos na imagem, além de não detectar retas com coeficientes angulares muito diferentes, como mostra a Figura 2.
[pic 2][pic 3]
Figura 2: Retas detectadas para (a) 50 retas e (b) 150 retas.
1(b): Algoritmo de contornos ativos SNAKE
O algoritmo para os contornos deformáveis (snake.m) utiliza-se de um princípio de energias, o programa calcula, para dado um contorno inicial selecionado pelo usuário as três energias principais que serão avaliadas para pontos ao redor de cada ponto do contorno. Inicialmente a imagem é filtrada com um filtro LoG que destaca as bordas, em seguida, são solicitados os pontos de entrada para o usuário.
A Figura 3 mostra a tela de seleção dos pontos.
[pic 4]
Figura 3: Seleção dos pontos do contorno.
O programa solicita as constantes α, β e γ que são os ‘pesos’ para cada uma das energias analisadas. O parâmetro α multiplica a Econt que é a energia da continuidade da curva (relacionada com a distribuição espacial dos pontos), o parâmetro β multiplica a Ecurv que é a energia da curvatura (impede a formação de pontas ou vales muito agudos), essas são as energias ditas “internas” à curva. O Parâmetro γ se relaciona com o gradiente da imagem, e representa a “força” externa que tenta empurrar os pontos da curva no sentido dos maiores gradientes (pontos da borda);
Apesar de diversos testes, o programa não apresentou resultados satisfatórios, nem uma convergência adequada como mostrada pelo modelo matemático. Diversos motivos podem ser apontados como geradores de erros e entre eles pode-se destacar as discretizações utilizadas, a formulação para se gerar o gradiente da imagem (espalhar a influência local para pontos distantes da imagem) e até a forma que foi implementada a iteração para se atualizarem os pontos.
A Figura 4 mostra pontos distantes da borda não sendo afetados pela energia do gradiente e os erros de convergência para um número maior de iterações (i=20);
[pic 5][pic 6]
Figura 4: Problema da influência do gradiente e da convergência.
Nota-se que, para um número de iterações baixo (i~5) e com valores de α, β e γ iguais a 2,2 e 4 respectivamente a curva se desloca nas direções certas, porém não atinge a convergência e move pontos além da borda como mostra a Figura 5.
[pic 7]
Figura 5: Resposta para 5 iterações.
1(c): Geometria Epipolar
A geometria Epipolar permite a reconstrução 3-D de uma cena à partir de duas câmeras dado que tenha sido realizada previamente a calibração de ambas, e que (pelo menos) os parâmetros intrínsecos sejam conhecidos. Para se estimar as posições dos epipolos das imagens, utilizou-se o algoritmo dos 8-pontos como descrito nas notas de aula.
Apesar de, no caso deste trabalho, não haver informações sobre os parâmetros intrínsecos e extrínsecos, é possível realizar estimativas baseadas nos conceitos de geometria Epipolar. O objetivo do programa implementado (oitopontos.m) é comparar os resultados da estimativa por correspondência de n pontos das duas imagens (Selecionados arbitrariamente pelo usuário) com o cálculo baseado em estimativas (também arbitrárias) dos parâmetros de câmera.
O programa mostra as duas imagens (par estereoscópico) e solicita a entrada do usuário com os pontos de correspondência. O cálculo da matriz Fundamental F é feito com base na SVD da matriz A dos coeficientes do sistema prT.F.pl = 0. A matriz F é composta pela coluna de V relativa ao menor valor singular de A. Em seguida é feita outra SVD de F, e o menor valor singular é ajustado para 0, a fim de se obter F’, a matriz fundamental estimada.
...