segunda-feira, 30 de maio de 2011

Mais um Artigo de Revista Científica Internacional

Prezados, como eu havia antecipado, saiu mais um artigo meu e de colaboradores em uma revista internacional. Dessa vez foi na "Computer Methods in Biomechanics and Biomedical Engineering". Trata-se de um artigo que analisa imagens de ressonância magnética para medidas ortodônticas.

Mais uma vez tenho que destacar o papel que a FEI realiza nos dando todo o suporte para que possamos nos dedicar à pesquisa e também nos proporcionando um ambiente acadêmico comparável aos melhores do mundo.

Dessa vez, eu assinei um termo que não poderia deixar o artigo pra download. Assim, deixei as duas primeiras páginas. Quem quiser dar uma olhada, faça o download aqui: Download das 2 primeiras páginas

Para aqueles que gostarem do assunto, posso enviar uma cópia individual por email.

abraços a todos,

Paulo Sérgio

domingo, 29 de maio de 2011

Artigo na Área Médica Publicado

Caros, tive a grata satisfação esses dias de saber que um artigo meu e de colaboradores acabou de ser publicado na revista  "Journal of Medical Imaging and Health Informatics", uma respeitada revista internacional na área médica.

O artigo, cujo título é "CARES 2.0: Completely Automated Robust Edge Snapper for CIMT Measurement in 300 Ultrasound Images - A Two Stage Paradigm" é fruto de meu trabalho com colaboradores em Universidades Italianas, onde estudei parte de meu doutorado, e nos EUA, onde tenho fortes parcerias na Universidade de Idaho.

O artigo trata de um estudo sobre medidas da camada de gordura da carótida, aquela artéria grande que fica no pescoço e que pode levar a sérias complicações cardíacas.

Embora o maior mérito seja do Molinari e depois dos demais autores, a FEI  tem grande participação no sucesso alcançado devido às condições de trabalho que nos proporciona: seja nos liberando para dedicação à pesquisa, seja nos proporcionando contato com pessoas de bom nível de todo o mundo. Tenho orgulho de dar aulas nessa instituição, tenho orgulho de ser FEIano.

O link da revista é esse aqui: Link da Revista

Mas, para os amigos aqui vai um link do artigo: Download PDF

Tive também a notícia de mais 2 artigos internacionais aceitos. Mais tarde eu posto.


abraço a todos,
Paulo Sérgio

sábado, 28 de maio de 2011

Programa da Prova de Laboratório

Prezados, aqui vai o código que eu fiz para a prova de laboratório. Para quem não conseguiu fazer e gostaria de saber como:



//*****************************************************
//
// Animação com Primitivas 3D
// Programa OpenGL de Animação de Primitivas 3D feito para
// a prova de laboratório da Turma CC6111 de Computação Gráfica
// do Centro Universitário da FEI, aplicada em 27/05/11
// Autores: Prof. Dr. Paulo Sérgio Rodrigues e Mestrando Guilherme Alberto Wachs-Lopes
//
// Objetivo: Animar uma primitiva gráfica 3D utilizando Visão Perspectiva e Modelos de Iluminação
//

#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

// variáveis Globais
double zoom; // controla o Zoom
double posx,posy,posz; // controla asa translações
double vx,vy,vz;  // controla as posições
double rx,ry,rz; // controla as rotações


// Função responsável pela especificação dos parâmetros de iluminação
void DefineIluminacao (void)
{
 // Capacidade de brilho do material
 GLfloat especularidade[4]={0.7,0.7,0.7,1.0};
    GLfloat MatDifuse[4]={1.0,0,0,1.0}; 
 GLint especMaterial = 125;
           
    GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0};
 GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0};    // "cor"
 GLfloat luzEspecular[4]={0.5, 0.5, 0.5, 1.0};// "brilho"
 GLfloat posicaoLuz[4]={0, 0, 20, 1};
 // Define a refletância do material
 glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade);
 // Define a concentração do brilho
 glMateriali(GL_FRONT,GL_SHININESS,especMaterial);

    glMaterialfv(GL_FRONT,GL_DIFFUSE,MatDifuse);
 // Ativa o uso da luz ambiente
 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
 // Define os parâmetros da luz de número 0
 glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente);
 glLightfv(GL_LIGHT0, GL_DIFFUSE, luzDifusa );
 glLightfv(GL_LIGHT0, GL_SPECULAR, luzEspecular );
 glLightfv(GL_LIGHT0, GL_POSITION, posicaoLuz );  
 //Habilita o uso de iluminação
 glEnable(GL_LIGHTING); 
 // Habilita a luz de número 0
 glEnable(GL_LIGHT0);
 // Habilita o depth-buffering
 //glEnable(GL_DEPTH_TEST);
 
}


// Função callback chamada quando o tamanho da janela é alterado
void AlteraTamanhoJanela(GLsizei w, GLsizei h)
{
    GLsizei largura, altura;
   
   // Evita a divisao por zero
    if(h == 0)  h = 1;
   
    // Atualiza as variáveis
    largura = w;
    altura = h;
   
   // Especifica as dimensões da Viewport
    glViewport(0, 0, largura, altura);
   
    // Inicializa o sistema de coordenadas
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
   
    glOrtho(-100.0,100.0,-100.0,100.0,-100.0,100);
    glMatrixMode(GL_MODELVIEW);
   
   glLoadIdentity();
}


// Função callback chamada para gerenciar eventos de teclas
void Teclado (unsigned char key, int x, int y)
{
 if (key == 27)
  exit(0);
}


// Função responsável por inicializar parâmetros e variáveis
void Inicializa (void)
{  
    // inicializa variáveis   
    zoom = 120.0;
    posx = 20.0;
    posy = 0.0;
    posz = 0.0;
    vx = 1.0;
    vy = 0.5;
    vz = 0;
    rx = 0.0;
    ry = 0.0;
    rz = 0;   
   
   // Define a cor de fundo da janela de visualização como branca
   glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
   glEnable(GL_CULL_FACE);
   // Habilita o modelo de colorização de Gouraud
   glShadeModel(GL_SMOOTH);   
    DefineIluminacao();
}

void animacao(int){
    
    double velCor=0.1;
  
    // verifica se objeto nao ultrapassou janela
    if (posx > 100 || posx < -100){
     vx=-vx;
    }
   
    // verifica se objeto nao ultrapassou janela   
    if (posy > 100 || posy < -100){
     vy=-vy;
    }
   
    // atualiza translacao
    posx+=vx;   
    posy+=vy;
   
    // artualiza a rotação
    rx += 1;
    ry += 2;
           
    glutPostRedisplay();    
    glutTimerFunc(1,animacao,1);
         
}


void desenha(){
   
     // limpa as matrizes de desenho    
     glLoadIdentity();
     glClear(GL_COLOR_BUFFER_BIT);

     // realiza as transformacoes
     glTranslatef(posx,posy,posz);
     glRotatef(rx,1,0,0);
     glRotatef(ry,0,1,0);    

     // desenha uma esfera
     glTranslatef(-5,-5,0);
     glutSolidSphere(10,30,30);
    
     // desenha um cubo
     glTranslatef(10,10,0);
     glutSolidCube(10);
    
     // desenha a outra esfera
     glTranslatef(10,10,0);
     glutSolidSphere(10,30,30);
    
     glutSwapBuffers();    
}


// Programa Principal
int main(void)
{  
   
    // Define do modo de operação da GLUT
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

 // Especifica a posição inicial da janela GLUT
 glutInitWindowPosition(5,5);

 // Especifica o tamanho inicial em pixels da janela GLUT
 glutInitWindowSize(600,600);

 // Cria a janela passando como argumento o título da mesma
 glutCreateWindow("Prova de Laboratório");

 // Registra a função callback de redesenho da janela de visualização
 glutDisplayFunc(desenha);

 // Registra a função callback de redimensionamento da janela de visualização
 glutReshapeFunc(AlteraTamanhoJanela);

 // Registra a função callback para tratamento das teclas ASCII
 glutKeyboardFunc (Teclado);
   
glutTimerFunc(10,animacao,1);
   
 // Chama a função responsável por fazer as inicializações
 Inicializa();

 // Inicia o processamento e aguarda interações do usuário
 glutMainLoop();

 return 0;
}

quinta-feira, 19 de maio de 2011

Simulação 3D de Tecido com o Massa-Mola

Prezados,

fiz um vídeo da simulação 3D com o massa-mola, que eu abordei na última aula. Será esse o último exercício do semestre. Fiquei muito orgulhoso. O Guilherme me ajudou a preparar.

Não conheço nenhum curso de Ciência da Computação que aborda esse tipo de coisa. É bem moderno, mas não deixa de ser simples: Fazer animação com equações físicas. Isso serve para várias aplicações como Industria Cinematográfica, Marketing, TV; e também para estudo do comportamento de tecidos em diversos ambientes.

Espero que gostem, passem a estudar melhor o assunto e ajudem vocês na carreira profissional. Tanto no trabalho em si, quanto para arrumar um posto de trabalho. Melhor ainda se vierem fazer mestrado aqui comigo na área de Modelagem 3D; ou mesmo um TCC.




[[]]'s
Paulo Sérgio

segunda-feira, 9 de maio de 2011

Exercício 2 sobre Phong

Considerando o exercício postado por último (logo abaixo neste blog), se o modelo de iluminação é I = Ia * cos(t), onde Ia é a intensidade de iluminação ambiente, e "t" é o ângulo de reflexão dada pela direção do vetor normal à malha, e supondo que todos os pontos do polígono foram pintados com a cor RGB = (200,10,10), qual o valor da cor observada em cada ponto encontrado no último exercício 1 para que tenhamos a sensação de sombreamento segundo o algoritmo de Phong?

Exercício sobreo Algoritmo de Phong

Suponto a malha poligonal 2D formada pelos seguintes conjuntos de pontos: P = {(2,2),(4,3),(5,3),(4,6),(2,5)}, onde em cada um desses 5 pontos sabemos a direção em graus dos vetores normais, que são as seguintes (considere o sentido anti-horário e o eixo horizontal como sendo zero grau); D = {225,270,0,45,135}. Qual o valor das direções desses vetores nos pontos médios entre cada par de pontos percorrendo o polígono no sentido anti-horário?

Exercício sobre o Algoritmo de Gouraud

Seja um polígono num sistema de coordenadas 2D com os seguintes pontos: P = {(2,2),(3,5),(5,3),(6,4)}, supondo refletirem as seguintes intensidades luminosas: L = {50,30,10,20}, respectivamente. Qual o valor da intensidade luminosa que é observada no seu centro geométrico, segundo o modelo de Guraud?

domingo, 17 de abril de 2011

Phantom foi ACEITO no SVR


Galera, essa postagem é para prestar uma homenagem ao pessoal do Phantom Omini: Murilão (Chu), Léo, André e Adriaan (ahhh, agora acertei seu nome, né?)

Eles tiveram o artigo do TCC deles aceito no SVR  http://www.rv.eletrica.ufu.br/svr2011/pc/

Trata-se do principal simposium de Realidade Virtual do Brasil. É um IMPROVEMENT enorme no currículo. Isso mostra que a FEI não é somente sala de aula, P1, P2 e um DIPLOMA no final. Ela pode dar a vocês também uma carreira internacional, inserção nos melhores grupos do Brasil e do mundo e muito, muito conhecimento. Tem que saber buscar a aproveitar isso.

Eu, como orientador e amigo dessa galera, realmente não poderia deixar de estar orgulhoso e muito agradecido pelo meu primeiro artigo em 2011. Foi suado, mas está valendo muito a pena.

Abaixo vocês já viram neste blog o que é realmente o TCC deles, que agora está saindo pro mundo .. Parabéns!!


Paulo Sérgio

segunda-feira, 11 de abril de 2011

TCC: Visão Computacional + Computação Gráfica

Casos,

aqui está um bom exemplo da mistura de Visão Computacional com Computação Gráfica. Trata-se de um TCC que eu orientei em 2008 dos alunos Fábio Martins e Luiz Lemos.

O Título era: "Expansão Visual 3D", ou algo assim. O Objetivo é fazer um "tracking de face" rápido e robusto suficiente para controlar a visualização de um modelo gráfico na tela. O Sistema de tracking (Visão) foi feito com OpenCV, e o sistema gráfico (Visualização)  foi feito em OpenGL, como podem imaginar.

O Trabalho ganhou três prêmios na XIII EXPOCOM: Melhor Interface, Melhor Criatividade e Melhor Trabalho Geral.

O Vídeo, editado por mim mesmo, está ai pra darem uma olhada. Não estou nesse momento com o pdf do TCC para deixar pra download, mas amanhã eu posto pra vocês.








Boa noite e Grande Abraço
Paulo Sérgio

quarta-feira, 6 de abril de 2011

TCC Virtual Snooker

Prezados, esse TCC ai no vídeo fez história. Hoje é a formatura dos caras e eu quero prestar uma homenagem postando aqui o TCC deles como exemplo de excelente trabalho.

Há de se ressaltar que foi a equipe que eu mais vi brigar durante o TCC. Na verdade era tudo fingimento machista pra não admitirem que se amam :-)
Mas o importante é que o trabalho do Emerson, Felipe, Lucas Rizzi e Igor  ficou muito bem implementado. Ganhou um prêmio na EXPOCOM e foi escolhido para ser apresentado como exemplo de Projeto da FEI no  "FEI Portas Abertas", que acontecerá no próximo dia 21/05/11.
Trata-se de uma simulação de Sinuca virtual. Como podem observar no vídeo, tudo é virtual: a mesa, as bolas, as interações físicas entre as bolas. Só não o taco. Abaixo, antes de eu mostrar o vídeo, apresento uma imagem da estrutura que eles montaram. 




O sistema precisa de uma altura mínima de 3.5 metros para posicionar a câmera e um projetor verticalmente apontando pra mesa (veja Figura acima). Usa dois computadores em paralelo (Figura) para simular o jogo: um processa o sistema de visão computacional, feito com OpenCV, e o outro computador processa o realismo do jogo que foi feito com OpenGL.  O taco, como podem observar no vídeo abaixo, é apenas um pedaço de madeira com uma cortiça enrolada na ponta pra servir de marcador. Para quem quiser saber mais detalhes técnicos pra ter inspiração pro TCC,  clique aqui pra obter o PDF.

Um dos pontos fortes desse trabalho -- observem com atenção -- é a simulação física realizada entre as bolas. Eu, como orientador chato que sou, não esperava que fosse ficar tão realístico. Fiquei mesmo orgulhoso!

Parabéns a essa  moçada e espero cumprimentá-los hoje a noite na Cerimônia de Entrega dos Diplomas. Sucesso na futura carreira que começa mesmo HOJE a noite. Sou orgulhoso de ter tido a honra de participar dessa formação; muito dinheiro no bolso, saúde e mulheres bonitas!! E vamos encher a cara no Baile de Sábado!! Alguém quer trazer meu carro? :-)

E também obrigado à turma por me Homenagear ..



[[]]’s
Paulo Sérgio