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?
Assinar:
Postagens (Atom)