Contenido principal

Visualización de datos volumétricos

Este ejemplo muestra varios métodos para visualizar datos volumétricos en MATLAB®.

Mostrar una isosuperficie

Una isosuperficie es una superficie donde todos los puntos dentro de un volumen de espacio tienen un valor constante. Utilice la función isosurface para generar las caras y vértices para el exterior de la superficie, y la función isocaps para generar las caras y vértices para las tapas terminales del volumen. Utilice el comando patch para trazar el volumen y sus tapas terminales.

load mri D                                     
D = squeeze(D);                                
limits = [NaN NaN NaN NaN NaN 10]
limits = 1×6

   NaN   NaN   NaN   NaN   NaN    10

[x, y, z, D] = subvolume(D, limits);           
[fo,vo] = isosurface(x,y,z,D,5);               
[fe,ve,ce] = isocaps(x,y,z,D,5);               
figure
p1 = patch('Faces', fo, 'Vertices', vo);       
p1.FaceColor = 'red'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: [0.1294 0.1294 0.1294]
    LineStyle: '-'
        Faces: [23351×3 double]
     Vertices: [12406×3 double]

  Show all properties

p1.EdgeColor = 'none'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: 'none'
    LineStyle: '-'
        Faces: [23351×3 double]
     Vertices: [12406×3 double]

  Show all properties

p2 = patch('Faces', fe, 'Vertices', ve, ...    
   'FaceVertexCData', ce)
p2 = 
  Patch with properties:

    FaceColor: [0.1294 0.1294 0.1294]
    FaceAlpha: 1
    EdgeColor: [0.1294 0.1294 0.1294]
    LineStyle: '-'
        Faces: [27265×3 double]
     Vertices: [14250×3 double]

  Show all properties

p2.FaceColor = 'interp';
p2.EdgeColor = 'none';

view(-40,24)
daspect([1 1 0.3])                             
colormap(gray(100))
box on

camlight(40,40)                                
camlight(-20,-10)
lighting gouraud

Figure contains an axes object. The axes object contains 2 objects of type patch.

Crear gráficas cónicas

El comando coneplot representa los vectores de velocidad como conos en los puntos x, y y z de un volumen. Los conos representan la magnitud y la dirección del campo de vectores en cada punto.

cla                                            
load wind u v w x y z                          
[m,n,p] = size(u)
m = 
35
n = 
41
p = 
15
[Cx, Cy, Cz] = meshgrid(1:4:m,1:4:n,1:4:p);    
h = coneplot(u,v,w,Cx,Cy,Cz,y,4);              
set(h,'EdgeColor', 'none')

axis tight equal
view(37,32)
box on
colormap(hsv)
light

Figure contains an axes object. The axes object contains an object of type patch.

Representar líneas de recorrido

La función streamline representa líneas de recorrido para un vector de velocidad en los puntos x, y y z de un volumen para ilustrar el flujo de un campo de vectores 3D.

cla

[m,n,p] = size(u);
[Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p);    
streamline(u,v,w,Sx,Sy,Sz)                 

axis tight equal
view(37,32)
box on

Figure contains an axes object. The axes object contains 21 objects of type line.

Representar tubos de recorrido

La función streamtube representa tubos de recorrido para un vector de velocidad en los puntos x, y y z de un volumen. El ancho del tubo es proporcional a la divergencia normalizada del campo de vectores en cada punto.

cla

[~,n,p] = size(u);
[Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p);    
h = streamtube(u,v,w,Sx,Sy,Sz);            
set(h, 'FaceColor', 'cyan')                
set(h, 'EdgeColor', 'none')

axis tight equal
view(37,32)
box on
light

Figure contains an axes object. The axes object contains 13 objects of type surface.

Combinar visualizaciones de volúmenes

Combine la visualización de volúmenes en una única gráfica para obtener una perspectiva más completa de un campo de velocidad dentro de un volumen.

cla
spd = sqrt(u.*u + v.*v + w.*w);                          
[fo,vo] = isosurface(x,y,z,spd,40);                      
[fe,ve,ce] = isocaps(x,y,z,spd,40);                      
p1 = patch('Faces', fo, 'Vertices', vo);                 
p1.FaceColor = 'red'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: [0.1294 0.1294 0.1294]
    LineStyle: '-'
        Faces: [5340×3 double]
     Vertices: [2727×3 double]

  Show all properties

p1.EdgeColor = 'none'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: 'none'
    LineStyle: '-'
        Faces: [5340×3 double]
     Vertices: [2727×3 double]

  Show all properties

p2 = patch('Faces', fe, 'Vertices', ve, ...              
   'FaceVertexCData', ce)
p2 = 
  Patch with properties:

    FaceColor: [0.1294 0.1294 0.1294]
    FaceAlpha: 1
    EdgeColor: [0.1294 0.1294 0.1294]
    LineStyle: '-'
        Faces: [464×3 double]
     Vertices: [301×3 double]

  Show all properties

p2.FaceColor = 'interp'
p2 = 
  Patch with properties:

    FaceColor: 'interp'
    FaceAlpha: 1
    EdgeColor: [0.1294 0.1294 0.1294]
    LineStyle: '-'
        Faces: [464×3 double]
     Vertices: [301×3 double]

  Show all properties

p2.EdgeColor = 'none' 
p2 = 
  Patch with properties:

    FaceColor: 'interp'
    FaceAlpha: 1
    EdgeColor: 'none'
    LineStyle: '-'
        Faces: [464×3 double]
     Vertices: [301×3 double]

  Show all properties

[fc, vc] = isosurface(x, y, z, spd, 30);                 
[fc, vc] = reducepatch(fc, vc, 0.2);                     
h1 = coneplot(x,y,z,u,v,w,vc(:,1),vc(:,2),vc(:,3),3);    
h1.FaceColor = 'cyan';
h1.EdgeColor = 'none';

[sx, sy, sz] = meshgrid(80, 20:10:50, 0:5:15);           
h2 = streamline(x,y,z,u,v,w,sx,sy,sz);                   
set(h2, 'Color', [.4 1 .4])

axis tight equal
view(37,32)
box on
light

Figure contains an axes object. The axes object contains 19 objects of type patch, line.