Minicurso Jai13 II

Embed Size (px)

Citation preview

  • 7/25/2019 Minicurso Jai13 II

    1/53

    Uma Introduo Visualizao

    Volumtrica para Diagnstico de LesesCerebrais

    Mdulo II

    Wu Shin [email protected]

    FEEC - Unicamp

    Clarissa Lin [email protected]

    FCM - Unicamp

  • 7/25/2019 Minicurso Jai13 II

    2/53

    2

    Organizao do Minicurso

    Protocolo de diagnstico de displasia cortical focal

    Modelo matemtico de neuroimagens e tcnicas de

    renderizao Tecnologia de renderizao: GPUs

    Estado-de-arte de visualizao de neuroimagens Implementao de ferramentas de interao

  • 7/25/2019 Minicurso Jai13 II

    3/53

    3

    Tcnicas de Renderizao: MPR

    Reformatao Multiplanar

  • 7/25/2019 Minicurso Jai13 II

    4/53

    4

    Tcnicas de Renderizao: Texturizao 3D

    Proxy Geometry

    Espao do objeto

    Volume adquirido

    Espao de textura

    Imagem Final

  • 7/25/2019 Minicurso Jai13 II

    5/53

    5

    Renderizao Indireta

    Fonte: Google imagel

    Tcnicas de Renderizao: ISR

  • 7/25/2019 Minicurso Jai13 II

    6/53

    6

    Renderizao Direta

    Direct Surface Rendering(DSR)

    Direct Volume Rendering(DVR)

    Tcnicas de Renderizao: DR

  • 7/25/2019 Minicurso Jai13 II

    7/53

  • 7/25/2019 Minicurso Jai13 II

    8/53

    8

    Composio das intensidades

    intensidades cor e opacidade

    Raycasting: DVR

  • 7/25/2019 Minicurso Jai13 II

    9/53

    9

    Organizao do Minicurso

    Protocolo de diagnstico de displasia cortical focal

    Modelo matemtico de neuroimagens e tcnicas de

    renderizao Tecnologia de renderizao: GPUs

    Estado-de-arte de visualizao de neuromagens Implementao de ferramentas de interao

  • 7/25/2019 Minicurso Jai13 II

    10/53

    10

    Unidades de Processamento Grfico(GPUs)

    Processador dedicado para

    renderizao em temporeal.

    Onboard ou offboard. Trs maiores fabricantes:

    nVidia, ATI e Intel

    Fonte: http://www.tecmundo.com.br/hardware/1127-o-que-e-gpu-.htm

  • 7/25/2019 Minicurso Jai13 II

    11/53

    11

    CPU x GPU

    CPU: arquitetura MISD ouMIMD

    Paralelismo em tarefas

    Prefetchde instrues

    GPU: arquitetura SIMD

    Paralelismo em dados

    Prefetchde dados

    Fonte:http://selkie.macalester.edu/csinparallel/modules/GPUProg

    ramming/build/html/Introduction/Introduction.html

  • 7/25/2019 Minicurso Jai13 II

    12/53

    12

    CPU x GPU

    http://www.flixxy.com/gpu-vs-cpu.htm

  • 7/25/2019 Minicurso Jai13 II

    13/53

    13

    Cooperao entre CPU e GPU

  • 7/25/2019 Minicurso Jai13 II

    14/53

    14

    GPUs Programveis

    Arquitetura GeForce 3

    Processadores de

    vrtice e de fragmentodedicados

  • 7/25/2019 Minicurso Jai13 II

    15/53

    15

    GPUs: Unidades de Memria de Textura

    Interpolaes, Filtragem dos objetos de textura

    Barramento de 128 bits

  • 7/25/2019 Minicurso Jai13 II

    16/53

    16

    GPUs: Unidades de Sada (ROPs)

  • 7/25/2019 Minicurso Jai13 II

    17/53

    17

    GPUs Programveis Unificadas

    Arquitetura Unificada: GeForce 8 Tesla e Fermi Kepler

    Fonte: http://www.pgroup.com/lit/articles/insider/v2n1a5.htm

  • 7/25/2019 Minicurso Jai13 II

    18/53

    18

    Fluxos de Execuo

    Streaming Multiprocessor (Grid) SIMT processors(Warps)Threads

    Gridwarp

    thread

    http://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/readings/lindholm08_tesla.pdf

  • 7/25/2019 Minicurso Jai13 II

    19/53

    19

    Hierarquia de Memria

  • 7/25/2019 Minicurso Jai13 II

    20/53

    20

    Espaos de Endereamento

    DISTINTOS!

  • 7/25/2019 Minicurso Jai13 II

    21/53

    21

    GPUs Programveis: Sntese

    Radeon HD 2900XT

    Fonte: http://ixbtlabs.com/articles2/video/r600-part1.html

  • 7/25/2019 Minicurso Jai13 II

    22/53

    22

    Relembrando: Fluxo de Renderizao

  • 7/25/2019 Minicurso Jai13 II

    23/53

    23

    OpenGL API

    Abstrao em um fluxo de renderizao

  • 7/25/2019 Minicurso Jai13 II

    24/53

    24

    Diretrizes

    1. Deve-se minimizar e simplificar a sequncia deinstrues em um shader.

    2. Deve-se maximizar a localidade espacial dos dados namemria de textura.

    3. Deve-se evitar estruturas de dados complexas.

    4. Deve-se instruir apropriadamente as GPUs paraotimizar o balano enre os processamentos e os

    acessos s memrias.

  • 7/25/2019 Minicurso Jai13 II

    25/53

    25

    Linguagem de Programao Grfica

    CPUs: OpenGL, Direct3D

    Linguagem nativa: C

    Interfaces com outras linguagens: Java, Python, Pascal, etc GPUs: shading language para renderizao em tempo real

    ARB Assembly Language

    GLSL: OpenGL Shader Language

    HSLS: DirectX High-Level Shader Language

    Cg: Cg Programming Language

  • 7/25/2019 Minicurso Jai13 II

    26/53

    26

    API OpenGL

    Uma mquina de estados

    Tipos de dados similares a linguagem C

    Programabilidade Vertex shaders: a partir de OpenGL 1.5/2.0, transformaes

    geomtricas, iluminao, coordenadas de textura

    Fragment shaders: a partir de OpenGL 1.5/2.0, mapeamentode textura, fog

    Geometry shaders: a partir de OpenGL 3.2

    Tesselation shaders: a partir de OpenGL 4. Operao no modo imediato ou no modo retido

    No gerencia recursos de janela

  • 7/25/2019 Minicurso Jai13 II

    27/53

    27

    Interface Grfica do Usurio (GUI)

    glut

    FLTKwxWidgetsQt

  • 7/25/2019 Minicurso Jai13 II

    28/53

    28

    Fluxo de Visualizao

  • 7/25/2019 Minicurso Jai13 II

    29/53

    29

    Ilustrando com um exemplo

    Renderizar um volume de dados no formato DICOM?

  • 7/25/2019 Minicurso Jai13 II

    30/53

    30

    Renderizao: Verso de OpenGL >= 2.0

    C++

    std::cout

  • 7/25/2019 Minicurso Jai13 II

    31/53

    31

    Compilador de C e C++ livre: MinGW

    http://www.mingw.org

    Funcionalidades de OpenGL superior a 1.0: GLEW

    http://glew.sourceforge.net/

    em Windows

  • 7/25/2019 Minicurso Jai13 II

    32/53

    32

    Tcnica baseada em textura

    Texturizar um cubo (proxy geometry) com o volume de dadosde interesse

    Proxy Geometryem dimensesreais do paciente

    Imagem Final

    (0,0,0)

    (1,0,0)(0,1,0)

    (1,1,1)

    Alinhamento dos doisespaos pelascoordenadas de textura

    e coordenadasespaciais dos vrtices

    Espao do objeto

    Espao de textura

  • 7/25/2019 Minicurso Jai13 II

    33/53

    33

    Soluo 1: OpenGL 1.2

    Normalize os valores das amostras:

    data.buffer[mnimo,mximo] texbuffer[0,255]

    Carregue o volume de dados na memria de texturaglBindTexture(GL_TEXTURE_3D, texID[0]);

    glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, data.dims[0],

    data.dims[1], data.dims[2], 0, GL_LUMINANCE,GL_UNSIGNED_BYTE, texbuffer);

    Associe a cada vrtice coordenadas de textura

    glTexCoord3f(0.0, 0.0, 0.0);

    glVertex3f(0.0, 0.0, 0.0);

    f

  • 7/25/2019 Minicurso Jai13 II

    34/53

    34

    Interfaceamento com WM

    Funes de glutglutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_SINGLE);

    win = glutCreateWindow("Volume de Dados");

    init();

    glutPositionWindow(10, 10);

    glutReshapeWindow(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);

    glutReshapeFunc(reshape);

    glutDisplayFunc(desenheProxyGeometry);

    glutKeyboardFunc(keyboard);

    glutMainLoop();

    I t K b d

  • 7/25/2019 Minicurso Jai13 II

    35/53

    35

    Interaes com Keyboard

    void keyboard(unsigned char key, int x, int y) {switch (key) {

    :

    case '+':

    if (nVolSideZ + 0.05 < 1.0) nVolSideZ += 0.05;

    else nVolSideZ = 1.0;

    break;

    case '-':if (nVolSideZ - 0.05 > 0.0) nVolSideZ -= 0.05;

    else nVolSideZ = 0.0; break;

    case 27:

    :

    exit(0);

    return;

    } }

    E t t I t

  • 7/25/2019 Minicurso Jai13 II

    36/53

    36

    Estrutura Interna

    glTexCoord3f(0.0, 1.0, 0.0);

    glVertex3f(0.0, nVolSides[1], 0.0);

    :

    glTexCoord3f(0.0, 1.0, nVolSideZ);

    glVertex3f(0.0, nVolSides[1],nVolSideZ*nVolSides[2]);

    :

    glTexCoord3f(1.0, 1.0, nVolSideZ);glVertex3f(nVolSides[0],

    nVolSides[1],nVolSideZ*nVolSides[2]);

    (0.1.0)

    (0.1.1)

    (1.1.0)

    (1.1.1)

    (1.0.1)

    (1.0.0)

    (0.0.1)

    (1.0.0.5)

    (1.1.0.5)

    (0.1.0.5)

    Fl d Vi li I t ti

  • 7/25/2019 Minicurso Jai13 II

    37/53

    37

    Fluxo de Visualizao Interativa

  • 7/25/2019 Minicurso Jai13 II

    38/53

    38

    Demo jai13_basic

  • 7/25/2019 Minicurso Jai13 II

    39/53

  • 7/25/2019 Minicurso Jai13 II

    40/53

  • 7/25/2019 Minicurso Jai13 II

    41/53

    41

    Demo jai13_basic_cor

    Soluo 3: Funo de Transferncia

  • 7/25/2019 Minicurso Jai13 II

    42/53

    42

    Soluo 3: Funo de Transferncia

    Como tornar mais modulvel o mapeamento?

    Funo de Transferncia 1D

    Funes de Transferncia

  • 7/25/2019 Minicurso Jai13 II

    43/53

    43

    Funes de Transferncia

    Soluo 3: OpenGL 1 2

  • 7/25/2019 Minicurso Jai13 II

    44/53

    44

    Soluo 3: OpenGL 1.2

    tfunc.GetGrayScaleTF (1, data.umin, data.umax, &dim, &tf);

    intensidade = (int)((reinterpret_cast(data.buffer))[iz*data.dims[0]*data.dims[1]+iy*data.dims[0]+ix]);

    texbuffer[di++] = (unsigned char)(tf[intensidade-data.umin+1]*2);

    glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, data.dims[0],

    data.dims[1], data.dims[2], 0, GL_LUMINANCE,

    GL_UNSIGNED_BYTE, texbuffer);

  • 7/25/2019 Minicurso Jai13 II

    45/53

    45

    Demo jai13_basic_ft

    Problema

  • 7/25/2019 Minicurso Jai13 II

    46/53

    46

    Problema

    Quantidade de instrues a serem transferidas

    para a GPU no momento de renderizao crescecom a quantidade de primitivas grficas.

    Soluo 4: OpenGL 1.2

  • 7/25/2019 Minicurso Jai13 II

    47/53

    47

    Soluo 4: OpenGL 1.2

    Compacte um conjunto dos dados de vrtices emarranjos em CPU

    glEnableClientState (GL_VERTEX_ARRAY);

    glVertexPointer (3, GL_FLOAT, 0, vertices); // coord.compactadamente armazenadas

    glEnableClientState (GL_TEXTURE_COORD_ARRAY);

    glTexCoordPointer (3, GL_FLOAT, 0, texCoords0); // coord.compactamente armazenadas

    Desreferenci-los no momento de transferncia paraGPU (renderizao)glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE,

    quadIndices);

  • 7/25/2019 Minicurso Jai13 II

    48/53

    48

    Demo jai13_varray

    Problema

  • 7/25/2019 Minicurso Jai13 II

    49/53

    49

    Quantidade de dados a serem transferidos para a

    GPU no momento de renderizao continuagrande.

    Problema

    Soluo 5: OpenGL 1.4

  • 7/25/2019 Minicurso Jai13 II

    50/53

    50

    Soluo 5: OpenGL 1.4

    Aloque dados em GPUs: vertex buffer objectsglBindBuffer(GL_ARRAY_BUFFER, vbo[0]);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);

    glBufferData(GL_ARRAY_BUFFER, sizeof(texCoords0), texCoords0,GL_STATIC_DRAW);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[2]);

    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quadIndices), quadIndices,

    GL_STATIC_DRAW); Especifique o local dos dados em GPUs

    glVertexPointer (3, GL_FLOAT, 0, (const GLvoid *)0);

    glTexCoordPointer (3, GL_FLOAT, 0, (const GLvoid *)0);

    RenderizeglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[2]);

    glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, (const GLvoid *)0);

  • 7/25/2019 Minicurso Jai13 II

    51/53

    51

    Demo jai13_buffer

    OpenGL 1.4: Problema

  • 7/25/2019 Minicurso Jai13 II

    52/53

    52

    Estruturas internas s podem ser visualizadas em

    em cortes planares.

    p

    Organizao do Minicurso

  • 7/25/2019 Minicurso Jai13 II

    53/53

    53

    g

    Protocolo de diagnstico de displasia cortical focal

    Modelo matemtico de neuroimagens e tcnicas de

    renderizao Tecnologia de renderizao: GPUs

    Estado-de-arte de visualizao de neuromagens

    Implementao de ferramentas de interao