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
segunda-feira, 30 de maio de 2011
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
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;
}
//*****************************************************
//
// 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
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
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
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? :-)
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
Assinar:
Postagens (Atom)
