Pontifícia Universidade Católica do Rio de Janeiro Pós-Graduação em Informática Prova Fundamentos Computação Gráfica Nome: Eduardo Ceretta Dalla Favera Matricula: 1012631 Rio de Janeiro, 7 de julho de 2010
1ª Questão A rotulação de componentes conexos em uma imagem de duas dimensões possui grande aplicação na área de visão computacional. Esta técnica é usada para definir um rótulo único para cada uma das estruturas presentes na imagem a ser analisada e obter o número de objetos presentes na mesma. As aplicações desta técnica se estendem por diversas áreas do conhecimento humano, como por exemplo: Biologia realiza a contagem de células em fotos tiradas por microscópios; Astrofísica análise automática de imagens tiradas por sondas ou telescópios; Computação aplicada reconhecimento de padrões em fotos e vídeos. A conectividade entre pixels resulta da sua vizinhança, a qual pode ser de 4 ou 8 pixels. A identificação de cada pixel a um componente é dada devido a sua cor estar na mesma faixa esperada pelo componente. Após determinar grupos de pixels semelhantes estes são rotulados por um valor ou uma cor. Um algoritmo simples que resolve a questão da rotulação de imagens que possam caber inteiramente em memória principal utiliza a recursão para detectar os componentes conexos. A seguir é apresentado este algoritmo: Variáveis: o Input //Imagem de entrada. o Output //Imagem de saída. o Table // Tabela relacionando cores a rótulos. Preenche Output com a cor de fundo ou um rótulo inválido Para cada pixel em Input o Se o pixel em Output tem um rótulo inválido && o valor do pixel está dentro de uma faixa de cores associada a um rótulo Executa Fill(pixel) Função Fill(pixel): o Se o pixel em Output tem um rótulo inválido && o valor do pixel está dentro de uma faixa de cores associada a um rótulo o Acessa Table, pega o rótulo e escreve o valor em Output o Se não é pixel de borda Fill(pixel da direita) Fill(pixel da esquerda) Fill(pixel superior) Fill(pixel inferior)
Os resultados de uma execução são apresentados nas seguintes imagens: (a) (b) Figura: (a) Imagem usada como entrada no processo de rotulação. (b) Imagem após o processo de rotulação. Cada cor indica um rótulo de um objeto. Fonte: [ Dalla Favera, Appel] Ao observar-se a imagem de saída observa-se que nem todos os objetos presentes na imagem de entrada (a) estão presentes em (b). Isso se deve a uma faixa de threshold muito grande. O valor de threshold é utilizado para determinar pixels que devem ser considerados como fundo e descartados pelo processo de rotulação. Outra fator que pode influênciar na resposta é a escolha das tabela de cores que será utilizada pelo algoritmo. Ao utilizar-se uma tabela mais próxima das cores da imagem obtem-se objetos mais coerentes com a imagem original.
2ª Questão Uma matrix de rotação pode ser convertida a um quaternion ao utilizar-se o seguinte algoritmo: Dada a matriz M: Calcular T, onde: Se T é maior que 0 então calcular S, W, X, Y e Z pelas seguintes fórmulas: O quaternion é dado por:
Um quaternion pode ser convertido para um eixo de rotação e um ângulo utilizando o seguinte algoritmo: Aplicando os algoritmos na Matriz M:
Obtem-se que a matriz M define uma rotação de aproximadamente 30º em torono do eixo centrado no ponto dado pela translação (M 14, M2 4, M3 4 e é igual a 0.8408, - 0.9925, 0.3814) e que tem direção igual ao vetor (1,2,3)
3ª Questão Pode - se calcular a intersecção de uma caixa retangular com um raio pode-se utilizar o algoritmo de intesecção de raio com um politopo conexo. Um politopo convexo, também conhecido como poliedro convexo, é definido como uma região no R³ limitada por um número finito de planos. Uma caixa retangular é um caso de um politopo limitado por 6 planos. A partir de uma caixa de centro C, vetores e1, e2, e3 e tamanhos a1, a2, a3 pode-se obter os planos que limitam essa caixa ao calcular os vetores normais da caixa através do produto vetorial de e1, e2 e e3 e pode-se obter o componente d dos planos utilizando o centro C para obter os 8 vértices da caixa e utilizá-los como pontos no plano. Após o cálculo dos planos que definem o politopo realiza-se um teste para cada plano verificando o produto escalar entre a normal do plano e a direção do raio. A tabela a seguir apresenta as conclusões que se pode obter pelo resultado do produto escalar da iésima normal com o vetor direção u. Interseção Frontal Interseção Trazeira Raio Paralelo Se for uma interseção frontal out trazeira com algum plano calculá-se o valor a pela seguinte fórmula: onde p é o ponto de origem do raio. Caso a interseção seja frontal e o valor de a for maior que fmax e menor que bmin então fmax = a. Caso a inserseção seja trazeira verifica-se se o valor de a é menor que bmin, maior ou igual a zero e maior que fmax, então bmin = a. fmax e bmin correspondem respectivamente a distância do ponto de entrada e da distância do ponto de saída do raio no politopo.
O ponto de entrada é dado por: O ponto de saída é dado por: no R². A imagem a seguir apresenta o conceito de interseção de uma linha com um politipo Figura: Dois rais são mostrados testados contra os 6 planos que definiem o politopo 2D definido pela área cinza. As interseções fontais são rotuladas por f e as traseiras por b. O raio superior atinge algumas interseções traseiras antes de interseções frontais e consequentemente não intercepta o politopo convexo. O raio inferior atinge todas as interceções frontais antes das traseiras e consequentemente atinge o politopo. Fonte: [Buss]
4ª Questão Visando obter-se a matriz de projeção correpondente a função glfrustum do OpenGl pode-se partir da matriz de projeção glperspective, a qual já foi derivada em aula, e chegar a matriz desejada. O processo de derivação é apresentado abaixo. Dada a matriz glfrustum: onde near, right, left, top e bottom são os planos que delimitam o frustum. A imagem a seguir aprsenta a posição dos planos: Figura: Frustum e os planos que o delimitam. Os planos bottom left e far estão nos lados opostos do frustum e são os planos opostos a top, right e near respectivamente. a partir dos valores de near (distância até o plano near) e fovy (ângulo de abertura da câmera) pode-se obter a altura da imagem gerada pela câmera definida pelo frustum. Para obter-se a altura realiza-se o seguinte cáculo:
Figura: Frustum relacionando ângulo de fovy a com a altura h da imagem gerada e o valor de near n. tendo a altura da imagem pode-se obter a sua largura ao utilizar o valor de aspect: considerando que o valor da altura corresponde a diferença entre os planos top e bottom, e que a a lagura corresponde a diferença entre os planos left e right, temos que:
sabendo que o frustum é simétrico temos que: consequentemente desta forma escreve-se a matriz glfrustum como:
Bibliografia [Dalla Favera, Appel] Dalla Favera, E. C. ; Appel, B. G. ; Charao, A. S.. Rotulação Paralela De Componentes Conexos Em Clusteres Heterogêneos. In: O Congresso Regional De Iniciação Científica E Tecnológica Em Engenharia - CRICTE, 2009, Joinville-SC. Rotulação Paralela De Componentes Conexos Em Clusteres Heterogêneos, 2009. [Buss] Buss, Samuel R.. 3D Computer Graphics : A Mathematical Introduction with OpenGL.